diff --git a/.travis.yml b/.travis.yml index 8a896dd7f75a089ffc17b9cb3b34c1fb81a1e654..473c14db8cd4127c1e8f27b2bdfccc8f3eaee700 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,40 +20,43 @@ env: - CTEST_MODEL=Nightly cache: apt -matrix: - allow_failures: +#matrix: +# allow_failures: +# - clang before_script: - sudo apt-get install -qq libxml2-dev libbz2-dev - sudo apt-get install -qq libhdf5-serial-dev - sudo apt-get install -qq make cmake - - sudo apt-get install -qq python-numpy python-matplotlib - - sudo apt-get install -qq python3-numpy python3-matplotlib python3-dev + - sudo apt-get install -qq python-numpy python-matplotlib python-networkx + - sudo apt-get install -qq python3-numpy python3-matplotlib python3-dev - sudo apt-get install -qq libboost-all-dev - sudo apt-get install -qq libgsl0-dev - -before_install: - - sbmlurl="http://sourceforge.net/projects/sbml/files/libsbml/5.9.0/stable/Linux/64-bit/libSBML-5.9.0-Linux-x64.deb" - - wget "$sbmlurl" -O libsbml.deb && sudo dpkg -i libsbml.deb - - sudo apt-get install -f + - sudo apt-get install -qq python-pip python3-pip + - sudo apt-get install -qq libgraphviz-dev + - # sudo pip install python-libsbml + - # sudo pip3 install python-libsbml + - # sudo pip3 install pygraphviz install: - echo "nothing to do here" script: - - sudo ldconfig /usr/lib64 - # First test is normal make scripts. (outdated). - make - - # Now test the cmake with gsl + - ## CMAKE based flow - mkdir -p _GSL_BUILD && cd _GSL_BUILD && cmake -DDEBUG=ON -DPYTHON_EXECUTABLE=/usr/bin/python .. - make && ctest --output-on-failure - - cd .. # Build with python3. - - mkdir -p _GSL_BUILD2 && cd _GSL_BUILD2 && cmake -DDEBUG=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 .. - - make && ctest --output-on-failure - cd .. # Now with boost. - mkdir -p _BOOST_BUILD && cd _BOOST_BUILD && cmake -DWITH_BOOST=ON -DDEBUG=ON -DPYTHON_EXECUTABLE=/usr/bin/python .. - make && ctest --output-on-failure - - cd .. # Now with boost and python3. + - cd .. + - echo "Python3 support. Removed python2-networkx and install python3" + - sudo apt-get remove -qq python-networkx + - sudo apt-get install -qq python3-networkx + - mkdir -p _GSL_BUILD2 && cd _GSL_BUILD2 && cmake -DDEBUG=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 .. + - make && ctest --output-on-failure + - cd .. # Now with BOOST and python3 - mkdir -p _BOOST_BUILD2 && cd _BOOST_BUILD2 && cmake -DWITH_BOOST=ON -DDEBUG=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 .. - make && ctest --output-on-failure - cd .. diff --git a/CMakeLists.txt b/CMakeLists.txt index ae7a4e03f83fe56a6e1a3d05735abc17ca35576f..7d5d25f7113bb303244a2e85d91a8e9dc9403654 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,19 +83,11 @@ option(WITH_MPI "Enable Openmpi support" OFF) option(WITH_BOOST "Use boost library instead of GSL" OFF) option(WITH_GSL "Use gsl-library. Alternative is WITH_BOOST" ON) -# If SBML is available, it will automaticall enable the support. If ON, then -# libSBML must be present. -option(WITH_SBML "Enable SBML support. Automatically detected." OFF) - # If GSL_STATIC_HOME is set, we use it to search for static gsl libs. option(GSL_STATIC_HOME "Path prefix where static gsl library can be found e.g. /opt/sw/gsl116 " OFF ) -option(SBML_STATIC_HOME - "Path prefix where static sbml library can be found e.g. /opt/sbml/" - OFF - ) option(HDF5_STATIC_HOME "Path prefix where static hdf5 library can be found e.g /opt/sw/hdf5 " OFF @@ -165,57 +157,6 @@ if(WITH_BOOST) set(WITH_GSL OFF) endif(WITH_BOOST) -# If this variable is used while packaging; we build this project using another -# cmake script and pass the location of SBML static library using this variable. -# Otherwise, this is useless. FIXME: This is not a clean solution. -if(SBML_STATIC_HOME) - include_directories(${SBML_STATIC_HOME}/include) - find_library(LIBSBML_LIBRARIES - NAMES libsbml-static.a libsbml.a - PATHS "${SBML_STATIC_HOME}/lib" "${SBML_STATIC_HOME}/lib64" - NO_DEFAULT_PATH - ) - message(STATUS "- Using static version of LIBSBML_LIBRARIES: ${LIBSBML_LIBRARIES}") - if(LIBSBML_LIBRARIES) - message(STATUS "- Successfully located SBML static library: ${LIBSBML_LIBRARIES}") - ELSE() - message(FATAL_ERROR - "Can't find static libsbml libraries at path ${SBML_STATIC_HOME}" - ) - endif() - set(LIBSBML_FOUND ON) -else(SBML_STATIC_HOME) - pkg_check_modules(LIBSBML libsbml) - if(NOT LIBSBML_FOUND) - message(STATUS "pkg-config could not find sbml. Fallback to default") - find_package(LIBSBML) - endif() -endif(SBML_STATIC_HOME) - -if(LIBSBML_FOUND) - message(STATUS "LIBSBML found ${LIBSBML_LIBRARIES}") - include_directories(${LIBSBML_INCLUDE_DIRS}) - pkg_check_modules(LibXML2 libxml-2.0) - if (!LibXML2_FOUND) - find_package(LibXML2 REQUIRED) - endif() - include_directories(${LibXML2_INCLUDE_DIRS}) -else() - message( - "======================================================================\n" - "libsbml NOT found. \n\n" - "If you want to compile with SBML support, download and install \n" - "libsbml-5.9.0 from: \n" - "http://sourceforge.net/projects/sbml/files/libsbml/5.9.0/stable/ and\n" - "rerun cmake.\n\n" - "If you don't want SBML support then continue with `make`.\n\n" - "If you install libsbml to non-standard place, let the cmake know by\n" - "exporting environment variable SBML_DIR to the location.\n" - "=====================================================================\n" - ) - SET(WITH_SBML OFF) -endif() - include_directories(msg basecode) set_target_properties(libmoose PROPERTIES COMPILE_DEFINITIONS "MOOSE_LIB") @@ -366,7 +307,6 @@ add_subdirectory(biophysics) add_subdirectory(builtins) add_subdirectory(utility) add_subdirectory(mesh) -add_subdirectory(sbml) add_subdirectory(mpi) add_subdirectory(signeur) add_subdirectory(ksolve) @@ -400,13 +340,6 @@ elseif(HDF5_FOUND) list(APPEND SYSTEM_SHARED_LIBS ${HDF5_LIBRARIES}) endif() -LIST(APPEND STATIC_LIBRARIES moose_sbml) -if(SBML_STATIC_HOME) - list(APPEND STATIC_LIBRARIES ${LIBSBML_LIBRARIES}) -elseif(LIBSBML_FOUND) - list(APPEND SYSTEM_SHARED_LIBS ${LIBSBML_LIBRARIES}) -endif() - if(WITH_GSL) if(GSL_STATIC_HOME) message(STATUS "Using STATIC gsl libraries: ${GSL_LIBRARIES}") diff --git a/CheckCXXCompiler.cmake b/CheckCXXCompiler.cmake index 7fddd1d2a2e27ccde9e15c778772758977e23b99..15a4d730b98679a10bf42e9c5f8df04d6de3fd58 100644 --- a/CheckCXXCompiler.cmake +++ b/CheckCXXCompiler.cmake @@ -6,7 +6,6 @@ CHECK_CXX_COMPILER_FLAG( "-std=c++0x" COMPILER_SUPPORTS_CXX0X ) CHECK_CXX_COMPILER_FLAG( "-Wno-strict-aliasing" COMPILER_WARNS_STRICT_ALIASING ) - # Turn warning to error: Not all of the options may be supported on all # versions of compilers. be careful here. add_definitions(-Wall @@ -32,11 +31,17 @@ if(COMPILER_SUPPORTS_CXX11) message(STATUS "Your compiler supports c++11 features. Enabling it") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") add_definitions( -DENABLE_CPP11 ) + if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" ) + endif(APPLE) elseif(COMPILER_SUPPORTS_CXX0X) message(STATUS "Your compiler supports c++0x features. Enabling it") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") add_definitions( -DENABLE_CXX11 ) add_definitions( -DBOOST_NO_CXX11_SCOPED_ENUMS -DBOOST_NO_SCOPED_ENUMS ) + if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" ) + endif(APPLE) else() add_definitions( -DBOOST_NO_CXX11_SCOPED_ENUMS -DBOOST_NO_SCOPED_ENUMS ) message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support.") diff --git a/Makefile b/Makefile index 824a42986d8a0bfdf89679044e703b6a2ef22312..65b7c9b361a365aaac18ec489b87d74ac9c718ac 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ # Default values for flags. The operator ?= assigns the given value only if the # variable is not already defined. -USE_SBML?=0 +#USE_SBML?=0 USE_HDF5?=1 USE_CUDA?=0 USE_NEUROKIT?=0 @@ -230,16 +230,6 @@ else LIBS+= -lm endif -#harsha -# To use SBML, pass USE_SBML=1 in make command line -ifeq ($(USE_SBML),1) -LIBS+= -lsbml -CXXFLAGS+=-DUSE_SBML -LDFLAGS += -L/usr/lib64 -Wl,--rpath='/usr/lib64' -SBML_DIR = sbml -SBML_LIB = sbml/_sbml.o -endif - #Saeed # To use CUDA, pass USE_CUDA=1 in make command line ifeq ($(USE_CUDA),1) @@ -371,7 +361,7 @@ export CXXFLAGS export LD export LIBS export USE_GSL -export USE_SBML +#export USE_SBML all: moose pymoose diff --git a/MooseTests.cmake b/MooseTests.cmake index 25fdf23bf95d8d0e43149125549669e95004b719..77e9fc866fc57d6bba0b59bd42518fce79313232 100644 --- a/MooseTests.cmake +++ b/MooseTests.cmake @@ -79,14 +79,14 @@ set_tests_properties(pymoose-ksolve-test PROPERTIES ENVIRONMENT "PYTHONPATH=${PROJECT_BINARY_DIR}/python" ) -# Test basic SBML support. -ADD_TEST(NAME pymoose-test-basic-sbml-support - COMMAND ${TEST_COMMAND} - ${PROJECT_SOURCE_DIR}/tests/python/test_sbml_support.py - ) -set_tests_properties(pymoose-test-basic-sbml-support - PROPERTIES ENVIRONMENT "PYTHONPATH=${PROJECT_BINARY_DIR}/python" - ) +## Test basic SBML support. +#ADD_TEST(NAME pymoose-test-basic-sbml-support + #COMMAND ${TEST_COMMAND} + #${PROJECT_SOURCE_DIR}/tests/python/test_sbml_support.py + #) +#set_tests_properties(pymoose-test-basic-sbml-support + #PROPERTIES ENVIRONMENT "PYTHONPATH=${PROJECT_BINARY_DIR}/python" + #) # Test basic SBML support. ADD_TEST(NAME pymoose-test-rng diff --git a/basecode/Makefile b/basecode/Makefile index c4aa0eee61467e634ca9ee06ec5833d8b618654d..0639a32c38bce0311fda0e32251dbd5b44eab69a 100644 --- a/basecode/Makefile +++ b/basecode/Makefile @@ -79,7 +79,7 @@ default: $(TARGET) $(OBJ) : $(HEADERS) ../shell/Shell.h Element.o: FuncOrder.h -testAsync.o: SparseMatrix.h SetGet.h ../scheduling/Clock.h ../biophysics/IntFire.h ../synapse/SynHandlerBase.h ../synapse/SimpleSynHandler.h ../synapse/Synapse.h ../randnum/RNG.h +testAsync.o: SparseMatrix.h SetGet.h ../scheduling/Clock.h ../biophysics/IntFire.h ../synapse/SynEvent.h ../synapse/SynHandlerBase.h ../synapse/SimpleSynHandler.h ../synapse/Synapse.h ../randnum/RNG.h SparseMsg.o: SparseMatrix.h SetGet.o: SetGet.h ../shell/Neutral.h HopFunc.o: HopFunc.h ../mpi/PostMaster.h diff --git a/basecode/main.cpp b/basecode/main.cpp index a6563c09d7dfd26707eee71630e56a03488a8a55..5d234e2febce0396b23fa05cdfbc65e98f91d83c 100644 --- a/basecode/main.cpp +++ b/basecode/main.cpp @@ -57,6 +57,7 @@ extern void testShell(); extern void testScheduling(); extern void testSchedulingProcess(); extern void testBuiltins(); +extern void testSynapse(); extern void testBuiltinsProcess(); extern void testMpiScheduling(); @@ -342,6 +343,7 @@ void nonMpiTests( Shell* s ) MOOSE_TEST("testHsolve", testHSolve()); //MOOSE_TEST("testGeom", testGeom()); MOOSE_TEST("testMesh", testMesh()); + MOOSE_TEST("testSynapse", testSynapse()); MOOSE_TEST( "testSigneur", testSigNeur()); #ifdef USE_SMOLDYN //MOOSE_TEST(testSmoldyn()); diff --git a/basecode/testAsync.cpp b/basecode/testAsync.cpp index c1624dc86edbcec43ef7032bec251a5c0bd6b46f..e96557f80ddec7d82895d3cace6bbda0de1a7b95 100644 --- a/basecode/testAsync.cpp +++ b/basecode/testAsync.cpp @@ -18,6 +18,7 @@ #include <queue> #include "../biophysics/IntFire.h" #include "../synapse/Synapse.h" +#include "../synapse/SynEvent.h" #include "../synapse/SynHandlerBase.h" #include "../synapse/SimpleSynHandler.h" #include "SparseMatrix.h" diff --git a/biophysics/Leakage.cpp b/biophysics/Leakage.cpp index d701a0f1952a4354421133d481acf63872b38b98..a3d196ba6c6f73af62bb7769b38a33ccf5702048 100644 --- a/biophysics/Leakage.cpp +++ b/biophysics/Leakage.cpp @@ -88,14 +88,23 @@ Leakage::~Leakage() void Leakage::vProcess( const Eref & e, ProcPtr p ) { + ChanCommon::vSetGk( e, this->vGetGbar( e ) * this->vGetModulation( e )); + updateIk(); sendProcessMsgs(e, p); } void Leakage::vReinit( const Eref & e, ProcPtr p ) { + ChanCommon::vSetGk( e, this->vGetGbar( e ) * this->vGetModulation( e )); + updateIk(); sendReinitMsgs(e, p); } +void Leakage::vSetGbar( const Eref& e, double gbar ) +{ + ChanCommon::vSetGk( e, gbar * this->vGetModulation( e ) ); + ChanCommon::vSetGbar( e, gbar ); +} // // Leakage.cpp ends here diff --git a/biophysics/Leakage.h b/biophysics/Leakage.h index 21815a7e33d87de1f7b36a369f11ed9a03cfe165..82f5a990fdb08978fb172b67bbe8e33bd800bff5 100644 --- a/biophysics/Leakage.h +++ b/biophysics/Leakage.h @@ -56,6 +56,7 @@ class Leakage: public ChanCommon ~Leakage(); void vProcess( const Eref & e, ProcPtr p ); void vReinit( const Eref & e, ProcPtr p ); + void vSetGbar( const Eref & e, double gbar ); static const Cinfo * initCinfo(); }; diff --git a/biophysics/ReadCell.cpp b/biophysics/ReadCell.cpp index 12578943840b28c78cb9335095f9b51eaab47967..6d87a8e781f7fb5a704482335e48decc1e102500 100644 --- a/biophysics/ReadCell.cpp +++ b/biophysics/ReadCell.cpp @@ -823,7 +823,7 @@ bool ReadCell::addSpikeGen( shell_->doAddMsg( "Single", compt, - "VmSrc", + "VmOut", chan, "Vm" ); diff --git a/biophysics/SynChan.cpp b/biophysics/SynChan.cpp index 6714ce1ce8c4c4755958335de8a885e3de5f9899..fc49a64d9b02b87b55ba2fc51ec67dd1da259151 100644 --- a/biophysics/SynChan.cpp +++ b/biophysics/SynChan.cpp @@ -199,10 +199,16 @@ void SynChan::normalizeGbar() /// Update alpha function terms for synaptic channel. double SynChan::calcGk() { + /* X_ = getModulation() * activation_ * xconst1_ + X_ * xconst2_; Y_ = X_ * yconst1_ + Y_ * yconst2_; activation_ = 0.0; return Y_ * norm_; + */ + X_ = activation_ * xconst1_ + X_ * xconst2_; + Y_ = X_ * yconst1_ + Y_ * yconst2_; + activation_ = 0.0; + return Y_ * norm_ * getModulation(); } void SynChan::vProcess( const Eref& e, ProcPtr info ) diff --git a/external/muparser/include/muParser.h b/external/muparser/include/muParser.h index efe8ae83a765672abd81aa8d9eb2fbe5c76e5b10..fb0de64c2af24a808064d4f9491537c52b021ad4 100644 --- a/external/muparser/include/muParser.h +++ b/external/muparser/include/muParser.h @@ -101,6 +101,7 @@ namespace mu static value_type Rint(value_type); static value_type Sign(value_type); static value_type Fmod(value_type, value_type); + static value_type Quot(value_type, value_type); // Random between a and b, with fixed seed. static value_type Rand2(value_type, value_type, value_type); diff --git a/external/muparser/src/muParser.cpp b/external/muparser/src/muParser.cpp index 14977f7bc75332e70004b9eb479c94be8cf33985..925e8babd783306cc1e1ae46b83dadf0c0b1bb3a 100644 --- a/external/muparser/src/muParser.cpp +++ b/external/muparser/src/muParser.cpp @@ -110,6 +110,7 @@ namespace mu value_type Parser::Exp(value_type v) { return MathImpl<value_type>::Exp(v); } value_type Parser::Abs(value_type v) { return MathImpl<value_type>::Abs(v); } value_type Parser::Fmod(value_type v1, value_type v2) { return fmod(v1, v2); } + value_type Parser::Quot(value_type v1, value_type v2) { return (int)(v1 / v2); } // If no seed is given, value_type Parser::Rand( value_type seed ) @@ -336,6 +337,7 @@ namespace mu DefineFun(_T("avg"), Avg); DefineFun(_T("min"), Min); DefineFun(_T("max"), Max); + DefineFun(_T("quot"), Quot); } } diff --git a/external/muparser/src/muParserTokenReader.cpp b/external/muparser/src/muParserTokenReader.cpp index e237d514353c911e62ccd45024b65bbfa08c54f8..e625261125eaf23bff56397fbcf72a7043b5796f 100644 --- a/external/muparser/src/muParserTokenReader.cpp +++ b/external/muparser/src/muParserTokenReader.cpp @@ -154,8 +154,10 @@ namespace mu #else ParserTokenReader* ptr = new ParserTokenReader(*this); ptr->SetParent( a_pParent ); - delete ptr; - return NULL; + return ptr; + // Upi Bhalla 13 June 2016: I think the original two lines below are wrong + // delete ptr; + // return NULL; #endif } diff --git a/kinetics/Enz.cpp b/kinetics/Enz.cpp index b320e8c87251252eb04a3aee8d0422836b65868b..785553943c7001a97b0479a00ebcc386b1f286db 100644 --- a/kinetics/Enz.cpp +++ b/kinetics/Enz.cpp @@ -23,15 +23,27 @@ const Cinfo* Enz::initCinfo() ////////////////////////////////////////////////////////////// // MsgDest Definitions ////////////////////////////////////////////////////////////// + static DestFinfo setKmK1Dest( "setKmK1", + "Low-level function used when you wish to explicitly set " + "Km and k1, without doing any of the volume calculations." + "Needed by ReadKkit and other situations where the numbers " + "must be set before all the messaging is in place." + "Not relevant for zombie enzymes.", + new OpFunc2< Enz, double, double >( &Enz::setKmK1 ) + ); ////////////////////////////////////////////////////////////// // Shared Msg Definitions ////////////////////////////////////////////////////////////// static Dinfo< Enz > dinfo; + static Finfo* enzFinfos[] = { + &setKmK1Dest, // DestFinfo + }; + static Cinfo enzCinfo ( "Enz", CplxEnzBase::initCinfo(), - 0, - 0, + enzFinfos, + sizeof( enzFinfos ) / sizeof ( Finfo* ), &dinfo ); @@ -61,7 +73,7 @@ static const SrcFinfo2< double, double >* cplxOut = // Enz internal functions ////////////////////////////////////////////////////////////// Enz::Enz( ) - : k1_( 0.1 ), k2_( 0.4 ), k3_( 0.1 ) + : Km_(5.0e-3), k1_( 0.1 ), k2_( 0.4 ), k3_( 0.1 ) { ; } @@ -73,6 +85,12 @@ Enz::~Enz() // MsgDest Definitions ////////////////////////////////////////////////////////////// +void Enz::setKmK1( double Km, double k1 ) +{ + r1_ = k1_ = k1; + Km_ = Km; +} + void Enz::vSub( double n ) { r1_ *= n; @@ -118,13 +136,14 @@ void Enz::vRemesh( const Eref& e ) void Enz::vSetK1( const Eref& e, double v ) { r1_ = k1_ = v; - double volScale = - convertConcToNumRateUsingMesh( e, subOut, 1 ); + double volScale = convertConcToNumRateUsingMesh( e, subOut, 1 ); Km_ = ( k2_ + k3_ ) / ( k1_ * volScale ); } double Enz::vGetK1( const Eref& e ) const { + Enz* temp = const_cast< Enz* >( this ); + temp->vSetKm( e, Km_ ); return k1_; } diff --git a/kinetics/Enz.h b/kinetics/Enz.h index 9ab40988fe12f991be1ac3b52fbdadab59a52a14..e67aac2e8122fc2e45135417c3337b37bb847290 100644 --- a/kinetics/Enz.h +++ b/kinetics/Enz.h @@ -38,6 +38,11 @@ class Enz: public CplxEnzBase void vSetConcK1( const Eref& e, double v ); double vGetConcK1( const Eref& e ) const; + ////////////////////////////////////////////////////////////////// + // Dest funcs, not virtual + ////////////////////////////////////////////////////////////////// + void setKmK1( double Km, double k1 ); + ////////////////////////////////////////////////////////////////// // Dest funcs, all virtual ////////////////////////////////////////////////////////////////// diff --git a/kinetics/ReadKkit.cpp b/kinetics/ReadKkit.cpp index 0089795979ea1f42d941df1d5c7b901318832789..1c145e98d8571b42d621440a3e10a1157aa853c8 100644 --- a/kinetics/ReadKkit.cpp +++ b/kinetics/ReadKkit.cpp @@ -791,7 +791,8 @@ Id findParentComptOfReac( Id reac ) vector< Id > subVec; reac.element()->getNeighbors( subVec, subFinfo ); - assert( subVec.size() > 0 ); + if ( subVec.size() == 0 ) // Dangling reaction + return Id(); // For now just put the reac in the compt belonging to the // first substrate return getCompt( subVec[0] ); @@ -808,10 +809,10 @@ void ReadKkit::assignReacCompartments() for ( map< string, Id >::iterator i = reacIds_.begin(); i != reacIds_.end(); ++i ) { Id compt = findParentComptOfReac( i->second ); - // if ( moveOntoCompartment_ ) { + if ( compt != Id() ) { if ( ! (getCompt( i->second ).id == compt ) ) shell_->doMove( i->second, compt ); - // } + } } } @@ -893,7 +894,7 @@ Id ReadKkit::buildEnz( const vector< string >& args ) // double vol = atof( args[ enzMap_[ "vol" ] ].c_str()); bool isMM = atoi( args[ enzMap_[ "usecomplex" ] ].c_str()); assert( poolVols_.find( pa ) != poolVols_.end() ); - // double vol = poolVols_[ pa ]; + double vol = poolVols_[ pa ]; /** * vsf is vol scale factor, which is what GENESIS stores in 'vol' field @@ -927,7 +928,12 @@ Id ReadKkit::buildEnz( const vector< string >& args ) // to do this assignments in raw #/cell units. Field< double >::set( enz, "k3", k3 ); Field< double >::set( enz, "k2", k2 ); - Field< double >::set( enz, "k1", k1 ); + // Here we explicitly calculate Km because the substrates are + // not set up till later, and without them the volume calculations + // are confused. + double volScale = lookupVolumeFromMesh(pa.eref()); + double Km = (k2+k3)/(k1 * KKIT_NA * vol ); // Scaling for uM to mM. + SetGet2< double, double >::set( enz, "setKmK1", Km, k1 ); string cplxName = tail + "_cplx"; string cplxPath = enzPath + "/" + cplxName; @@ -946,6 +952,7 @@ Id ReadKkit::buildEnz( const vector< string >& args ) ObjId( cplx, 0 ), "reac" ); assert( ret != ObjId() ); + // cplx()->showFields(); // enz()->showFields(); // pa()->showFields(); @@ -1404,7 +1411,7 @@ void ReadKkit::addmsg( const vector< string >& args) } vector< Id > enzcplx; i->second.element()->getNeighbors( enzcplx, - i->second.element()->cinfo()->findFinfo( "toCplx" ) ); + i->second.element()->cinfo()->findFinfo( "cplxOut" ) ); assert( enzcplx.size() == 1 ); pool = enzcplx[0]; } else { diff --git a/ksolve/Gsolve.cpp b/ksolve/Gsolve.cpp index ed8e7682d5c93cc534a506f6a3e89a514a890ab9..a1c576ac18c65fe39c7570050a2f6456fa6f7123 100644 --- a/ksolve/Gsolve.cpp +++ b/ksolve/Gsolve.cpp @@ -122,6 +122,14 @@ const Cinfo* Gsolve::initCinfo() &Gsolve::setClockedUpdate, &Gsolve::getClockedUpdate ); + static ReadOnlyLookupValueFinfo< + Gsolve, unsigned int, vector< unsigned int > > numFire( + "numFire", + "Vector of the number of times each reaction has fired." + "Indexed by the voxel number." + "Zeroed out at reinit.", + &Gsolve::getNumFire + ); /////////////////////////////////////////////////////// // DestFinfo definitions @@ -198,6 +206,7 @@ const Cinfo* Gsolve::initCinfo() // Here we put new fields that were not there in the Ksolve. &useRandInit, // Value &useClockedUpdate, // Value + &numFire, // ReadOnlyLookupValue }; static Dinfo< Gsolve > dinfo; @@ -265,6 +274,10 @@ void Gsolve::setStoich( Id stoich ) assert( stoich.element()->cinfo()->isA( "Stoich" ) ); stoich_ = stoich; stoichPtr_ = reinterpret_cast< Stoich* >( stoich.eref().data() ); + if ( stoichPtr_->getNumAllPools() == 0 ) { + stoichPtr_ = 0; + return; + } sys_.stoich = stoichPtr_; sys_.isReady = false; for ( unsigned int i = 0; i < pools_.size(); ++i ) @@ -319,6 +332,16 @@ void Gsolve::setNvec( unsigned int voxel, vector< double > nVec ) } } +vector< unsigned int > Gsolve::getNumFire( unsigned int voxel) const +{ + static vector< unsigned int > dummy; + if ( voxel < pools_.size() ) { + return const_cast< GssaVoxelPools* >( &( pools_[ voxel ]) )->numFire(); + } + return dummy; +} + + bool Gsolve::getRandInit() const { return sys_.useRandInit; @@ -467,6 +490,8 @@ void Gsolve::reinit( const Eref& e, ProcPtr p ) ////////////////////////////////////////////////////////////// void Gsolve::initProc( const Eref& e, ProcPtr p ) { + if ( !stoichPtr_ ) + return; // vector< vector< double > > values( xfer_.size() ); for ( unsigned int i = 0; i < xfer_.size(); ++i ) { XferInfo& xf = xfer_[i]; @@ -483,6 +508,8 @@ void Gsolve::initProc( const Eref& e, ProcPtr p ) void Gsolve::initReinit( const Eref& e, ProcPtr p ) { + if ( !stoichPtr_ ) + return; for ( unsigned int i = 0 ; i < pools_.size(); ++i ) { pools_[i].reinit( &sys_ ); } diff --git a/ksolve/Gsolve.h b/ksolve/Gsolve.h index 686a091b42ec2d57c38d8da20deae47b9c4cb59d..0e35eab89f6efa7a6cea1cf40edfb2b9420039e2 100644 --- a/ksolve/Gsolve.h +++ b/ksolve/Gsolve.h @@ -76,6 +76,7 @@ class Gsolve: public ZombiePoolInterface ////////////////////////////////////////////////////////////////// unsigned int getPoolIndex( const Eref& e ) const; unsigned int getVoxelIndex( const Eref& e ) const; + vector< unsigned int > getNumFire( unsigned int voxel) const; /** * Inherited. Needed for reac-diff calculations so the Gsolve can diff --git a/ksolve/GssaVoxelPools.cpp b/ksolve/GssaVoxelPools.cpp index c7eaba66b091641b15c831a52ddf617776b5393d..c4b529ee6aaaa59572d33bd005d3262953805f0b 100644 --- a/ksolve/GssaVoxelPools.cpp +++ b/ksolve/GssaVoxelPools.cpp @@ -125,6 +125,7 @@ void GssaVoxelPools::setNumReac( unsigned int n ) { v_.clear(); v_.resize( n, 0.0 ); + numFire_.resize( n, 0 ); } /** @@ -201,6 +202,8 @@ void GssaVoxelPools::advance( const ProcInfo* p, const GssaSystem* g ) double sign = double(v_[rindex] >= 0) - double(0 > v_[rindex] ); g->transposeN.fireReac( rindex, Svec(), sign ); + numFire_[rindex]++; + double r = rng_.uniform(); while ( r <= 0.0 ) { @@ -246,6 +249,12 @@ void GssaVoxelPools::reinit( const GssaSystem* g ) } t_ = 0.0; refreshAtot( g ); + numFire_.assign( v_.size(), 0 ); +} + +vector< unsigned int > GssaVoxelPools::numFire() const +{ + return numFire_; } ///////////////////////////////////////////////////////////////////////// diff --git a/ksolve/GssaVoxelPools.h b/ksolve/GssaVoxelPools.h index ec062b46e89ef723e6431188f8608b24019cfec3..fc638d4541b13bb18342201dea596d30d7020f77 100644 --- a/ksolve/GssaVoxelPools.h +++ b/ksolve/GssaVoxelPools.h @@ -34,6 +34,8 @@ public: void advance( const ProcInfo* p, const GssaSystem* g ); + vector< unsigned int > numFire() const; + /** * Cleans out all reac rates and recalculates atot. Needed whenever a * mol conc changes, or if there is a roundoff error. Returns true @@ -96,6 +98,9 @@ private: */ vector< double > v_; // Possibly we should put independent RNGS, so save one here. + + // Count how many times each reaction has fired. + vector< unsigned int > numFire_; /** * @brief RNG. diff --git a/ksolve/Ksolve.cpp b/ksolve/Ksolve.cpp index 508f2c85824b7c2e480b8c5176c483221ec05377..56a85c4abece0d6ea4a90dd70b21b0c5e03d908e 100644 --- a/ksolve/Ksolve.cpp +++ b/ksolve/Ksolve.cpp @@ -238,8 +238,8 @@ Ksolve::Ksolve() #elif USE_BOOST method_( "rk5a" ), #endif - epsAbs_( 1e-4 ), - epsRel_( 1e-6 ), + epsAbs_( 1e-7 ), + epsRel_( 1e-7 ), pools_( 1 ), startVoxel_( 0 ), dsolve_(), @@ -368,8 +368,10 @@ void Ksolve::setStoich( Id stoich ) ode.method = method_; #ifdef USE_GSL ode.gslSys.dimension = stoichPtr_->getNumAllPools(); - if ( ode.gslSys.dimension == 0 ) + if ( ode.gslSys.dimension == 0 ) { + stoichPtr_ = 0; return; // No pools, so don't bother. + } innerSetMethod( ode, method_ ); ode.gslSys.function = &VoxelPools::gslFunc; ode.gslSys.jacobian = 0; @@ -565,7 +567,8 @@ void Ksolve::process( const Eref& e, ProcPtr p ) void Ksolve::reinit( const Eref& e, ProcPtr p ) { - assert( stoichPtr_ ); + if ( !stoichPtr_ ) + return; if ( isBuilt_ ) { for ( unsigned int i = 0 ; i < pools_.size(); ++i ) diff --git a/ksolve/OdeSystem.h b/ksolve/OdeSystem.h index b629a82fc1aacf79de4521e05e491d8c53d4eaff..9a18191cce9aebd6f032c36ce52f85314b2ca5fd 100644 --- a/ksolve/OdeSystem.h +++ b/ksolve/OdeSystem.h @@ -20,7 +20,7 @@ class OdeSystem { public: OdeSystem() : method( "rk5" ), - initStepSize( 1 ), + initStepSize( 0.001 ), epsAbs( 1e-6 ), epsRel( 1e-6 ) {;} diff --git a/ksolve/Stoich.cpp b/ksolve/Stoich.cpp index e3788968801859468d27a7b2ab5be22705f0e9c3..db6e2d779c4f942fbea8e28cdae2eb7f3966090d 100644 --- a/ksolve/Stoich.cpp +++ b/ksolve/Stoich.cpp @@ -1240,14 +1240,17 @@ const KinSparseMatrix& Stoich::getStoichiometryMatrix() const void Stoich::buildXreacs( const Eref& e, Id otherStoich ) { - kinterface_->setupCrossSolverReacs( offSolverPoolMap_, otherStoich ); + if ( status_ == 0 ) + kinterface_->setupCrossSolverReacs( offSolverPoolMap_,otherStoich); } void Stoich::filterXreacs() { - kinterface_->filterCrossRateTerms( offSolverReacVec_, offSolverReacCompts_ ); - kinterface_->filterCrossRateTerms( offSolverEnzVec_, offSolverEnzCompts_ ); - kinterface_->filterCrossRateTerms( offSolverMMenzVec_, offSolverMMenzCompts_ ); + if ( status_ == 0 ) { + kinterface_->filterCrossRateTerms( offSolverReacVec_, offSolverReacCompts_ ); + kinterface_->filterCrossRateTerms( offSolverEnzVec_, offSolverEnzCompts_ ); + kinterface_->filterCrossRateTerms( offSolverMMenzVec_, offSolverMMenzCompts_ ); + } } /* @@ -1491,32 +1494,36 @@ void Stoich::unZombifyModel() unZombifyPools(); - for ( vector< Id >::iterator i = reacVec_.begin(); - i != reacVec_.end(); ++i ) + vector< Id > temp = reacVec_; temp.insert( temp.end(), + offSolverReacVec_.begin(), offSolverReacVec_.end() ); + for ( vector< Id >::iterator i = temp.begin(); i != temp.end(); ++i ) { Element* e = i->element(); if ( e != 0 && e->cinfo() == zombieReacCinfo ) ReacBase::zombify( e, reacCinfo, Id() ); } - for ( vector< Id >::iterator i = mmEnzVec_.begin(); - i != mmEnzVec_.end(); ++i ) + temp = mmEnzVec_; temp.insert( temp.end(), + offSolverMMenzVec_.begin(), offSolverMMenzVec_.end() ); + for ( vector< Id >::iterator i = temp.begin(); i != temp.end(); ++i ) { Element* e = i->element(); if ( e != 0 && e->cinfo() == zombieMMenzCinfo ) EnzBase::zombify( e, mmEnzCinfo, Id() ); } - for ( vector< Id >::iterator i = enzVec_.begin(); - i != enzVec_.end(); ++i ) + temp = enzVec_; temp.insert( temp.end(), + offSolverEnzVec_.begin(), offSolverEnzVec_.end() ); + for ( vector< Id >::iterator i = temp.begin(); i != temp.end(); ++i ) { Element* e = i->element(); if ( e != 0 && e->cinfo() == zombieEnzCinfo ) CplxEnzBase::zombify( e, enzCinfo, Id() ); } - for ( vector< Id >::iterator i = poolFuncVec_.begin(); - i != poolFuncVec_.end(); ++i ) + temp = poolFuncVec_; temp.insert( temp.end(), + incrementFuncVec_.begin(), incrementFuncVec_.end() ); + for ( vector< Id >::iterator i = temp.begin(); i != temp.end(); ++i ) { Element* e = i->element(); if ( e != 0 && e->cinfo() == zombieFunctionCinfo ) @@ -2282,7 +2289,7 @@ unsigned int Stoich::indexOfMatchingVolume( double vol ) const void Stoich::scaleBufsAndRates( unsigned int index, double volScale ) { - if ( !kinterface_ ) + if ( !kinterface_ || status_ != 0 ) return; kinterface_->pools( index )->scaleVolsBufsRates( volScale, this ); } diff --git a/ksolve/VoxelPools.cpp b/ksolve/VoxelPools.cpp index d1bd615f8eac52cf7bcc5e02989732c720fc0d3f..3c933b0a235ee74e991d17e5f51c6cc34207d0a3 100644 --- a/ksolve/VoxelPools.cpp +++ b/ksolve/VoxelPools.cpp @@ -60,7 +60,7 @@ void VoxelPools::reinit( double dt ) if ( !driver_ ) return; gsl_odeiv2_driver_reset( driver_ ); - gsl_odeiv2_driver_reset_hstart( driver_, dt ); + gsl_odeiv2_driver_reset_hstart( driver_, dt / 10.0 ); #endif } diff --git a/ksolve/ZombieEnz.cpp b/ksolve/ZombieEnz.cpp index e8ded896e286e7e06e6964740a9976d764c3284f..65c17a36c17851477271c5b2ec1e75d5f4310cad 100644 --- a/ksolve/ZombieEnz.cpp +++ b/ksolve/ZombieEnz.cpp @@ -115,7 +115,17 @@ double ZombieEnz::vGetK2( const Eref& e ) const void ZombieEnz::vSetKcat( const Eref& e, double v ) { + double k2 = getK2( e ); + double k3 = getKcat( e ); + double ratio = 4.0; + if ( k3 > 1e-10 ) + ratio = k2/k3; + double Km = (k2 + k3) / concK1_; + concK1_ = v * (1.0 + ratio) / Km; + + stoich_->setEnzK1( e, concK1_ ); stoich_->setEnzK3( e, v ); + stoich_->setEnzK2( e, v * ratio ); } double ZombieEnz::vGetKcat( const Eref& e ) const diff --git a/ksolve/ZombieFunction.cpp b/ksolve/ZombieFunction.cpp index 7760c4f139791bdc3f1032ccf7799a1193825962..d430573f9d25b332334292ead98e668367189945 100644 --- a/ksolve/ZombieFunction.cpp +++ b/ksolve/ZombieFunction.cpp @@ -114,7 +114,9 @@ ZombieFunction::~ZombieFunction() // MsgDest Definitions ////////////////////////////////////////////////////////////// void ZombieFunction::process(const Eref &e, ProcPtr p) -{;} +{ + _t = p->currTime; +} void ZombieFunction::reinit(const Eref &e, ProcPtr p) {;} diff --git a/pymoose/moosemodule.cpp b/pymoose/moosemodule.cpp index b0653fc0fa99e1f4721c656b33895c733dbf09d4..97f66dad6ed9c30ec9aba9b417cee2c8d8d3f077 100644 --- a/pymoose/moosemodule.cpp +++ b/pymoose/moosemodule.cpp @@ -1792,6 +1792,7 @@ PyObject * moose_exists(PyObject * dummy, PyObject * args) } //Harsha : For writing genesis file to sbml +/* PyObject * moose_writeSBML(PyObject * dummy, PyObject * args) { char * fname = NULL, * modelpath = NULL; @@ -1802,7 +1803,8 @@ PyObject * moose_writeSBML(PyObject * dummy, PyObject * args) int ret = SHELLPTR->doWriteSBML(string(modelpath),string(fname)); return Py_BuildValue("i", ret); } - +*/ +/* PyObject * moose_readSBML(PyObject * dummy, PyObject * args) { char * fname = NULL, * modelpath = NULL, * solverclass = NULL; @@ -1832,7 +1834,7 @@ PyObject * moose_readSBML(PyObject * dummy, PyObject * args) PyObject * ret = reinterpret_cast<PyObject*>(model); return ret; } - +*/ PyDoc_STRVAR(moose_loadModel_documentation, "loadModel(filename, modelpath, solverclass) -> vec\n" "\n" @@ -3073,8 +3075,8 @@ static PyMethodDef MooseMethods[] = {"stop", (PyCFunction)moose_stop, METH_VARARGS, "Stop simulation"}, {"isRunning", (PyCFunction)moose_isRunning, METH_VARARGS, "True if the simulation is currently running."}, {"exists", (PyCFunction)moose_exists, METH_VARARGS, "True if there is an object with specified path."}, - {"writeSBML", (PyCFunction)moose_writeSBML, METH_VARARGS, "Export biochemical model to an SBML file."}, - {"readSBML", (PyCFunction)moose_readSBML, METH_VARARGS, "Import SBML model to Moose."}, + //{"writeSBML", (PyCFunction)moose_writeSBML, METH_VARARGS, "Export biochemical model to an SBML file."}, + //{"readSBML", (PyCFunction)moose_readSBML, METH_VARARGS, "Import SBML model to Moose."}, {"loadModel", (PyCFunction)moose_loadModel, METH_VARARGS, moose_loadModel_documentation}, {"saveModel", (PyCFunction)moose_saveModel, METH_VARARGS, moose_saveModel_documentation}, {"connect", (PyCFunction)moose_connect, METH_VARARGS, moose_connect_documentation}, diff --git a/python/moose/SBML/__init__.py b/python/moose/SBML/__init__.py index a3c3042fec17325167793905370ccea75c863b6b..a3b90826a4285f33c761e90ceffd00e3f389ee25 100755 --- a/python/moose/SBML/__init__.py +++ b/python/moose/SBML/__init__.py @@ -1,4 +1,4 @@ -from writeSBML import mooseWriteSBML -from readSBML import mooseReadSBML +from .writeSBML import mooseWriteSBML +from .readSBML import mooseReadSBML __all__ = ["mooseWriteSBML","mooseReadSBML"] diff --git a/python/moose/SBML/readSBML.py b/python/moose/SBML/readSBML.py index 08055a6002ab2387a935f08d22322c3dec57d851..2deda273d5f4599073f141989de2e398520562c0 100644 --- a/python/moose/SBML/readSBML.py +++ b/python/moose/SBML/readSBML.py @@ -12,7 +12,7 @@ ** copyright (C) 2003-2016 Upinder S. Bhalla. and NCBS Created : Thu May 12 10:19:00 2016(+0530) Version -Last-Updated: +Last-Updated: Wed Sep 28 By: **********************************************************************/ /**************************** @@ -23,7 +23,7 @@ import sys import os.path import collections from moose import * -import libsbml +#import libsbml ''' TODO in @@ -49,77 +49,90 @@ import libsbml ----when stoichiometry is rational number 22 ---- For Michaelis Menten kinetics km is not defined which is most of the case need to calculate ''' - -def mooseReadSBML(filepath,loadpath): - print " filepath ",filepath - try: - filep = open(filepath, "r") - document = libsbml.readSBML(filepath) - num_errors = document.getNumErrors() - if ( num_errors > 0 ): - print("Encountered the following SBML errors:" ); - document.printErrors(); - return moose.element('/'); - else: - level = document.getLevel(); - version = document.getVersion(); - print("\n" + "File: " + filepath + " (Level " + str(level) + ", version " + str(version) + ")" ); - model = document.getModel(); - if (model == None): - print("No model present." ); +try: + #from libsbml import * + import libsbml +except ImportError: + def mooseReadSBML(filepath,loadpath,solver="ee"): + return (-2,"\n ReadSBML : python-libsbml module not installed",None) +else: + def mooseReadSBML(filepath,loadpath,solver="ee"): + try: + filep = open(filepath, "r") + document = libsbml.readSBML(filepath) + num_errors = document.getNumErrors() + if ( num_errors > 0 ): + print("Encountered the following SBML errors:" ); + document.printErrors(); return moose.element('/'); else: - print " model ",model - print("functionDefinitions: " + str(model.getNumFunctionDefinitions()) ); - print(" unitDefinitions: " + str(model.getNumUnitDefinitions()) ); - print(" compartmentTypes: " + str(model.getNumCompartmentTypes()) ); - print(" specieTypes: " + str(model.getNumSpeciesTypes()) ); - print(" compartments: " + str(model.getNumCompartments()) ); - print(" species: " + str(model.getNumSpecies()) ); - print(" parameters: " + str(model.getNumParameters()) ); - print(" initialAssignments: " + str(model.getNumInitialAssignments()) ); - print(" rules: " + str(model.getNumRules()) ); - print(" constraints: " + str(model.getNumConstraints()) ); - print(" reactions: " + str(model.getNumReactions()) ); - print(" events: " + str(model.getNumEvents()) ); - print("\n"); - - if (model.getNumCompartments() == 0): - return moose.element('/') + level = document.getLevel(); + version = document.getVersion(); + print(("\n" + "File: " + filepath + " (Level " + str(level) + ", version " + str(version) + ")" )); + model = document.getModel(); + if (model == None): + print("No model present." ); + return moose.element('/'); else: - baseId = moose.Neutral(loadpath) - #All the model will be created under model as a thumbrule - basePath = moose.Neutral(baseId.path+'/model') - #Map Compartment's SBML id as key and value is list of[ Moose ID and SpatialDimensions ] - comptSbmlidMooseIdMap = {} - print ": ",basePath.path - globparameterIdValue = {} - modelAnnotaInfo = {} - mapParameter(model,globparameterIdValue) - errorFlag = createCompartment(basePath,model,comptSbmlidMooseIdMap) - if errorFlag: - specInfoMap = {} - errorFlag = createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap) + print((" model: " +str(model))); + print(("functionDefinitions: " + str(model.getNumFunctionDefinitions()) )); + print((" unitDefinitions: " + str(model.getNumUnitDefinitions()) )); + print((" compartmentTypes: " + str(model.getNumCompartmentTypes()) )); + print((" specieTypes: " + str(model.getNumSpeciesTypes()) )); + print((" compartments: " + str(model.getNumCompartments()) )); + print((" species: " + str(model.getNumSpecies()) )); + print((" parameters: " + str(model.getNumParameters()) )); + print((" initialAssignments: " + str(model.getNumInitialAssignments()) )); + print((" rules: " + str(model.getNumRules()) )); + print((" constraints: " + str(model.getNumConstraints()) )); + print((" reactions: " + str(model.getNumReactions()) )); + print((" events: " + str(model.getNumEvents()) )); + print("\n"); + + if (model.getNumCompartments() == 0): + return moose.element('/') + else: + baseId = moose.Neutral(loadpath) + #All the model will be created under model as a thumbrule + basePath = moose.Neutral(baseId.path+'/model') + #Map Compartment's SBML id as key and value is list of[ Moose ID and SpatialDimensions ] + global comptSbmlidMooseIdMap + global warning + warning = " " + comptSbmlidMooseIdMap = {} + print(("modelPath:" + basePath.path)) + globparameterIdValue = {} + modelAnnotaInfo = {} + mapParameter(model,globparameterIdValue) + errorFlag = createCompartment(basePath,model,comptSbmlidMooseIdMap) if errorFlag: - errorFlag = createRules(model,specInfoMap,globparameterIdValue) + specInfoMap = {} + errorFlag = createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap,modelAnnotaInfo) if errorFlag: - errorFlag = createReaction(model,specInfoMap,modelAnnotaInfo) - if not errorFlag: - print " errorFlag ",errorFlag - #Any time in the middle if SBML does not read then I delete everything from model level - #This is important as while reading in GUI the model will show up untill built which is not correct - print "Deleted rest of the model" - moose.delete(basePath) - return baseId; - + errorFlag = createRules(model,specInfoMap,globparameterIdValue) + if errorFlag: + errorFlag,msg = createReaction(model,specInfoMap,modelAnnotaInfo,globparameterIdValue) + getModelAnnotation(model,baseId,basePath) + + if not errorFlag: + print(msg) + #Any time in the middle if SBML does not read then I delete everything from model level + #This is important as while reading in GUI the model will show up untill built which is not correct + #print "Deleted rest of the model" + moose.delete(basePath) + return baseId; + + + except IOError: + print("File " ,filepath ," does not exist.") + return moose.element('/') - except IOError: - print "File " ,filepath ," does not exist." - return moose.element('/') def setupEnzymaticReaction(enz,groupName,enzName,specInfoMap,modelAnnotaInfo): enzPool = (modelAnnotaInfo[groupName]["enzyme"]) + enzPool = str(idBeginWith(enzPool)) enzParent = specInfoMap[enzPool]["Mpath"] cplx = (modelAnnotaInfo[groupName]["complex"]) + cplx = str(idBeginWith(cplx)) complx = moose.element(specInfoMap[cplx]["Mpath"].path) enzyme_ = moose.Enz(enzParent.path+'/'+enzName) @@ -132,20 +145,23 @@ def setupEnzymaticReaction(enz,groupName,enzName,specInfoMap,modelAnnotaInfo): for si in range(0,len(sublist)): sl = sublist[si] + sl = str(idBeginWith(sl)) mSId =specInfoMap[sl]["Mpath"] moose.connect(enzyme_,"sub",mSId,"reac") for pi in range(0,len(prdlist)): pl = prdlist[pi] + pl = str(idBeginWith(pl)) mPId = specInfoMap[pl]["Mpath"] moose.connect(enzyme_,"prd",mPId,"reac") if (enz.isSetNotes): pullnotes(enz,enzyme_) + return enzyme_,True + def addSubPrd(reac,reName,type,reactSBMLIdMooseId,specInfoMap): rctMapIter = {} - if (type == "sub"): noplusStoichsub = 0 addSubinfo = collections.OrderedDict() @@ -153,8 +169,12 @@ def addSubPrd(reac,reName,type,reactSBMLIdMooseId,specInfoMap): rct = reac.getReactant(rt) sp = rct.getSpecies() rctMapIter[sp] = rct.getStoichiometry() + if rct.getStoichiometry() > 1: + pass + #print " stoich ",reac.name,rct.getStoichiometry() noplusStoichsub = noplusStoichsub+rct.getStoichiometry() - for key,value in rctMapIter.items(): + for key,value in list(rctMapIter.items()): + key = str(idBeginWith(key)) src = specInfoMap[key]["Mpath"] des = reactSBMLIdMooseId[reName]["MooseId"] for s in range(0,int(value)): @@ -169,11 +189,15 @@ def addSubPrd(reac,reName,type,reactSBMLIdMooseId,specInfoMap): rct = reac.getProduct(rt) sp = rct.getSpecies() rctMapIter[sp] = rct.getStoichiometry() + if rct.getStoichiometry() > 1: + pass + #print " stoich prd",reac.name,rct.getStoichiometry() noplusStoichprd = noplusStoichprd+rct.getStoichiometry() - for key,values in rctMapIter.items(): + for key,values in list(rctMapIter.items()): #src ReacBase src = reactSBMLIdMooseId[reName]["MooseId"] + key = parentSp = str(idBeginWith(key)) des = specInfoMap[key]["Mpath"] for i in range(0,int(values)): moose.connect(src, 'prd', des, 'reac', 'OneToOne') @@ -181,13 +205,88 @@ def addSubPrd(reac,reName,type,reactSBMLIdMooseId,specInfoMap): reactSBMLIdMooseId[reName].update(addPrdinfo) def populatedict(annoDict,label,value): - if annoDict.has_key(label): + if label in annoDict: annoDict.setdefault(label,[]) annoDict[label].update({value}) else: annoDict[label]= {value} -def getModelAnnotation(obj,modelAnnotaInfo): +def getModelAnnotation(obj,baseId,basepath): + annotationNode = obj.getAnnotation() + if annotationNode != None: + numchild = annotationNode.getNumChildren() + for child_no in range(0,numchild): + childNode = annotationNode.getChild( child_no ) + if ( childNode.getPrefix() == "moose" and childNode.getName() == "ModelAnnotation" ): + num_gchildren = childNode.getNumChildren() + for gchild_no in range(0,num_gchildren): + grandChildNode = childNode.getChild(gchild_no) + nodeName = grandChildNode.getName() + if (grandChildNode.getNumChildren() == 1 ): + baseinfo = moose.Annotator(baseId.path+'/info') + baseinfo.modeltype = "xml" + if nodeName == "runTime": + runtime = float((grandChildNode.getChild(0).toXMLString())) + baseinfo.runtime = runtime + if nodeName == "solver": + solver = (grandChildNode.getChild(0).toXMLString()) + baseinfo.solver = solver + if(nodeName == "plots"): + plotValue = (grandChildNode.getChild(0).toXMLString()) + p = moose.element(baseId) + datapath = moose.element(baseId).path +"/data" + if not moose.exists(datapath): + datapath = moose.Neutral(baseId.path+"/data") + graph = moose.Neutral(datapath.path+"/graph_0") + plotlist= plotValue.split(";") + tablelistname = [] + for plots in plotlist: + plots = plots.replace(" ", "") + plotorg = plots + if moose.exists(basepath.path+plotorg): + plotSId = moose.element(basepath.path+plotorg) + #plotorg = convertSpecialChar(plotorg) + plot2 = plots.replace('/','_') + plot3 = plot2.replace('[','_') + plotClean = plot3.replace(']','_') + plotName = plotClean + ".conc" + fullPath = graph.path+'/'+plotName.replace(" ","") + #If table exist with same name then its not created + if not fullPath in tablelistname: + tab = moose.Table2(fullPath) + tablelistname.append(fullPath) + moose.connect(tab,"requestOut",plotSId,"getConc") + +def getObjAnnotation(obj,modelAnnotationInfo): + name = obj.getId() + name = name.replace(" ","_space_") + #modelAnnotaInfo= {} + annotateMap = {} + if (obj.getAnnotation() != None): + annoNode = obj.getAnnotation() + for ch in range(0,annoNode.getNumChildren()): + childNode = annoNode.getChild(ch) + if (childNode.getPrefix() == "moose" and (childNode.getName() == "ModelAnnotation" or childNode.getName() == "EnzymaticReaction")): + sublist = [] + for gch in range(0,childNode.getNumChildren()): + grandChildNode = childNode.getChild(gch) + nodeName = grandChildNode.getName() + nodeValue = "" + if (grandChildNode.getNumChildren() == 1): + nodeValue = grandChildNode.getChild(0).toXMLString() + else: + print("Error: expected exactly ONE child of ", nodeName) + + if nodeName == "xCord": + annotateMap[nodeName] = nodeValue + if nodeName == "yCord": + annotateMap[nodeName] = nodeValue + if nodeName == "bgColor": + annotateMap[nodeName] = nodeValue + if nodeName == "textColor": + annotateMap[nodeName] = nodeValue + return annotateMap +def getEnzAnnotation(obj,modelAnnotaInfo,rev,globparameterIdValue,specInfoMap): name = obj.getId() name = name.replace(" ","_space_") #modelAnnotaInfo= {} @@ -205,7 +304,7 @@ def getModelAnnotation(obj,modelAnnotaInfo): if (grandChildNode.getNumChildren() == 1): nodeValue = grandChildNode.getChild(0).toXMLString() else: - print "Error: expected exactly ONE child of ", nodeName + print("Error: expected exactly ONE child of ", nodeName) if nodeName == "enzyme": populatedict(annotateMap,"enzyme",nodeValue) @@ -227,45 +326,64 @@ def getModelAnnotation(obj,modelAnnotaInfo): elif ( nodeName == "yCord" ): populatedict(annotateMap,"yCord" ,nodeValue) groupName = "" - if annotateMap.has_key('grpName'): + if 'grpName' in annotateMap: groupName = list(annotateMap["grpName"])[0] + klaw=obj.getKineticLaw(); + mmsg = "" + errorFlag, mmsg,k1,k2 = getKLaw(obj,klaw,rev,globparameterIdValue,specInfoMap) + + if 'substrates' in annotateMap: + sublist = list(annotateMap["substrates"]) + else: + sublist = {} + if 'product' in annotateMap: + prdlist = list(annotateMap["product"]) + else: + prdlist = {} + if list(annotateMap["stage"])[0] == '1': - if modelAnnotaInfo.has_key(groupName): + if groupName in modelAnnotaInfo: modelAnnotaInfo[groupName].update ( {"enzyme" : list(annotateMap["enzyme"])[0], "stage" : list(annotateMap["stage"])[0], - "substrate" : list(annotateMap["substrates"]) + "substrate" : sublist, + "k1": k1, + "k2" : k2 } ) else: modelAnnotaInfo[groupName]= { "enzyme" : list(annotateMap["enzyme"])[0], "stage" : list(annotateMap["stage"])[0], - "substrate" : list(annotateMap["substrates"]) + "substrate" : sublist, + "k1" : k1, + "k2" : k2 #"group" : list(annotateMap["Group"])[0], #"xCord" : list(annotateMap["xCord"])[0], #"yCord" : list(annotateMap["yCord"]) [0] } elif list(annotateMap["stage"])[0] == '2': - if modelAnnotaInfo.has_key(groupName): + if groupName in modelAnnotaInfo: stage = int(modelAnnotaInfo[groupName]["stage"])+int(list(annotateMap["stage"])[0]) modelAnnotaInfo[groupName].update ( {"complex" : list(annotateMap["complex"])[0], - "product" : list(annotateMap["product"]), - "stage" : [stage] + "product" : prdlist, + "stage" : [stage], + "k3" : k1 } ) else: modelAnnotaInfo[groupName]= { "complex" : list(annotateMap["complex"])[0], - "product" : list(annotateMap["product"]), - "stage" : [stage] + "product" : prdlist, + "stage" : [stage], + "k3" : k1 } return(groupName) -def createReaction(model,specInfoMap,modelAnnotaInfo): +def createReaction(model,specInfoMap,modelAnnotaInfo,globparameterIdValue): # print " reaction " # Things done for reaction # --Reaction is not created, if substrate and product is missing @@ -277,7 +395,10 @@ def createReaction(model,specInfoMap,modelAnnotaInfo): errorFlag = True reactSBMLIdMooseId = {} - + msg = "" + rName = "" + reaction_ = "" + for ritem in range(0,model.getNumReactions()): reactionCreated = False groupName = "" @@ -292,12 +413,35 @@ def createReaction(model,specInfoMap,modelAnnotaInfo): rev = reac.getReversible() fast = reac.getFast() if ( fast ): - print " warning: for now fast attribute is not handled \"", rName,"\"" + print(" warning: for now fast attribute is not handled \"", rName,"\"") if (reac.getAnnotation() != None): - groupName = getModelAnnotation(reac,modelAnnotaInfo) + groupName = getEnzAnnotation(reac,modelAnnotaInfo,rev,globparameterIdValue,specInfoMap) if (groupName != "" and list(modelAnnotaInfo[groupName]["stage"])[0] == 3): - setupEnzymaticReaction(reac,groupName,rName,specInfoMap,modelAnnotaInfo) + reaction_,reactionCreated = setupEnzymaticReaction(reac,groupName,rName,specInfoMap,modelAnnotaInfo) + reaction_.k3 = modelAnnotaInfo[groupName]['k3'] + reaction_.k2 = modelAnnotaInfo[groupName]['k2'] + reaction_.concK1 = modelAnnotaInfo[groupName]['k1'] + if reactionCreated: + if (reac.isSetNotes): + pullnotes(reac,reaction_) + reacAnnoInfo = {} + reacAnnoInfo = getObjAnnotation(reac,modelAnnotaInfo) + if reacAnnoInfo: + if not moose.exists(reaction_.path+'/info'): + reacInfo = moose.Annotator(reaction_.path+'/info') + else: + reacInfo = moose.element(reaction_.path+'/info') + for k,v in list(reacAnnoInfo.items()): + if k == 'xCord': + reacInfo.x = float(v) + elif k == 'yCord': + reacInfo.y = float(v) + elif k == 'bgColor': + reacInfo.color = v + else: + reacInfo.textColor = v + elif(groupName == ""): numRcts = reac.getNumReactants() @@ -305,18 +449,22 @@ def createReaction(model,specInfoMap,modelAnnotaInfo): nummodifiers = reac.getNumModifiers() if not (numRcts and numPdts): - print rName," : Substrate and Product is missing, we will be skiping creating this reaction in MOOSE" - + print(rName," : Substrate and Product is missing, we will be skiping creating this reaction in MOOSE") + reactionCreated = False elif (reac.getNumModifiers() > 0): - reactionCreated = setupMMEnzymeReaction(reac,rName,specInfoMap,reactSBMLIdMooseId) - print " reactionCreated after enz ",reactionCreated - + reactionCreated,reaction_ = setupMMEnzymeReaction(reac,rName,specInfoMap,reactSBMLIdMooseId,modelAnnotaInfo,model,globparameterIdValue) + # elif (reac.getNumModifiers() > 0): + # reactionCreated = setupMMEnzymeReaction(reac,rName,specInfoMap,reactSBMLIdMooseId,modelAnnotaInfo,model,globparameterIdValue) + # reaction_ = reactSBMLIdMooseId['classical']['MooseId'] + # reactionType = "MMEnz" elif (numRcts): # In moose, reactions compartment are decided from first Substrate compartment info # substrate is missing then check for product if (reac.getNumReactants()): - react = reac.getReactant(0) + react = reac.getReactant(reac.getNumReactants()-1) + #react = reac.getReactant(0) sp = react.getSpecies() + sp = str(idBeginWith(sp)) speCompt = specInfoMap[sp]["comptId"].path reaction_ = moose.Reac(speCompt+'/'+rName) reactionCreated = True @@ -327,24 +475,115 @@ def createReaction(model,specInfoMap,modelAnnotaInfo): if (reac.getNumProducts()): react = reac.getProducts(0) sp = react.getSpecies() + sp = str(idBeginWith(sp)) speCompt = specInfoMap[sp]["comptId"].path reaction_ = moose.Reac(speCompt+'/'+rName) reactionCreated = True - reactSBMLIdMooseId[rName] = {"MooseId":reaction_} - + reactSBMLIdMooseId[rId] = {"MooseId" : reaction_, "className": "reaction"} if reactionCreated: if (reac.isSetNotes): pullnotes(reac,reaction_) + reacAnnoInfo = {} + reacAnnoInfo = getObjAnnotation(reac,modelAnnotaInfo) + if reacAnnoInfo: + if not moose.exists(reaction_.path+'/info'): + reacInfo = moose.Annotator(reaction_.path+'/info') + else: + reacInfo = moose.element(reaction_.path+'/info') + for k,v in list(reacAnnoInfo.items()): + if k == 'xCord': + reacInfo.x = float(v) + elif k == 'yCord': + reacInfo.y = float(v) + elif k == 'bgColor': + reacInfo.color = v + else: + reacInfo.textColor = v + addSubPrd(reac,rName,"sub",reactSBMLIdMooseId,specInfoMap) addSubPrd(reac,rName,"prd",reactSBMLIdMooseId,specInfoMap) - # print "react ",reactSBMLIdMooseId - return errorFlag + if reac.isSetKineticLaw(): + klaw=reac.getKineticLaw(); + mmsg = "" + errorFlag, mmsg,kfvalue,kbvalue = getKLaw(model,klaw,rev,globparameterIdValue,specInfoMap) + if not errorFlag: + msg = "Error while importing reaction \""+rName+"\"\n Error in kinetics law " + if mmsg != "": + msg = msg+mmsg + return(errorFlag,msg) + else: + #print " reactSBMLIdMooseId ",reactSBMLIdMooseId[rName]["nSub"], " prd ",reactSBMLIdMooseId[rName]["nPrd"] + if reaction_.className == "Reac": + subn = reactSBMLIdMooseId[rName]["nSub"] + prdn = reactSBMLIdMooseId[rName]["nPrd"] + reaction_.Kf = kfvalue #* pow(1e-3,subn-1) + reaction_.Kb = kbvalue #* pow(1e-3,prdn-1) + elif reaction_.className == "MMenz": + reaction_.kcat = kfvalue + reaction_.Km = kbvalue + return (errorFlag,msg) + +def getKLaw( model, klaw, rev,globparameterIdValue,specMapList): + parmValueMap = {} + amt_Conc = "amount"; + value = 0.0 + np = klaw. getNumParameters(); + for pi in range(0, np): + p = klaw.getParameter(pi) + if ( p.isSetId() ): + ids = p.getId() + if ( p.isSetValue() ): + value = p.getValue() + parmValueMap[ids] = value + ruleMemlist = [] + flag = getMembers(klaw.getMath(),ruleMemlist) + index = 0 + kfparm = "" + kbparm = "" + kfvalue = 0 + kbvalue = 0 + kfp = "" + kbp = "" + mssgstr = "" + for i in ruleMemlist: + if i in parmValueMap or i in globparameterIdValue: + if index == 0: + kfparm = i + if i in parmValueMap: + kfvalue = parmValueMap[i] + kfp = klaw.getParameter(kfparm) + else: + kfvalue = globparameterIdValue[i] + kfp = model.getParameter(kfparm) + elif index == 1: + kbparm = i + if i in parmValueMap: + kbvalue = parmValueMap[i] + kbp = klaw.getParameter(kbparm) + else: + kbvalue = globparameterIdValue[i] + kbp = model.getParameter(kbparm) + index += 1 + + elif not (i in specMapList or i in comptSbmlidMooseIdMap): + mssgstr = "\""+i+ "\" is not defined " + return ( False, mssgstr) + if kfp != "": + #print " unit set for rate law kfp ",kfparm, " ",kfp.isSetUnits() + if kfp.isSetUnits(): + kfud = kfp.getDerivedUnitDefinition(); + #print " kfud ",kfud + if kbp != "": + pass + #print " unit set for rate law kbp ",kbparm, " ",kbp.isSetUnits() + + return (True,mssgstr,kfvalue,kbvalue) def getMembers(node,ruleMemlist): if node.getType() == libsbml.AST_PLUS: if node.getNumChildren() == 0: print ("0") - return + return False getMembers(node.getChild(0),ruleMemlist) for i in range(1,node.getNumChildren()): # addition @@ -355,61 +594,117 @@ def getMembers(node,ruleMemlist): elif node.getType() == libsbml.AST_NAME: #This will be the ci term" ruleMemlist.append(node.getName()) - + elif node.getType() == libsbml.AST_MINUS: + if node.getNumChildren() == 0: + print("0") + return False + else: + lchild = node.getLeftChild(); + getMembers(lchild,ruleMemlist) + rchild = node.getRightChild(); + getMembers(rchild,ruleMemlist) + elif node.getType() == libsbml.AST_DIVIDE: + + if node.getNumChildren() == 0: + print("0") + return False + else: + lchild = node.getLeftChild(); + getMembers(lchild,ruleMemlist) + rchild = node.getRightChild(); + getMembers(rchild,ruleMemlist) + elif node.getType() == libsbml.AST_TIMES: if node.getNumChildren() == 0: print ("0") - return + return False getMembers(node.getChild(0),ruleMemlist) for i in range(1,node.getNumChildren()): # Multiplication getMembers(node.getChild(i),ruleMemlist) + + elif node.getType() == libsbml.AST_FUNCTION_POWER: + pass else: - print " this case need to be handled" + + print(" this case need to be handled",node.getType()) + # if len(ruleMemlist) > 2: + # print "Sorry! for now MOOSE cannot handle more than 2 parameters" + # return True def createRules(model,specInfoMap,globparameterIdValue): for r in range(0,model.getNumRules()): - rule = model.getRule(r) - if (rule.isAssignment()): - rule_variable = rule.getVariable(); - poolList = specInfoMap[rule_variable]["Mpath"].path - funcId = moose.Function(poolList+'/func') + rule = model.getRule(r) + comptvolume = [] + if (rule.isAssignment()): + rule_variable = rule.getVariable(); + rule_variable = parentSp = str(idBeginWith(rule_variable)) + poolList = specInfoMap[rule_variable]["Mpath"].path + poolsCompt = findCompartment(moose.element(poolList)) + if not isinstance(moose.element(poolsCompt),moose.ChemCompt): + return -2 + else: + if poolsCompt.name not in comptvolume: + comptvolume.append(poolsCompt.name) + + funcId = moose.Function(poolList+'/func') + + objclassname = moose.element(poolList).className + if objclassname == "BufPool" or objclassname == "ZombieBufPool": moose.connect( funcId, 'valueOut', poolList ,'setN' ) - ruleMath = rule.getMath() - ruleMemlist = [] - speFunXterm = {} - getMembers(ruleMath,ruleMemlist) - for i in ruleMemlist: - if (specInfoMap.has_key(i)): - specMapList = specInfoMap[i]["Mpath"] - numVars = funcId.numVars - x = funcId.path+'/x['+str(numVars)+']' - speFunXterm[i] = 'x'+str(numVars) - moose.connect(specMapList , 'nOut', x, 'input' ) - funcId.numVars = numVars +1 - elif not(globparameterIdValue.has_key(i)): - print "check the variable type ",i - - exp = rule.getFormula() - for mem in ruleMemlist: - if ( specInfoMap.has_key(mem)): - exp1 = exp.replace(mem,str(speFunXterm[mem])) - exp = exp1 - elif( globparameterIdValue.has_key(mem)): - exp1 = exp.replace(mem,str(globparameterIdValue[mem])) - exp = exp1 + elif objclassname == "Pool" or objclassname == "ZombiePool": + #moose.connect( funcId, 'valueOut', poolList ,'increament' ) + moose.connect(funcId, 'valueOut', poolList ,'setN' ) + elif objclassname == "Reac" or objclassname == "ZombieReac": + moose.connect( funcId, 'valueOut', poolList ,'setNumkf' ) + + ruleMath = rule.getMath() + ruleMemlist = [] + speFunXterm = {} + getMembers(ruleMath,ruleMemlist) + + for i in ruleMemlist: + + if (i in specInfoMap): + i = str(idBeginWith(i)) + specMapList = specInfoMap[i]["Mpath"] + poolsCompt = findCompartment(moose.element(specMapList)) + if not isinstance(moose.element(poolsCompt),moose.ChemCompt): + return -2 else: - print "Math expression need to be checked" - funcId.expr = exp.strip(" \t\n\r") - return True - - elif( rule.isRate() ): - print "Warning : For now this \"",rule.getVariable(), "\" rate Rule is not handled in moose " - return False - - elif ( rule.isAlgebraic() ): - print "Warning: For now this " ,rule.getVariable()," Algebraic Rule is not handled in moose" - return False + if poolsCompt.name not in comptvolume: + comptvolume.append(poolsCompt.name) + numVars = funcId.numVars + x = funcId.path+'/x['+str(numVars)+']' + speFunXterm[i] = 'x'+str(numVars) + moose.connect(specMapList , 'nOut', x, 'input' ) + funcId.numVars = numVars +1 + + elif not(i in globparameterIdValue): + print("check the variable type ",i) + exp = rule.getFormula() + for mem in ruleMemlist: + if ( mem in specInfoMap): + exp1 = exp.replace(mem,str(speFunXterm[mem])) + exp = exp1 + elif( mem in globparameterIdValue): + exp1 = exp.replace(mem,str(globparameterIdValue[mem])) + exp = exp1 + else: + print("Math expression need to be checked") + exp = exp.replace(" ","") + funcId.expr = exp.strip(" \t\n\r") + #return True + + elif( rule.isRate() ): + print("Warning : For now this \"",rule.getVariable(), "\" rate Rule is not handled in moose ") + #return False + + elif ( rule.isAlgebraic() ): + print("Warning: For now this " ,rule.getVariable()," Algebraic Rule is not handled in moose") + #return False + if len(comptvolume) >1: + warning = "\nFunction ",moose.element(poolList).name," has input from different compartment which is depricated in moose and running this model cause moose to crash" return True def pullnotes(sbmlId,mooseId): @@ -424,11 +719,12 @@ def pullnotes(sbmlId,mooseId): objInfo = moose.element(mooseId.path+'/info') objInfo.notes = notes -def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap): +def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap,modelAnnotaInfo): # ToDo: # - Need to add group name if exist in pool # - Notes # print "species " + if not (model.getNumSpecies()): return False else: @@ -436,7 +732,6 @@ def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap): spe = model.getSpecies(sindex) sName = None sId = spe.getId() - if spe.isSetName(): sName = spe.getName() sName = sName.replace(" ","_space_") @@ -453,7 +748,7 @@ def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap): hasonlySubUnit = spe.getHasOnlySubstanceUnits(); # "false": is {unit of amount}/{unit of size} (i.e., concentration or density). # "true": then the value is interpreted as having a unit of amount only. - + if (boundaryCondition): poolId = moose.BufPool(comptEl+'/'+sName) else: @@ -461,7 +756,23 @@ def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap): if (spe.isSetNotes): pullnotes(spe,poolId) - + specAnnoInfo = {} + specAnnoInfo = getObjAnnotation(spe,modelAnnotaInfo) + if specAnnoInfo: + if not moose.exists(poolId.path+'/info'): + poolInfo = moose.Annotator(poolId.path+'/info') + else: + poolInfo = moose.element(poolId.path+'/info') + for k,v in list(specAnnoInfo.items()): + if k == 'xCord': + poolInfo.x = float(v) + elif k == 'yCord': + poolInfo.y = float(v) + elif k == 'bgColor': + poolInfo.color = v + else: + poolInfo.textColor = v + specInfoMap[sId] = {"Mpath" : poolId, "const" : constant, "bcondition" : boundaryCondition, "hassubunit" : hasonlySubUnit, "comptId" : comptSbmlidMooseIdMap[comptId]["MooseId"]} initvalue = 0.0 unitfactor,unitset,unittype = transformUnit(spe,hasonlySubUnit) @@ -478,7 +789,7 @@ def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap): initvalue = initvalue * unitfactor elif spe.isSetInitialConcentration(): initvalue = spe.getInitialConcentration() - print " Since hasonlySubUnit is true and concentration is set units are not checked" + print(" Since hasonlySubUnit is true and concentration is set units are not checked") poolId.nInit = initvalue elif hasonlySubUnit == False: @@ -508,8 +819,10 @@ def createSpecies(basePath,model,comptSbmlidMooseIdMap,specInfoMap): found = True break if not (found): - print "Invalid SBML: Either initialConcentration or initialAmount must be set or it should be found in assignmentRule but non happening for ",sName - return False + print("Invalid SBML: Either initialConcentration or initialAmount must be set or it should be found in assignmentRule but non happening for ",sName) + return False + + return True def transformUnit(unitForObject,hasonlySubUnit=False): @@ -533,7 +846,7 @@ def transformUnit(unitForObject,hasonlySubUnit=False): lvalue *= pow( multiplier * pow(10.0,scale), exponent ) + offset; unitset = True unittype = "Litre" - + return (lvalue,unitset,unittype) elif( unitType.isMole()): exponent = unitType.getExponent() multiplier = unitType.getMultiplier() @@ -544,12 +857,15 @@ def transformUnit(unitForObject,hasonlySubUnit=False): lvalue *= pow(multiplier * pow(10.0,scale),exponent) + offset #If SBML units are in mole then convert to number by multiplying with avogadro's number lvalue = lvalue * pow(6.0221409e23,1) - elif hasonlySubUnit == False: - #Pool units are in mM, so to scale adding +3 to convert to m - lvalue *= pow( multiplier * pow(10.0,scale+3), exponent ) + offset; + #Pool units in moose is mM + if scale > 0: + lvalue *= pow( multiplier * pow(10.0,scale-3), exponent ) + offset; + elif scale <= 0: + lvalue *= pow( multiplier * pow(10.0,scale+3), exponent ) + offset; unitset = True unittype = "Mole" + return (lvalue,unitset,unittype) elif( unitType.isItem()): exponent = unitType.getExponent() @@ -567,9 +883,9 @@ def transformUnit(unitForObject,hasonlySubUnit=False): lvalue = lvalue/pow(6.0221409e23,1) unitset = True unittype = "Item" + return (lvalue,unitset,unittype) else: lvalue = 1.0 - print " end of the func lvaue ",lvalue return (lvalue,unitset,unittype) def createCompartment(basePath,model,comptSbmlidMooseIdMap): #ToDoList : Check what should be done for the spaitialdimension is 2 or 1, area or length @@ -597,14 +913,14 @@ def createCompartment(basePath,model,comptSbmlidMooseIdMap): if ( compt.isSetSize() ): msize = compt.getSize() if msize == 1: - print "Compartment size is 1" + print("Compartment size is 1") dimension = compt.getSpatialDimensions(); if dimension == 3: unitfactor,unitset, unittype = transformUnit(compt) else: - print " Currently we don't deal with spatial Dimension less than 3 and unit's area or length" + print(" Currently we don't deal with spatial Dimension less than 3 and unit's area or length") return False if not( name ): @@ -614,6 +930,42 @@ def createCompartment(basePath,model,comptSbmlidMooseIdMap): mooseCmptId.volume = (msize*unitfactor) comptSbmlidMooseIdMap[sbmlCmptId]={"MooseId": mooseCmptId, "spatialDim":dimension, "size" : msize} return True +def setupMMEnzymeReaction(reac,rName,specInfoMap,reactSBMLIdMooseId,modelAnnotaInfo,model,globparameterIdValue): + msg = "" + errorFlag = "" + numRcts = reac.getNumReactants() + numPdts = reac.getNumProducts() + nummodifiers = reac.getNumModifiers() + if (nummodifiers): + parent = reac.getModifier(0) + parentSp = parent.getSpecies() + parentSp = str(idBeginWith(parentSp)) + enzParent = specInfoMap[parentSp]["Mpath"] + MMEnz = moose.MMenz(enzParent.path+'/'+rName) + moose.connect(enzParent,"nOut",MMEnz,"enzDest"); + reactionCreated = True + reactSBMLIdMooseId[rName] = { "MooseId":MMEnz, "className":"MMEnz"} + if reactionCreated: + if (reac.isSetNotes): + pullnotes(reac,MMEnz) + reacAnnoInfo = {} + reacAnnoInfo = getObjAnnotation(reac,modelAnnotaInfo) + if reacAnnoInfo: + if not moose.exists(MMEnz.path+'/info'): + reacInfo = moose.Annotator(MMEnz.path+'/info') + else: + reacInfo = moose.element(MMEnz.path+'/info') + for k,v in list(reacAnnoInfo.items()): + if k == 'xCord': + reacInfo.x = float(v) + elif k == 'yCord': + reacInfo.y = float(v) + elif k == 'bgColor': + reacInfo.color = v + else: + reacInfo.textColor = v + return(reactionCreated,MMEnz) + def mapParameter(model,globparameterIdValue): for pm in range(0,model.getNumParameters()): prm = model.getParameter( pm ); @@ -624,6 +976,29 @@ def mapParameter(model,globparameterIdValue): value = prm.getValue() globparameterIdValue[parid] = value +def idBeginWith( name ): + changedName = name; + if name[0].isdigit() : + changedName = "_"+name + return changedName; + +def convertSpecialChar(str1): + d = {"&":"_and","<":"_lessthan_",">":"_greaterthan_","BEL":"°","-":"_minus_","'":"_prime_", + "+": "_plus_","*":"_star_","/":"_slash_","(":"_bo_",")":"_bc_", + "[":"_sbo_","]":"_sbc_",".":"_dot_"," ":"_" + } + for i,j in list(d.items()): + str1 = str1.replace(i,j) + return str1 + +def mooseIsInstance(element, classNames): + return moose.element(element).__class__.__name__ in classNames + +def findCompartment(element): + while not mooseIsInstance(element,["CubeMesh","CyclMesh"]): + element = element.parent + return element + if __name__ == "__main__": filepath = sys.argv[1] @@ -638,6 +1013,6 @@ if __name__ == "__main__": read = mooseReadSBML(filepath,loadpath) if read: - print " Read to path",loadpath + print(" Read to path",loadpath) else: - print " could not read SBML to MOOSE" + print(" could not read SBML to MOOSE") diff --git a/python/moose/SBML/writeSBML.py b/python/moose/SBML/writeSBML.py index b810c7bb17dcceafdf9b5928208565bd4a5e353b..988b8c470a94f1b7d789dd5d24e0c54e869d1dac 100644 --- a/python/moose/SBML/writeSBML.py +++ b/python/moose/SBML/writeSBML.py @@ -12,115 +12,160 @@ ** copyright (C) 2003-2016 Upinder S. Bhalla. and NCBS Created : Friday May 27 12:19:00 2016(+0530) Version -Last-Updated: +Last-Updated: Thursday Oct 27 11:20:00 2016(+0530) By: **********************************************************************/ /**************************** ''' from moose import * -from libsbml import * import re from collections import Counter -#from moose import wildcardFind, element, loadModel, ChemCompt, exists, Annotator, Pool, ZombiePool,PoolBase,CplxEnzBase,Function,ZombieFunction +import networkx as nx +import matplotlib.pyplot as plt +import sys #ToDo: # Table should be written # Group's should be added -# x and y cordinates shd be added if exist +# boundary condition for buffer pool having assignment statment constant shd be false -def mooseWriteSBML(modelpath,filename): - sbmlDoc = SBMLDocument(3, 1) - filepath,filenameExt = os.path.split(filename) - if filenameExt.find('.') != -1: - filename = filenameExt[:filenameExt.find('.')] - else: - filename = filenameExt - - #validatemodel - sbmlOk = False - global spe_constTrue - spe_constTrue = [] - global nameList_ - nameList_ = [] - - xmlns = XMLNamespaces() - xmlns.add("http://www.sbml.org/sbml/level3/version1") - xmlns.add("http://www.moose.ncbs.res.in","moose") - xmlns.add("http://www.w3.org/1999/xhtml","xhtml") - sbmlDoc.setNamespaces(xmlns) - cremodel_ = sbmlDoc.createModel() - cremodel_.setId(filename) - cremodel_.setTimeUnits("second") - cremodel_.setExtentUnits("substance") - cremodel_.setSubstanceUnits("substance") - - writeUnits(cremodel_) - modelAnno = writeSimulationAnnotation(modelpath) - if modelAnno: - cremodel_.setAnnotation(modelAnno) - compartexist = writeCompt(modelpath,cremodel_) - species = writeSpecies(modelpath,cremodel_,sbmlDoc) - if species: - writeFunc(modelpath,cremodel_) - writeReac(modelpath,cremodel_) - writeEnz(modelpath,cremodel_) - - consistencyMessages = "" - SBMLok = validateModel( sbmlDoc ) - if ( SBMLok ): - #filepath = '/home/harsha/Trash/python' - #SBMLString = writeSBMLToString(sbmlDoc) - writeTofile = filepath+"/"+filename+'.xml' - writeSBMLToFile( sbmlDoc, writeTofile) - return True,consistencyMessages - - if ( not SBMLok ): - cerr << "Errors encountered " << endl; - return -1,consistencyMessages - -def writeEnz(modelpath,cremodel_): +try: + from libsbml import * +except ImportError: + def mooseWriteSBML(modelpath,filename,sceneitems={}): + return (-2,"\n WriteSBML : python-libsbml module not installed",None) +else: + def mooseWriteSBML(modelpath,filename,sceneitems={}): + sbmlDoc = SBMLDocument(3, 1) + filepath,filenameExt = os.path.split(filename) + if filenameExt.find('.') != -1: + filename = filenameExt[:filenameExt.find('.')] + else: + filename = filenameExt + + #validatemodel + sbmlOk = False + global spe_constTrue,cmin,cmax + spe_constTrue = [] + global nameList_ + nameList_ = [] + + autoCoordinateslayout = False + xmlns = XMLNamespaces() + xmlns.add("http://www.sbml.org/sbml/level3/version1") + xmlns.add("http://www.moose.ncbs.res.in","moose") + xmlns.add("http://www.w3.org/1999/xhtml","xhtml") + sbmlDoc.setNamespaces(xmlns) + cremodel_ = sbmlDoc.createModel() + cremodel_.setId(filename) + cremodel_.setTimeUnits("second") + cremodel_.setExtentUnits("substance") + cremodel_.setSubstanceUnits("substance") + neutralNotes = "" + specieslist = wildcardFind(modelpath+'/##[ISA=PoolBase]') + neutralPath = getGroupinfo(specieslist[0]) + if moose.exists(neutralPath.path+'/info'): + neutralInfo = moose.element(neutralPath.path+'/info') + neutralNotes = neutralInfo.notes + if neutralNotes != "": + cleanNotes= convertNotesSpecialChar(neutralNotes) + notesString = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ neutralNotes + "\n\t </body>" + cremodel_.setNotes(notesString) + srcdesConnection = {} + cmin,cmax = 0,1 + + if not bool(sceneitems): + autoCoordinateslayout = True + srcdesConnection = setupItem(modelpath) + meshEntry = setupMeshObj(modelpath) + cmin,cmax,sceneitems = autoCoordinates(meshEntry,srcdesConnection) + + writeUnits(cremodel_) + modelAnno = writeSimulationAnnotation(modelpath) + if modelAnno: + cremodel_.setAnnotation(modelAnno) + compartexist = writeCompt(modelpath,cremodel_) + species = writeSpecies(modelpath,cremodel_,sbmlDoc,sceneitems,autoCoordinateslayout) + if species: + writeFunc(modelpath,cremodel_) + writeReac(modelpath,cremodel_,sceneitems,autoCoordinateslayout) + writeEnz(modelpath,cremodel_,sceneitems,autoCoordinateslayout) + + consistencyMessages = "" + SBMLok = validateModel( sbmlDoc ) + if ( SBMLok ): + writeTofile = filepath+"/"+filename+'.xml' + writeSBMLToFile( sbmlDoc, writeTofile) + return True,consistencyMessages,writeTofile + + if ( not SBMLok ): + cerr << "Errors encountered " << endl; + return -1,consistencyMessages + +def writeEnz(modelpath,cremodel_,sceneitems,autoCoordinateslayout): for enz in wildcardFind(modelpath+'/##[ISA=EnzBase]'): enzannoexist = False - enzGpname = " " + enzGpnCorCol = " " cleanEnzname = convertSpecialChar(enz.name) enzSubt = () - + compt = "" + notesE = "" if moose.exists(enz.path+'/info'): Anno = moose.Annotator(enz.path+'/info') notesE = Anno.notes element = moose.element(enz) ele = getGroupinfo(element) - if ele.className == "Neutral": - enzGpname = "<moose:Group> "+ ele.name + " </moose:Group>\n" + if ele.className == "Neutral" or sceneitems[element] or Anno.color or Anno.textColor: enzannoexist = True + if enzannoexist : + if ele.className == "Neutral": + enzGpnCorCol = "<moose:Group> "+ ele.name + " </moose:Group>\n" + if sceneitems[element]: + v = sceneitems[element] + if autoCoordinateslayout == False: + enzGpnCorCol = enzGpnCorCol+"<moose:xCord>"+str(v['x'])+"</moose:xCord>\n"+"<moose:yCord>"+str(v['y'])+"</moose:yCord>\n" + elif autoCoordinateslayout == True: + x = calPrime(v['x']) + y = calPrime(v['y']) + enzGpnCorCol = enzGpnCorCol+"<moose:xCord>"+str(x)+"</moose:xCord>\n"+"<moose:yCord>"+str(y)+"</moose:yCord>\n" + if Anno.color: + enzGpnCorCol = enzGpnCorCol+"<moose:bgColor>"+Anno.color+"</moose:bgColor>\n" + if Anno.textColor: + enzGpnCorCol = enzGpnCorCol+"<moose:textColor>"+Anno.textColor+"</moose:textColor>\n" + if (enz.className == "Enz" or enz.className == "ZombieEnz"): enzyme = cremodel_.createReaction() if notesE != "": cleanNotesE= convertNotesSpecialChar(notesE) notesStringE = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ cleanNotesE + "\n\t </body>" enzyme.setNotes(notesStringE) + comptVec = findCompartment(moose.element(enz)) + if not isinstance(moose.element(comptVec),moose.ChemCompt): + return -2 + else: + compt = comptVec.name+"_"+str(comptVec.getId().value)+"_"+str(comptVec.getDataIndex())+"_" + enzyme.setId(str(idBeginWith(cleanEnzname+"_"+str(enz.getId().value)+"_"+str(enz.getDataIndex())+"_"+"Complex_formation_"))) enzyme.setName(cleanEnzname) enzyme.setFast ( False ) enzyme.setReversible( True) - k1 = enz.k1 + k1 = enz.concK1 k2 = enz.k2 k3 = enz.k3 - + enzAnno = " " enzAnno ="<moose:EnzymaticReaction>\n" - if enzannoexist: - enzAnno=enzAnno + enzGpname + enzOut = enz.neighbors["enzOut"] if not enzOut: - print " Enzyme parent missing for ",enz.name + print(" Enzyme parent missing for ",enz.name) else: listofname(enzOut,True) enzSubt = enzOut for i in range(0,len(nameList_)): - enzAnno=enzAnno+"<moose:enzyme>"+nameList_[i]+"</moose:enzyme>\n" + enzAnno=enzAnno+"<moose:enzyme>"+(str(idBeginWith(convertSpecialChar(nameList_[i]))))+"</moose:enzyme>\n" #noofSub,sRateLaw = getSubprd(cremodel_,True,"sub",enzSub) #for i in range(0,len(nameList_)): # enzAnno=enzAnno+"<moose:enzyme>"+nameList_[i]+"</moose:enzyme>\n" @@ -129,7 +174,7 @@ def writeEnz(modelpath,cremodel_): enzSub = enz.neighbors["sub"] if not enzSub: - print "Enzyme \"",enz.name,"\" substrate missing" + print("Enzyme \"",enz.name,"\" substrate missing") else: listofname(enzSub,True) enzSubt += enzSub @@ -140,26 +185,27 @@ def writeEnz(modelpath,cremodel_): noofSub,sRateLaw = getSubprd(cremodel_,True,"sub",enzSubt) #rec_order = rec_order + noofSub rec_order = noofSub - rate_law = rate_law +"*"+sRateLaw - - + rate_law = compt+" * "+rate_law +"*"+sRateLaw enzPrd = enz.neighbors["cplxDest"] if not enzPrd: - print "Enzyme \"",enz.name,"\"product missing" + print("Enzyme \"",enz.name,"\"product missing") else: noofPrd,sRateLaw = getSubprd(cremodel_,True,"prd",enzPrd) for i in range(0,len(nameList_)): enzAnno= enzAnno+"<moose:product>"+nameList_[i]+"</moose:product>\n" - rate_law = rate_law+ " - "+"k2"+'*'+sRateLaw + rate_law = rate_law+ " - "+compt+"* k2"+'*'+sRateLaw prd_order = noofPrd enzAnno = enzAnno + "<moose:groupName>" + cleanEnzname + "_" + str(enz.getId().value) + "_" + str(enz.getDataIndex()) + "_" + "</moose:groupName>\n" enzAnno = enzAnno+"<moose:stage>1</moose:stage>\n" + if enzannoexist: + enzAnno=enzAnno + enzGpnCorCol enzAnno = enzAnno+ "</moose:EnzymaticReaction>" enzyme.setAnnotation(enzAnno) kl = enzyme.createKineticLaw() kl.setFormula( rate_law ) + kl.setNotes("<body xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t" + rate_law + "\n \t </body>") punit = parmUnit( prd_order-1, cremodel_ ) printParameters( kl,"k2",k2,punit ) @@ -174,7 +220,7 @@ def writeEnz(modelpath,cremodel_): enzSub = enz.neighbors["cplxDest"] if not enzSub: - print " complex missing from ",enz.name + print(" complex missing from ",enz.name) else: noofSub,sRateLaw = getSubprd(cremodel_,True,"sub",enzSub) for i in range(0,len(nameList_)): @@ -182,7 +228,7 @@ def writeEnz(modelpath,cremodel_): enzEnz = enz.neighbors["enzOut"] if not enzEnz: - print "Enzyme parent missing for ",enz.name + print("Enzyme parent missing for ",enz.name) else: noofEnz,sRateLaw1 = getSubprd(cremodel_,True,"prd",enzEnz) for i in range(0,len(nameList_)): @@ -191,51 +237,63 @@ def writeEnz(modelpath,cremodel_): if enzPrd: noofprd,sRateLaw2 = getSubprd(cremodel_,True,"prd",enzPrd) else: - print "Enzyme \"",enz.name, "\" product missing" + print("Enzyme \"",enz.name, "\" product missing") for i in range(0,len(nameList_)): enzAnno2 = enzAnno2+"<moose:product>"+nameList_[i]+"</moose:product>\n" enzAnno2 += "<moose:groupName>"+ cleanEnzname + "_" + str(enz.getId().value) + "_" + str(enz.getDataIndex())+"_" +"</moose:groupName>\n"; enzAnno2 += "<moose:stage>2</moose:stage> \n"; + if enzannoexist: + enzAnno2 = enzAnno2 + enzGpnCorCol enzAnno2 += "</moose:EnzymaticReaction>"; enzyme.setAnnotation( enzAnno2 ); - enzrate_law = "k3" + '*'+sRateLaw; + enzrate_law = compt +" * k3" + '*'+sRateLaw; kl = enzyme.createKineticLaw(); kl.setFormula( enzrate_law ); + kl.setNotes("<body xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t" + enzrate_law + "\n \t </body>") unit = parmUnit(noofPrd-1 ,cremodel_) printParameters( kl,"k3",k3,unit ); elif(enz.className == "MMenz" or enz.className == "ZombieMMenz"): - enzyme = cremodel_.createReaction() - - if notesE != "": - cleanNotesE= convertNotesSpecialChar(notesE) - notesStringE = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ cleanNotesE + "\n\t </body>" - enzyme.setNotes(notesStringE) - enzyme.setId(str(idBeginWith(cleanEnzname+"_"+str(enz.getId().value)+"_"+str(enz.getDataIndex())+"_"))) - enzyme.setName(cleanEnzname) - enzyme.setFast ( False ) - enzyme.setReversible( True) - if enzannoexist: - enzAnno = "<moose:EnzymaticReaction>\n" + enzGpname + "</moose:EnzymaticReaction>"; - enzyme.setAnnotation(enzAnno) - Km = enz.numKm - kcat = enz.kcat enzSub = enz.neighbors["sub"] - noofSub,sRateLawS = getSubprd(cremodel_,False,"sub",enzSub) - #sRate_law << rate_law.str(); - #Modifier - enzMod = enz.neighbors["enzDest"] - noofMod,sRateLawM = getSubprd(cremodel_,False,"enz",enzMod) - enzPrd = enz.neighbors["prd"] - noofPrd,sRateLawP = getSubprd(cremodel_,False,"prd",enzPrd) - kl = enzyme.createKineticLaw() - fRate_law ="kcat *" + sRateLawS + "*" + sRateLawM + "/" + "(" + "Km" + "+" +sRateLawS +")" - kl.setFormula(fRate_law) - kl.setNotes("<body xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t" + fRate_law + "\n \t </body>") - printParameters( kl,"Km",Km,"substance" ) - kcatUnit = parmUnit( 0,cremodel_ ) - printParameters( kl,"kcat",kcat,kcatUnit ) + enzPrd = enz.neighbors["prd"] + if (len(enzSub) != 0 and len(enzPrd) != 0 ): + enzCompt= findCompartment(enz) + if not isinstance(moose.element(enzCompt),moose.ChemCompt): + return -2 + else: + compt = enzCompt.name+"_"+str(enzCompt.getId().value)+"_"+str(enzCompt.getDataIndex())+"_" + enzyme = cremodel_.createReaction() + enzAnno = " " + if notesE != "": + cleanNotesE= convertNotesSpecialChar(notesE) + notesStringE = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ cleanNotesE + "\n\t </body>" + enzyme.setNotes(notesStringE) + enzyme.setId(str(idBeginWith(cleanEnzname+"_"+str(enz.getId().value)+"_"+str(enz.getDataIndex())+"_"))) + enzyme.setName(cleanEnzname) + enzyme.setFast ( False ) + enzyme.setReversible( True) + if enzannoexist: + enzAnno = enzAnno + enzGpnCorCol + enzAnno = "<moose:EnzymaticReaction>\n" + enzGpnCorCol + "</moose:EnzymaticReaction>"; + enzyme.setAnnotation(enzAnno) + Km = enz.Km + kcat = enz.kcat + enzSub = enz.neighbors["sub"] + noofSub,sRateLawS = getSubprd(cremodel_,False,"sub",enzSub) + #sRate_law << rate_law.str(); + #Modifier + enzMod = enz.neighbors["enzDest"] + noofMod,sRateLawM = getSubprd(cremodel_,False,"enz",enzMod) + enzPrd = enz.neighbors["prd"] + noofPrd,sRateLawP = getSubprd(cremodel_,False,"prd",enzPrd) + kl = enzyme.createKineticLaw() + fRate_law = "kcat *" + sRateLawS + "*" + sRateLawM + "/(" + compt +" * ("+ "Km" + "+" +sRateLawS +"))" + kl.setFormula(fRate_law) + kl.setNotes("<body xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t" + fRate_law + "\n \t </body>") + printParameters( kl,"Km",Km,"substance" ) + kcatUnit = parmUnit( 0,cremodel_ ) + printParameters( kl,"kcat",kcat,kcatUnit ) def printParameters( kl, k, kvalue, unit ): para = kl.createParameter() @@ -248,11 +306,11 @@ def parmUnit( rct_order,cremodel_ ): if order == 0: unit_stream = "per_second" elif order == 1: - unit_stream = "per_item_per_second" + unit_stream = "litre_per_mmole_per_second" elif order == 2: - unit_stream ="per_item_sq_per_second" + unit_stream ="litre_per_mmole_sq_per_second" else: - unit_stream = "per_item_"+str(rct_order)+"_per_second"; + unit_stream = "litre_per_mmole_"+str(rct_order)+"_per_second"; lud =cremodel_.getListOfUnitDefinitions(); flag = False; @@ -267,10 +325,15 @@ def parmUnit( rct_order,cremodel_ ): #Create individual unit objects that will be put inside the UnitDefinition . if order != 0 : unit = unitdef.createUnit() - unit.setKind( UNIT_KIND_ITEM ) - unit.setExponent( -order ) + unit.setKind( UNIT_KIND_LITRE ) + unit.setExponent( 1 ) unit.setMultiplier(1) unit.setScale( 0 ) + unit = unitdef.createUnit() + unit.setKind( UNIT_KIND_MOLE ) + unit.setExponent( -order ) + unit.setMultiplier(1) + unit.setScale( -3 ) unit = unitdef.createUnit(); unit.setKind( UNIT_KIND_SECOND ); @@ -291,7 +354,6 @@ def getSubprd(cremodel_,mobjEnz,type,neighborslist): rate_law = processRateLaw(reacSubCou,cremodel_,noofSub,"sub",mobjEnz) return len(reacSub),rate_law else: - print reac.className+ " has no substrate" return 0,rate_law elif type == "prd": reacPrd = neighborslist @@ -314,7 +376,7 @@ def getSubprd(cremodel_,mobjEnz,type,neighborslist): def processRateLaw(objectCount,cremodel,noofObj,type,mobjEnz): rate_law = "" nameList_[:] = [] - for value,count in objectCount.iteritems(): + for value,count in objectCount.items(): value = moose.element(value) nameIndex = value.name+"_"+str(value.getId().value)+"_"+str(value.getDataIndex())+"_" clean_name = (str(idBeginWith(convertSpecialChar(nameIndex)))) @@ -351,108 +413,141 @@ def processRateLaw(objectCount,cremodel,noofObj,type,mobjEnz): def listofname(reacSub,mobjEnz): objectCount = Counter(reacSub) nameList_[:] = [] - for value,count in objectCount.iteritems(): + for value,count in objectCount.items(): value = moose.element(value) nameIndex = value.name+"_"+str(value.getId().value)+"_"+str(value.getDataIndex())+"_" clean_name = convertSpecialChar(nameIndex) if mobjEnz == True: nameList_.append(clean_name) -def writeReac(modelpath,cremodel_): + +def writeReac(modelpath,cremodel_,sceneitems,autoCoordinateslayout): for reac in wildcardFind(modelpath+'/##[ISA=ReacBase]'): - reaction = cremodel_.createReaction() - reacannoexist = False - reacGpname = " " - cleanReacname = convertSpecialChar(reac.name) - reaction.setId(str(idBeginWith(cleanReacname+"_"+str(reac.getId().value)+"_"+str(reac.getDataIndex())+"_"))) - reaction.setName(cleanReacname) - Kf = reac.numKf - Kb = reac.numKb - if Kb == 0.0: - reaction.setReversible( False ) - else: - reaction.setReversible( True ) - - reaction.setFast( False ) - if moose.exists(reac.path+'/info'): - Anno = moose.Annotator(reac.path+'/info') - notesR = Anno.notes - if notesR != "": - cleanNotesR= convertNotesSpecialChar(notesR) - notesStringR = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ cleanNotesR + "\n\t </body>" - reaction.setNotes(notesStringR) - element = moose.element(reac) - ele = getGroupinfo(element) - if ele.className == "Neutral": - reacGpname = "<moose:Group>"+ ele.name + "</moose:Group>\n" - reacannoexist = True - if reacannoexist : - reacAnno = "<moose:ModelAnnotation>\n" - if reacGpname: - reacAnno = reacAnno + reacGpname - reacAnno = reacAnno+ "</moose:ModelAnnotation>" - #s1.appendAnnotation(XMLNode.convertStringToXMLNode(speciAnno)) - reaction.setAnnotation(reacAnno) - - kl_s = sRL = pRL = "" - reacSub = reac.neighbors["sub"] reacPrd = reac.neighbors["prd"] - if not reacSub and not reacPrd: - print " Reaction ",reac.name, "missing substrate and product" - else: - kfl = reaction.createKineticLaw() - if reacSub: - noofSub,sRateLaw = getSubprd(cremodel_,False,"sub",reacSub) - if noofSub: - cleanReacname = cleanReacname+"_"+str(reac.getId().value)+"_"+str(reac.getDataIndex())+"_" - kfparm = idBeginWith(cleanReacname)+"_"+"Kf" - sRL = idBeginWith(cleanReacname) + "_Kf * " + sRateLaw - unit = parmUnit( noofSub-1 ,cremodel_) - printParameters( kfl,kfparm,Kf,unit ); - kl_s = sRL - else: - print reac.name + " has no substrate" - return -2 + if (len(reacSub) != 0 and len(reacPrd) != 0 ): + + reaction = cremodel_.createReaction() + reacannoexist = False + reacGpname = " " + cleanReacname = convertSpecialChar(reac.name) + reaction.setId(str(idBeginWith(cleanReacname+"_"+str(reac.getId().value)+"_"+str(reac.getDataIndex())+"_"))) + reaction.setName(cleanReacname) + #Kf = reac.numKf + #Kb = reac.numKb + Kf = reac.Kf + Kb = reac.Kb + if Kb == 0.0: + reaction.setReversible( False ) else: - print " Substrate missing for reaction ",reac.name - - if reacPrd: - noofPrd,pRateLaw = getSubprd(cremodel_,False,"prd",reacPrd) - if noofPrd: - if Kb: - kbparm = idBeginWith(cleanReacname)+"_"+"Kb" - pRL = idBeginWith(cleanReacname) + "_Kb * " + pRateLaw - unit = parmUnit( noofPrd-1 , cremodel_) - printParameters( kfl,kbparm,Kb,unit ); - kl_s = kl_s+ "- "+pRL - else: - print reac.name + " has no product" - return -2 + reaction.setReversible( True ) + + reaction.setFast( False ) + if moose.exists(reac.path+'/info'): + Anno = moose.Annotator(reac.path+'/info') + if Anno.notes != "": + cleanNotesR = convertNotesSpecialChar(Anno.notes) + notesStringR = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ cleanNotesR + "\n\t </body>" + reaction.setNotes(notesStringR) + element = moose.element(reac) + ele = getGroupinfo(element) + if ele.className == "Neutral" or sceneitems[element] or Anno.color or Anno.textColor: + reacannoexist = True + if reacannoexist : + reacAnno = "<moose:ModelAnnotation>\n" + if ele.className == "Neutral": + reacAnno = reacAnno + "<moose:Group>"+ ele.name + "</moose:Group>\n" + if sceneitems[element]: + v = sceneitems[element] + if autoCoordinateslayout == False: + reacAnno = reacAnno+"<moose:xCord>"+str(v['x'])+"</moose:xCord>\n"+"<moose:yCord>"+str(v['y'])+"</moose:yCord>\n" + elif autoCoordinateslayout == True: + x = calPrime(v['x']) + y = calPrime(v['y']) + reacAnno = reacAnno+"<moose:xCord>"+str(x)+"</moose:xCord>\n"+"<moose:yCord>"+str(y)+"</moose:yCord>\n" + if Anno.color: + reacAnno = reacAnno+"<moose:bgColor>"+Anno.color+"</moose:bgColor>\n" + if Anno.textColor: + reacAnno = reacAnno+"<moose:textColor>"+Anno.textColor+"</moose:textColor>\n" + reacAnno = reacAnno+ "</moose:ModelAnnotation>" + #s1.appendAnnotation(XMLNode.convertStringToXMLNode(speciAnno)) + reaction.setAnnotation(reacAnno) + kl_s , sRL, pRL ,compt= "", "", "","" + + if not reacSub and not reacPrd: + print(" Reaction ",reac.name, "missing substrate and product") else: - print " Product missing for reaction ",reac.name - kfl.setFormula(kl_s) + kfl = reaction.createKineticLaw() + if reacSub: + noofSub,sRateLaw = getSubprd(cremodel_,False,"sub",reacSub) + if noofSub: + comptVec = findCompartment(moose.element(reacSub[0])) + if not isinstance(moose.element(comptVec),moose.ChemCompt): + return -2 + else: + compt = comptVec.name+"_"+str(comptVec.getId().value)+"_"+str(comptVec.getDataIndex())+"_" + cleanReacname = cleanReacname+"_"+str(reac.getId().value)+"_"+str(reac.getDataIndex())+"_" + kfparm = idBeginWith(cleanReacname)+"_"+"Kf" + sRL = compt +" * " +idBeginWith(cleanReacname) + "_Kf * " + sRateLaw + unit = parmUnit( noofSub-1 ,cremodel_) + printParameters( kfl,kfparm,Kf,unit ); + #kl_s = compt+"(" +sRL + kl_s = sRL + else: + print(reac.name + " has no substrate") + return -2 + else: + print(" Substrate missing for reaction ",reac.name) + + if reacPrd: + noofPrd,pRateLaw = getSubprd(cremodel_,False,"prd",reacPrd) + if noofPrd: + if Kb: + kbparm = idBeginWith(cleanReacname)+"_"+"Kb" + pRL = compt +" * " +idBeginWith(cleanReacname) + "_Kb * " + pRateLaw + unit = parmUnit( noofPrd-1 , cremodel_) + printParameters( kfl,kbparm,Kb,unit ); + #kl_s = kl_s+ "- "+pRL+")" + kl_s = kl_s + "-"+pRL + else: + print(reac.name + " has no product") + return -2 + else: + print(" Product missing for reaction ",reac.name) + kfl.setFormula(kl_s) + kfl.setNotes("<body xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t" + kl_s + "\n \t </body>") + kfl.setFormula(kl_s) + else: + print(" Reaction ",reac.name, "missing substrate and product") def writeFunc(modelpath,cremodel_): funcs = wildcardFind(modelpath+'/##[ISA=Function]') #if func: for func in funcs: if func: - fName = idBeginWith( convertSpecialChar(func.parent.name+"_"+str(func.parent.getId().value)+"_"+str(func.parent.getDataIndex())+"_")) - item = func.path+'/x[0]' - sumtot = moose.element(item).neighbors["input"] - expr = moose.element(func).expr - for i in range(0,len(sumtot)): - v ="x"+str(i) - if v in expr: - z = str(convertSpecialChar(sumtot[i].name+"_"+str(moose.element(sumtot[i]).getId().value)+"_"+str(moose.element(sumtot[i]).getDataIndex()))+"_") - expr = expr.replace(v,z) + if func.parent.className == "CubeMesh" or func.parent.className == "CyclMesh": + funcEle = moose.element(moose.element(func).neighbors["valueOut"][0]) + funcEle1 = moose.element(funcEle) + fName = idBeginWith(convertSpecialChar(funcEle.name+"_"+str(funcEle.getId().value)+"_"+str(funcEle.getDataIndex())+"_")) + expr = moose.element(func).expr + + else: + fName = idBeginWith( convertSpecialChar(func.parent.name+"_"+str(func.parent.getId().value)+"_"+str(func.parent.getDataIndex())+"_")) + item = func.path+'/x[0]' + sumtot = moose.element(item).neighbors["input"] + expr = moose.element(func).expr + for i in range(0,len(sumtot)): + v ="x"+str(i) + if v in expr: + z = str(idBeginWith(str(convertSpecialChar(sumtot[i].name+"_"+str(moose.element(sumtot[i]).getId().value)+"_"+str(moose.element(sumtot[i]).getDataIndex()))+"_"))) + expr = expr.replace(v,z) + rule = cremodel_.createAssignmentRule() rule.setVariable( fName ) rule.setFormula( expr ) def convertNotesSpecialChar(str1): d = {"&":"_and","<":"_lessthan_",">":"_greaterthan_","BEL":"°"} - for i,j in d.iteritems(): + for i,j in d.items(): str1 = str1.replace(i,j) #stripping \t \n \r and space from begining and end of string str1 = str1.strip(' \t\n\r') @@ -488,12 +583,12 @@ def convertSpecialChar(str1): "+": "_plus_","*":"_star_","/":"_slash_","(":"_bo_",")":"_bc_", "[":"_sbo_","]":"_sbc_",".":"_dot_"," ":"_" } - for i,j in d.iteritems(): + for i,j in d.items(): str1 = str1.replace(i,j) return str1 -def writeSpecies(modelpath,cremodel_,sbmlDoc): - #getting all the species +def writeSpecies(modelpath,cremodel_,sbmlDoc,sceneitems,autoCoordinateslayout): + #getting all the species for spe in wildcardFind(modelpath+'/##[ISA=PoolBase]'): sName = convertSpecialChar(spe.name) comptVec = findCompartment(spe) @@ -519,7 +614,8 @@ def writeSpecies(modelpath,cremodel_,sbmlDoc): s1.setName(sName) - s1.setInitialAmount(spe.nInit) + #s1.setInitialAmount(spe.nInit) + s1.setInitialConcentration(spe.concInit) s1.setCompartment(compt) # Setting BoundaryCondition and constant as per this rule for BufPool # -constanst -boundaryCondition -has assignment/rate Rule -can be part of sub/prd @@ -547,25 +643,36 @@ def writeSpecies(modelpath,cremodel_,sbmlDoc): s1.setBoundaryCondition(False) s1.setConstant(False) s1.setUnits("substance") - s1.setHasOnlySubstanceUnits( True ) + s1.setHasOnlySubstanceUnits( False ) if moose.exists(spe.path+'/info'): Anno = moose.Annotator(spe.path+'/info') - notesS = Anno.notes - if notesS != "": - cleanNotesS= convertNotesSpecialChar(notesS) + if Anno.notes != "": + cleanNotesS= convertNotesSpecialChar(Anno.notes) notesStringS = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ cleanNotesS + "\n\t </body>" s1.setNotes(notesStringS) - #FindGroupName - element = moose.element(spe) - ele = getGroupinfo(element) - if ele.className == "Neutral": - speciGpname = "<moose:Group>"+ ele.name + "</moose:Group>\n" - speciannoexist = True - if speciannoexist : - speciAnno = "<moose:ModelAnnotation>\n" - if speciGpname: - speciAnno = speciAnno + speciGpname - speciAnno = speciAnno+ "</moose:ModelAnnotation>" + + element = moose.element(spe) + ele = getGroupinfo(element) + if ele.className == "Neutral" or sceneitems[element] or Anno.color or Anno.textColor: + speciannoexist = True + if speciannoexist : + speciAnno = "<moose:ModelAnnotation>\n" + if ele.className == "Neutral": + speciAnno = speciAnno + "<moose:Group>"+ ele.name + "</moose:Group>\n" + if sceneitems[element]: + v = sceneitems[element] + if autoCoordinateslayout == False: + speciAnno = speciAnno+"<moose:xCord>"+str(v['x'])+"</moose:xCord>\n"+"<moose:yCord>"+str(v['y'])+"</moose:yCord>\n" + elif autoCoordinateslayout == True: + x = calPrime(v['x']) + y = calPrime(v['y']) + speciAnno = speciAnno+"<moose:xCord>"+str(x)+"</moose:xCord>\n"+"<moose:yCord>"+str(y)+"</moose:yCord>\n" + if Anno.color: + speciAnno = speciAnno+"<moose:bgColor>"+Anno.color+"</moose:bgColor>\n" + if Anno.textColor: + speciAnno = speciAnno+"<moose:textColor>"+Anno.textColor+"</moose:textColor>\n" + speciAnno = speciAnno+ "</moose:ModelAnnotation>" + s1.setAnnotation(speciAnno) return True def writeCompt(modelpath,cremodel_): @@ -586,13 +693,14 @@ def writeCompt(modelpath,cremodel_): #write Simulation runtime,simdt,plotdt def writeSimulationAnnotation(modelpath): modelAnno = "" + plots = "" if moose.exists(modelpath+'/info'): mooseclock = moose.Clock('/clock') modelAnno ="<moose:ModelAnnotation>\n" modelAnnotation = moose.element(modelpath+'/info') - modelAnno = modelAnno+"<moose:ModelTime> "+str(modelAnnotation.runtime)+" </moose:ModelTime>\n" - modelAnno = modelAnno+"<moose:ModelSolver> "+modelAnnotation.solver+" </moose:ModelSolver>\n" - modelAnno = modelAnno+"<moose:simdt>"+ str(mooseclock.dts[11]) + " </moose:simdt>\n"; + modelAnno = modelAnno+"<moose:runTime> "+str(modelAnnotation.runtime)+" </moose:runTime>\n" + modelAnno = modelAnno+"<moose:solver> "+modelAnnotation.solver+" </moose:solver>\n" + modelAnno = modelAnno+"<moose:simdt>"+ str(mooseclock.dts[12]) + " </moose:simdt>\n"; modelAnno = modelAnno+"<moose:plotdt> " + str(mooseclock.dts[18]) +" </moose:plotdt>\n"; plots = ""; graphs = moose.wildcardFind(modelpath+"/##[TYPE=Table2]") @@ -601,15 +709,19 @@ def writeSimulationAnnotation(modelpath): if len(gpath) != 0: q = moose.element(gpath[0]) ori = q.path + name = convertSpecialChar(q.name) graphSpefound = False while not(isinstance(moose.element(q),moose.CubeMesh)): q = q.parent graphSpefound = True if graphSpefound: if not plots: - plots = ori[ori.find(q.name)-1:len(ori)] + #plots = ori[ori.find(q.name)-1:len(ori)] + plots = '/'+q.name+'/'+name + else: - plots = plots + "; "+ori[ori.find(q.name)-1:len(ori)] + #plots = plots + "; "+ori[ori.find(q.name)-1:len(ori)] + plots = plots + "; /"+q.name+'/'+name if plots != " ": modelAnno = modelAnno+ "<moose:plots> "+ plots+ "</moose:plots>\n"; modelAnno = modelAnno+"</moose:ModelAnnotation>" @@ -627,16 +739,16 @@ def writeUnits(cremodel_): unitSub = cremodel_.createUnitDefinition() unitSub.setId("substance") unit = unitSub.createUnit() - unit.setKind( UNIT_KIND_ITEM ) + unit.setKind( UNIT_KIND_MOLE ) unit.setMultiplier(1) unit.setExponent(1.0) - unit.setScale(0) + unit.setScale(-3) def validateModel( sbmlDoc ): #print " sbmlDoc ",sbmlDoc.toSBML() if ( not sbmlDoc ): - print "validateModel: given a null SBML Document" + print("validateModel: given a null SBML Document") return False consistencyMessages = "" validationMessages = "" @@ -683,35 +795,216 @@ def validateModel( sbmlDoc ): if ( noProblems ): return True else: + if consistencyMessages == None: + consistencyMessages = "" if consistencyMessages != "": - print " consistency Warning: "+consistencyMessages + print(" consistency Warning: "+consistencyMessages) if ( numConsistencyErrors > 0 ): if numConsistencyErrors == 1: t = "" else: t="s" - print "ERROR: encountered " + numConsistencyErrors + " consistency error" +t+ " in model '" + sbmlDoc.getModel().getId() + "'." + print("ERROR: encountered " + numConsistencyErrors + " consistency error" +t+ " in model '" + sbmlDoc.getModel().getId() + "'.") if ( numConsistencyWarnings > 0 ): if numConsistencyWarnings == 1: t1 = "" else: t1 ="s" - print "Notice: encountered " + numConsistencyWarnings +" consistency warning" + t + " in model '" + sbmlDoc.getModel().getId() + "'." + print("Notice: encountered " + numConsistencyWarnings +" consistency warning" + t + " in model '" + sbmlDoc.getModel().getId() + "'.") if ( numValidationErrors > 0 ): if numValidationErrors == 1: t2 = "" else: t2 ="s" - print "ERROR: encountered " + numValidationErrors + " validation error" + t2 + " in model '" + sbmlDoc.getModel().getId() + "'." + print("ERROR: encountered " + numValidationErrors + " validation error" + t2 + " in model '" + sbmlDoc.getModel().getId() + "'.") if ( numValidationWarnings > 0 ): if numValidationWarnings == 1: t3 = "" else: t3 = "s" - print "Notice: encountered " + numValidationWarnings + " validation warning" + t3 + " in model '" + sbmlDoc.getModel().getId() + "'." + print("Notice: encountered " + numValidationWarnings + " validation warning" + t3 + " in model '" + sbmlDoc.getModel().getId() + "'.") - print validationMessages; + print(validationMessages); return ( numConsistencyErrors == 0 and numValidationErrors == 0) #return ( numConsistencyErrors == 0 and numValidationErrors == 0, consistencyMessages) +def setupItem(modelPath): + '''This function collects information of what is connected to what. \ + eg. substrate and product connectivity to reaction's and enzyme's \ + sumtotal connectivity to its pool are collected ''' + #print " setupItem" + sublist = [] + prdlist = [] + cntDict = {} + zombieType = ['ReacBase','EnzBase','Function','StimulusTable'] + for baseObj in zombieType: + path = '/##[ISA='+baseObj+']' + if modelPath != '/': + path = modelPath+path + if ( (baseObj == 'ReacBase') or (baseObj == 'EnzBase')): + for items in wildcardFind(path): + sublist = [] + prdlist = [] + uniqItem,countuniqItem = countitems(items,'subOut') + subNo = uniqItem + for sub in uniqItem: + sublist.append((element(sub),'s',countuniqItem[sub])) + + uniqItem,countuniqItem = countitems(items,'prd') + prdNo = uniqItem + if (len(subNo) == 0 or len(prdNo) == 0): + print("Substrate Product is empty "," ",items) + for prd in uniqItem: + prdlist.append((element(prd),'p',countuniqItem[prd])) + + if (baseObj == 'CplxEnzBase') : + uniqItem,countuniqItem = countitems(items,'toEnz') + for enzpar in uniqItem: + sublist.append((element(enzpar),'t',countuniqItem[enzpar])) + + uniqItem,countuniqItem = countitems(items,'cplxDest') + for cplx in uniqItem: + prdlist.append((element(cplx),'cplx',countuniqItem[cplx])) + + if (baseObj == 'EnzBase'): + uniqItem,countuniqItem = countitems(items,'enzDest') + for enzpar in uniqItem: + sublist.append((element(enzpar),'t',countuniqItem[enzpar])) + cntDict[items] = sublist,prdlist + elif baseObj == 'Function': + for items in wildcardFind(path): + sublist = [] + prdlist = [] + item = items.path+'/x[0]' + uniqItem,countuniqItem = countitems(item,'input') + for funcpar in uniqItem: + sublist.append((element(funcpar),'sts',countuniqItem[funcpar])) + + uniqItem,countuniqItem = countitems(items,'valueOut') + for funcpar in uniqItem: + prdlist.append((element(funcpar),'stp',countuniqItem[funcpar])) + cntDict[items] = sublist,prdlist + else: + for tab in wildcardFind(path): + tablist = [] + uniqItem,countuniqItem = countitems(tab,'output') + for tabconnect in uniqItem: + tablist.append((element(tabconnect),'tab',countuniqItem[tabconnect])) + cntDict[tab] = tablist + return cntDict + +def countitems(mitems,objtype): + items = [] + #print "mitems in countitems ",mitems,objtype + items = element(mitems).neighbors[objtype] + uniqItems = set(items) + countuniqItems = Counter(items) + return(uniqItems,countuniqItems) + +def setupMeshObj(modelRoot): + ''' Setup compartment and its members pool,reaction,enz cplx under self.meshEntry dictionaries \ + self.meshEntry with "key" as compartment, + value is key2:list where key2 represents moose object type,list of objects of a perticular type + e.g self.meshEntry[meshEnt] = { 'reaction': reaction_list,'enzyme':enzyme_list,'pool':poollist,'cplx': cplxlist } + ''' + meshEntry = {} + if meshEntry: + meshEntry.clear() + else: + meshEntry = {} + meshEntryWildcard = '/##[ISA=ChemCompt]' + if modelRoot != '/': + meshEntryWildcard = modelRoot+meshEntryWildcard + for meshEnt in wildcardFind(meshEntryWildcard): + mollist = [] + cplxlist = [] + mol_cpl = wildcardFind(meshEnt.path+'/##[ISA=PoolBase]') + funclist = wildcardFind(meshEnt.path+'/##[ISA=Function]') + enzlist = wildcardFind(meshEnt.path+'/##[ISA=EnzBase]') + realist = wildcardFind(meshEnt.path+'/##[ISA=ReacBase]') + tablist = wildcardFind(meshEnt.path+'/##[ISA=StimulusTable]') + if mol_cpl or funclist or enzlist or realist or tablist: + for m in mol_cpl: + if isinstance(element(m.parent),CplxEnzBase): + cplxlist.append(m) + elif isinstance(element(m),PoolBase): + mollist.append(m) + + meshEntry[meshEnt] = {'enzyme':enzlist, + 'reaction':realist, + 'pool':mollist, + 'cplx':cplxlist, + 'table':tablist, + 'function':funclist + } + return(meshEntry) + +def autoCoordinates(meshEntry,srcdesConnection): + G = nx.Graph() + for cmpt,memb in list(meshEntry.items()): + for enzObj in find_index(memb,'enzyme'): + G.add_node(enzObj.path,label='',shape='ellipse',color='',style='filled',fontname='Helvetica',fontsize=12,fontcolor='blue') + for cmpt,memb in list(meshEntry.items()): + for poolObj in find_index(memb,'pool'): + #poolinfo = moose.element(poolObj.path+'/info') + G.add_node(poolObj.path,label = poolObj.name,shape = 'box',color = '',style = 'filled',fontname = 'Helvetica',fontsize = 12,fontcolor = 'blue') + for cplxObj in find_index(memb,'cplx'): + pass + for reaObj in find_index(memb,'reaction'): + G.add_node(reaObj.path,label='',shape='record',color='') + + for inn,out in list(srcdesConnection.items()): + if (inn.className =='ZombieReac'): arrowcolor = 'green' + elif(inn.className =='ZombieEnz'): arrowcolor = 'red' + else: arrowcolor = 'blue' + if isinstance(out,tuple): + if len(out[0])== 0: + print(inn.className + ':' +inn.name + " doesn't have input message") + else: + for items in (items for items in out[0] ): + G.add_edge(element(items[0]).path,inn.path) + + if len(out[1]) == 0: + print(inn.className + ':' + inn.name + "doesn't have output mssg") + else: + for items in (items for items in out[1] ): + G.add_edge(inn.path,element(items[0]).path) + + elif isinstance(out,list): + if len(out) == 0: + print("Func pool doesn't have sumtotal") + else: + for items in (items for items in out ): + G.add_edge(element(items[0]).path,inn.path) + #from networkx.drawing.nx_agraph import graphviz_layout + #position = graphviz_layout(G,prog='dot') + + position = nx.pygraphviz_layout(G, prog = 'dot') + position = nx.spring_layout(G) + #agraph = nx.to_agraph(G) + #agraph.draw("~/out.png", format = 'png', prog = 'dot') + + sceneitems = {} + xycord = [] + cmin = 0 + cmax = 0 + for key,value in list(position.items()): + xycord.append(value[0]) + xycord.append(value[1]) + sceneitems[element(key)] = {'x':value[0],'y':value[1]} + if len(xycord) > 0: + cmin = min(xycord) + cmax = max(xycord) + return cmin,cmax,sceneitems + +def calPrime(x): + prime = int((20*(float(x-cmin)/float(cmax-cmin)))-10) + return prime + +def find_index(value, key): + """ Value.get(key) to avoid expection which would raise if empty value in dictionary for a given key """ + if value.get(key) != None: + return value.get(key) + else: + raise ValueError('no dict with the key found') if __name__ == "__main__": filepath = sys.argv[1] @@ -726,9 +1019,9 @@ if __name__ == "__main__": moose.loadModel(filepath,loadpath,"gsl") - written = mooseWriteSBML(loadpath,filepath) + written,c,writtentofile = mooseWriteSBML(loadpath,filepath) if written: - print " File written to ",written + print(" File written to ",writtentofile) else: - print " could not write model to SBML file" + print(" could not write model to SBML file") \ No newline at end of file diff --git a/python/moose/genesis/_main.py b/python/moose/genesis/_main.py index 67a15b98a9308c8b95e5cfd44d21c06606322d4f..38c0492d6aa871477695d4fcafd5d66cea6fd6d3 100644 --- a/python/moose/genesis/_main.py +++ b/python/moose/genesis/_main.py @@ -14,6 +14,10 @@ import random from moose import wildcardFind, element, loadModel, ChemCompt, exists, Annotator, Pool, ZombiePool,PoolBase,CplxEnzBase,Function,ZombieFunction import numpy as np import re +from collections import Counter +import networkx as nx +from PyQt4.QtGui import QColor +import matplotlib GENESIS_COLOR_SEQUENCE = ((248, 0, 255), (240, 0, 255), (232, 0, 255), (224, 0, 255), (216, 0, 255), (208, 0, 255), (200, 0, 255), (192, 0, 255), (184, 0, 255), (176, 0, 255), (168, 0, 255), (160, 0, 255), (152, 0, 255), (144, 0, 255), @@ -33,565 +37,710 @@ GENESIS_COLOR_SEQUENCE = ((248, 0, 255), (240, 0, 255), (232, 0, 255), (224, 0, (255, 56, 0), (255, 48, 0), (255, 40, 0), (255, 32, 0), (255, 24, 0), (255, 16, 0), (255, 8, 0), (255, 0, 0)) #Todo : To be written -# --Notes # --StimulusTable def write( modelpath, filename,sceneitems=None): - if filename.rfind('.') != -1: - filename = filename[:filename.rfind('.')] - else: - filename = filename[:len(filename)] - filename = filename+'.g' - global NA - NA = 6.0221415e23 - global xmin,xmax,ymin,ymax - global cord - global multi - xmin = ymin = 0 - xmax = ymax = 1 - multi = 50 - cord = {} - compt = wildcardFind(modelpath+'/##[ISA=ChemCompt]') - maxVol = estimateDefaultVol(compt) - f = open(filename, 'w') - writeHeader (f,maxVol) - if (compt > 0): - if sceneitems == None: - #if sceneitems is none (loaded from script) then check x,y cord exists - xmin,ymin,xmax,ymax,positionInfoExist = getCor(modelpath,sceneitems) - if not positionInfoExist: - #incase of SBML or cspace or python Annotator is not populated then positionInfoExist= False - #print " x and y cordinates doesn't exist so auto cordinates" - print(" auto co-ordinates needs to be applied") - pass - else: - #This is when it comes from Gui where the objects are already layout on to scene - # so using thoes co-ordinates - xmin,ymin,xmax,ymax,positionInfoExist = getCor(modelpath,sceneitems) - gtId_vol = writeCompartment(modelpath,compt,f) - writePool(modelpath,f,gtId_vol) - reacList = writeReac(modelpath,f) - enzList = writeEnz(modelpath,f) - writeSumtotal(modelpath,f) - storeReacMsg(reacList,f) - storeEnzMsg(enzList,f) - writeGui(f) - tgraphs = wildcardFind(modelpath+'/##[ISA=Table2]') - if tgraphs: - writeplot(tgraphs,f) - storePlotMsgs(tgraphs,f) - writeFooter1(f) - writeNotes(modelpath,f) - writeFooter2(f) - return True + if filename.rfind('.') != -1: + filename = filename[:filename.rfind('.')] + else: + filename = filename[:len(filename)] + filename = filename+'.g' + global NA + NA = 6.0221415e23 + global cmin,cmax,xmin,xmax,ymin,ymax + cmin = 0 + cmax = 1 + xmin = 0 + xmax = 1 + ymin = 0 + ymax = 1 + + compt = wildcardFind(modelpath+'/##[ISA=ChemCompt]') + maxVol = estimateDefaultVol(compt) + f = open(filename, 'w') + + if sceneitems == None: + srcdesConnection = {} + setupItem(modelpath,srcdesConnection) + meshEntry = setupMeshObj(modelpath) + cmin,cmax,sceneitems = autoCoordinates(meshEntry,srcdesConnection) + for k,v in sceneitems.items(): + v = sceneitems[k] + x1 = calPrime(v['x']) + y1 = calPrime(v['y']) + sceneitems[k]['x'] = x1 + sceneitems[k]['y'] = y1 + else: + cs, xcord, ycord = [], [] ,[] + for k,v in sceneitems.items(): + xcord.append(v['x']) + cs.append(v['x']) + ycord.append(v['y']) + cs.append(v['y']) + xmin = min(xcord) + xmax = max(xcord) + ymin = min(ycord) + ymax = max(ycord) + + cmin = min(cs) + cmax = max(cs) + writeHeader (f,maxVol) + + if (compt > 0): + gtId_vol = writeCompartment(modelpath,compt,f) + writePool(modelpath,f,gtId_vol,sceneitems) + reacList = writeReac(modelpath,f,sceneitems) + enzList = writeEnz(modelpath,f,sceneitems) + writeSumtotal(modelpath,f) + f.write("simundump xgraph /graphs/conc1 0 0 99 0.001 0.999 0\n" + "simundump xgraph /graphs/conc2 0 0 100 0 1 0\n") + tgraphs = wildcardFind(modelpath+'/##[ISA=Table2]') + first, second = " ", " " + if tgraphs: + first,second = writeplot(tgraphs,f) + if first: + f.write(first) + f.write("simundump xgraph /moregraphs/conc3 0 0 100 0 1 0\n" + "simundump xgraph /moregraphs/conc4 0 0 100 0 1 0\n") + if second: + f.write(second) + f.write("simundump xcoredraw /edit/draw 0 -6 4 -2 6\n" + "simundump xtree /edit/draw/tree 0 \\\n" + " /kinetics/#[],/kinetics/#[]/#[],/kinetics/#[]/#[]/#[][TYPE!=proto],/kinetics/#[]/#[]/#[][TYPE!=linkinfo]/##[] \"edit_elm.D <v>; drag_from_edit.w <d> <S> <x> <y> <z>\" auto 0.6\n" + "simundump xtext /file/notes 0 1\n") + storeReacMsg(reacList,f) + storeEnzMsg(enzList,f) + if tgraphs: + storePlotMsgs(tgraphs,f) + writeFooter1(f) + writeNotes(modelpath,f) + writeFooter2(f) + return True + else: + print("Warning: writeKkit:: No model found on " , modelpath) + return False + +def calPrime(x): + prime = int((20*(float(x-cmin)/float(cmax-cmin)))-10) + return prime + +def setupItem(modelPath,cntDict): + '''This function collects information of what is connected to what. \ + eg. substrate and product connectivity to reaction's and enzyme's \ + sumtotal connectivity to its pool are collected ''' + #print " setupItem" + sublist = [] + prdlist = [] + zombieType = ['ReacBase','EnzBase','Function','StimulusTable'] + for baseObj in zombieType: + path = '/##[ISA='+baseObj+']' + if modelPath != '/': + path = modelPath+path + if ( (baseObj == 'ReacBase') or (baseObj == 'EnzBase')): + for items in wildcardFind(path): + sublist = [] + prdlist = [] + uniqItem,countuniqItem = countitems(items,'subOut') + subNo = uniqItem + for sub in uniqItem: + sublist.append((element(sub),'s',countuniqItem[sub])) + + uniqItem,countuniqItem = countitems(items,'prd') + prdNo = uniqItem + if (len(subNo) == 0 or len(prdNo) == 0): + print "Substrate Product is empty ",path, " ",items + + for prd in uniqItem: + prdlist.append((element(prd),'p',countuniqItem[prd])) + + if (baseObj == 'CplxEnzBase') : + uniqItem,countuniqItem = countitems(items,'toEnz') + for enzpar in uniqItem: + sublist.append((element(enzpar),'t',countuniqItem[enzpar])) + + uniqItem,countuniqItem = countitems(items,'cplxDest') + for cplx in uniqItem: + prdlist.append((element(cplx),'cplx',countuniqItem[cplx])) + + if (baseObj == 'EnzBase'): + uniqItem,countuniqItem = countitems(items,'enzDest') + for enzpar in uniqItem: + sublist.append((element(enzpar),'t',countuniqItem[enzpar])) + cntDict[items] = sublist,prdlist + elif baseObj == 'Function': + for items in wildcardFind(path): + sublist = [] + prdlist = [] + item = items.path+'/x[0]' + uniqItem,countuniqItem = countitems(item,'input') + for funcpar in uniqItem: + sublist.append((element(funcpar),'sts',countuniqItem[funcpar])) + + uniqItem,countuniqItem = countitems(items,'valueOut') + for funcpar in uniqItem: + prdlist.append((element(funcpar),'stp',countuniqItem[funcpar])) + cntDict[items] = sublist,prdlist else: - print("Warning: writeKkit:: No model found on " , modelpath) - return False + for tab in wildcardFind(path): + tablist = [] + uniqItem,countuniqItem = countitems(tab,'output') + for tabconnect in uniqItem: + tablist.append((element(tabconnect),'tab',countuniqItem[tabconnect])) + cntDict[tab] = tablist +def countitems(mitems,objtype): + items = [] + #print "mitems in countitems ",mitems,objtype + items = element(mitems).neighbors[objtype] + uniqItems = set(items) + countuniqItems = Counter(items) + return(uniqItems,countuniqItems) + +def setupMeshObj(modelRoot): + ''' Setup compartment and its members pool,reaction,enz cplx under self.meshEntry dictionaries \ + self.meshEntry with "key" as compartment, + value is key2:list where key2 represents moose object type,list of objects of a perticular type + e.g self.meshEntry[meshEnt] = { 'reaction': reaction_list,'enzyme':enzyme_list,'pool':poollist,'cplx': cplxlist } + ''' + meshEntry = {} + if meshEntry: + meshEntry.clear() + else: + meshEntry = {} + meshEntryWildcard = '/##[ISA=ChemCompt]' + if modelRoot != '/': + meshEntryWildcard = modelRoot+meshEntryWildcard + for meshEnt in wildcardFind(meshEntryWildcard): + mollist = [] + cplxlist = [] + mol_cpl = wildcardFind(meshEnt.path+'/##[ISA=PoolBase]') + funclist = wildcardFind(meshEnt.path+'/##[ISA=Function]') + enzlist = wildcardFind(meshEnt.path+'/##[ISA=EnzBase]') + realist = wildcardFind(meshEnt.path+'/##[ISA=ReacBase]') + tablist = wildcardFind(meshEnt.path+'/##[ISA=StimulusTable]') + if mol_cpl or funclist or enzlist or realist or tablist: + for m in mol_cpl: + if isinstance(element(m.parent),CplxEnzBase): + cplxlist.append(m) + elif isinstance(element(m),PoolBase): + mollist.append(m) + + meshEntry[meshEnt] = {'enzyme':enzlist, + 'reaction':realist, + 'pool':mollist, + 'cplx':cplxlist, + 'table':tablist, + 'function':funclist + } + return(meshEntry) +def autoCoordinates(meshEntry,srcdesConnection): + G = nx.Graph() + for cmpt,memb in meshEntry.items(): + for enzObj in find_index(memb,'enzyme'): + #G.add_node(enzObj.path) + G.add_node(enzObj.path,label=enzObj.name,shape='ellipse',color='',style='filled',fontname='Helvetica',fontsize=12,fontcolor='blue') + for cmpt,memb in meshEntry.items(): + for poolObj in find_index(memb,'pool'): + #G.add_node(poolObj.path) + G.add_node(poolObj.path,label = poolObj.name,shape = 'box',color = '',style = 'filled',fontname = 'Helvetica',fontsize = 12,fontcolor = 'blue') + for cplxObj in find_index(memb,'cplx'): + pass + #G.add_node(cplxObj.path) + #G.add_edge((cplxObj.parent).path,cplxObj.path) + for reaObj in find_index(memb,'reaction'): + #G.add_node(reaObj.path) + G.add_node(reaObj.path,label=reaObj.name,shape='record',color='') + for funcObj in find_index(memb,'function'): + G.add_node(poolObj.path,label = funcObj.name,shape = 'box',color = 'red',style = 'filled',fontname = 'Helvetica',fontsize = 12,fontcolor = 'blue') + + + for inn,out in srcdesConnection.items(): + if (inn.className =='ZombieReac'): arrowcolor = 'green' + elif(inn.className =='ZombieEnz'): arrowcolor = 'red' + else: arrowcolor = 'blue' + if isinstance(out,tuple): + if len(out[0])== 0: + print inn.className + ':' +inn.name + " doesn't have input message" + else: + for items in (items for items in out[0] ): + G.add_edge(element(items[0]).path,inn.path) + if len(out[1]) == 0: + print inn.className + ':' + inn.name + "doesn't have output mssg" + else: + for items in (items for items in out[1] ): + G.add_edge(inn.path,element(items[0]).path) + elif isinstance(out,list): + if len(out) == 0: + print "Func pool doesn't have sumtotal" + else: + for items in (items for items in out ): + G.add_edge(element(items[0]).path,inn.path) + + position = nx.graphviz_layout(G, prog = 'dot') + #agraph = nx.to_agraph(G) + #agraph.draw("writetogenesis.png", format = 'png', prog = 'dot') + sceneitems = {} + xycord = [] + + for key,value in position.items(): + xycord.append(value[0]) + xycord.append(value[1]) + sceneitems[element(key)] = {'x':value[0],'y':value[1]} + cmin = min(xycord) + cmax = max(xycord) + return cmin,cmax,sceneitems + +def find_index(value, key): + """ Value.get(key) to avoid expection which would raise if empty value in dictionary for a given key """ + if value.get(key) != None: + return value.get(key) + else: + raise ValueError('no dict with the key found') def storeCplxEnzMsgs( enz, f ): - for sub in enz.neighbors["subOut"]: - s = "addmsg /kinetics/" + trimPath( sub ) + " /kinetics/" + trimPath(enz) + " SUBSTRATE n \n"; - s = s+ "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath( sub ) + " REAC sA B \n"; - f.write(s) - for prd in enz.neighbors["prd"]: - s = "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath(prd) + " MM_PRD pA\n"; - f.write( s ) - for enzOut in enz.neighbors["enzOut"]: - s = "addmsg /kinetics/" + trimPath( enzOut ) + " /kinetics/" + trimPath(enz) + " ENZYME n\n"; - s = s+ "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath(enzOut) + " REAC eA B\n"; - f.write( s ) + for sub in enz.neighbors["subOut"]: + s = "addmsg /kinetics/" + trimPath( sub ) + " /kinetics/" + trimPath(enz) + " SUBSTRATE n \n"; + s = s+ "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath( sub ) + " REAC sA B \n"; + f.write(s) + for prd in enz.neighbors["prd"]: + s = "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath(prd) + " MM_PRD pA\n"; + f.write( s ) + for enzOut in enz.neighbors["enzOut"]: + s = "addmsg /kinetics/" + trimPath( enzOut ) + " /kinetics/" + trimPath(enz) + " ENZYME n\n"; + s = s+ "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath(enzOut) + " REAC eA B\n"; + f.write( s ) def storeMMenzMsgs( enz, f): - subList = enz.neighbors["subOut"] - prdList = enz.neighbors["prd"] - enzDestList = enz.neighbors["enzDest"] - for esub in subList: - es = "addmsg /kinetics/" + trimPath(element(esub)) + " /kinetics/" + trimPath(enz) + " SUBSTRATE n \n"; - es = es+"addmsg /kinetics/" + trimPath(enz) + " /kinetics/" + trimPath(element(esub)) + " REAC sA B \n"; - f.write(es) - - for eprd in prdList: - es = "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath( element(eprd)) + " MM_PRD pA \n"; - f.write(es) - for eenzDest in enzDestList: - enzDest = "addmsg /kinetics/" + trimPath( element(eenzDest)) + " /kinetics/" + trimPath( enz ) + " ENZYME n \n"; - f.write(enzDest) + subList = enz.neighbors["subOut"] + prdList = enz.neighbors["prd"] + enzDestList = enz.neighbors["enzDest"] + for esub in subList: + es = "addmsg /kinetics/" + trimPath(element(esub)) + " /kinetics/" + trimPath(enz) + " SUBSTRATE n \n"; + es = es+"addmsg /kinetics/" + trimPath(enz) + " /kinetics/" + trimPath(element(esub)) + " REAC sA B \n"; + f.write(es) + + for eprd in prdList: + es = "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath( element(eprd)) + " MM_PRD pA \n"; + f.write(es) + for eenzDest in enzDestList: + enzDest = "addmsg /kinetics/" + trimPath( element(eenzDest)) + " /kinetics/" + trimPath( enz ) + " ENZYME n \n"; + f.write(enzDest) def storeEnzMsg( enzList, f): - for enz in enzList: - enzClass = enz.className - if (enzClass == "ZombieMMenz" or enzClass == "MMenz"): - storeMMenzMsgs(enz, f) - else: - storeCplxEnzMsgs( enz, f ) - -def writeEnz( modelpath,f): - enzList = wildcardFind(modelpath+'/##[ISA=EnzBase]') - for enz in enzList: - x = random.randrange(0,10) - y = random.randrange(0,10) - textcolor = "green" - color = "red" - k1 = 0; - k2 = 0; - k3 = 0; - nInit = 0; - concInit = 0; - n = 0; - conc = 0; - enzParent = enz.parent - if (isinstance(enzParent.className,Pool)) or (isinstance(enzParent.className,ZombiePool)): - print(" raise exception enz doesn't have pool as parent") - return False - else: - vol = enzParent.volume * NA * 1e-3; - isMichaelisMenten = 0; - enzClass = enz.className - if (enzClass == "ZombieMMenz" or enzClass == "MMenz"): - k1 = enz.numKm - k3 = enz.kcat - k2 = 4.0*k3; - k1 = (k2 + k3) / k1; - isMichaelisMenten = 1; - - elif (enzClass == "ZombieEnz" or enzClass == "Enz"): - k1 = enz.k1 - k2 = enz.k2 - k3 = enz.k3 - cplx = enz.neighbors['cplx'][0] - nInit = cplx.nInit[0]; - - xe = cord[enz]['x'] - ye = cord[enz]['y'] - x = ((xe-xmin)/(xmax-xmin))*multi - y = ((ye-ymin)/(ymax-ymin))*multi - #y = ((ymax-ye)/(ymax-ymin))*multi - einfo = enz.path+'/info' - if exists(einfo): - color = Annotator(einfo).getField('color') - color = getColorCheck(color,GENESIS_COLOR_SEQUENCE) - - textcolor = Annotator(einfo).getField('textColor') - textcolor = getColorCheck(textcolor,GENESIS_COLOR_SEQUENCE) - - f.write("simundump kenz /kinetics/" + trimPath(enz) + " " + str(0)+ " " + - str(concInit) + " " + - str(conc) + " " + - str(nInit) + " " + - str(n) + " " + - str(vol) + " " + - str(k1) + " " + - str(k2) + " " + - str(k3) + " " + - str(0) + " " + - str(isMichaelisMenten) + " " + - "\"\"" + " " + - str(color) + " " + str(textcolor) + " \"\"" + - " " + str(int(x)) + " " + str(int(y)) + " "+str(0)+"\n") - return enzList + for enz in enzList: + enzClass = enz.className + if (enzClass == "ZombieMMenz" or enzClass == "MMenz"): + storeMMenzMsgs(enz, f) + else: + storeCplxEnzMsgs( enz, f ) + +def writeEnz( modelpath,f,sceneitems): + enzList = wildcardFind(modelpath+'/##[ISA=EnzBase]') + for enz in enzList: + x = random.randrange(0,10) + y = random.randrange(0,10) + textcolor = "" + color = "" + k1 = 0; + k2 = 0; + k3 = 0; + nInit = 0; + concInit = 0; + n = 0; + conc = 0; + enzParent = enz.parent + if (isinstance(enzParent.className,Pool)) or (isinstance(enzParent.className,ZombiePool)): + print(" raise exception enz doesn't have pool as parent") + return False + else: + vol = enzParent.volume * NA * 1e-3; + isMichaelisMenten = 0; + enzClass = enz.className + if (enzClass == "ZombieMMenz" or enzClass == "MMenz"): + k1 = enz.numKm + k3 = enz.kcat + k2 = 4.0*k3; + k1 = (k2 + k3) / k1; + isMichaelisMenten = 1; + + elif (enzClass == "ZombieEnz" or enzClass == "Enz"): + k1 = enz.k1 + k2 = enz.k2 + k3 = enz.k3 + cplx = enz.neighbors['cplx'][0] + nInit = cplx.nInit[0]; + if sceneitems != None: + # value = sceneitems[enz] + # x = calPrime(value['x']) + # y = calPrime(value['y']) + x = sceneitems[enz]['x'] + y = sceneitems[enz]['y'] + + einfo = enz.path+'/info' + if exists(einfo): + color = Annotator(einfo).getField('color') + color = getColorCheck(color,GENESIS_COLOR_SEQUENCE) + + textcolor = Annotator(einfo).getField('textColor') + textcolor = getColorCheck(textcolor,GENESIS_COLOR_SEQUENCE) + + if color == "" or color == " ": + color = getRandColor() + if textcolor == "" or textcolor == " ": + textcolor = getRandColor() + + f.write("simundump kenz /kinetics/" + trimPath(enz) + " " + str(0)+ " " + + str(concInit) + " " + + str(conc) + " " + + str(nInit) + " " + + str(n) + " " + + str(vol) + " " + + str(k1) + " " + + str(k2) + " " + + str(k3) + " " + + str(0) + " " + + str(isMichaelisMenten) + " " + + "\"\"" + " " + + str(textcolor) + " " + str(color) + " \"\"" + + " " + str(int(x)) + " " + str(int(y)) + " "+str(0)+"\n") + return enzList def nearestColorIndex(color, color_sequence): - #Trying to find the index to closest color map from the rainbow pickle file for matching the Genesis color map - distance = [ (color[0] - temp[0]) ** 2 + (color[1] - temp[1]) ** 2 + (color[2] - temp[2]) ** 2 - for temp in color_sequence] + #Trying to find the index to closest color map from the rainbow pickle file for matching the Genesis color map + distance = [ (color[0] - temp[0]) ** 2 + (color[1] - temp[1]) ** 2 + (color[2] - temp[2]) ** 2 + for temp in color_sequence] - minindex = 0 + minindex = 0 - for i in range(1, len(distance)): - if distance[minindex] > distance[i] : minindex = i + for i in range(1, len(distance)): + if distance[minindex] > distance[i] : minindex = i - return minindex + return minindex def storeReacMsg(reacList,f): - for reac in reacList: - reacPath = trimPath( reac); - sublist = reac.neighbors["subOut"] - prdlist = reac.neighbors["prd"] - for sub in sublist: - s = "addmsg /kinetics/" + trimPath( sub ) + " /kinetics/" + reacPath + " SUBSTRATE n \n"; - s = s + "addmsg /kinetics/" + reacPath + " /kinetics/" + trimPath( sub ) + " REAC A B \n"; - f.write(s) - - for prd in prdlist: - s = "addmsg /kinetics/" + trimPath( prd ) + " /kinetics/" + reacPath + " PRODUCT n \n"; - s = s + "addmsg /kinetics/" + reacPath + " /kinetics/" + trimPath( prd ) + " REAC B A\n"; - f.write( s) - -def writeReac(modelpath,f): - reacList = wildcardFind(modelpath+'/##[ISA=ReacBase]') - for reac in reacList : - color = "blue" - textcolor = "red" - kf = reac.numKf - kb = reac.numKb - xr = cord[reac]['x'] - yr = cord[reac]['y'] - x = ((xr-xmin)/(xmax-xmin))*multi - y = ((yr-ymin)/(ymax-ymin))*multi - #y = ((ymax-yr)/(ymax-ymin))*multi - rinfo = reac.path+'/info' - if exists(rinfo): - color = Annotator(rinfo).getField('color') - color = getColorCheck(color,GENESIS_COLOR_SEQUENCE) - - textcolor = Annotator(rinfo).getField('textColor') - textcolor = getColorCheck(textcolor,GENESIS_COLOR_SEQUENCE) - - f.write("simundump kreac /kinetics/" + trimPath(reac) + " " +str(0) +" "+ str(kf) + " " + str(kb) + " \"\" " + - str(color) + " " + str(textcolor) + " " + str(int(x)) + " " + str(int(y)) + " 0\n") - return reacList - + for reac in reacList: + reacPath = trimPath( reac); + sublist = reac.neighbors["subOut"] + prdlist = reac.neighbors["prd"] + for sub in sublist: + s = "addmsg /kinetics/" + trimPath( sub ) + " /kinetics/" + reacPath + " SUBSTRATE n \n"; + s = s + "addmsg /kinetics/" + reacPath + " /kinetics/" + trimPath( sub ) + " REAC A B \n"; + f.write(s) + + for prd in prdlist: + s = "addmsg /kinetics/" + trimPath( prd ) + " /kinetics/" + reacPath + " PRODUCT n \n"; + s = s + "addmsg /kinetics/" + reacPath + " /kinetics/" + trimPath( prd ) + " REAC B A\n"; + f.write( s) + +def writeReac(modelpath,f,sceneitems): + reacList = wildcardFind(modelpath+'/##[ISA=ReacBase]') + for reac in reacList : + color = "" + textcolor = "" + kf = reac.numKf + kb = reac.numKb + # if sceneitems != None: + # value = sceneitems[reac] + # x = calPrime(value['x']) + # y = calPrime(value['y']) + x = sceneitems[reac]['x'] + y = sceneitems[reac]['y'] + rinfo = reac.path+'/info' + if exists(rinfo): + color = Annotator(rinfo).getField('color') + color = getColorCheck(color,GENESIS_COLOR_SEQUENCE) + + textcolor = Annotator(rinfo).getField('textColor') + textcolor = getColorCheck(textcolor,GENESIS_COLOR_SEQUENCE) + + if color == "" or color == " ": + color = getRandColor() + if textcolor == "" or textcolor == " ": + textcolor = getRandColor() + f.write("simundump kreac /kinetics/" + trimPath(reac) + " " +str(0) +" "+ str(kf) + " " + str(kb) + " \"\" " + + str(color) + " " + str(textcolor) + " " + str(int(x)) + " " + str(int(y)) + " 0\n") + return reacList + def trimPath(mobj): - original = mobj - mobj = element(mobj) - found = False - while not isinstance(mobj,ChemCompt) and mobj.path != "/": - mobj = element(mobj.parent) - found = True - if mobj.path == "/": - print("compartment is not found with the given path and the path has reached root ",original) - return - #other than the kinetics compartment, all the othername are converted to group in Genesis which are place under /kinetics - # Any moose object comes under /kinetics then one level down the path is taken. - # e.g /group/poolObject or /Reac - if found: - if mobj.name != "kinetics": - splitpath = original.path[(original.path.find(mobj.name)):len(original.path)] - else: - - pos = original.path.find(mobj.name) - slash = original.path.find('/',pos+1) - splitpath = original.path[slash+1:len(original.path)] - splitpath = re.sub("\[[0-9]+\]", "", splitpath) - s = splitpath.replace("_dash_",'-') - return s + original = mobj + mobj = element(mobj) + found = False + while not isinstance(mobj,ChemCompt) and mobj.path != "/": + mobj = element(mobj.parent) + found = True + if mobj.path == "/": + print("compartment is not found with the given path and the path has reached root ",original) + return + #other than the kinetics compartment, all the othername are converted to group in Genesis which are place under /kinetics + # Any moose object comes under /kinetics then one level down the path is taken. + # e.g /group/poolObject or /Reac + if found: + if mobj.name != "kinetics" and (mobj.className != "CubeMesh"): + print " 478 ",mobj.name,mobj.className + splitpath = original.path[(original.path.find(mobj.name)):len(original.path)] + print " splitpath ",original,splitpath + else: + pos = original.path.find(mobj.name) + slash = original.path.find('/',pos+1) + splitpath = original.path[slash+1:len(original.path)] + splitpath = re.sub("\[[0-9]+\]", "", splitpath) + s = splitpath.replace("_dash_",'-') + return s def writeSumtotal( modelpath,f): - funclist = wildcardFind(modelpath+'/##[ISA=Function]') - for func in funclist: - funcInputs = element(func.path+'/x[0]') - s = "" - for funcInput in funcInputs.neighbors["input"]: - s = s+ "addmsg /kinetics/" + trimPath(funcInput)+ " /kinetics/" + trimPath(element(func.parent)) + " SUMTOTAL n nInit\n" - f.write(s) - -def storePlotMsgs( tgraphs,f): + funclist = wildcardFind(modelpath+'/##[ISA=Function]') + for func in funclist: + funcInputs = element(func.path+'/x[0]') s = "" - if tgraphs: - for graph in tgraphs: - slash = graph.path.find('graphs') - if not slash > -1: - slash = graph.path.find('graph_0') - if slash > -1: - conc = graph.path.find('conc') - if conc > -1 : - tabPath = graph.path[slash:len(graph.path)] - else: - slash1 = graph.path.find('/',slash) - tabPath = "/graphs/conc1" +graph.path[slash1:len(graph.path)] - - if len(element(graph).msgOut): - poolPath = (element(graph).msgOut)[0].e2.path - poolEle = element(poolPath) - poolName = poolEle.name - bgPath = (poolEle.path+'/info') - bg = Annotator(bgPath).color - bg = getColorCheck(bg,GENESIS_COLOR_SEQUENCE) - tabPath = re.sub("\[[0-9]+\]", "", tabPath) - s = s+"addmsg /kinetics/" + trimPath( poolEle ) + " " + tabPath + \ - " PLOT Co *" + poolName + " *" + str(bg) +"\n"; + for funcInput in funcInputs.neighbors["input"]: + s = s+ "addmsg /kinetics/" + trimPath(funcInput)+ " /kinetics/" + trimPath(element(func.parent)) + " SUMTOTAL n nInit\n" f.write(s) -def writeplot( tgraphs,f ): - if tgraphs: - for graphs in tgraphs: - slash = graphs.path.find('graphs') - if not slash > -1: - slash = graphs.path.find('graph_0') - if slash > -1: - conc = graphs.path.find('conc') - if conc > -1 : - tabPath = "/"+graphs.path[slash:len(graphs.path)] - else: - slash1 = graphs.path.find('/',slash) - tabPath = "/graphs/conc1" +graphs.path[slash1:len(graphs.path)] - - if len(element(graphs).msgOut): - poolPath = (element(graphs).msgOut)[0].e2.path - poolEle = element(poolPath) - poolAnno = (poolEle.path+'/info') - fg = Annotator(poolAnno).textColor - fg = getColorCheck(fg,GENESIS_COLOR_SEQUENCE) - tabPath = re.sub("\[[0-9]+\]", "", tabPath) - f.write("simundump xplot " + tabPath + " 3 524288 \\\n" + "\"delete_plot.w <s> <d>; edit_plot.D <w>\" " + fg + " 0 0 1\n") - -def writePool(modelpath,f,volIndex): - for p in wildcardFind(modelpath+'/##[ISA=PoolBase]'): - slave_enable = 0 - if (p.className == "BufPool" or p.className == "ZombieBufPool"): - pool_children = p.children - if pool_children== 0: - slave_enable = 4 - else: - for pchild in pool_children: - if not(pchild.className == "ZombieFunction") and not(pchild.className == "Function"): - slave_enable = 4 - else: - slave_enable = 0 - break - #Eliminated enzyme complex pool - if ((p.parent).className != "Enz" and (p.parent).className != "ZombieEnz"): - xp = cord[p]['x'] - yp = cord[p]['y'] - x = ((xp-xmin)/(xmax-xmin))*multi - y = ((yp-ymin)/(ymax-ymin))*multi - #y = ((ymax-yp)/(ymax-ymin))*multi - pinfo = p.path+'/info' - if exists(pinfo): - color = Annotator(pinfo).getField('color') - color = getColorCheck(color,GENESIS_COLOR_SEQUENCE) - - textcolor = Annotator(pinfo).getField('textColor') - textcolor = getColorCheck(textcolor,GENESIS_COLOR_SEQUENCE) - geometryName = volIndex[p.volume] - volume = p.volume * NA * 1e-3 - f.write("simundump kpool /kinetics/" + trimPath(p) + " 0 " + - str(p.diffConst) + " " + - str(0) + " " + - str(0) + " " + - str(0) + " " + - str(p.nInit) + " " + - str(0) + " " + str(0) + " " + - str(volume)+ " " + - str(slave_enable) + - " /kinetics"+ geometryName + " " + - str(color) +" " + str(textcolor) + " " + str(int(x)) + " " + str(int(y)) + " "+ str(0)+"\n") - # print " notes ",notes - # return notes +def storePlotMsgs( tgraphs,f): + s = "" + if tgraphs: + for graph in tgraphs: + slash = graph.path.find('graphs') + if not slash > -1: + slash = graph.path.find('graph_0') + if slash > -1: + conc = graph.path.find('conc') + if conc > -1 : + tabPath = graph.path[slash:len(graph.path)] + else: + slash1 = graph.path.find('/',slash) + tabPath = "/graphs/conc1" +graph.path[slash1:len(graph.path)] + + if len(element(graph).msgOut): + poolPath = (element(graph).msgOut)[0].e2.path + poolEle = element(poolPath) + poolName = poolEle.name + bgPath = (poolEle.path+'/info') + bg = Annotator(bgPath).color + bg = getColorCheck(bg,GENESIS_COLOR_SEQUENCE) + tabPath = re.sub("\[[0-9]+\]", "", tabPath) + s = s+"addmsg /kinetics/" + trimPath( poolEle ) + " " + tabPath + \ + " PLOT Co *" + poolName + " *" + str(bg) +"\n"; + f.write(s) -def getColorCheck(color,GENESIS_COLOR_SEQUENCE): - if isinstance(color, str): - if color.startswith("#"): - color = ( int(color[1:3], 16) - , int(color[3:5], 16) - , int(color[5:7], 16) - ) - index = nearestColorIndex(color, GENESIS_COLOR_SEQUENCE) - return index - elif color.startswith("("): - color = eval(color)[0:3] - index = nearestColorIndex(color, GENESIS_COLOR_SEQUENCE) - return index +def writeplot( tgraphs,f ): + first, second = " ", " " + if tgraphs: + for graphs in tgraphs: + slash = graphs.path.find('graphs') + if not slash > -1: + slash = graphs.path.find('graph_0') + if slash > -1: + conc = graphs.path.find('conc') + if conc > -1 : + tabPath = "/"+graphs.path[slash:len(graphs.path)] else: - index = color - return index - elif isinstance(color, tuple): - color = map(int, color)[0:3] - index = nearestColorIndex(color, GENESIS_COLOR_SEQUENCE) - return index - elif isinstance(color, int): - index = color - return index + slash1 = graphs.path.find('/',slash) + tabPath = "/graphs/conc1" +graphs.path[slash1:len(graphs.path)] + if len(element(graphs).msgOut): + poolPath = (element(graphs).msgOut)[0].e2.path + poolEle = element(poolPath) + poolAnno = (poolEle.path+'/info') + fg = Annotator(poolAnno).textColor + fg = getColorCheck(fg,GENESIS_COLOR_SEQUENCE) + tabPath = re.sub("\[[0-9]+\]", "", tabPath) + if tabPath.find("conc1") >= 0 or tabPath.find("conc2") >= 0: + first = first + "simundump xplot " + tabPath + " 3 524288 \\\n" + "\"delete_plot.w <s> <d>; edit_plot.D <w>\" " + fg + " 0 0 1\n" + if tabPath.find("conc3") >= 0 or tabPath.find("conc4") >= 0: + second = second + "simundump xplot " + tabPath + " 3 524288 \\\n" + "\"delete_plot.w <s> <d>; edit_plot.D <w>\" " + fg + " 0 0 1\n" + return first,second + +def writePool(modelpath,f,volIndex,sceneitems): + print " modelpath ",modelpath + color = "" + textcolor = "" + for p in wildcardFind(modelpath+'/##[ISA=PoolBase]'): + slave_enable = 0 + if (p.className == "BufPool" or p.className == "ZombieBufPool"): + pool_children = p.children + if pool_children== 0: + slave_enable = 4 + else: + for pchild in pool_children: + if not(pchild.className == "ZombieFunction") and not(pchild.className == "Function"): + slave_enable = 4 + else: + slave_enable = 0 + break + if (p.parent.className != "Enz" and p.parent.className !='ZombieEnz'): + #Assuming "p.parent.className !=Enzyme is cplx which is not written to genesis" + x = sceneitems[p]['x'] + y = sceneitems[p]['y'] + # if sceneitems != None: + # value = sceneitems[p] + # x = calPrime(value['x']) + # y = calPrime(value['y']) + + pinfo = p.path+'/info' + if exists(pinfo): + color = Annotator(pinfo).getField('color') + color = getColorCheck(color,GENESIS_COLOR_SEQUENCE) + textcolor = Annotator(pinfo).getField('textColor') + textcolor = getColorCheck(textcolor,GENESIS_COLOR_SEQUENCE) + + geometryName = volIndex[p.volume] + volume = p.volume * NA * 1e-3 + if color == "" or color == " ": + color = getRandColor() + if textcolor == "" or textcolor == " ": + textcolor = getRandColor() + print " trimPath",trimPath(p) + f.write("simundump kpool /kinetics/" + trimPath(p) + " 0 " + + str(p.diffConst) + " " + + str(0) + " " + + str(0) + " " + + str(0) + " " + + str(p.nInit) + " " + + str(0) + " " + str(0) + " " + + str(volume)+ " " + + str(slave_enable) + + " /kinetics"+ geometryName + " " + + str(color) +" " + str(textcolor) + " " + str(int(x)) + " " + str(int(y)) + " "+ str(0)+"\n") + +def getColorCheck(color,GENESIS_COLOR_SEQUENCE): + if isinstance(color, str): + if color.startswith("#"): + color = ( int(color[1:3], 16) + , int(color[3:5], 16) + , int(color[5:7], 16) + ) + index = nearestColorIndex(color, GENESIS_COLOR_SEQUENCE) + index = index/2 + return index + elif color.startswith("("): + color = eval(color)[0:3] + index = nearestColorIndex(color, GENESIS_COLOR_SEQUENCE) + #This is because in genesis file index of the color is half + index = index/2 + return index else: - raise Exception("Invalid Color Value!") - -def getxyCord(xcord,ycord,list1,sceneitems): - for item in list1: - if not ( isinstance(item,Function) and isinstance(item,ZombieFunction) ): - if sceneitems == None: - objInfo = item.path+'/info' - xpos = xyPosition(objInfo,'x') - ypos = xyPosition(objInfo,'y') - else: - co = sceneitems[item] - xpos = co.scenePos().x() - ypos =-co.scenePos().y() - #xpos = co['x'] - #ypos = co['y'] - - cord[item] ={ 'x': xpos,'y':ypos} - xcord.append(xpos) - ycord.append(ypos) - -def xyPosition(objInfo,xory): - try: - return(float(element(objInfo).getField(xory))) - except ValueError: - return (float(0)) -def getCor(modelRoot,sceneitems): - xmin = ymin = 0.0 - xmax = ymax = 1.0 - positionInfoExist = False - xcord = [] - ycord = [] - mollist = realist = enzlist = cplxlist = tablist = funclist = [] - meshEntryWildcard = '/##[ISA=ChemCompt]' - if modelRoot != '/': - meshEntryWildcard = modelRoot+meshEntryWildcard - for meshEnt in wildcardFind(meshEntryWildcard): - mol_cpl = wildcardFind(meshEnt.path+'/##[ISA=PoolBase]') - realist = wildcardFind(meshEnt.path+'/##[ISA=ReacBase]') - enzlist = wildcardFind(meshEnt.path+'/##[ISA=EnzBase]') - funclist = wildcardFind(meshEnt.path+'/##[ISA=Function]') - tablist = wildcardFind(meshEnt.path+'/##[ISA=StimulusTable]') - if mol_cpl or funclist or enzlist or realist or tablist: - for m in mol_cpl: - if isinstance(element(m.parent),CplxEnzBase): - cplxlist.append(m) - objInfo = m.parent.path+'/info' - elif isinstance(element(m),PoolBase): - mollist.append(m) - objInfo =m.path+'/info' - #xx = xyPosition(objInfo,'x') - #yy = xyPosition(objInfo,'y') - - - if sceneitems == None: - xx = xyPosition(objInfo,'x') - yy = xyPosition(objInfo,'y') - else: - c = sceneitems[m] - xx = c.scenePos().x() - yy =-c.scenePos().y() - #listq = sceneitems[m] - #xx = listq['x'] - #yy = listq['y'] - - cord[m] ={ 'x': xx,'y':yy} - xcord.append(xx) - ycord.append(yy) - - getxyCord(xcord,ycord,realist,sceneitems) - getxyCord(xcord,ycord,enzlist,sceneitems) - getxyCord(xcord,ycord,funclist,sceneitems) - getxyCord(xcord,ycord,tablist,sceneitems) - xmin = min(xcord) - xmax = max(xcord) - ymin = min(ycord) - ymax = max(ycord) - positionInfoExist = not(len(np.nonzero(xcord)[0]) == 0 \ - and len(np.nonzero(ycord)[0]) == 0) - - return(xmin,ymin,xmax,ymax,positionInfoExist) - + index = color + return index + elif isinstance(color, tuple): + color = map(int, color)[0:3] + index = nearestColorIndex(color, GENESIS_COLOR_SEQUENCE) + return index + elif isinstance(color, int): + index = color + return index + else: + raise Exception("Invalid Color Value!") + +ignoreColor= ["mistyrose","antiquewhite","aliceblue","azure","bisque","black","blanchedalmond","blue","cornsilk","darkolivegreen","darkslategray","dimgray","floralwhite","gainsboro","ghostwhite","honeydew","ivory","lavender","lavenderblush","lemonchiffon","lightcyan","lightgoldenrodyellow","lightgray","lightyellow","linen","mediumblue","mintcream","navy","oldlace","papayawhip","saddlebrown","seashell","snow","wheat","white","whitesmoke","aquamarine","lightsalmon","moccasin","limegreen","snow","sienna","beige","dimgrey","lightsage"] +matplotcolor = {} +for name,hexno in matplotlib.colors.cnames.iteritems(): + matplotcolor[name]=hexno + +def getRandColor(): + k = random.choice(matplotcolor.keys()) + if k in ignoreColor: + return getRandColor() + else: + return k def writeCompartment(modelpath,compts,f): - index = 0 - volIndex = {} - for compt in compts: - if compt.name != "kinetics": - xgrp = xmax -random.randrange(1,10) - ygrp = ymin +random.randrange(1,10) - x = ((xgrp-xmin)/(xmax-xmin))*multi - #y = ((ymax-ygrp)/(ymax-ymin))*multi - y = ((ygrp-ymin)/(ymax-ymin))*multi - f.write("simundump group /kinetics/" + compt.name + " 0 " + "blue" + " " + "green" + " x 0 0 \"\" defaultfile \\\n" ) - f.write( " defaultfile.g 0 0 0 " + str(int(x)) + " " + str(int(y)) + " 0\n") - i = 0 - l = len(compts) - geometry = "" - for compt in compts: - size = compt.volume - ndim = compt.numDimensions - vecIndex = l-i-1 - #print vecIndex - i = i+1 - xgeo = xmax -random.randrange(1,10) - ygeo = ymin +random.randrange(1,10) - x = ((xgeo-xmin)/(xmax-xmin))*multi - #y = ((ymax-ygeo)/(ymax-ymin))*multi - y = ((ygeo-ymin)/(ymax-ymin))*multi - if vecIndex > 0: - geometry = geometry+"simundump geometry /kinetics" + "/geometry[" + str(vecIndex) +"] 0 " + str(size) + " " + str(ndim) + " sphere " +" \"\" white black "+ str(int(x)) + " " +str(int(y)) +" 0\n"; - volIndex[size] = "/geometry["+str(vecIndex)+"]" - else: - geometry = geometry+"simundump geometry /kinetics" + "/geometry 0 " + str(size) + " " + str(ndim) + " sphere " +" \"\" white black " + str(int(x)) + " "+str(int(y))+ " 0\n"; - volIndex[size] = "/geometry" - f.write(geometry) - writeGroup(modelpath,f,xmax,ymax) - return volIndex - -def writeGroup(modelpath,f,xmax,ymax): - ignore = ["graphs","moregraphs","geometry","groups","conc1","conc2","conc3","conc4","model","data","graph_0","graph_1","graph_2","graph_3","graph_4","graph_5"] - for g in wildcardFind(modelpath+'/##[TYPE=Neutral]'): - if not g.name in ignore: - if trimPath(g) != None: - xgrp1 = xmax - random.randrange(1,10) - ygrp1 = ymin + random.randrange(1,10) - x = ((xgrp1-xmin)/(xmax-xmin))*multi - #y = ((ymax-ygrp1)/(ymax-ymin))*multi - y = ((ygrp1-ymin)/(ymax-ymin))*multi - f.write("simundump group /kinetics/" + trimPath(g) + " 0 " + "blue" + " " + "green" + " x 0 0 \"\" defaultfile \\\n") - f.write(" defaultfile.g 0 0 0 " + str(int(x)) + " " + str(int(y)) + " 0\n") + index = 0 + volIndex = {} + for compt in compts: + if compt.name != "kinetics": + x = xmin+6 + y = ymax+1 + f.write("simundump group /kinetics/" + compt.name + " 0 " + "blue" + " " + "green" + " x 0 0 \"\" defaultfile \\\n" ) + f.write( " defaultfile.g 0 0 0 " + str(int(x)) + " " + str(int(y)) + " 0\n") + i = 0 + l = len(compts) + geometry = "" + for compt in compts: + size = compt.volume + ndim = compt.numDimensions + vecIndex = l-i-1 + i = i+1 + x = xmin+4 + y = ymax+1 + if vecIndex > 0: + geometry = geometry+"simundump geometry /kinetics" + "/geometry[" + str(vecIndex) +"] 0 " + str(size) + " " + str(ndim) + " sphere " +" \"\" white black "+ str(int(x)) + " " +str(int(y)) +" 0\n"; + volIndex[size] = "/geometry["+str(vecIndex)+"]" + else: + geometry = geometry+"simundump geometry /kinetics" + "/geometry 0 " + str(size) + " " + str(ndim) + " sphere " +" \"\" white black " + str(int(x)) + " "+str(int(y))+ " 0\n"; + volIndex[size] = "/geometry" + f.write(geometry) + writeGroup(modelpath,f) + return volIndex + +def writeGroup(modelpath,f): + ignore = ["graphs","moregraphs","geometry","groups","conc1","conc2","conc3","conc4","model","data","graph_0","graph_1","graph_2","graph_3","graph_4","graph_5"] + for g in wildcardFind(modelpath+'/##[TYPE=Neutral]'): + if not g.name in ignore: + if trimPath(g) != None: + x = xmin+1 + y = ymax+1 + f.write("simundump group /kinetics/" + trimPath(g) + " 0 " + "blue" + " " + "green" + " x 0 0 \"\" defaultfile \\\n") + f.write(" defaultfile.g 0 0 0 " + str(int(x)) + " " + str(int(y)) + " 0\n") def writeHeader(f,maxVol): - simdt = 0.001 - plotdt = 0.1 - rawtime = 100 - maxtime = 100 - defaultVol = maxVol - f.write("//genesis\n" - "// kkit Version 11 flat dumpfile\n\n" - "// Saved on " + str(rawtime)+"\n" - "include kkit {argv 1}\n" - "FASTDT = " + str(simdt)+"\n" - "SIMDT = " +str(simdt)+"\n" - "CONTROLDT = " +str(plotdt)+"\n" - "PLOTDT = " +str(plotdt)+"\n" - "MAXTIME = " +str(maxtime)+"\n" - "TRANSIENT_TIME = 2"+"\n" - "VARIABLE_DT_FLAG = 0"+"\n" - "DEFAULT_VOL = " +str(defaultVol)+"\n" - "VERSION = 11.0 \n" - "setfield /file/modpath value ~/scripts/modules\n" - "kparms\n\n" - ) - f.write( "//genesis\n" - "initdump -version 3 -ignoreorphans 1\n" - "simobjdump table input output alloced step_mode stepsize x y z\n" - "simobjdump xtree path script namemode sizescale\n" - "simobjdump xcoredraw xmin xmax ymin ymax\n" - "simobjdump xtext editable\n" - "simobjdump xgraph xmin xmax ymin ymax overlay\n" - "simobjdump xplot pixflags script fg ysquish do_slope wy\n" - "simobjdump group xtree_fg_req xtree_textfg_req plotfield expanded movealone \\\n" - " link savename file version md5sum mod_save_flag x y z\n" - "simobjdump geometry size dim shape outside xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump kpool DiffConst CoInit Co n nInit mwt nMin vol slave_enable \\\n" - " geomname xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump kreac kf kb notes xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump kenz CoComplexInit CoComplex nComplexInit nComplex vol k1 k2 k3 \\\n" - " keepconc usecomplex notes xtree_fg_req xtree_textfg_req link x y z\n" - "simobjdump stim level1 width1 delay1 level2 width2 delay2 baselevel trig_time \\\n" - " trig_mode notes xtree_fg_req xtree_textfg_req is_running x y z\n" - "simobjdump xtab input output alloced step_mode stepsize notes editfunc \\\n" - " xtree_fg_req xtree_textfg_req baselevel last_x last_y is_running x y z\n" - "simobjdump kchan perm gmax Vm is_active use_nernst notewriteReacs xtree_fg_req \\\n" - " xtree_textfg_req x y z\n" - "simobjdump transport input output alloced step_mode stepsize dt delay clock \\\n" - " kf xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump proto x y z\n" - ) + simdt = 0.001 + plotdt = 0.1 + rawtime = 100 + maxtime = 100 + defaultVol = maxVol + f.write("//genesis\n" + "// kkit Version 11 flat dumpfile\n\n" + "// Saved on " + str(rawtime)+"\n" + "include kkit {argv 1}\n" + "FASTDT = " + str(simdt)+"\n" + "SIMDT = " +str(simdt)+"\n" + "CONTROLDT = " +str(plotdt)+"\n" + "PLOTDT = " +str(plotdt)+"\n" + "MAXTIME = " +str(maxtime)+"\n" + "TRANSIENT_TIME = 2"+"\n" + "VARIABLE_DT_FLAG = 0"+"\n" + "DEFAULT_VOL = " +str(defaultVol)+"\n" + "VERSION = 11.0 \n" + "setfield /file/modpath value ~/scripts/modules\n" + "kparms\n\n" + ) + f.write( "//genesis\n" + "initdump -version 3 -ignoreorphans 1\n" + "simobjdump table input output alloced step_mode stepsize x y z\n" + "simobjdump xtree path script namemode sizescale\n" + "simobjdump xcoredraw xmin xmax ymin ymax\n" + "simobjdump xtext editable\n" + "simobjdump xgraph xmin xmax ymin ymax overlay\n" + "simobjdump xplot pixflags script fg ysquish do_slope wy\n" + "simobjdump group xtree_fg_req xtree_textfg_req plotfield expanded movealone \\\n" + " link savename file version md5sum mod_save_flag x y z\n" + "simobjdump geometry size dim shape outside xtree_fg_req xtree_textfg_req x y z\n" + "simobjdump kpool DiffConst CoInit Co n nInit mwt nMin vol slave_enable \\\n" + " geomname xtree_fg_req xtree_textfg_req x y z\n" + "simobjdump kreac kf kb notes xtree_fg_req xtree_textfg_req x y z\n" + "simobjdump kenz CoComplexInit CoComplex nComplexInit nComplex vol k1 k2 k3 \\\n" + " keepconc usecomplex notes xtree_fg_req xtree_textfg_req link x y z\n" + "simobjdump stim level1 width1 delay1 level2 width2 delay2 baselevel trig_time \\\n" + " trig_mode notes xtree_fg_req xtree_textfg_req is_running x y z\n" + "simobjdump xtab input output alloced step_mode stepsize notes editfunc \\\n" + " xtree_fg_req xtree_textfg_req baselevel last_x last_y is_running x y z\n" + "simobjdump kchan perm gmax Vm is_active use_nernst notes xtree_fg_req \\\n" + " xtree_textfg_req x y z\n" + "simobjdump transport input output alloced step_mode stepsize dt delay clock \\\n" + " kf xtree_fg_req xtree_textfg_req x y z\n" + "simobjdump proto x y z\n" + ) def estimateDefaultVol(compts): - maxVol = 0 - vol = [] - for compt in compts: - vol.append(compt.volume) - if len(vol) > 0: - return max(vol) - return maxVol - -def writeGui( f ): - f.write("simundump xgraph /graphs/conc1 0 0 99 0.001 0.999 0\n" - "simundump xgraph /graphs/conc2 0 0 100 0 1 0\n" - "simundump xgraph /moregraphs/conc3 0 0 100 0 1 0\n" - "simundump xgraph /moregraphs/conc4 0 0 100 0 1 0\n" - "simundump xcoredraw /edit/draw 0 -6 4 -2 6\n" - "simundump xtree /edit/draw/tree 0 \\\n" - " /kinetics/#[],/kinetics/#[]/#[],/kinetics/#[]/#[]/#[][TYPE!=proto],/kinetics/#[]/#[]/#[][TYPE!=linkinfo]/##[] \"edit_elm.D <v>; drag_from_edit.w <d> <S> <x> <y> <z>\" auto 0.6\n" - "simundump xtext /file/notes 0 1\n") + maxVol = 0 + vol = [] + for compt in compts: + vol.append(compt.volume) + if len(vol) > 0: + return max(vol) + return maxVol + def writeNotes(modelpath,f): notes = "" + #items = wildcardFind(modelpath+"/##[ISA=ChemCompt],/##[ISA=ReacBase],/##[ISA=PoolBase],/##[ISA=EnzBase],/##[ISA=Function],/##[ISA=StimulusTable]") items = [] items = wildcardFind(modelpath+"/##[ISA=ChemCompt]") +\ wildcardFind(modelpath+"/##[ISA=PoolBase]") +\ @@ -605,21 +754,22 @@ def writeNotes(modelpath,f): notes = Annotator(info).getField('notes') if (notes): f.write("call /kinetics/"+ trimPath(item)+"/notes LOAD \ \n\""+Annotator(info).getField('notes')+"\"\n") - + def writeFooter1(f): f.write("\nenddump\n // End of dump\n") + def writeFooter2(f): f.write("complete_loading\n") if __name__ == "__main__": - import sys - - filename = sys.argv[1] - modelpath = filename[0:filename.find('.')] - loadModel(filename,'/'+modelpath,"gsl") - output = filename.g - written = write('/'+modelpath,output) - if written: - print(" file written to ",output) - else: - print(" could be written to kkit format") + import sys + + filename = sys.argv[1] + modelpath = filename[0:filename.find('.')] + loadModel(filename,'/'+modelpath,"gsl") + output = modelpath+"_4mmoose.g" + written = write('/'+modelpath,output) + if written: + print(" file written to ",output) + else: + print(" could be written to kkit format") diff --git a/python/moose/moose.py b/python/moose/moose.py index 51774dcb6ce957a47f5a359d316085eff6670060..7581c65f25532c2b352d018b536d57893087a1d3 100644 --- a/python/moose/moose.py +++ b/python/moose/moose.py @@ -164,7 +164,7 @@ def showfield(el, field='*', showtype=False): max_type_len = max(len(dtype) for dtype in value_field_dict.values()) max_field_len = max(len(dtype) for dtype in value_field_dict.keys()) print('\n[', el.path, ']') - for key, dtype in value_field_dict.items(): + for key, dtype in sorted( value_field_dict.items() ): if dtype == 'bad' or key == 'this' or key == 'dummy' or key == 'me' or dtype.startswith('vector') or 'ObjId' in dtype: continue value = el.getField(key) @@ -291,6 +291,13 @@ def getfielddoc(tokens, indent=''): raise NameError('`%s` has no field called `%s`' % (tokens[0], tokens[1])) +def toUnicode( v, encoding= 'utf8' ): + #if isinstance(v, str): + #return v + try: + return v.decode(encoding) + except (AttributeError, UnicodeEncodeError): + return str(v) def getmoosedoc(tokens, inherited=False): """Return MOOSE builtin documentation. @@ -327,16 +334,17 @@ def getmoosedoc(tokens, inherited=False): except ValueError: raise NameError('name \'%s\' not defined.' % (tokens[0])) if len(tokens) > 1: - docstring.write(getfielddoc(tokens)) + docstring.write( toUnicode( getfielddoc(tokens)) ) else: - docstring.write('%s\n' % (class_element.docs)) + docstring.write( toUnicode('%s\n' % (class_element.docs) ) ) append_finfodocs(tokens[0], docstring, indent) if inherited: mro = eval('_moose.%s' % (tokens[0])).mro() for class_ in mro[1:]: if class_ == _moose.melement: break - docstring.write('\n\n#Inherited from %s#\n' % (class_.__name__)) + docstring.write( toUnicode( + '\n\n#Inherited from %s#\n' % (class_.__name__) ) ) append_finfodocs(class_.__name__, docstring, indent) if class_ == _moose.Neutral: # Neutral is the toplevel moose class break @@ -350,14 +358,14 @@ def append_finfodocs(classname, docstring, indent): except ValueError: raise NameError('class \'%s\' not defined.' % (classname)) for ftype, rname in finfotypes: - docstring.write('\n*%s*\n' % (rname.capitalize())) + docstring.write( toUnicode( '\n*%s*\n' % (rname.capitalize())) ) try: finfo = _moose.element('%s/%s' % (class_element.path, ftype)) for field in finfo.vec: - docstring.write('%s%s: %s\n' % - (indent, field.fieldName, field.type)) + docstring.write( toUnicode( + '%s%s: %s\n' % (indent, field.fieldName, field.type)) ) except ValueError: - docstring.write('%sNone\n' % (indent)) + docstring.write( toUnicode( '%sNone\n' % (indent) ) ) # the global pager is set from pydoc even if the user asks for paged diff --git a/python/moose/neuroml2/generated_neuroml.py b/python/moose/neuroml2/generated_neuroml.py index 1db782c1cad252220f55adba228ce755ed0cb652..e2d4c5a3dc294a7d877d1c2a7eb3d0b2c82e1584 100644 --- a/python/moose/neuroml2/generated_neuroml.py +++ b/python/moose/neuroml2/generated_neuroml.py @@ -2,71 +2,43 @@ # -*- coding: utf-8 -*- # -# Generated Sun Jul 28 10:18:38 2013 by generateDS.py version 2.10a. +# Generated Sun Apr 17 15:01:27 2016 by generateDS.py version 2.22a. +# +# Command line options: +# ('-o', 'generated_neuroml.py') +# ('-s', 'generated_neuromlsub.py') +# +# Command line arguments: +# /home/subha/src/neuroml_dev/NeuroML2/Schemas/NeuroML2/NeuroML_v2beta.xsd +# +# Command line: +# /home/subha/.local/bin/generateDS.py -o "generated_neuroml.py" -s "generated_neuromlsub.py" /home/subha/src/neuroml_dev/NeuroML2/Schemas/NeuroML2/NeuroML_v2beta.xsd +# +# Current working directory (os.getcwd()): +# neuroml2 # -from __future__ import print_function import sys -import getopt import re as re_ import base64 import datetime as datetime_ +import warnings as warnings_ +from lxml import etree as etree_ -try: - basestr -except NameError: - basestr = str - -etree_ = None -Verbose_import_ = False -XMLParser_import_none, XMLParser_import_lxml, XMLParser_import_elementtree = 0, 1, 2 -XMLParser_import_library = None -try: - # lxml - from lxml import etree as etree_ - XMLParser_import_library = XMLParser_import_lxml - if Verbose_import_: - print("running with lxml.etree") -except ImportError: - try: - # cElementTree from Python 2.5+ - import xml.etree.cElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with cElementTree on Python 2.5+") - except ImportError: - try: - # ElementTree from Python 2.5+ - import xml.etree.ElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with ElementTree on Python 2.5+") - except ImportError: - try: - # normal cElementTree install - import cElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with cElementTree") - except ImportError: - try: - # normal ElementTree install - import elementtree.ElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with ElementTree") - except ImportError: - raise ImportError( - "Failed to import ElementTree from any known place") - - -def parsexml_(*args, **kwargs): - if (XMLParser_import_library == XMLParser_import_lxml and - 'parser' not in kwargs): + +Validate_simpletypes_ = True +if sys.version_info.major == 2: + BaseStrType_ = basestring +else: + BaseStrType_ = str + + +def parsexml_(infile, parser=None, **kwargs): + if parser is None: # Use the lxml ElementTree compatible parser so that, e.g., # we ignore comments. - kwargs['parser'] = etree_.ETCompatXMLParser() - doc = etree_.parse(*args, **kwargs) + parser = etree_.ETCompatXMLParser() + doc = etree_.parse(infile, parser=parser, **kwargs) return doc # @@ -94,61 +66,68 @@ except ImportError as exp: return None def gds_format_string(self, input_data, input_name=''): return input_data - def gds_validate_string(self, input_data, node, input_name=''): - return input_data + def gds_validate_string(self, input_data, node=None, input_name=''): + if not input_data: + return '' + else: + return input_data def gds_format_base64(self, input_data, input_name=''): return base64.b64encode(input_data) - def gds_validate_base64(self, input_data, node, input_name=''): + def gds_validate_base64(self, input_data, node=None, input_name=''): return input_data def gds_format_integer(self, input_data, input_name=''): return '%d' % input_data - def gds_validate_integer(self, input_data, node, input_name=''): + def gds_validate_integer(self, input_data, node=None, input_name=''): return input_data def gds_format_integer_list(self, input_data, input_name=''): - return '%s' % input_data - def gds_validate_integer_list(self, input_data, node, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_integer_list( + self, input_data, node=None, input_name=''): values = input_data.split() for value in values: try: - float(value) + int(value) except (TypeError, ValueError): raise_parse_error(node, 'Requires sequence of integers') - return input_data + return values def gds_format_float(self, input_data, input_name=''): - return '%f' % input_data - def gds_validate_float(self, input_data, node, input_name=''): + return ('%.15f' % input_data).rstrip('0') + def gds_validate_float(self, input_data, node=None, input_name=''): return input_data def gds_format_float_list(self, input_data, input_name=''): - return '%s' % input_data - def gds_validate_float_list(self, input_data, node, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_float_list( + self, input_data, node=None, input_name=''): values = input_data.split() for value in values: try: float(value) except (TypeError, ValueError): raise_parse_error(node, 'Requires sequence of floats') - return input_data + return values def gds_format_double(self, input_data, input_name=''): return '%e' % input_data - def gds_validate_double(self, input_data, node, input_name=''): + def gds_validate_double(self, input_data, node=None, input_name=''): return input_data def gds_format_double_list(self, input_data, input_name=''): - return '%s' % input_data - def gds_validate_double_list(self, input_data, node, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_double_list( + self, input_data, node=None, input_name=''): values = input_data.split() for value in values: try: float(value) except (TypeError, ValueError): raise_parse_error(node, 'Requires sequence of doubles') - return input_data + return values def gds_format_boolean(self, input_data, input_name=''): return ('%s' % input_data).lower() - def gds_validate_boolean(self, input_data, node, input_name=''): + def gds_validate_boolean(self, input_data, node=None, input_name=''): return input_data def gds_format_boolean_list(self, input_data, input_name=''): - return '%s' % input_data - def gds_validate_boolean_list(self, input_data, node, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_boolean_list( + self, input_data, node=None, input_name=''): values = input_data.split() for value in values: if value not in ('true', '1', 'false', '0', ): @@ -156,8 +135,8 @@ except ImportError as exp: node, 'Requires sequence of booleans ' '("true", "1", "false", "0")') - return input_data - def gds_validate_datetime(self, input_data, node, input_name=''): + return values + def gds_validate_datetime(self, input_data, node=None, input_name=''): return input_data def gds_format_datetime(self, input_data, input_name=''): if input_data.microsecond == 0: @@ -199,7 +178,7 @@ except ImportError as exp: def gds_parse_datetime(cls, input_data): tz = None if input_data[-1] == 'Z': - tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') input_data = input_data[:-1] else: results = GeneratedsSuper.tzoff_pattern.search(input_data) @@ -211,7 +190,10 @@ except ImportError as exp: tz = GeneratedsSuper._FixedOffsetTZ( tzoff, results.group(0)) input_data = input_data[:-6] - if len(input_data.split('.')) > 1: + time_parts = input_data.split('.') + if len(time_parts) > 1: + micro_seconds = int(float('0.' + time_parts[1]) * 1000000) + input_data = '%s.%s' % (time_parts[0], micro_seconds, ) dt = datetime_.datetime.strptime( input_data, '%Y-%m-%dT%H:%M:%S.%f') else: @@ -219,7 +201,7 @@ except ImportError as exp: input_data, '%Y-%m-%dT%H:%M:%S') dt = dt.replace(tzinfo=tz) return dt - def gds_validate_date(self, input_data, node, input_name=''): + def gds_validate_date(self, input_data, node=None, input_name=''): return input_data def gds_format_date(self, input_data, input_name=''): _svalue = '%04d-%02d-%02d' % ( @@ -242,7 +224,8 @@ except ImportError as exp: _svalue += '+' hours = total_seconds // 3600 minutes = (total_seconds - (hours * 3600)) // 60 - _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + _svalue += '{0:02d}:{1:02d}'.format( + hours, minutes) except AttributeError: pass return _svalue @@ -250,7 +233,7 @@ except ImportError as exp: def gds_parse_date(cls, input_data): tz = None if input_data[-1] == 'Z': - tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') input_data = input_data[:-1] else: results = GeneratedsSuper.tzoff_pattern.search(input_data) @@ -265,7 +248,7 @@ except ImportError as exp: dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d') dt = dt.replace(tzinfo=tz) return dt.date() - def gds_validate_time(self, input_data, node, input_name=''): + def gds_validate_time(self, input_data, node=None, input_name=''): return input_data def gds_format_time(self, input_data, input_name=''): if input_data.microsecond == 0: @@ -297,11 +280,26 @@ except ImportError as exp: minutes = (total_seconds - (hours * 3600)) // 60 _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) return _svalue + def gds_validate_simple_patterns(self, patterns, target): + # pat is a list of lists of strings/patterns. We should: + # - AND the outer elements + # - OR the inner elements + found1 = True + for patterns1 in patterns: + found2 = False + for patterns2 in patterns1: + if re_.search(patterns2, target) is not None: + found2 = True + break + if not found2: + found1 = False + break + return found1 @classmethod def gds_parse_time(cls, input_data): tz = None if input_data[-1] == 'Z': - tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') input_data = input_data[:-1] else: results = GeneratedsSuper.tzoff_pattern.search(input_data) @@ -352,6 +350,20 @@ except ImportError as exp: @classmethod def gds_reverse_node_mapping(cls, mapping): return dict(((v, k) for k, v in mapping.iteritems())) + @staticmethod + def gds_encode(instring): + if sys.version_info.major == 2: + return instring.encode(ExternalEncoding) + else: + return instring + + def getSubclassFromModule_(module, class_): + '''Get the subclass of a class from a specific module.''' + name = class_.__name__ + 'Sub' + if hasattr(module, name): + return getattr(module, name) + else: + return None # @@ -377,6 +389,11 @@ ExternalEncoding = 'ascii' Tag_pattern_ = re_.compile(r'({.*})?(.*)') String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') +CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL) + +# Change this to redirect the generated superclass module to use a +# specific subclass module. +CurrentSubclassModule_ = None # # Support/utility functions. @@ -390,19 +407,32 @@ def showIndent(outfile, level, pretty_print=True): def quote_xml(inStr): + "Escape markup chars, but do not modify CDATA sections." if not inStr: return '' - s1 = (isinstance(inStr, basestring) and inStr or - '%s' % inStr) - s1 = s1.replace('&', '&') + s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr) + s2 = '' + pos = 0 + matchobjects = CDATA_pattern_.finditer(s1) + for mo in matchobjects: + s3 = s1[pos:mo.start()] + s2 += quote_xml_aux(s3) + s2 += s1[mo.start():mo.end()] + pos = mo.end() + s3 = s1[pos:] + s2 += quote_xml_aux(s3) + return s2 + + +def quote_xml_aux(inStr): + s1 = inStr.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): - s1 = (isinstance(inStr, basestring) and inStr or - '%s' % inStr) + s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') @@ -462,11 +492,7 @@ class GDSParseError(Exception): def raise_parse_error(node, msg): - if XMLParser_import_library == XMLParser_import_lxml: - msg = '%s (element %s/line %d)' % ( - msg, node.tag, node.sourceline, ) - else: - msg = '%s (element %s)' % (msg, node.tag, ) + msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, ) raise GDSParseError(msg) @@ -616,11 +642,17 @@ class Annotation(GeneratedsSuper): subclass = None superclass = None def __init__(self, anytypeobjs_=None): + self.original_tagname_ = None if anytypeobjs_ is None: self.anytypeobjs_ = [] else: self.anytypeobjs_ = anytypeobjs_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Annotation) + if subclass is not None: + return subclass(*args_, **kwargs_) if Annotation.subclass: return Annotation.subclass(*args_, **kwargs_) else: @@ -642,13 +674,15 @@ class Annotation(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Annotation') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Annotation', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -662,29 +696,13 @@ class Annotation(GeneratedsSuper): eol_ = '' for obj_ in self.anytypeobjs_: obj_.export(outfile, level, namespace_, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Annotation'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - pass - def exportLiteralChildren(self, outfile, level, name_): - showIndent(outfile, level) - outfile.write('anytypeobjs_=[\n') - level += 1 - for anytypeobjs_ in self.anytypeobjs_: - anytypeobjs_.exportLiteral(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -699,15 +717,21 @@ class ComponentType(GeneratedsSuper): ComponentType.""" subclass = None superclass = None - def __init__(self, extends=None, name=None, description=None, anytypeobjs_=None): - self.extends = _cast(None, extends) + def __init__(self, name=None, extends=None, description=None, anytypeobjs_=None): + self.original_tagname_ = None self.name = _cast(None, name) + self.extends = _cast(None, extends) self.description = _cast(None, description) if anytypeobjs_ is None: self.anytypeobjs_ = [] else: self.anytypeobjs_ = anytypeobjs_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ComponentType) + if subclass is not None: + return subclass(*args_, **kwargs_) if ComponentType.subclass: return ComponentType.subclass(*args_, **kwargs_) else: @@ -717,10 +741,10 @@ class ComponentType(GeneratedsSuper): def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_ def add_anytypeobjs_(self, value): self.anytypeobjs_.append(value) def insert_anytypeobjs_(self, index, value): self._anytypeobjs_[index] = value - def get_extends(self): return self.extends - def set_extends(self, extends): self.extends = extends def get_name(self): return self.name def set_name(self, name): self.name = name + def get_extends(self): return self.extends + def set_extends(self, extends): self.extends = extends def get_description(self): return self.description def set_description(self, description): self.description = description def hasContent_(self): @@ -735,27 +759,29 @@ class ComponentType(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ComponentType') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ComponentType', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='ComponentType'): - if self.extends is not None and 'extends' not in already_processed: - already_processed.add('extends') - outfile.write(' extends=%s' % (self.gds_format_string(quote_attrib(self.extends).encode(ExternalEncoding), input_name='extends'), )) if self.name is not None and 'name' not in already_processed: already_processed.add('name') - outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) + outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), )) + if self.extends is not None and 'extends' not in already_processed: + already_processed.add('extends') + outfile.write(' extends=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.extends), input_name='extends')), )) if self.description is not None and 'description' not in already_processed: already_processed.add('description') - outfile.write(' description=%s' % (self.gds_format_string(quote_attrib(self.description).encode(ExternalEncoding), input_name='description'), )) + outfile.write(' description=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.description), input_name='description')), )) def exportChildren(self, outfile, level, namespace_='', name_='ComponentType', fromsubclass_=False, pretty_print=True): if pretty_print: eol_ = '\n' @@ -763,49 +789,22 @@ class ComponentType(GeneratedsSuper): eol_ = '' for obj_ in self.anytypeobjs_: obj_.export(outfile, level, namespace_, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ComponentType'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.extends is not None and 'extends' not in already_processed: - already_processed.add('extends') - showIndent(outfile, level) - outfile.write('extends="%s",\n' % (self.extends,)) - if self.name is not None and 'name' not in already_processed: - already_processed.add('name') - showIndent(outfile, level) - outfile.write('name="%s",\n' % (self.name,)) - if self.description is not None and 'description' not in already_processed: - already_processed.add('description') - showIndent(outfile, level) - outfile.write('description="%s",\n' % (self.description,)) - def exportLiteralChildren(self, outfile, level, name_): - showIndent(outfile, level) - outfile.write('anytypeobjs_=[\n') - level += 1 - for anytypeobjs_ in self.anytypeobjs_: - anytypeobjs_.exportLiteral(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('extends', node) - if value is not None and 'extends' not in already_processed: - already_processed.add('extends') - self.extends = value value = find_attr_value_('name', node) if value is not None and 'name' not in already_processed: already_processed.add('name') self.name = value + value = find_attr_value_('extends', node) + if value is not None and 'extends' not in already_processed: + already_processed.add('extends') + self.extends = value value = find_attr_value_('description', node) if value is not None and 'description' not in already_processed: already_processed.add('description') @@ -821,6 +820,7 @@ class IncludeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, href=None, valueOf_=None, mixedclass_=None, content_=None): + self.original_tagname_ = None self.href = _cast(None, href) self.valueOf_ = valueOf_ if mixedclass_ is None: @@ -833,6 +833,11 @@ class IncludeType(GeneratedsSuper): self.content_ = content_ self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IncludeType) + if subclass is not None: + return subclass(*args_, **kwargs_) if IncludeType.subclass: return IncludeType.subclass(*args_, **kwargs_) else: @@ -844,7 +849,7 @@ class IncludeType(GeneratedsSuper): def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ def hasContent_(self): if ( - self.valueOf_ + 1 if type(self.valueOf_) in [int,float] else self.valueOf_ ): return True else: @@ -854,6 +859,8 @@ class IncludeType(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() @@ -864,24 +871,9 @@ class IncludeType(GeneratedsSuper): def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='IncludeType'): if self.href is not None and 'href' not in already_processed: already_processed.add('href') - outfile.write(' href=%s' % (self.gds_format_string(quote_attrib(self.href).encode(ExternalEncoding), input_name='href'), )) + outfile.write(' href=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.href), input_name='href')), )) def exportChildren(self, outfile, level, namespace_='', name_='IncludeType', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='IncludeType'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,)) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.href is not None and 'href' not in already_processed: - already_processed.add('href') - showIndent(outfile, level) - outfile.write('href="%s",\n' % (self.href,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) @@ -893,6 +885,7 @@ class IncludeType(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('href', node) if value is not None and 'href' not in already_processed: @@ -910,35 +903,52 @@ class IncludeType(GeneratedsSuper): class Q10Settings(GeneratedsSuper): subclass = None superclass = None - def __init__(self, fixedQ10=None, experimentalTemp=None, type_=None, q10Factor=None): - self.fixedQ10 = _cast(None, fixedQ10) - self.experimentalTemp = _cast(None, experimentalTemp) + def __init__(self, type_=None, fixedQ10=None, q10Factor=None, experimentalTemp=None): + self.original_tagname_ = None self.type_ = _cast(None, type_) + self.fixedQ10 = _cast(None, fixedQ10) self.q10Factor = _cast(None, q10Factor) - pass + self.experimentalTemp = _cast(None, experimentalTemp) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Q10Settings) + if subclass is not None: + return subclass(*args_, **kwargs_) if Q10Settings.subclass: return Q10Settings.subclass(*args_, **kwargs_) else: return Q10Settings(*args_, **kwargs_) factory = staticmethod(factory) + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ def get_fixedQ10(self): return self.fixedQ10 def set_fixedQ10(self, fixedQ10): self.fixedQ10 = fixedQ10 - def validate_Nml2Quantity_none(self, value): - # Validate type Nml2Quantity_none, a restriction on xs:string. - pass + def get_q10Factor(self): return self.q10Factor + def set_q10Factor(self, q10Factor): self.q10Factor = q10Factor def get_experimentalTemp(self): return self.experimentalTemp def set_experimentalTemp(self, experimentalTemp): self.experimentalTemp = experimentalTemp - def validate_Nml2Quantity_temperature(self, value): - # Validate type Nml2Quantity_temperature, a restriction on xs:string. - pass - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass - def get_q10Factor(self): return self.q10Factor - def set_q10Factor(self, q10Factor): self.q10Factor = q10Factor + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_none(self, value): + # Validate type Nml2Quantity_none, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_none_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_none_patterns_, )) + validate_Nml2Quantity_none_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?$']] + def validate_Nml2Quantity_temperature(self, value): + # Validate type Nml2Quantity_temperature, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_temperature_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_temperature_patterns_, )) + validate_Nml2Quantity_temperature_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(degC)$']] def hasContent_(self): if ( @@ -951,55 +961,32 @@ class Q10Settings(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Q10Settings') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Q10Settings', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Q10Settings'): - if self.fixedQ10 is not None and 'fixedQ10' not in already_processed: - already_processed.add('fixedQ10') - outfile.write(' fixedQ10=%s' % (quote_attrib(self.fixedQ10), )) - if self.experimentalTemp is not None and 'experimentalTemp' not in already_processed: - already_processed.add('experimentalTemp') - outfile.write(' experimentalTemp=%s' % (quote_attrib(self.experimentalTemp), )) if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') outfile.write(' type=%s' % (quote_attrib(self.type_), )) + if self.fixedQ10 is not None and 'fixedQ10' not in already_processed: + already_processed.add('fixedQ10') + outfile.write(' fixedQ10=%s' % (quote_attrib(self.fixedQ10), )) if self.q10Factor is not None and 'q10Factor' not in already_processed: already_processed.add('q10Factor') outfile.write(' q10Factor=%s' % (quote_attrib(self.q10Factor), )) - def exportChildren(self, outfile, level, namespace_='', name_='Q10Settings', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='Q10Settings'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.fixedQ10 is not None and 'fixedQ10' not in already_processed: - already_processed.add('fixedQ10') - showIndent(outfile, level) - outfile.write('fixedQ10="%s",\n' % (self.fixedQ10,)) if self.experimentalTemp is not None and 'experimentalTemp' not in already_processed: already_processed.add('experimentalTemp') - showIndent(outfile, level) - outfile.write('experimentalTemp="%s",\n' % (self.experimentalTemp,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - if self.q10Factor is not None and 'q10Factor' not in already_processed: - already_processed.add('q10Factor') - showIndent(outfile, level) - outfile.write('q10Factor="%s",\n' % (self.q10Factor,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' experimentalTemp=%s' % (quote_attrib(self.experimentalTemp), )) + def exportChildren(self, outfile, level, namespace_='', name_='Q10Settings', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -1007,27 +994,28 @@ class Q10Settings(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('fixedQ10', node) - if value is not None and 'fixedQ10' not in already_processed: - already_processed.add('fixedQ10') - self.fixedQ10 = value - self.validate_Nml2Quantity_none(self.fixedQ10) # validate type Nml2Quantity_none - value = find_attr_value_('experimentalTemp', node) - if value is not None and 'experimentalTemp' not in already_processed: - already_processed.add('experimentalTemp') - self.experimentalTemp = value - self.validate_Nml2Quantity_temperature(self.experimentalTemp) # validate type Nml2Quantity_temperature value = find_attr_value_('type', node) if value is not None and 'type' not in already_processed: already_processed.add('type') self.type_ = value self.validate_NmlId(self.type_) # validate type NmlId + value = find_attr_value_('fixedQ10', node) + if value is not None and 'fixedQ10' not in already_processed: + already_processed.add('fixedQ10') + self.fixedQ10 = value + self.validate_Nml2Quantity_none(self.fixedQ10) # validate type Nml2Quantity_none value = find_attr_value_('q10Factor', node) if value is not None and 'q10Factor' not in already_processed: already_processed.add('q10Factor') self.q10Factor = value self.validate_Nml2Quantity_none(self.q10Factor) # validate type Nml2Quantity_none + value = find_attr_value_('experimentalTemp', node) + if value is not None and 'experimentalTemp' not in already_processed: + already_processed.add('experimentalTemp') + self.experimentalTemp = value + self.validate_Nml2Quantity_temperature(self.experimentalTemp) # validate type Nml2Quantity_temperature def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class Q10Settings @@ -1036,35 +1024,52 @@ class Q10Settings(GeneratedsSuper): class HHRate(GeneratedsSuper): subclass = None superclass = None - def __init__(self, midpoint=None, rate=None, scale=None, type_=None): - self.midpoint = _cast(None, midpoint) + def __init__(self, type_=None, rate=None, midpoint=None, scale=None): + self.original_tagname_ = None + self.type_ = _cast(None, type_) self.rate = _cast(None, rate) + self.midpoint = _cast(None, midpoint) self.scale = _cast(None, scale) - self.type_ = _cast(None, type_) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, HHRate) + if subclass is not None: + return subclass(*args_, **kwargs_) if HHRate.subclass: return HHRate.subclass(*args_, **kwargs_) else: return HHRate(*args_, **kwargs_) factory = staticmethod(factory) - def get_midpoint(self): return self.midpoint - def set_midpoint(self, midpoint): self.midpoint = midpoint - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ def get_rate(self): return self.rate def set_rate(self, rate): self.rate = rate - def validate_Nml2Quantity_pertime(self, value): - # Validate type Nml2Quantity_pertime, a restriction on xs:string. - pass + def get_midpoint(self): return self.midpoint + def set_midpoint(self, midpoint): self.midpoint = midpoint def get_scale(self): return self.scale def set_scale(self, scale): self.scale = scale - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_pertime(self, value): + # Validate type Nml2Quantity_pertime, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_pertime_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_pertime_patterns_, )) + validate_Nml2Quantity_pertime_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(per_s|per_ms|Hz)$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( @@ -1077,55 +1082,32 @@ class HHRate(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='HHRate') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='HHRate', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='HHRate'): - if self.midpoint is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - outfile.write(' midpoint=%s' % (quote_attrib(self.midpoint), )) - if self.rate is not None and 'rate' not in already_processed: - already_processed.add('rate') - outfile.write(' rate=%s' % (quote_attrib(self.rate), )) - if self.scale is not None and 'scale' not in already_processed: - already_processed.add('scale') - outfile.write(' scale=%s' % (quote_attrib(self.scale), )) if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') outfile.write(' type=%s' % (quote_attrib(self.type_), )) - def exportChildren(self, outfile, level, namespace_='', name_='HHRate', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='HHRate'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.midpoint is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - showIndent(outfile, level) - outfile.write('midpoint="%s",\n' % (self.midpoint,)) if self.rate is not None and 'rate' not in already_processed: already_processed.add('rate') - showIndent(outfile, level) - outfile.write('rate="%s",\n' % (self.rate,)) + outfile.write(' rate=%s' % (quote_attrib(self.rate), )) + if self.midpoint is not None and 'midpoint' not in already_processed: + already_processed.add('midpoint') + outfile.write(' midpoint=%s' % (quote_attrib(self.midpoint), )) if self.scale is not None and 'scale' not in already_processed: already_processed.add('scale') - showIndent(outfile, level) - outfile.write('scale="%s",\n' % (self.scale,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' scale=%s' % (quote_attrib(self.scale), )) + def exportChildren(self, outfile, level, namespace_='', name_='HHRate', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -1133,27 +1115,28 @@ class HHRate(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('midpoint', node) - if value is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - self.midpoint = value - self.validate_Nml2Quantity_voltage(self.midpoint) # validate type Nml2Quantity_voltage + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + self.validate_NmlId(self.type_) # validate type NmlId value = find_attr_value_('rate', node) if value is not None and 'rate' not in already_processed: already_processed.add('rate') self.rate = value self.validate_Nml2Quantity_pertime(self.rate) # validate type Nml2Quantity_pertime + value = find_attr_value_('midpoint', node) + if value is not None and 'midpoint' not in already_processed: + already_processed.add('midpoint') + self.midpoint = value + self.validate_Nml2Quantity_voltage(self.midpoint) # validate type Nml2Quantity_voltage value = find_attr_value_('scale', node) if value is not None and 'scale' not in already_processed: already_processed.add('scale') self.scale = value self.validate_Nml2Quantity_voltage(self.scale) # validate type Nml2Quantity_voltage - value = find_attr_value_('type', node) - if value is not None and 'type' not in already_processed: - already_processed.add('type') - self.type_ = value - self.validate_NmlId(self.type_) # validate type NmlId def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class HHRate @@ -1162,32 +1145,45 @@ class HHRate(GeneratedsSuper): class HHVariable(GeneratedsSuper): subclass = None superclass = None - def __init__(self, midpoint=None, rate=None, scale=None, type_=None): - self.midpoint = _cast(None, midpoint) + def __init__(self, type_=None, rate=None, midpoint=None, scale=None): + self.original_tagname_ = None + self.type_ = _cast(None, type_) self.rate = _cast(float, rate) + self.midpoint = _cast(None, midpoint) self.scale = _cast(None, scale) - self.type_ = _cast(None, type_) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, HHVariable) + if subclass is not None: + return subclass(*args_, **kwargs_) if HHVariable.subclass: return HHVariable.subclass(*args_, **kwargs_) else: return HHVariable(*args_, **kwargs_) factory = staticmethod(factory) - def get_midpoint(self): return self.midpoint - def set_midpoint(self, midpoint): self.midpoint = midpoint - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ def get_rate(self): return self.rate def set_rate(self, rate): self.rate = rate + def get_midpoint(self): return self.midpoint + def set_midpoint(self, midpoint): self.midpoint = midpoint def get_scale(self): return self.scale def set_scale(self, scale): self.scale = scale - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( @@ -1200,55 +1196,32 @@ class HHVariable(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='HHVariable') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='HHVariable', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='HHVariable'): - if self.midpoint is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - outfile.write(' midpoint=%s' % (quote_attrib(self.midpoint), )) - if self.rate is not None and 'rate' not in already_processed: - already_processed.add('rate') - outfile.write(' rate="%s"' % self.gds_format_float(self.rate, input_name='rate')) - if self.scale is not None and 'scale' not in already_processed: - already_processed.add('scale') - outfile.write(' scale=%s' % (quote_attrib(self.scale), )) if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') outfile.write(' type=%s' % (quote_attrib(self.type_), )) - def exportChildren(self, outfile, level, namespace_='', name_='HHVariable', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='HHVariable'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.midpoint is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - showIndent(outfile, level) - outfile.write('midpoint="%s",\n' % (self.midpoint,)) if self.rate is not None and 'rate' not in already_processed: already_processed.add('rate') - showIndent(outfile, level) - outfile.write('rate=%f,\n' % (self.rate,)) + outfile.write(' rate="%s"' % self.gds_format_float(self.rate, input_name='rate')) + if self.midpoint is not None and 'midpoint' not in already_processed: + already_processed.add('midpoint') + outfile.write(' midpoint=%s' % (quote_attrib(self.midpoint), )) if self.scale is not None and 'scale' not in already_processed: already_processed.add('scale') - showIndent(outfile, level) - outfile.write('scale="%s",\n' % (self.scale,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' scale=%s' % (quote_attrib(self.scale), )) + def exportChildren(self, outfile, level, namespace_='', name_='HHVariable', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -1256,29 +1229,30 @@ class HHVariable(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('midpoint', node) - if value is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - self.midpoint = value - self.validate_Nml2Quantity_voltage(self.midpoint) # validate type Nml2Quantity_voltage - value = find_attr_value_('rate', node) + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + self.validate_NmlId(self.type_) # validate type NmlId + value = find_attr_value_('rate', node) if value is not None and 'rate' not in already_processed: already_processed.add('rate') try: self.rate = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (rate): %s' % exp) + value = find_attr_value_('midpoint', node) + if value is not None and 'midpoint' not in already_processed: + already_processed.add('midpoint') + self.midpoint = value + self.validate_Nml2Quantity_voltage(self.midpoint) # validate type Nml2Quantity_voltage value = find_attr_value_('scale', node) if value is not None and 'scale' not in already_processed: already_processed.add('scale') self.scale = value self.validate_Nml2Quantity_voltage(self.scale) # validate type Nml2Quantity_voltage - value = find_attr_value_('type', node) - if value is not None and 'type' not in already_processed: - already_processed.add('type') - self.type_ = value - self.validate_NmlId(self.type_) # validate type NmlId def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class HHVariable @@ -1287,38 +1261,55 @@ class HHVariable(GeneratedsSuper): class HHTime(GeneratedsSuper): subclass = None superclass = None - def __init__(self, midpoint=None, rate=None, scale=None, type_=None, tau=None): - self.midpoint = _cast(None, midpoint) + def __init__(self, type_=None, rate=None, midpoint=None, scale=None, tau=None): + self.original_tagname_ = None + self.type_ = _cast(None, type_) self.rate = _cast(None, rate) + self.midpoint = _cast(None, midpoint) self.scale = _cast(None, scale) - self.type_ = _cast(None, type_) self.tau = _cast(None, tau) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, HHTime) + if subclass is not None: + return subclass(*args_, **kwargs_) if HHTime.subclass: return HHTime.subclass(*args_, **kwargs_) else: return HHTime(*args_, **kwargs_) factory = staticmethod(factory) - def get_midpoint(self): return self.midpoint - def set_midpoint(self, midpoint): self.midpoint = midpoint - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ def get_rate(self): return self.rate def set_rate(self, rate): self.rate = rate - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + def get_midpoint(self): return self.midpoint + def set_midpoint(self, midpoint): self.midpoint = midpoint def get_scale(self): return self.scale def set_scale(self, scale): self.scale = scale - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass def get_tau(self): return self.tau def set_tau(self, tau): self.tau = tau + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( @@ -1331,90 +1322,64 @@ class HHTime(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='HHTime') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='HHTime', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='HHTime'): - if self.midpoint is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - outfile.write(' midpoint=%s' % (quote_attrib(self.midpoint), )) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('type_') + outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.rate is not None and 'rate' not in already_processed: already_processed.add('rate') outfile.write(' rate=%s' % (quote_attrib(self.rate), )) + if self.midpoint is not None and 'midpoint' not in already_processed: + already_processed.add('midpoint') + outfile.write(' midpoint=%s' % (quote_attrib(self.midpoint), )) if self.scale is not None and 'scale' not in already_processed: already_processed.add('scale') outfile.write(' scale=%s' % (quote_attrib(self.scale), )) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.tau is not None and 'tau' not in already_processed: already_processed.add('tau') outfile.write(' tau=%s' % (quote_attrib(self.tau), )) def exportChildren(self, outfile, level, namespace_='', name_='HHTime', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='HHTime'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.midpoint is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - showIndent(outfile, level) - outfile.write('midpoint="%s",\n' % (self.midpoint,)) - if self.rate is not None and 'rate' not in already_processed: - already_processed.add('rate') - showIndent(outfile, level) - outfile.write('rate="%s",\n' % (self.rate,)) - if self.scale is not None and 'scale' not in already_processed: - already_processed.add('scale') - showIndent(outfile, level) - outfile.write('scale="%s",\n' % (self.scale,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - if self.tau is not None and 'tau' not in already_processed: - already_processed.add('tau') - showIndent(outfile, level) - outfile.write('tau="%s",\n' % (self.tau,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('midpoint', node) - if value is not None and 'midpoint' not in already_processed: - already_processed.add('midpoint') - self.midpoint = value - self.validate_Nml2Quantity_voltage(self.midpoint) # validate type Nml2Quantity_voltage + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + self.validate_NmlId(self.type_) # validate type NmlId value = find_attr_value_('rate', node) if value is not None and 'rate' not in already_processed: already_processed.add('rate') self.rate = value self.validate_Nml2Quantity_time(self.rate) # validate type Nml2Quantity_time + value = find_attr_value_('midpoint', node) + if value is not None and 'midpoint' not in already_processed: + already_processed.add('midpoint') + self.midpoint = value + self.validate_Nml2Quantity_voltage(self.midpoint) # validate type Nml2Quantity_voltage value = find_attr_value_('scale', node) if value is not None and 'scale' not in already_processed: already_processed.add('scale') self.scale = value self.validate_Nml2Quantity_voltage(self.scale) # validate type Nml2Quantity_voltage - value = find_attr_value_('type', node) - if value is not None and 'type' not in already_processed: - already_processed.add('type') - self.type_ = value - self.validate_NmlId(self.type_) # validate type NmlId value = find_attr_value_('tau', node) if value is not None and 'tau' not in already_processed: already_processed.add('tau') @@ -1428,41 +1393,67 @@ class HHTime(GeneratedsSuper): class BlockMechanism(GeneratedsSuper): subclass = None superclass = None - def __init__(self, blockConcentration=None, scalingConc=None, type_=None, species=None, scalingVolt=None): - self.blockConcentration = _cast(None, blockConcentration) - self.scalingConc = _cast(None, scalingConc) + def __init__(self, type_=None, species=None, blockConcentration=None, scalingConc=None, scalingVolt=None): + self.original_tagname_ = None self.type_ = _cast(None, type_) self.species = _cast(None, species) + self.blockConcentration = _cast(None, blockConcentration) + self.scalingConc = _cast(None, scalingConc) self.scalingVolt = _cast(None, scalingVolt) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BlockMechanism) + if subclass is not None: + return subclass(*args_, **kwargs_) if BlockMechanism.subclass: return BlockMechanism.subclass(*args_, **kwargs_) else: return BlockMechanism(*args_, **kwargs_) factory = staticmethod(factory) + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + def get_species(self): return self.species + def set_species(self, species): self.species = species def get_blockConcentration(self): return self.blockConcentration def set_blockConcentration(self, blockConcentration): self.blockConcentration = blockConcentration - def validate_Nml2Quantity_concentration(self, value): - # Validate type Nml2Quantity_concentration, a restriction on xs:string. - pass def get_scalingConc(self): return self.scalingConc def set_scalingConc(self, scalingConc): self.scalingConc = scalingConc - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ + def get_scalingVolt(self): return self.scalingVolt + def set_scalingVolt(self, scalingVolt): self.scalingVolt = scalingVolt def validate_BlockTypes(self, value): # Validate type BlockTypes, a restriction on xs:string. - pass - def get_species(self): return self.species - def set_species(self, species): self.species = species + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['voltageConcDepBlockMechanism'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on BlockTypes' % {"value" : value.encode("utf-8")} ) def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass - def get_scalingVolt(self): return self.scalingVolt - def set_scalingVolt(self, scalingVolt): self.scalingVolt = scalingVolt + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_concentration(self, value): + # Validate type Nml2Quantity_concentration, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_concentration_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_concentration_patterns_, )) + validate_Nml2Quantity_concentration_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(mol_per_m3|mol_per_cm3|M|mM)$']] def validate_Nml2Quantity_voltage(self, value): # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( @@ -1475,62 +1466,35 @@ class BlockMechanism(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BlockMechanism') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BlockMechanism', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='BlockMechanism'): - if self.blockConcentration is not None and 'blockConcentration' not in already_processed: - already_processed.add('blockConcentration') - outfile.write(' blockConcentration=%s' % (quote_attrib(self.blockConcentration), )) - if self.scalingConc is not None and 'scalingConc' not in already_processed: - already_processed.add('scalingConc') - outfile.write(' scalingConc=%s' % (quote_attrib(self.scalingConc), )) if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.species is not None and 'species' not in already_processed: already_processed.add('species') outfile.write(' species=%s' % (quote_attrib(self.species), )) - if self.scalingVolt is not None and 'scalingVolt' not in already_processed: - already_processed.add('scalingVolt') - outfile.write(' scalingVolt=%s' % (quote_attrib(self.scalingVolt), )) - def exportChildren(self, outfile, level, namespace_='', name_='BlockMechanism', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='BlockMechanism'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.blockConcentration is not None and 'blockConcentration' not in already_processed: already_processed.add('blockConcentration') - showIndent(outfile, level) - outfile.write('blockConcentration="%s",\n' % (self.blockConcentration,)) + outfile.write(' blockConcentration=%s' % (quote_attrib(self.blockConcentration), )) if self.scalingConc is not None and 'scalingConc' not in already_processed: already_processed.add('scalingConc') - showIndent(outfile, level) - outfile.write('scalingConc="%s",\n' % (self.scalingConc,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - if self.species is not None and 'species' not in already_processed: - already_processed.add('species') - showIndent(outfile, level) - outfile.write('species="%s",\n' % (self.species,)) + outfile.write(' scalingConc=%s' % (quote_attrib(self.scalingConc), )) if self.scalingVolt is not None and 'scalingVolt' not in already_processed: already_processed.add('scalingVolt') - showIndent(outfile, level) - outfile.write('scalingVolt="%s",\n' % (self.scalingVolt,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' scalingVolt=%s' % (quote_attrib(self.scalingVolt), )) + def exportChildren(self, outfile, level, namespace_='', name_='BlockMechanism', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -1538,17 +1502,8 @@ class BlockMechanism(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('blockConcentration', node) - if value is not None and 'blockConcentration' not in already_processed: - already_processed.add('blockConcentration') - self.blockConcentration = value - self.validate_Nml2Quantity_concentration(self.blockConcentration) # validate type Nml2Quantity_concentration - value = find_attr_value_('scalingConc', node) - if value is not None and 'scalingConc' not in already_processed: - already_processed.add('scalingConc') - self.scalingConc = value - self.validate_Nml2Quantity_concentration(self.scalingConc) # validate type Nml2Quantity_concentration value = find_attr_value_('type', node) if value is not None and 'type' not in already_processed: already_processed.add('type') @@ -1559,6 +1514,16 @@ class BlockMechanism(GeneratedsSuper): already_processed.add('species') self.species = value self.validate_NmlId(self.species) # validate type NmlId + value = find_attr_value_('blockConcentration', node) + if value is not None and 'blockConcentration' not in already_processed: + already_processed.add('blockConcentration') + self.blockConcentration = value + self.validate_Nml2Quantity_concentration(self.blockConcentration) # validate type Nml2Quantity_concentration + value = find_attr_value_('scalingConc', node) + if value is not None and 'scalingConc' not in already_processed: + already_processed.add('scalingConc') + self.scalingConc = value + self.validate_Nml2Quantity_concentration(self.scalingConc) # validate type Nml2Quantity_concentration value = find_attr_value_('scalingVolt', node) if value is not None and 'scalingVolt' not in already_processed: already_processed.add('scalingVolt') @@ -1572,13 +1537,18 @@ class BlockMechanism(GeneratedsSuper): class PlasticityMechanism(GeneratedsSuper): subclass = None superclass = None - def __init__(self, type_=None, tauFac=None, tauRec=None, initReleaseProb=None): + def __init__(self, type_=None, initReleaseProb=None, tauRec=None, tauFac=None): + self.original_tagname_ = None self.type_ = _cast(None, type_) - self.tauFac = _cast(None, tauFac) - self.tauRec = _cast(None, tauRec) self.initReleaseProb = _cast(None, initReleaseProb) - pass + self.tauRec = _cast(None, tauRec) + self.tauFac = _cast(None, tauFac) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, PlasticityMechanism) + if subclass is not None: + return subclass(*args_, **kwargs_) if PlasticityMechanism.subclass: return PlasticityMechanism.subclass(*args_, **kwargs_) else: @@ -1586,21 +1556,38 @@ class PlasticityMechanism(GeneratedsSuper): factory = staticmethod(factory) def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ - def validate_PlasticityTypes(self, value): - # Validate type PlasticityTypes, a restriction on xs:string. - pass - def get_tauFac(self): return self.tauFac - def set_tauFac(self, tauFac): self.tauFac = tauFac - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass - def get_tauRec(self): return self.tauRec - def set_tauRec(self, tauRec): self.tauRec = tauRec def get_initReleaseProb(self): return self.initReleaseProb def set_initReleaseProb(self, initReleaseProb): self.initReleaseProb = initReleaseProb + def get_tauRec(self): return self.tauRec + def set_tauRec(self, tauRec): self.tauRec = tauRec + def get_tauFac(self): return self.tauFac + def set_tauFac(self, tauFac): self.tauFac = tauFac + def validate_PlasticityTypes(self, value): + # Validate type PlasticityTypes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['tsodyksMarkramDepMechanism', 'tsodyksMarkramDepFacMechanism'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on PlasticityTypes' % {"value" : value.encode("utf-8")} ) def validate_ZeroToOne(self, value): # Validate type ZeroToOne, a restriction on xs:double. - pass + if value is not None and Validate_simpletypes_: + if value < 0: + warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on ZeroToOne' % {"value" : value} ) + if value > 1: + warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on ZeroToOne' % {"value" : value} ) + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( @@ -1613,13 +1600,15 @@ class PlasticityMechanism(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlasticityMechanism') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='PlasticityMechanism', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -1627,41 +1616,16 @@ class PlasticityMechanism(GeneratedsSuper): if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') outfile.write(' type=%s' % (quote_attrib(self.type_), )) - if self.tauFac is not None and 'tauFac' not in already_processed: - already_processed.add('tauFac') - outfile.write(' tauFac=%s' % (quote_attrib(self.tauFac), )) - if self.tauRec is not None and 'tauRec' not in already_processed: - already_processed.add('tauRec') - outfile.write(' tauRec=%s' % (quote_attrib(self.tauRec), )) if self.initReleaseProb is not None and 'initReleaseProb' not in already_processed: already_processed.add('initReleaseProb') outfile.write(' initReleaseProb=%s' % (quote_attrib(self.initReleaseProb), )) - def exportChildren(self, outfile, level, namespace_='', name_='PlasticityMechanism', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='PlasticityMechanism'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - if self.tauFac is not None and 'tauFac' not in already_processed: - already_processed.add('tauFac') - showIndent(outfile, level) - outfile.write('tauFac="%s",\n' % (self.tauFac,)) if self.tauRec is not None and 'tauRec' not in already_processed: already_processed.add('tauRec') - showIndent(outfile, level) - outfile.write('tauRec="%s",\n' % (self.tauRec,)) - if self.initReleaseProb is not None and 'initReleaseProb' not in already_processed: - already_processed.add('initReleaseProb') - showIndent(outfile, level) - outfile.write('initReleaseProb=%e,\n' % (self.initReleaseProb,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' tauRec=%s' % (quote_attrib(self.tauRec), )) + if self.tauFac is not None and 'tauFac' not in already_processed: + already_processed.add('tauFac') + outfile.write(' tauFac=%s' % (quote_attrib(self.tauFac), )) + def exportChildren(self, outfile, level, namespace_='', name_='PlasticityMechanism', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -1669,22 +1633,13 @@ class PlasticityMechanism(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('type', node) if value is not None and 'type' not in already_processed: already_processed.add('type') self.type_ = value self.validate_PlasticityTypes(self.type_) # validate type PlasticityTypes - value = find_attr_value_('tauFac', node) - if value is not None and 'tauFac' not in already_processed: - already_processed.add('tauFac') - self.tauFac = value - self.validate_Nml2Quantity_time(self.tauFac) # validate type Nml2Quantity_time - value = find_attr_value_('tauRec', node) - if value is not None and 'tauRec' not in already_processed: - already_processed.add('tauRec') - self.tauRec = value - self.validate_Nml2Quantity_time(self.tauRec) # validate type Nml2Quantity_time value = find_attr_value_('initReleaseProb', node) if value is not None and 'initReleaseProb' not in already_processed: already_processed.add('initReleaseProb') @@ -1693,6 +1648,16 @@ class PlasticityMechanism(GeneratedsSuper): except ValueError as exp: raise ValueError('Bad float/double attribute (initReleaseProb): %s' % exp) self.validate_ZeroToOne(self.initReleaseProb) # validate type ZeroToOne + value = find_attr_value_('tauRec', node) + if value is not None and 'tauRec' not in already_processed: + already_processed.add('tauRec') + self.tauRec = value + self.validate_Nml2Quantity_time(self.tauRec) # validate type Nml2Quantity_time + value = find_attr_value_('tauFac', node) + if value is not None and 'tauFac' not in already_processed: + already_processed.add('tauFac') + self.tauFac = value + self.validate_Nml2Quantity_time(self.tauFac) # validate type Nml2Quantity_time def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class PlasticityMechanism @@ -1701,26 +1666,36 @@ class PlasticityMechanism(GeneratedsSuper): class SegmentParent(GeneratedsSuper): subclass = None superclass = None - def __init__(self, fractionAlong='1', segment=None): - self.fractionAlong = _cast(None, fractionAlong) + def __init__(self, segment=None, fractionAlong='1'): + self.original_tagname_ = None self.segment = _cast(None, segment) - pass + self.fractionAlong = _cast(None, fractionAlong) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SegmentParent) + if subclass is not None: + return subclass(*args_, **kwargs_) if SegmentParent.subclass: return SegmentParent.subclass(*args_, **kwargs_) else: return SegmentParent(*args_, **kwargs_) factory = staticmethod(factory) - def get_fractionAlong(self): return self.fractionAlong - def set_fractionAlong(self, fractionAlong): self.fractionAlong = fractionAlong - def validate_ZeroToOne(self, value): - # Validate type ZeroToOne, a restriction on xs:double. - pass def get_segment(self): return self.segment def set_segment(self, segment): self.segment = segment + def get_fractionAlong(self): return self.fractionAlong + def set_fractionAlong(self, fractionAlong): self.fractionAlong = fractionAlong def validate_SegmentId(self, value): # Validate type SegmentId, a restriction on xs:nonNegativeInteger. - pass + if value is not None and Validate_simpletypes_: + pass + def validate_ZeroToOne(self, value): + # Validate type ZeroToOne, a restriction on xs:double. + if value is not None and Validate_simpletypes_: + if value < 0: + warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on ZeroToOne' % {"value" : value} ) + if value > 1: + warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on ZeroToOne' % {"value" : value} ) def hasContent_(self): if ( @@ -1733,57 +1708,35 @@ class SegmentParent(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SegmentParent') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SegmentParent', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='SegmentParent'): - if self.fractionAlong is not None and 'fractionAlong' not in already_processed: - already_processed.add('fractionAlong') - outfile.write(' fractionAlong=%s' % (quote_attrib(self.fractionAlong), )) if self.segment is not None and 'segment' not in already_processed: already_processed.add('segment') outfile.write(' segment=%s' % (quote_attrib(self.segment), )) + if self.fractionAlong != 1 and 'fractionAlong' not in already_processed: + already_processed.add('fractionAlong') + outfile.write(' fractionAlong=%s' % (quote_attrib(self.fractionAlong), )) def exportChildren(self, outfile, level, namespace_='', name_='SegmentParent', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='SegmentParent'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.fractionAlong is not None and 'fractionAlong' not in already_processed: - already_processed.add('fractionAlong') - showIndent(outfile, level) - outfile.write('fractionAlong=%e,\n' % (self.fractionAlong,)) - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - showIndent(outfile, level) - outfile.write('segment=%d,\n' % (self.segment,)) - def exportLiteralChildren(self, outfile, level, name_): - pass - def build(self, node): + def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('fractionAlong', node) - if value is not None and 'fractionAlong' not in already_processed: - already_processed.add('fractionAlong') - try: - self.fractionAlong = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (fractionAlong): %s' % exp) - self.validate_ZeroToOne(self.fractionAlong) # validate type ZeroToOne value = find_attr_value_('segment', node) if value is not None and 'segment' not in already_processed: already_processed.add('segment') @@ -1794,6 +1747,14 @@ class SegmentParent(GeneratedsSuper): if self.segment < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') self.validate_SegmentId(self.segment) # validate type SegmentId + value = find_attr_value_('fractionAlong', node) + if value is not None and 'fractionAlong' not in already_processed: + already_processed.add('fractionAlong') + try: + self.fractionAlong = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (fractionAlong): %s' % exp) + self.validate_ZeroToOne(self.fractionAlong) # validate type ZeroToOne def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class SegmentParent @@ -1803,22 +1764,27 @@ class Point3DWithDiam(GeneratedsSuper): """A 3D point with diameter.""" subclass = None superclass = None - def __init__(self, y=None, x=None, z=None, diameter=None): - self.y = _cast(float, y) + def __init__(self, x=None, y=None, z=None, diameter=None): + self.original_tagname_ = None self.x = _cast(float, x) + self.y = _cast(float, y) self.z = _cast(float, z) self.diameter = _cast(float, diameter) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Point3DWithDiam) + if subclass is not None: + return subclass(*args_, **kwargs_) if Point3DWithDiam.subclass: return Point3DWithDiam.subclass(*args_, **kwargs_) else: return Point3DWithDiam(*args_, **kwargs_) factory = staticmethod(factory) - def get_y(self): return self.y - def set_y(self, y): self.y = y def get_x(self): return self.x def set_x(self, x): self.x = x + def get_y(self): return self.y + def set_y(self, y): self.y = y def get_z(self): return self.z def set_z(self, z): self.z = z def get_diameter(self): return self.diameter @@ -1835,23 +1801,25 @@ class Point3DWithDiam(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Point3DWithDiam') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Point3DWithDiam', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Point3DWithDiam'): - if self.y is not None and 'y' not in already_processed: - already_processed.add('y') - outfile.write(' y="%s"' % self.gds_format_double(self.y, input_name='y')) if self.x is not None and 'x' not in already_processed: already_processed.add('x') outfile.write(' x="%s"' % self.gds_format_double(self.x, input_name='x')) + if self.y is not None and 'y' not in already_processed: + already_processed.add('y') + outfile.write(' y="%s"' % self.gds_format_double(self.y, input_name='y')) if self.z is not None and 'z' not in already_processed: already_processed.add('z') outfile.write(' z="%s"' % self.gds_format_double(self.z, input_name='z')) @@ -1860,45 +1828,14 @@ class Point3DWithDiam(GeneratedsSuper): outfile.write(' diameter="%s"' % self.gds_format_double(self.diameter, input_name='diameter')) def exportChildren(self, outfile, level, namespace_='', name_='Point3DWithDiam', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='Point3DWithDiam'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.y is not None and 'y' not in already_processed: - already_processed.add('y') - showIndent(outfile, level) - outfile.write('y=%e,\n' % (self.y,)) - if self.x is not None and 'x' not in already_processed: - already_processed.add('x') - showIndent(outfile, level) - outfile.write('x=%e,\n' % (self.x,)) - if self.z is not None and 'z' not in already_processed: - already_processed.add('z') - showIndent(outfile, level) - outfile.write('z=%e,\n' % (self.z,)) - if self.diameter is not None and 'diameter' not in already_processed: - already_processed.add('diameter') - showIndent(outfile, level) - outfile.write('diameter=%e,\n' % (self.diameter,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('y', node) - if value is not None and 'y' not in already_processed: - already_processed.add('y') - try: - self.y = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (y): %s' % exp) value = find_attr_value_('x', node) if value is not None and 'x' not in already_processed: already_processed.add('x') @@ -1906,6 +1843,13 @@ class Point3DWithDiam(GeneratedsSuper): self.x = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (x): %s' % exp) + value = find_attr_value_('y', node) + if value is not None and 'y' not in already_processed: + already_processed.add('y') + try: + self.y = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (y): %s' % exp) value = find_attr_value_('z', node) if value is not None and 'z' not in already_processed: already_processed.add('z') @@ -1929,9 +1873,14 @@ class ProximalDetails(GeneratedsSuper): subclass = None superclass = None def __init__(self, translationStart=None): + self.original_tagname_ = None self.translationStart = _cast(float, translationStart) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ProximalDetails) + if subclass is not None: + return subclass(*args_, **kwargs_) if ProximalDetails.subclass: return ProximalDetails.subclass(*args_, **kwargs_) else: @@ -1951,13 +1900,15 @@ class ProximalDetails(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ProximalDetails') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ProximalDetails', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -1967,25 +1918,13 @@ class ProximalDetails(GeneratedsSuper): outfile.write(' translationStart="%s"' % self.gds_format_double(self.translationStart, input_name='translationStart')) def exportChildren(self, outfile, level, namespace_='', name_='ProximalDetails', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='ProximalDetails'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.translationStart is not None and 'translationStart' not in already_processed: - already_processed.add('translationStart') - showIndent(outfile, level) - outfile.write('translationStart=%e,\n' % (self.translationStart,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('translationStart', node) if value is not None and 'translationStart' not in already_processed: @@ -2003,9 +1942,14 @@ class DistalDetails(GeneratedsSuper): subclass = None superclass = None def __init__(self, normalizationEnd=None): + self.original_tagname_ = None self.normalizationEnd = _cast(float, normalizationEnd) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, DistalDetails) + if subclass is not None: + return subclass(*args_, **kwargs_) if DistalDetails.subclass: return DistalDetails.subclass(*args_, **kwargs_) else: @@ -2025,13 +1969,15 @@ class DistalDetails(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='DistalDetails') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='DistalDetails', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -2041,25 +1987,13 @@ class DistalDetails(GeneratedsSuper): outfile.write(' normalizationEnd="%s"' % self.gds_format_double(self.normalizationEnd, input_name='normalizationEnd')) def exportChildren(self, outfile, level, namespace_='', name_='DistalDetails', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='DistalDetails'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.normalizationEnd is not None and 'normalizationEnd' not in already_processed: - already_processed.add('normalizationEnd') - showIndent(outfile, level) - outfile.write('normalizationEnd=%e,\n' % (self.normalizationEnd,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('normalizationEnd', node) if value is not None and 'normalizationEnd' not in already_processed: @@ -2077,9 +2011,14 @@ class Member(GeneratedsSuper): subclass = None superclass = None def __init__(self, segment=None): + self.original_tagname_ = None self.segment = _cast(None, segment) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Member) + if subclass is not None: + return subclass(*args_, **kwargs_) if Member.subclass: return Member.subclass(*args_, **kwargs_) else: @@ -2089,7 +2028,8 @@ class Member(GeneratedsSuper): def set_segment(self, segment): self.segment = segment def validate_SegmentId(self, value): # Validate type SegmentId, a restriction on xs:nonNegativeInteger. - pass + if value is not None and Validate_simpletypes_: + pass def hasContent_(self): if ( @@ -2102,13 +2042,15 @@ class Member(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Member') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Member', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -2118,25 +2060,13 @@ class Member(GeneratedsSuper): outfile.write(' segment=%s' % (quote_attrib(self.segment), )) def exportChildren(self, outfile, level, namespace_='', name_='Member', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='Member'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - showIndent(outfile, level) - outfile.write('segment=%d,\n' % (self.segment,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('segment', node) if value is not None and 'segment' not in already_processed: @@ -2157,9 +2087,14 @@ class Include(GeneratedsSuper): subclass = None superclass = None def __init__(self, segmentGroup=None): + self.original_tagname_ = None self.segmentGroup = _cast(None, segmentGroup) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Include) + if subclass is not None: + return subclass(*args_, **kwargs_) if Include.subclass: return Include.subclass(*args_, **kwargs_) else: @@ -2169,7 +2104,11 @@ class Include(GeneratedsSuper): def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( @@ -2182,13 +2121,15 @@ class Include(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Include') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Include', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -2198,25 +2139,13 @@ class Include(GeneratedsSuper): outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) def exportChildren(self, outfile, level, namespace_='', name_='Include', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='Include'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - showIndent(outfile, level) - outfile.write('segmentGroup="%s",\n' % (self.segmentGroup,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('segmentGroup', node) if value is not None and 'segmentGroup' not in already_processed: @@ -2231,22 +2160,28 @@ class Include(GeneratedsSuper): class Path(GeneratedsSuper): subclass = None superclass = None - def __init__(self, fromxx=None, to=None): - self.fromxx = fromxx + def __init__(self, from_=None, to=None): + self.original_tagname_ = None + self.from_ = from_ self.to = to def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Path) + if subclass is not None: + return subclass(*args_, **kwargs_) if Path.subclass: return Path.subclass(*args_, **kwargs_) else: return Path(*args_, **kwargs_) factory = staticmethod(factory) - def get_from(self): return self.fromxx - def set_from(self, fromxx): self.fromxx = fromxx + def get_from(self): return self.from_ + def set_from(self, from_): self.from_ = from_ def get_to(self): return self.to def set_to(self, to): self.to = to def hasContent_(self): if ( - self.fromxx is not None or + self.from_ is not None or self.to is not None ): return True @@ -2257,13 +2192,15 @@ class Path(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Path') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Path', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -2275,70 +2212,58 @@ class Path(GeneratedsSuper): eol_ = '\n' else: eol_ = '' - if self.fromxx is not None: - self.fromxx.export(outfile, level, namespace_, name_='from', pretty_print=pretty_print) + if self.from_ is not None: + self.from_.export(outfile, level, namespace_, name_='from', pretty_print=pretty_print) if self.to is not None: self.to.export(outfile, level, namespace_, name_='to', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Path'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - pass - def exportLiteralChildren(self, outfile, level, name_): - if self.fromxx is not None: - showIndent(outfile, level) - outfile.write('fromxx=model_.SegmentEndPoint(\n') - self.fromxx.exportLiteral(outfile, level, name_='from') - showIndent(outfile, level) - outfile.write('),\n') - if self.to is not None: - showIndent(outfile, level) - outfile.write('to=model_.SegmentEndPoint(\n') - self.to.exportLiteral(outfile, level, name_='to') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'from': obj_ = SegmentEndPoint.factory() obj_.build(child_) - self.set_from(obj_) + self.from_ = obj_ + obj_.original_tagname_ = 'from' elif nodeName_ == 'to': obj_ = SegmentEndPoint.factory() obj_.build(child_) - self.set_to(obj_) + self.to = obj_ + obj_.original_tagname_ = 'to' # end class Path class SubTree(GeneratedsSuper): subclass = None superclass = None - def __init__(self, fromxx=None, to=None): - self.fromxx = fromxx + def __init__(self, from_=None, to=None): + self.original_tagname_ = None + self.from_ = from_ self.to = to def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SubTree) + if subclass is not None: + return subclass(*args_, **kwargs_) if SubTree.subclass: return SubTree.subclass(*args_, **kwargs_) else: return SubTree(*args_, **kwargs_) factory = staticmethod(factory) - def get_from(self): return self.fromxx - def set_from(self, fromxx): self.fromxx = fromxx + def get_from(self): return self.from_ + def set_from(self, from_): self.from_ = from_ def get_to(self): return self.to def set_to(self, to): self.to = to def hasContent_(self): if ( - self.fromxx is not None or + self.from_ is not None or self.to is not None ): return True @@ -2349,13 +2274,15 @@ class SubTree(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SubTree') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SubTree', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -2367,48 +2294,30 @@ class SubTree(GeneratedsSuper): eol_ = '\n' else: eol_ = '' - if self.fromxx is not None: - self.fromxx.export(outfile, level, namespace_, name_='from', pretty_print=pretty_print) + if self.from_ is not None: + self.from_.export(outfile, level, namespace_, name_='from', pretty_print=pretty_print) if self.to is not None: self.to.export(outfile, level, namespace_, name_='to', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SubTree'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - pass - def exportLiteralChildren(self, outfile, level, name_): - if self.fromxx is not None: - showIndent(outfile, level) - outfile.write('fromxx=model_.SegmentEndPoint(\n') - self.fromxx.exportLiteral(outfile, level, name_='from') - showIndent(outfile, level) - outfile.write('),\n') - if self.to is not None: - showIndent(outfile, level) - outfile.write('to=model_.SegmentEndPoint(\n') - self.to.exportLiteral(outfile, level, name_='to') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'from': obj_ = SegmentEndPoint.factory() obj_.build(child_) - self.set_from(obj_) + self.from_ = obj_ + obj_.original_tagname_ = 'from' elif nodeName_ == 'to': obj_ = SegmentEndPoint.factory() obj_.build(child_) - self.set_to(obj_) + self.to = obj_ + obj_.original_tagname_ = 'to' # end class SubTree @@ -2416,9 +2325,14 @@ class SegmentEndPoint(GeneratedsSuper): subclass = None superclass = None def __init__(self, segment=None): + self.original_tagname_ = None self.segment = _cast(None, segment) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SegmentEndPoint) + if subclass is not None: + return subclass(*args_, **kwargs_) if SegmentEndPoint.subclass: return SegmentEndPoint.subclass(*args_, **kwargs_) else: @@ -2428,7 +2342,8 @@ class SegmentEndPoint(GeneratedsSuper): def set_segment(self, segment): self.segment = segment def validate_SegmentId(self, value): # Validate type SegmentId, a restriction on xs:nonNegativeInteger. - pass + if value is not None and Validate_simpletypes_: + pass def hasContent_(self): if ( @@ -2441,13 +2356,15 @@ class SegmentEndPoint(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SegmentEndPoint') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SegmentEndPoint', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -2457,25 +2374,13 @@ class SegmentEndPoint(GeneratedsSuper): outfile.write(' segment=%s' % (quote_attrib(self.segment), )) def exportChildren(self, outfile, level, namespace_='', name_='SegmentEndPoint', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='SegmentEndPoint'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - showIndent(outfile, level) - outfile.write('segment=%d,\n' % (self.segment,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('segment', node) if value is not None and 'segment' not in already_processed: @@ -2496,6 +2401,7 @@ class MembraneProperties(GeneratedsSuper): subclass = None superclass = None def __init__(self, channelPopulation=None, channelDensity=None, spikeThresh=None, specificCapacitance=None, initMembPotential=None, reversalPotential=None): + self.original_tagname_ = None if channelPopulation is None: self.channelPopulation = [] else: @@ -2521,6 +2427,11 @@ class MembraneProperties(GeneratedsSuper): else: self.reversalPotential = reversalPotential def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, MembraneProperties) + if subclass is not None: + return subclass(*args_, **kwargs_) if MembraneProperties.subclass: return MembraneProperties.subclass(*args_, **kwargs_) else: @@ -2529,27 +2440,33 @@ class MembraneProperties(GeneratedsSuper): def get_channelPopulation(self): return self.channelPopulation def set_channelPopulation(self, channelPopulation): self.channelPopulation = channelPopulation def add_channelPopulation(self, value): self.channelPopulation.append(value) - def insert_channelPopulation(self, index, value): self.channelPopulation[index] = value + def insert_channelPopulation_at(self, index, value): self.channelPopulation.insert(index, value) + def replace_channelPopulation_at(self, index, value): self.channelPopulation[index] = value def get_channelDensity(self): return self.channelDensity def set_channelDensity(self, channelDensity): self.channelDensity = channelDensity def add_channelDensity(self, value): self.channelDensity.append(value) - def insert_channelDensity(self, index, value): self.channelDensity[index] = value + def insert_channelDensity_at(self, index, value): self.channelDensity.insert(index, value) + def replace_channelDensity_at(self, index, value): self.channelDensity[index] = value def get_spikeThresh(self): return self.spikeThresh def set_spikeThresh(self, spikeThresh): self.spikeThresh = spikeThresh def add_spikeThresh(self, value): self.spikeThresh.append(value) - def insert_spikeThresh(self, index, value): self.spikeThresh[index] = value + def insert_spikeThresh_at(self, index, value): self.spikeThresh.insert(index, value) + def replace_spikeThresh_at(self, index, value): self.spikeThresh[index] = value def get_specificCapacitance(self): return self.specificCapacitance def set_specificCapacitance(self, specificCapacitance): self.specificCapacitance = specificCapacitance def add_specificCapacitance(self, value): self.specificCapacitance.append(value) - def insert_specificCapacitance(self, index, value): self.specificCapacitance[index] = value + def insert_specificCapacitance_at(self, index, value): self.specificCapacitance.insert(index, value) + def replace_specificCapacitance_at(self, index, value): self.specificCapacitance[index] = value def get_initMembPotential(self): return self.initMembPotential def set_initMembPotential(self, initMembPotential): self.initMembPotential = initMembPotential def add_initMembPotential(self, value): self.initMembPotential.append(value) - def insert_initMembPotential(self, index, value): self.initMembPotential[index] = value + def insert_initMembPotential_at(self, index, value): self.initMembPotential.insert(index, value) + def replace_initMembPotential_at(self, index, value): self.initMembPotential[index] = value def get_reversalPotential(self): return self.reversalPotential def set_reversalPotential(self, reversalPotential): self.reversalPotential = reversalPotential def add_reversalPotential(self, value): self.reversalPotential.append(value) - def insert_reversalPotential(self, index, value): self.reversalPotential[index] = value + def insert_reversalPotential_at(self, index, value): self.reversalPotential.insert(index, value) + def replace_reversalPotential_at(self, index, value): self.reversalPotential[index] = value def hasContent_(self): if ( self.channelPopulation or @@ -2567,13 +2484,15 @@ class MembraneProperties(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='MembraneProperties') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='MembraneProperties', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -2597,93 +2516,13 @@ class MembraneProperties(GeneratedsSuper): initMembPotential_.export(outfile, level, namespace_, name_='initMembPotential', pretty_print=pretty_print) for reversalPotential_ in self.reversalPotential: reversalPotential_.export(outfile, level, namespace_, name_='reversalPotential', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='MembraneProperties'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - pass - def exportLiteralChildren(self, outfile, level, name_): - showIndent(outfile, level) - outfile.write('channelPopulation=[\n') - level += 1 - for channelPopulation_ in self.channelPopulation: - showIndent(outfile, level) - outfile.write('model_.ChannelPopulation(\n') - channelPopulation_.exportLiteral(outfile, level, name_='ChannelPopulation') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('channelDensity=[\n') - level += 1 - for channelDensity_ in self.channelDensity: - showIndent(outfile, level) - outfile.write('model_.ChannelDensity(\n') - channelDensity_.exportLiteral(outfile, level, name_='ChannelDensity') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('spikeThresh=[\n') - level += 1 - for spikeThresh_ in self.spikeThresh: - showIndent(outfile, level) - outfile.write('model_.ValueAcrossSegOrSegGroup(\n') - spikeThresh_.exportLiteral(outfile, level, name_='ValueAcrossSegOrSegGroup') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('specificCapacitance=[\n') - level += 1 - for specificCapacitance_ in self.specificCapacitance: - showIndent(outfile, level) - outfile.write('model_.ValueAcrossSegOrSegGroup(\n') - specificCapacitance_.exportLiteral(outfile, level, name_='ValueAcrossSegOrSegGroup') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('initMembPotential=[\n') - level += 1 - for initMembPotential_ in self.initMembPotential: - showIndent(outfile, level) - outfile.write('model_.ValueAcrossSegOrSegGroup(\n') - initMembPotential_.exportLiteral(outfile, level, name_='ValueAcrossSegOrSegGroup') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('reversalPotential=[\n') - level += 1 - for reversalPotential_ in self.reversalPotential: - showIndent(outfile, level) - outfile.write('model_.ReversalPotential(\n') - reversalPotential_.exportLiteral(outfile, level, name_='ReversalPotential') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -2691,60 +2530,80 @@ class MembraneProperties(GeneratedsSuper): obj_ = ChannelPopulation.factory() obj_.build(child_) self.channelPopulation.append(obj_) + obj_.original_tagname_ = 'channelPopulation' elif nodeName_ == 'channelDensity': obj_ = ChannelDensity.factory() obj_.build(child_) self.channelDensity.append(obj_) + obj_.original_tagname_ = 'channelDensity' elif nodeName_ == 'spikeThresh': class_obj_ = self.get_class_obj_(child_, ValueAcrossSegOrSegGroup) obj_ = class_obj_.factory() obj_.build(child_) self.spikeThresh.append(obj_) + obj_.original_tagname_ = 'spikeThresh' elif nodeName_ == 'specificCapacitance': class_obj_ = self.get_class_obj_(child_, ValueAcrossSegOrSegGroup) obj_ = class_obj_.factory() obj_.build(child_) self.specificCapacitance.append(obj_) + obj_.original_tagname_ = 'specificCapacitance' elif nodeName_ == 'initMembPotential': class_obj_ = self.get_class_obj_(child_, ValueAcrossSegOrSegGroup) obj_ = class_obj_.factory() obj_.build(child_) self.initMembPotential.append(obj_) + obj_.original_tagname_ = 'initMembPotential' elif nodeName_ == 'reversalPotential': obj_ = ReversalPotential.factory() obj_.build(child_) self.reversalPotential.append(obj_) + obj_.original_tagname_ = 'reversalPotential' # end class MembraneProperties class ValueAcrossSegOrSegGroup(GeneratedsSuper): subclass = None superclass = None - def __init__(self, segment=None, segmentGroup='all', value=None, extensiontype_=None): - self.segment = _cast(None, segment) - self.segmentGroup = _cast(None, segmentGroup) + def __init__(self, value=None, segmentGroup='all', segment=None, extensiontype_=None): + self.original_tagname_ = None self.value = _cast(None, value) + self.segmentGroup = _cast(None, segmentGroup) + self.segment = _cast(None, segment) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ValueAcrossSegOrSegGroup) + if subclass is not None: + return subclass(*args_, **kwargs_) if ValueAcrossSegOrSegGroup.subclass: return ValueAcrossSegOrSegGroup.subclass(*args_, **kwargs_) else: return ValueAcrossSegOrSegGroup(*args_, **kwargs_) factory = staticmethod(factory) - def get_segment(self): return self.segment - def set_segment(self, segment): self.segment = segment - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass - def get_segmentGroup(self): return self.segmentGroup - def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def get_value(self): return self.value def set_value(self, value): self.value = value - def validate_Nml2Quantity(self, value): - # Validate type Nml2Quantity, a restriction on xs:string. - pass + def get_segmentGroup(self): return self.segmentGroup + def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup + def get_segment(self): return self.segment + def set_segment(self, segment): self.segment = segment def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_Nml2Quantity(self, value): + # Validate type Nml2Quantity, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_patterns_, )) + validate_Nml2Quantity_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*([_a-zA-Z0-9])*$']] + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( @@ -2757,75 +2616,57 @@ class ValueAcrossSegOrSegGroup(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ValueAcrossSegOrSegGroup') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ValueAcrossSegOrSegGroup', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='ValueAcrossSegOrSegGroup'): - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - outfile.write(' segment=%s' % (quote_attrib(self.segment), )) - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) if self.value is not None and 'value' not in already_processed: already_processed.add('value') outfile.write(' value=%s' % (quote_attrib(self.value), )) + if self.segmentGroup != "all" and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) + if self.segment is not None and 'segment' not in already_processed: + already_processed.add('segment') + outfile.write(' segment=%s' % (quote_attrib(self.segment), )) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='ValueAcrossSegOrSegGroup', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='ValueAcrossSegOrSegGroup'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - showIndent(outfile, level) - outfile.write('segment="%s",\n' % (self.segment,)) - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - showIndent(outfile, level) - outfile.write('segmentGroup="%s",\n' % (self.segmentGroup,)) - if self.value is not None and 'value' not in already_processed: - already_processed.add('value') - showIndent(outfile, level) - outfile.write('value="%s",\n' % (self.value,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('segment', node) - if value is not None and 'segment' not in already_processed: - already_processed.add('segment') - self.segment = value - self.validate_NmlId(self.segment) # validate type NmlId - value = find_attr_value_('segmentGroup', node) - if value is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - self.segmentGroup = value - self.validate_NmlId(self.segmentGroup) # validate type NmlId value = find_attr_value_('value', node) if value is not None and 'value' not in already_processed: already_processed.add('value') self.value = value self.validate_Nml2Quantity(self.value) # validate type Nml2Quantity + value = find_attr_value_('segmentGroup', node) + if value is not None and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + self.segmentGroup = value + self.validate_NmlId(self.segmentGroup) # validate type NmlId + value = find_attr_value_('segment', node) + if value is not None and 'segment' not in already_processed: + already_processed.add('segment') + self.segment = value + self.validate_NmlId(self.segment) # validate type NmlId value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -2838,11 +2679,17 @@ class ValueAcrossSegOrSegGroup(GeneratedsSuper): class VariableParameter(GeneratedsSuper): subclass = None superclass = None - def __init__(self, segmentGroup=None, parameter=None, inhomogeneousValue=None): - self.segmentGroup = _cast(None, segmentGroup) + def __init__(self, parameter=None, segmentGroup=None, inhomogeneousValue=None): + self.original_tagname_ = None self.parameter = _cast(None, parameter) + self.segmentGroup = _cast(None, segmentGroup) self.inhomogeneousValue = inhomogeneousValue def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, VariableParameter) + if subclass is not None: + return subclass(*args_, **kwargs_) if VariableParameter.subclass: return VariableParameter.subclass(*args_, **kwargs_) else: @@ -2850,10 +2697,10 @@ class VariableParameter(GeneratedsSuper): factory = staticmethod(factory) def get_inhomogeneousValue(self): return self.inhomogeneousValue def set_inhomogeneousValue(self, inhomogeneousValue): self.inhomogeneousValue = inhomogeneousValue - def get_segmentGroup(self): return self.segmentGroup - def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def get_parameter(self): return self.parameter def set_parameter(self, parameter): self.parameter = parameter + def get_segmentGroup(self): return self.segmentGroup + def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def hasContent_(self): if ( self.inhomogeneousValue is not None @@ -2866,24 +2713,26 @@ class VariableParameter(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='VariableParameter') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='VariableParameter', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='VariableParameter'): - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - outfile.write(' segmentGroup=%s' % (self.gds_format_string(quote_attrib(self.segmentGroup).encode(ExternalEncoding), input_name='segmentGroup'), )) if self.parameter is not None and 'parameter' not in already_processed: already_processed.add('parameter') - outfile.write(' parameter=%s' % (self.gds_format_string(quote_attrib(self.parameter).encode(ExternalEncoding), input_name='parameter'), )) + outfile.write(' parameter=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.parameter), input_name='parameter')), )) + if self.segmentGroup is not None and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + outfile.write(' segmentGroup=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.segmentGroup), input_name='segmentGroup')), )) def exportChildren(self, outfile, level, namespace_='', name_='VariableParameter', fromsubclass_=False, pretty_print=True): if pretty_print: eol_ = '\n' @@ -2891,48 +2740,28 @@ class VariableParameter(GeneratedsSuper): eol_ = '' if self.inhomogeneousValue is not None: self.inhomogeneousValue.export(outfile, level, namespace_, name_='inhomogeneousValue', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='VariableParameter'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - showIndent(outfile, level) - outfile.write('segmentGroup="%s",\n' % (self.segmentGroup,)) - if self.parameter is not None and 'parameter' not in already_processed: - already_processed.add('parameter') - showIndent(outfile, level) - outfile.write('parameter="%s",\n' % (self.parameter,)) - def exportLiteralChildren(self, outfile, level, name_): - if self.inhomogeneousValue is not None: - showIndent(outfile, level) - outfile.write('inhomogeneousValue=model_.InhomogeneousValue(\n') - self.inhomogeneousValue.exportLiteral(outfile, level, name_='inhomogeneousValue') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('segmentGroup', node) - if value is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - self.segmentGroup = value value = find_attr_value_('parameter', node) if value is not None and 'parameter' not in already_processed: already_processed.add('parameter') self.parameter = value + value = find_attr_value_('segmentGroup', node) + if value is not None and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + self.segmentGroup = value def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'inhomogeneousValue': obj_ = InhomogeneousValue.factory() obj_.build(child_) - self.set_inhomogeneousValue(obj_) + self.inhomogeneousValue = obj_ + obj_.original_tagname_ = 'inhomogeneousValue' # end class VariableParameter @@ -2940,10 +2769,15 @@ class InhomogeneousValue(GeneratedsSuper): subclass = None superclass = None def __init__(self, inhomogeneousParam=None, value=None): + self.original_tagname_ = None self.inhomogeneousParam = _cast(None, inhomogeneousParam) self.value = _cast(None, value) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, InhomogeneousValue) + if subclass is not None: + return subclass(*args_, **kwargs_) if InhomogeneousValue.subclass: return InhomogeneousValue.subclass(*args_, **kwargs_) else: @@ -2965,48 +2799,34 @@ class InhomogeneousValue(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='InhomogeneousValue') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='InhomogeneousValue', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='InhomogeneousValue'): if self.inhomogeneousParam is not None and 'inhomogeneousParam' not in already_processed: already_processed.add('inhomogeneousParam') - outfile.write(' inhomogeneousParam=%s' % (self.gds_format_string(quote_attrib(self.inhomogeneousParam).encode(ExternalEncoding), input_name='inhomogeneousParam'), )) + outfile.write(' inhomogeneousParam=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.inhomogeneousParam), input_name='inhomogeneousParam')), )) if self.value is not None and 'value' not in already_processed: already_processed.add('value') - outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), )) + outfile.write(' value=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.value), input_name='value')), )) def exportChildren(self, outfile, level, namespace_='', name_='InhomogeneousValue', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='InhomogeneousValue'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.inhomogeneousParam is not None and 'inhomogeneousParam' not in already_processed: - already_processed.add('inhomogeneousParam') - showIndent(outfile, level) - outfile.write('inhomogeneousParam="%s",\n' % (self.inhomogeneousParam,)) - if self.value is not None and 'value' not in already_processed: - already_processed.add('value') - showIndent(outfile, level) - outfile.write('value="%s",\n' % (self.value,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('inhomogeneousParam', node) if value is not None and 'inhomogeneousParam' not in already_processed: @@ -3024,11 +2844,16 @@ class InhomogeneousValue(GeneratedsSuper): class ReversalPotential(ValueAcrossSegOrSegGroup): subclass = None superclass = ValueAcrossSegOrSegGroup - def __init__(self, segment=None, segmentGroup='all', value=None, species=None): - super(ReversalPotential, self).__init__(segment, segmentGroup, value, ) + def __init__(self, value=None, segmentGroup='all', segment=None, species=None): + self.original_tagname_ = None + super(ReversalPotential, self).__init__(value, segmentGroup, segment, ) self.species = _cast(None, species) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ReversalPotential) + if subclass is not None: + return subclass(*args_, **kwargs_) if ReversalPotential.subclass: return ReversalPotential.subclass(*args_, **kwargs_) else: @@ -3038,7 +2863,11 @@ class ReversalPotential(ValueAcrossSegOrSegGroup): def set_species(self, species): self.species = species def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( super(ReversalPotential, self).hasContent_() @@ -3051,13 +2880,15 @@ class ReversalPotential(ValueAcrossSegOrSegGroup): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ReversalPotential') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ReversalPotential', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -3069,27 +2900,13 @@ class ReversalPotential(ValueAcrossSegOrSegGroup): def exportChildren(self, outfile, level, namespace_='', name_='ReversalPotential', fromsubclass_=False, pretty_print=True): super(ReversalPotential, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) pass - def exportLiteral(self, outfile, level, name_='ReversalPotential'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.species is not None and 'species' not in already_processed: - already_processed.add('species') - showIndent(outfile, level) - outfile.write('species="%s",\n' % (self.species,)) - super(ReversalPotential, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ReversalPotential, self).exportLiteralChildren(outfile, level, name_) - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('species', node) if value is not None and 'species' not in already_processed: @@ -3109,36 +2926,49 @@ class Species(ValueAcrossSegOrSegGroup): select by id. TODO: remove.""" subclass = None superclass = ValueAcrossSegOrSegGroup - def __init__(self, segment=None, segmentGroup='all', value=None, ion=None, initialExtConcentration=None, concentrationModel=None, id=None, initialConcentration=None): - super(Species, self).__init__(segment, segmentGroup, value, ) - self.ion = _cast(None, ion) - self.initialExtConcentration = _cast(None, initialExtConcentration) - self.concentrationModel = _cast(None, concentrationModel) + def __init__(self, value=None, segmentGroup='all', segment=None, id=None, concentrationModel=None, ion=None, initialConcentration=None, initialExtConcentration=None): + self.original_tagname_ = None + super(Species, self).__init__(value, segmentGroup, segment, ) self.id = _cast(None, id) + self.concentrationModel = _cast(None, concentrationModel) + self.ion = _cast(None, ion) self.initialConcentration = _cast(None, initialConcentration) - pass + self.initialExtConcentration = _cast(None, initialExtConcentration) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Species) + if subclass is not None: + return subclass(*args_, **kwargs_) if Species.subclass: return Species.subclass(*args_, **kwargs_) else: return Species(*args_, **kwargs_) factory = staticmethod(factory) + def get_id(self): return self.id + def set_id(self, id): self.id = id + def get_concentrationModel(self): return self.concentrationModel + def set_concentrationModel(self, concentrationModel): self.concentrationModel = concentrationModel def get_ion(self): return self.ion def set_ion(self, ion): self.ion = ion - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass + def get_initialConcentration(self): return self.initialConcentration + def set_initialConcentration(self, initialConcentration): self.initialConcentration = initialConcentration def get_initialExtConcentration(self): return self.initialExtConcentration def set_initialExtConcentration(self, initialExtConcentration): self.initialExtConcentration = initialExtConcentration + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def validate_Nml2Quantity_concentration(self, value): # Validate type Nml2Quantity_concentration, a restriction on xs:string. - pass - def get_concentrationModel(self): return self.concentrationModel - def set_concentrationModel(self, concentrationModel): self.concentrationModel = concentrationModel - def get_id(self): return self.id - def set_id(self, id): self.id = id - def get_initialConcentration(self): return self.initialConcentration - def set_initialConcentration(self, initialConcentration): self.initialConcentration = initialConcentration + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_concentration_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_concentration_patterns_, )) + validate_Nml2Quantity_concentration_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(mol_per_m3|mol_per_cm3|M|mM)$']] def hasContent_(self): if ( super(Species, self).hasContent_() @@ -3151,66 +2981,37 @@ class Species(ValueAcrossSegOrSegGroup): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Species') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Species', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Species'): super(Species, self).exportAttributes(outfile, level, already_processed, namespace_, name_='Species') - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - outfile.write(' ion=%s' % (quote_attrib(self.ion), )) - if self.initialExtConcentration is not None and 'initialExtConcentration' not in already_processed: - already_processed.add('initialExtConcentration') - outfile.write(' initialExtConcentration=%s' % (quote_attrib(self.initialExtConcentration), )) - if self.concentrationModel is not None and 'concentrationModel' not in already_processed: - already_processed.add('concentrationModel') - outfile.write(' concentrationModel=%s' % (quote_attrib(self.concentrationModel), )) if self.id is not None and 'id' not in already_processed: already_processed.add('id') outfile.write(' id=%s' % (quote_attrib(self.id), )) + if self.concentrationModel is not None and 'concentrationModel' not in already_processed: + already_processed.add('concentrationModel') + outfile.write(' concentrationModel=%s' % (quote_attrib(self.concentrationModel), )) + if self.ion is not None and 'ion' not in already_processed: + already_processed.add('ion') + outfile.write(' ion=%s' % (quote_attrib(self.ion), )) if self.initialConcentration is not None and 'initialConcentration' not in already_processed: already_processed.add('initialConcentration') outfile.write(' initialConcentration=%s' % (quote_attrib(self.initialConcentration), )) - def exportChildren(self, outfile, level, namespace_='', name_='Species', fromsubclass_=False, pretty_print=True): - super(Species, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - pass - def exportLiteral(self, outfile, level, name_='Species'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - showIndent(outfile, level) - outfile.write('ion="%s",\n' % (self.ion,)) if self.initialExtConcentration is not None and 'initialExtConcentration' not in already_processed: already_processed.add('initialExtConcentration') - showIndent(outfile, level) - outfile.write('initialExtConcentration="%s",\n' % (self.initialExtConcentration,)) - if self.concentrationModel is not None and 'concentrationModel' not in already_processed: - already_processed.add('concentrationModel') - showIndent(outfile, level) - outfile.write('concentrationModel="%s",\n' % (self.concentrationModel,)) - if self.id is not None and 'id' not in already_processed: - already_processed.add('id') - showIndent(outfile, level) - outfile.write('id="%s",\n' % (self.id,)) - if self.initialConcentration is not None and 'initialConcentration' not in already_processed: - already_processed.add('initialConcentration') - showIndent(outfile, level) - outfile.write('initialConcentration="%s",\n' % (self.initialConcentration,)) - super(Species, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Species, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' initialExtConcentration=%s' % (quote_attrib(self.initialExtConcentration), )) + def exportChildren(self, outfile, level, namespace_='', name_='Species', fromsubclass_=False, pretty_print=True): + super(Species, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) pass def build(self, node): already_processed = set() @@ -3218,32 +3019,33 @@ class Species(ValueAcrossSegOrSegGroup): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('ion', node) - if value is not None and 'ion' not in already_processed: - already_processed.add('ion') - self.ion = value - self.validate_NmlId(self.ion) # validate type NmlId - value = find_attr_value_('initialExtConcentration', node) - if value is not None and 'initialExtConcentration' not in already_processed: - already_processed.add('initialExtConcentration') - self.initialExtConcentration = value - self.validate_Nml2Quantity_concentration(self.initialExtConcentration) # validate type Nml2Quantity_concentration - value = find_attr_value_('concentrationModel', node) - if value is not None and 'concentrationModel' not in already_processed: - already_processed.add('concentrationModel') - self.concentrationModel = value - self.validate_NmlId(self.concentrationModel) # validate type NmlId value = find_attr_value_('id', node) if value is not None and 'id' not in already_processed: already_processed.add('id') self.id = value self.validate_NmlId(self.id) # validate type NmlId + value = find_attr_value_('concentrationModel', node) + if value is not None and 'concentrationModel' not in already_processed: + already_processed.add('concentrationModel') + self.concentrationModel = value + self.validate_NmlId(self.concentrationModel) # validate type NmlId + value = find_attr_value_('ion', node) + if value is not None and 'ion' not in already_processed: + already_processed.add('ion') + self.ion = value + self.validate_NmlId(self.ion) # validate type NmlId value = find_attr_value_('initialConcentration', node) if value is not None and 'initialConcentration' not in already_processed: already_processed.add('initialConcentration') self.initialConcentration = value self.validate_Nml2Quantity_concentration(self.initialConcentration) # validate type Nml2Quantity_concentration + value = find_attr_value_('initialExtConcentration', node) + if value is not None and 'initialExtConcentration' not in already_processed: + already_processed.add('initialExtConcentration') + self.initialExtConcentration = value + self.validate_Nml2Quantity_concentration(self.initialExtConcentration) # validate type Nml2Quantity_concentration super(Species, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(Species, self).buildChildren(child_, node, nodeName_, True) @@ -3255,6 +3057,7 @@ class IntracellularProperties(GeneratedsSuper): subclass = None superclass = None def __init__(self, species=None, resistivity=None): + self.original_tagname_ = None if species is None: self.species = [] else: @@ -3264,6 +3067,11 @@ class IntracellularProperties(GeneratedsSuper): else: self.resistivity = resistivity def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IntracellularProperties) + if subclass is not None: + return subclass(*args_, **kwargs_) if IntracellularProperties.subclass: return IntracellularProperties.subclass(*args_, **kwargs_) else: @@ -3272,11 +3080,13 @@ class IntracellularProperties(GeneratedsSuper): def get_species(self): return self.species def set_species(self, species): self.species = species def add_species(self, value): self.species.append(value) - def insert_species(self, index, value): self.species[index] = value + def insert_species_at(self, index, value): self.species.insert(index, value) + def replace_species_at(self, index, value): self.species[index] = value def get_resistivity(self): return self.resistivity def set_resistivity(self, resistivity): self.resistivity = resistivity def add_resistivity(self, value): self.resistivity.append(value) - def insert_resistivity(self, index, value): self.resistivity[index] = value + def insert_resistivity_at(self, index, value): self.resistivity.insert(index, value) + def replace_resistivity_at(self, index, value): self.resistivity[index] = value def hasContent_(self): if ( self.species or @@ -3290,13 +3100,15 @@ class IntracellularProperties(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IntracellularProperties') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IntracellularProperties', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -3312,45 +3124,13 @@ class IntracellularProperties(GeneratedsSuper): species_.export(outfile, level, namespace_, name_='species', pretty_print=pretty_print) for resistivity_ in self.resistivity: resistivity_.export(outfile, level, namespace_, name_='resistivity', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IntracellularProperties'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - pass - def exportLiteralChildren(self, outfile, level, name_): - showIndent(outfile, level) - outfile.write('species=[\n') - level += 1 - for species_ in self.species: - showIndent(outfile, level) - outfile.write('model_.Species(\n') - species_.exportLiteral(outfile, level, name_='Species') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('resistivity=[\n') - level += 1 - for resistivity_ in self.resistivity: - showIndent(outfile, level) - outfile.write('model_.ValueAcrossSegOrSegGroup(\n') - resistivity_.exportLiteral(outfile, level, name_='ValueAcrossSegOrSegGroup') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -3358,11 +3138,13 @@ class IntracellularProperties(GeneratedsSuper): obj_ = Species.factory() obj_.build(child_) self.species.append(obj_) + obj_.original_tagname_ = 'species' elif nodeName_ == 'resistivity': class_obj_ = self.get_class_obj_(child_, ValueAcrossSegOrSegGroup) obj_ = class_obj_.factory() obj_.build(child_) self.resistivity.append(obj_) + obj_.original_tagname_ = 'resistivity' # end class IntracellularProperties @@ -3370,12 +3152,18 @@ class ExtracellularPropertiesLocal(GeneratedsSuper): subclass = None superclass = None def __init__(self, temperature=None, species=None): + self.original_tagname_ = None self.temperature = _cast(None, temperature) if species is None: self.species = [] else: self.species = species def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExtracellularPropertiesLocal) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExtracellularPropertiesLocal.subclass: return ExtracellularPropertiesLocal.subclass(*args_, **kwargs_) else: @@ -3384,12 +3172,17 @@ class ExtracellularPropertiesLocal(GeneratedsSuper): def get_species(self): return self.species def set_species(self, species): self.species = species def add_species(self, value): self.species.append(value) - def insert_species(self, index, value): self.species[index] = value + def insert_species_at(self, index, value): self.species.insert(index, value) + def replace_species_at(self, index, value): self.species[index] = value def get_temperature(self): return self.temperature def set_temperature(self, temperature): self.temperature = temperature def validate_Nml2Quantity_temperature(self, value): # Validate type Nml2Quantity_temperature, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_temperature_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_temperature_patterns_, )) + validate_Nml2Quantity_temperature_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(degC)$']] def hasContent_(self): if ( self.species @@ -3402,13 +3195,15 @@ class ExtracellularPropertiesLocal(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExtracellularPropertiesLocal') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExtracellularPropertiesLocal', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -3424,36 +3219,13 @@ class ExtracellularPropertiesLocal(GeneratedsSuper): eol_ = '' for species_ in self.species: species_.export(outfile, level, namespace_, name_='species', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ExtracellularPropertiesLocal'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.temperature is not None and 'temperature' not in already_processed: - already_processed.add('temperature') - showIndent(outfile, level) - outfile.write('temperature="%s",\n' % (self.temperature,)) - def exportLiteralChildren(self, outfile, level, name_): - showIndent(outfile, level) - outfile.write('species=[\n') - level += 1 - for species_ in self.species: - showIndent(outfile, level) - outfile.write('model_.Species(\n') - species_.exportLiteral(outfile, level, name_='Species') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('temperature', node) if value is not None and 'temperature' not in already_processed: @@ -3465,38 +3237,44 @@ class ExtracellularPropertiesLocal(GeneratedsSuper): obj_ = Species.factory() obj_.build(child_) self.species.append(obj_) + obj_.original_tagname_ = 'species' # end class ExtracellularPropertiesLocal class SpaceStructure(GeneratedsSuper): subclass = None superclass = None - def __init__(self, ySpacing=None, zStart=0, yStart=0, zSpacing=None, xStart=0, xSpacing=None): + def __init__(self, xSpacing=None, ySpacing=None, zSpacing=None, xStart=0, yStart=0, zStart=0): + self.original_tagname_ = None + self.xSpacing = _cast(float, xSpacing) self.ySpacing = _cast(float, ySpacing) - self.zStart = _cast(float, zStart) - self.yStart = _cast(float, yStart) self.zSpacing = _cast(float, zSpacing) self.xStart = _cast(float, xStart) - self.xSpacing = _cast(float, xSpacing) - pass + self.yStart = _cast(float, yStart) + self.zStart = _cast(float, zStart) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SpaceStructure) + if subclass is not None: + return subclass(*args_, **kwargs_) if SpaceStructure.subclass: return SpaceStructure.subclass(*args_, **kwargs_) else: return SpaceStructure(*args_, **kwargs_) factory = staticmethod(factory) + def get_xSpacing(self): return self.xSpacing + def set_xSpacing(self, xSpacing): self.xSpacing = xSpacing def get_ySpacing(self): return self.ySpacing def set_ySpacing(self, ySpacing): self.ySpacing = ySpacing - def get_zStart(self): return self.zStart - def set_zStart(self, zStart): self.zStart = zStart - def get_yStart(self): return self.yStart - def set_yStart(self, yStart): self.yStart = yStart def get_zSpacing(self): return self.zSpacing def set_zSpacing(self, zSpacing): self.zSpacing = zSpacing def get_xStart(self): return self.xStart def set_xStart(self, xStart): self.xStart = xStart - def get_xSpacing(self): return self.xSpacing - def set_xSpacing(self, xSpacing): self.xSpacing = xSpacing + def get_yStart(self): return self.yStart + def set_yStart(self, yStart): self.yStart = yStart + def get_zStart(self): return self.zStart + def set_zStart(self, zStart): self.zStart = zStart def hasContent_(self): if ( @@ -3509,69 +3287,38 @@ class SpaceStructure(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpaceStructure') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SpaceStructure', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='SpaceStructure'): + if self.xSpacing is not None and 'xSpacing' not in already_processed: + already_processed.add('xSpacing') + outfile.write(' xSpacing="%s"' % self.gds_format_float(self.xSpacing, input_name='xSpacing')) if self.ySpacing is not None and 'ySpacing' not in already_processed: already_processed.add('ySpacing') outfile.write(' ySpacing="%s"' % self.gds_format_float(self.ySpacing, input_name='ySpacing')) - if self.zStart is not None and 'zStart' not in already_processed: - already_processed.add('zStart') - outfile.write(' zStart="%s"' % self.gds_format_float(self.zStart, input_name='zStart')) - if self.yStart is not None and 'yStart' not in already_processed: - already_processed.add('yStart') - outfile.write(' yStart="%s"' % self.gds_format_float(self.yStart, input_name='yStart')) if self.zSpacing is not None and 'zSpacing' not in already_processed: already_processed.add('zSpacing') outfile.write(' zSpacing="%s"' % self.gds_format_float(self.zSpacing, input_name='zSpacing')) - if self.xStart is not None and 'xStart' not in already_processed: + if self.xStart != 0 and 'xStart' not in already_processed: already_processed.add('xStart') outfile.write(' xStart="%s"' % self.gds_format_float(self.xStart, input_name='xStart')) - if self.xSpacing is not None and 'xSpacing' not in already_processed: - already_processed.add('xSpacing') - outfile.write(' xSpacing="%s"' % self.gds_format_float(self.xSpacing, input_name='xSpacing')) - def exportChildren(self, outfile, level, namespace_='', name_='SpaceStructure', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='SpaceStructure'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.ySpacing is not None and 'ySpacing' not in already_processed: - already_processed.add('ySpacing') - showIndent(outfile, level) - outfile.write('ySpacing=%f,\n' % (self.ySpacing,)) - if self.zStart is not None and 'zStart' not in already_processed: - already_processed.add('zStart') - showIndent(outfile, level) - outfile.write('zStart=%f,\n' % (self.zStart,)) - if self.yStart is not None and 'yStart' not in already_processed: + if self.yStart != 0 and 'yStart' not in already_processed: already_processed.add('yStart') - showIndent(outfile, level) - outfile.write('yStart=%f,\n' % (self.yStart,)) - if self.zSpacing is not None and 'zSpacing' not in already_processed: - already_processed.add('zSpacing') - showIndent(outfile, level) - outfile.write('zSpacing=%f,\n' % (self.zSpacing,)) - if self.xStart is not None and 'xStart' not in already_processed: - already_processed.add('xStart') - showIndent(outfile, level) - outfile.write('xStart=%f,\n' % (self.xStart,)) - if self.xSpacing is not None and 'xSpacing' not in already_processed: - already_processed.add('xSpacing') - showIndent(outfile, level) - outfile.write('xSpacing=%f,\n' % (self.xSpacing,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' yStart="%s"' % self.gds_format_float(self.yStart, input_name='yStart')) + if self.zStart != 0 and 'zStart' not in already_processed: + already_processed.add('zStart') + outfile.write(' zStart="%s"' % self.gds_format_float(self.zStart, input_name='zStart')) + def exportChildren(self, outfile, level, namespace_='', name_='SpaceStructure', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -3579,7 +3326,15 @@ class SpaceStructure(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('xSpacing', node) + if value is not None and 'xSpacing' not in already_processed: + already_processed.add('xSpacing') + try: + self.xSpacing = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (xSpacing): %s' % exp) value = find_attr_value_('ySpacing', node) if value is not None and 'ySpacing' not in already_processed: already_processed.add('ySpacing') @@ -3587,20 +3342,6 @@ class SpaceStructure(GeneratedsSuper): self.ySpacing = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (ySpacing): %s' % exp) - value = find_attr_value_('zStart', node) - if value is not None and 'zStart' not in already_processed: - already_processed.add('zStart') - try: - self.zStart = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (zStart): %s' % exp) - value = find_attr_value_('yStart', node) - if value is not None and 'yStart' not in already_processed: - already_processed.add('yStart') - try: - self.yStart = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (yStart): %s' % exp) value = find_attr_value_('zSpacing', node) if value is not None and 'zSpacing' not in already_processed: already_processed.add('zSpacing') @@ -3615,13 +3356,20 @@ class SpaceStructure(GeneratedsSuper): self.xStart = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (xStart): %s' % exp) - value = find_attr_value_('xSpacing', node) - if value is not None and 'xSpacing' not in already_processed: - already_processed.add('xSpacing') + value = find_attr_value_('yStart', node) + if value is not None and 'yStart' not in already_processed: + already_processed.add('yStart') try: - self.xSpacing = float(value) + self.yStart = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (xSpacing): %s' % exp) + raise ValueError('Bad float/double attribute (yStart): %s' % exp) + value = find_attr_value_('zStart', node) + if value is not None and 'zStart' not in already_processed: + already_processed.add('zStart') + try: + self.zStart = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (zStart): %s' % exp) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class SpaceStructure @@ -3631,11 +3379,17 @@ class Layout(GeneratedsSuper): subclass = None superclass = None def __init__(self, space=None, random=None, grid=None, unstructured=None): + self.original_tagname_ = None self.space = _cast(None, space) self.random = random self.grid = grid self.unstructured = unstructured def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Layout) + if subclass is not None: + return subclass(*args_, **kwargs_) if Layout.subclass: return Layout.subclass(*args_, **kwargs_) else: @@ -3651,7 +3405,11 @@ class Layout(GeneratedsSuper): def set_space(self, space): self.space = space def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( self.random is not None or @@ -3666,13 +3424,15 @@ class Layout(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Layout') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Layout', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -3692,42 +3452,13 @@ class Layout(GeneratedsSuper): self.grid.export(outfile, level, namespace_, name_='grid', pretty_print=pretty_print) if self.unstructured is not None: self.unstructured.export(outfile, level, namespace_, name_='unstructured', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Layout'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.space is not None and 'space' not in already_processed: - already_processed.add('space') - showIndent(outfile, level) - outfile.write('space="%s",\n' % (self.space,)) - def exportLiteralChildren(self, outfile, level, name_): - if self.random is not None: - showIndent(outfile, level) - outfile.write('random=model_.RandomLayout(\n') - self.random.exportLiteral(outfile, level, name_='random') - showIndent(outfile, level) - outfile.write('),\n') - if self.grid is not None: - showIndent(outfile, level) - outfile.write('grid=model_.GridLayout(\n') - self.grid.exportLiteral(outfile, level, name_='grid') - showIndent(outfile, level) - outfile.write('),\n') - if self.unstructured is not None: - showIndent(outfile, level) - outfile.write('unstructured=model_.UnstructuredLayout(\n') - self.unstructured.exportLiteral(outfile, level, name_='unstructured') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('space', node) if value is not None and 'space' not in already_processed: @@ -3738,15 +3469,18 @@ class Layout(GeneratedsSuper): if nodeName_ == 'random': obj_ = RandomLayout.factory() obj_.build(child_) - self.set_random(obj_) + self.random = obj_ + obj_.original_tagname_ = 'random' elif nodeName_ == 'grid': obj_ = GridLayout.factory() obj_.build(child_) - self.set_grid(obj_) + self.grid = obj_ + obj_.original_tagname_ = 'grid' elif nodeName_ == 'unstructured': obj_ = UnstructuredLayout.factory() obj_.build(child_) - self.set_unstructured(obj_) + self.unstructured = obj_ + obj_.original_tagname_ = 'unstructured' # end class Layout @@ -3754,9 +3488,14 @@ class UnstructuredLayout(GeneratedsSuper): subclass = None superclass = None def __init__(self, number=None): + self.original_tagname_ = None self.number = _cast(int, number) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, UnstructuredLayout) + if subclass is not None: + return subclass(*args_, **kwargs_) if UnstructuredLayout.subclass: return UnstructuredLayout.subclass(*args_, **kwargs_) else: @@ -3776,13 +3515,15 @@ class UnstructuredLayout(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='UnstructuredLayout') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='UnstructuredLayout', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -3792,25 +3533,13 @@ class UnstructuredLayout(GeneratedsSuper): outfile.write(' number="%s"' % self.gds_format_integer(self.number, input_name='number')) def exportChildren(self, outfile, level, namespace_='', name_='UnstructuredLayout', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='UnstructuredLayout'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.number is not None and 'number' not in already_processed: - already_processed.add('number') - showIndent(outfile, level) - outfile.write('number=%d,\n' % (self.number,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('number', node) if value is not None and 'number' not in already_processed: @@ -3829,23 +3558,32 @@ class UnstructuredLayout(GeneratedsSuper): class RandomLayout(GeneratedsSuper): subclass = None superclass = None - def __init__(self, region=None, number=None): - self.region = _cast(None, region) + def __init__(self, number=None, region=None): + self.original_tagname_ = None self.number = _cast(int, number) - pass + self.region = _cast(None, region) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, RandomLayout) + if subclass is not None: + return subclass(*args_, **kwargs_) if RandomLayout.subclass: return RandomLayout.subclass(*args_, **kwargs_) else: return RandomLayout(*args_, **kwargs_) factory = staticmethod(factory) + def get_number(self): return self.number + def set_number(self, number): self.number = number def get_region(self): return self.region def set_region(self, region): self.region = region def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass - def get_number(self): return self.number - def set_number(self, number): self.number = number + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( @@ -3858,41 +3596,26 @@ class RandomLayout(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='RandomLayout') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='RandomLayout', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='RandomLayout'): - if self.region is not None and 'region' not in already_processed: - already_processed.add('region') - outfile.write(' region=%s' % (quote_attrib(self.region), )) if self.number is not None and 'number' not in already_processed: already_processed.add('number') outfile.write(' number="%s"' % self.gds_format_integer(self.number, input_name='number')) - def exportChildren(self, outfile, level, namespace_='', name_='RandomLayout', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='RandomLayout'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.region is not None and 'region' not in already_processed: already_processed.add('region') - showIndent(outfile, level) - outfile.write('region="%s",\n' % (self.region,)) - if self.number is not None and 'number' not in already_processed: - already_processed.add('number') - showIndent(outfile, level) - outfile.write('number=%d,\n' % (self.number,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' region=%s' % (quote_attrib(self.region), )) + def exportChildren(self, outfile, level, namespace_='', name_='RandomLayout', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -3900,12 +3623,8 @@ class RandomLayout(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('region', node) - if value is not None and 'region' not in already_processed: - already_processed.add('region') - self.region = value - self.validate_NmlId(self.region) # validate type NmlId value = find_attr_value_('number', node) if value is not None and 'number' not in already_processed: already_processed.add('number') @@ -3915,6 +3634,11 @@ class RandomLayout(GeneratedsSuper): raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.number < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') + value = find_attr_value_('region', node) + if value is not None and 'region' not in already_processed: + already_processed.add('region') + self.region = value + self.validate_NmlId(self.region) # validate type NmlId def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class RandomLayout @@ -3923,25 +3647,30 @@ class RandomLayout(GeneratedsSuper): class GridLayout(GeneratedsSuper): subclass = None superclass = None - def __init__(self, zSize=None, ySize=None, xSize=None): - self.zSize = _cast(int, zSize) - self.ySize = _cast(int, ySize) + def __init__(self, xSize=None, ySize=None, zSize=None): + self.original_tagname_ = None self.xSize = _cast(int, xSize) - pass + self.ySize = _cast(int, ySize) + self.zSize = _cast(int, zSize) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, GridLayout) + if subclass is not None: + return subclass(*args_, **kwargs_) if GridLayout.subclass: return GridLayout.subclass(*args_, **kwargs_) else: return GridLayout(*args_, **kwargs_) factory = staticmethod(factory) - def get_zSize(self): return self.zSize - def set_zSize(self, zSize): self.zSize = zSize - def get_ySize(self): return self.ySize - def set_ySize(self, ySize): self.ySize = ySize def get_xSize(self): return self.xSize def set_xSize(self, xSize): self.xSize = xSize - def hasContent_(self): - if ( + def get_ySize(self): return self.ySize + def set_ySize(self, ySize): self.ySize = ySize + def get_zSize(self): return self.zSize + def set_zSize(self, zSize): self.zSize = zSize + def hasContent_(self): + if ( ): return True @@ -3952,48 +3681,29 @@ class GridLayout(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='GridLayout') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='GridLayout', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GridLayout'): - if self.zSize is not None and 'zSize' not in already_processed: - already_processed.add('zSize') - outfile.write(' zSize="%s"' % self.gds_format_integer(self.zSize, input_name='zSize')) - if self.ySize is not None and 'ySize' not in already_processed: - already_processed.add('ySize') - outfile.write(' ySize="%s"' % self.gds_format_integer(self.ySize, input_name='ySize')) if self.xSize is not None and 'xSize' not in already_processed: already_processed.add('xSize') outfile.write(' xSize="%s"' % self.gds_format_integer(self.xSize, input_name='xSize')) - def exportChildren(self, outfile, level, namespace_='', name_='GridLayout', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='GridLayout'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.zSize is not None and 'zSize' not in already_processed: - already_processed.add('zSize') - showIndent(outfile, level) - outfile.write('zSize=%d,\n' % (self.zSize,)) if self.ySize is not None and 'ySize' not in already_processed: already_processed.add('ySize') - showIndent(outfile, level) - outfile.write('ySize=%d,\n' % (self.ySize,)) - if self.xSize is not None and 'xSize' not in already_processed: - already_processed.add('xSize') - showIndent(outfile, level) - outfile.write('xSize=%d,\n' % (self.xSize,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' ySize="%s"' % self.gds_format_integer(self.ySize, input_name='ySize')) + if self.zSize is not None and 'zSize' not in already_processed: + already_processed.add('zSize') + outfile.write(' zSize="%s"' % self.gds_format_integer(self.zSize, input_name='zSize')) + def exportChildren(self, outfile, level, namespace_='', name_='GridLayout', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -4001,15 +3711,16 @@ class GridLayout(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('zSize', node) - if value is not None and 'zSize' not in already_processed: - already_processed.add('zSize') + value = find_attr_value_('xSize', node) + if value is not None and 'xSize' not in already_processed: + already_processed.add('xSize') try: - self.zSize = int(value) + self.xSize = int(value) except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) - if self.zSize < 0: + if self.xSize < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') value = find_attr_value_('ySize', node) if value is not None and 'ySize' not in already_processed: @@ -4020,14 +3731,14 @@ class GridLayout(GeneratedsSuper): raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.ySize < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') - value = find_attr_value_('xSize', node) - if value is not None and 'xSize' not in already_processed: - already_processed.add('xSize') + value = find_attr_value_('zSize', node) + if value is not None and 'zSize' not in already_processed: + already_processed.add('zSize') try: - self.xSize = int(value) + self.zSize = int(value) except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) - if self.xSize < 0: + if self.zSize < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass @@ -4037,13 +3748,19 @@ class GridLayout(GeneratedsSuper): class Instance(GeneratedsSuper): subclass = None superclass = None - def __init__(self, i=None, k=None, j=None, id=None, location=None): + def __init__(self, id=None, i=None, j=None, k=None, location=None): + self.original_tagname_ = None + self.id = _cast(int, id) self.i = _cast(int, i) - self.k = _cast(int, k) self.j = _cast(int, j) - self.id = _cast(int, id) + self.k = _cast(int, k) self.location = location def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Instance) + if subclass is not None: + return subclass(*args_, **kwargs_) if Instance.subclass: return Instance.subclass(*args_, **kwargs_) else: @@ -4051,14 +3768,14 @@ class Instance(GeneratedsSuper): factory = staticmethod(factory) def get_location(self): return self.location def set_location(self, location): self.location = location + def get_id(self): return self.id + def set_id(self, id): self.id = id def get_i(self): return self.i def set_i(self, i): self.i = i - def get_k(self): return self.k - def set_k(self, k): self.k = k def get_j(self): return self.j def set_j(self, j): self.j = j - def get_id(self): return self.id - def set_id(self, id): self.id = id + def get_k(self): return self.k + def set_k(self, k): self.k = k def hasContent_(self): if ( self.location is not None @@ -4071,30 +3788,32 @@ class Instance(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Instance') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Instance', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Instance'): + if self.id is not None and 'id' not in already_processed: + already_processed.add('id') + outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id')) if self.i is not None and 'i' not in already_processed: already_processed.add('i') outfile.write(' i="%s"' % self.gds_format_integer(self.i, input_name='i')) - if self.k is not None and 'k' not in already_processed: - already_processed.add('k') - outfile.write(' k="%s"' % self.gds_format_integer(self.k, input_name='k')) if self.j is not None and 'j' not in already_processed: already_processed.add('j') outfile.write(' j="%s"' % self.gds_format_integer(self.j, input_name='j')) - if self.id is not None and 'id' not in already_processed: - already_processed.add('id') - outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id')) + if self.k is not None and 'k' not in already_processed: + already_processed.add('k') + outfile.write(' k="%s"' % self.gds_format_integer(self.k, input_name='k')) def exportChildren(self, outfile, level, namespace_='', name_='Instance', fromsubclass_=False, pretty_print=True): if pretty_print: eol_ = '\n' @@ -4102,43 +3821,23 @@ class Instance(GeneratedsSuper): eol_ = '' if self.location is not None: self.location.export(outfile, level, namespace_, name_='location', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Instance'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.i is not None and 'i' not in already_processed: - already_processed.add('i') - showIndent(outfile, level) - outfile.write('i=%d,\n' % (self.i,)) - if self.k is not None and 'k' not in already_processed: - already_processed.add('k') - showIndent(outfile, level) - outfile.write('k=%d,\n' % (self.k,)) - if self.j is not None and 'j' not in already_processed: - already_processed.add('j') - showIndent(outfile, level) - outfile.write('j=%d,\n' % (self.j,)) - if self.id is not None and 'id' not in already_processed: - already_processed.add('id') - showIndent(outfile, level) - outfile.write('id=%d,\n' % (self.id,)) - def exportLiteralChildren(self, outfile, level, name_): - if self.location is not None: - showIndent(outfile, level) - outfile.write('location=model_.Location(\n') - self.location.exportLiteral(outfile, level, name_='location') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('id', node) + if value is not None and 'id' not in already_processed: + already_processed.add('id') + try: + self.id = int(value) + except ValueError as exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.id < 0: + raise_parse_error(node, 'Invalid NonNegativeInteger') value = find_attr_value_('i', node) if value is not None and 'i' not in already_processed: already_processed.add('i') @@ -4148,15 +3847,6 @@ class Instance(GeneratedsSuper): raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.i < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') - value = find_attr_value_('k', node) - if value is not None and 'k' not in already_processed: - already_processed.add('k') - try: - self.k = int(value) - except ValueError as exp: - raise_parse_error(node, 'Bad integer attribute: %s' % exp) - if self.k < 0: - raise_parse_error(node, 'Invalid NonNegativeInteger') value = find_attr_value_('j', node) if value is not None and 'j' not in already_processed: already_processed.add('j') @@ -4166,41 +3856,47 @@ class Instance(GeneratedsSuper): raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.j < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') - value = find_attr_value_('id', node) - if value is not None and 'id' not in already_processed: - already_processed.add('id') + value = find_attr_value_('k', node) + if value is not None and 'k' not in already_processed: + already_processed.add('k') try: - self.id = int(value) + self.k = int(value) except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) - if self.id < 0: + if self.k < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'location': obj_ = Location.factory() obj_.build(child_) - self.set_location(obj_) + self.location = obj_ + obj_.original_tagname_ = 'location' # end class Instance class Location(GeneratedsSuper): subclass = None superclass = None - def __init__(self, y=None, x=None, z=None): - self.y = _cast(float, y) + def __init__(self, x=None, y=None, z=None): + self.original_tagname_ = None self.x = _cast(float, x) + self.y = _cast(float, y) self.z = _cast(float, z) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Location) + if subclass is not None: + return subclass(*args_, **kwargs_) if Location.subclass: return Location.subclass(*args_, **kwargs_) else: return Location(*args_, **kwargs_) factory = staticmethod(factory) - def get_y(self): return self.y - def set_y(self, y): self.y = y def get_x(self): return self.x def set_x(self, x): self.x = x + def get_y(self): return self.y + def set_y(self, y): self.y = y def get_z(self): return self.z def set_z(self, z): self.z = z def hasContent_(self): @@ -4215,48 +3911,29 @@ class Location(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Location') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Location', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Location'): - if self.y is not None and 'y' not in already_processed: - already_processed.add('y') - outfile.write(' y="%s"' % self.gds_format_float(self.y, input_name='y')) if self.x is not None and 'x' not in already_processed: already_processed.add('x') outfile.write(' x="%s"' % self.gds_format_float(self.x, input_name='x')) - if self.z is not None and 'z' not in already_processed: - already_processed.add('z') - outfile.write(' z="%s"' % self.gds_format_float(self.z, input_name='z')) - def exportChildren(self, outfile, level, namespace_='', name_='Location', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='Location'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.y is not None and 'y' not in already_processed: already_processed.add('y') - showIndent(outfile, level) - outfile.write('y=%f,\n' % (self.y,)) - if self.x is not None and 'x' not in already_processed: - already_processed.add('x') - showIndent(outfile, level) - outfile.write('x=%f,\n' % (self.x,)) + outfile.write(' y="%s"' % self.gds_format_float(self.y, input_name='y')) if self.z is not None and 'z' not in already_processed: already_processed.add('z') - showIndent(outfile, level) - outfile.write('z=%f,\n' % (self.z,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' z="%s"' % self.gds_format_float(self.z, input_name='z')) + def exportChildren(self, outfile, level, namespace_='', name_='Location', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -4264,14 +3941,8 @@ class Location(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('y', node) - if value is not None and 'y' not in already_processed: - already_processed.add('y') - try: - self.y = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (y): %s' % exp) value = find_attr_value_('x', node) if value is not None and 'x' not in already_processed: already_processed.add('x') @@ -4279,6 +3950,13 @@ class Location(GeneratedsSuper): self.x = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (x): %s' % exp) + value = find_attr_value_('y', node) + if value is not None and 'y' not in already_processed: + already_processed.add('y') + try: + self.y = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (y): %s' % exp) value = find_attr_value_('z', node) if value is not None and 'z' not in already_processed: already_processed.add('z') @@ -4297,23 +3975,28 @@ class SynapticConnection(GeneratedsSuper): projection element""" subclass = None superclass = None - def __init__(self, to=None, synapse=None, fromxx=None): + def __init__(self, from_=None, to=None, synapse=None): + self.original_tagname_ = None + self.from_ = _cast(None, from_) self.to = _cast(None, to) self.synapse = _cast(None, synapse) - self.fromxx = _cast(None, fromxx) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SynapticConnection) + if subclass is not None: + return subclass(*args_, **kwargs_) if SynapticConnection.subclass: return SynapticConnection.subclass(*args_, **kwargs_) else: return SynapticConnection(*args_, **kwargs_) factory = staticmethod(factory) + def get_from(self): return self.from_ + def set_from(self, from_): self.from_ = from_ def get_to(self): return self.to def set_to(self, to): self.to = to def get_synapse(self): return self.synapse def set_synapse(self, synapse): self.synapse = synapse - def get_from(self): return self.fromxx - def set_from(self, fromxx): self.fromxx = fromxx def hasContent_(self): if ( @@ -4326,56 +4009,42 @@ class SynapticConnection(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SynapticConnection') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SynapticConnection', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='SynapticConnection'): + if self.from_ is not None and 'from_' not in already_processed: + already_processed.add('from_') + outfile.write(' from=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.from_), input_name='from')), )) if self.to is not None and 'to' not in already_processed: already_processed.add('to') - outfile.write(' to=%s' % (self.gds_format_string(quote_attrib(self.to).encode(ExternalEncoding), input_name='to'), )) + outfile.write(' to=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.to), input_name='to')), )) if self.synapse is not None and 'synapse' not in already_processed: already_processed.add('synapse') - outfile.write(' synapse=%s' % (self.gds_format_string(quote_attrib(self.synapse).encode(ExternalEncoding), input_name='synapse'), )) - if self.fromxx is not None and 'fromxx' not in already_processed: - already_processed.add('fromxx') - outfile.write(' from=%s' % (self.gds_format_string(quote_attrib(self.fromxx).encode(ExternalEncoding), input_name='from'), )) + outfile.write(' synapse=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.synapse), input_name='synapse')), )) def exportChildren(self, outfile, level, namespace_='', name_='SynapticConnection', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='SynapticConnection'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.to is not None and 'to' not in already_processed: - already_processed.add('to') - showIndent(outfile, level) - outfile.write('to="%s",\n' % (self.to,)) - if self.synapse is not None and 'synapse' not in already_processed: - already_processed.add('synapse') - showIndent(outfile, level) - outfile.write('synapse="%s",\n' % (self.synapse,)) - if self.fromxx is not None and 'fromxx' not in already_processed: - already_processed.add('fromxx') - showIndent(outfile, level) - outfile.write('fromxx="%s",\n' % (self.fromxx,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('from', node) + if value is not None and 'from' not in already_processed: + already_processed.add('from') + self.from_ = value value = find_attr_value_('to', node) if value is not None and 'to' not in already_processed: already_processed.add('to') @@ -4384,10 +4053,6 @@ class SynapticConnection(GeneratedsSuper): if value is not None and 'synapse' not in already_processed: already_processed.add('synapse') self.synapse = value - value = find_attr_value_('from', node) - if value is not None and 'from' not in already_processed: - already_processed.add('from') - self.fromxx = value def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class SynapticConnection @@ -4397,23 +4062,28 @@ class Connection(GeneratedsSuper): """Subject to change as it gets tested with LEMS""" subclass = None superclass = None - def __init__(self, postCellId=None, id=None, preCellId=None): - self.postCellId = _cast(None, postCellId) + def __init__(self, id=None, preCellId=None, postCellId=None): + self.original_tagname_ = None self.id = _cast(int, id) self.preCellId = _cast(None, preCellId) - pass + self.postCellId = _cast(None, postCellId) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Connection) + if subclass is not None: + return subclass(*args_, **kwargs_) if Connection.subclass: return Connection.subclass(*args_, **kwargs_) else: return Connection(*args_, **kwargs_) factory = staticmethod(factory) - def get_postCellId(self): return self.postCellId - def set_postCellId(self, postCellId): self.postCellId = postCellId def get_id(self): return self.id def set_id(self, id): self.id = id def get_preCellId(self): return self.preCellId def set_preCellId(self, preCellId): self.preCellId = preCellId + def get_postCellId(self): return self.postCellId + def set_postCellId(self, postCellId): self.postCellId = postCellId def hasContent_(self): if ( @@ -4426,48 +4096,29 @@ class Connection(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Connection') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Connection', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Connection'): - if self.postCellId is not None and 'postCellId' not in already_processed: - already_processed.add('postCellId') - outfile.write(' postCellId=%s' % (self.gds_format_string(quote_attrib(self.postCellId).encode(ExternalEncoding), input_name='postCellId'), )) if self.id is not None and 'id' not in already_processed: already_processed.add('id') outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id')) if self.preCellId is not None and 'preCellId' not in already_processed: already_processed.add('preCellId') - outfile.write(' preCellId=%s' % (self.gds_format_string(quote_attrib(self.preCellId).encode(ExternalEncoding), input_name='preCellId'), )) - def exportChildren(self, outfile, level, namespace_='', name_='Connection', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='Connection'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): + outfile.write(' preCellId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.preCellId), input_name='preCellId')), )) if self.postCellId is not None and 'postCellId' not in already_processed: already_processed.add('postCellId') - showIndent(outfile, level) - outfile.write('postCellId="%s",\n' % (self.postCellId,)) - if self.id is not None and 'id' not in already_processed: - already_processed.add('id') - showIndent(outfile, level) - outfile.write('id=%d,\n' % (self.id,)) - if self.preCellId is not None and 'preCellId' not in already_processed: - already_processed.add('preCellId') - showIndent(outfile, level) - outfile.write('preCellId="%s",\n' % (self.preCellId,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' postCellId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.postCellId), input_name='postCellId')), )) + def exportChildren(self, outfile, level, namespace_='', name_='Connection', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -4475,11 +4126,8 @@ class Connection(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('postCellId', node) - if value is not None and 'postCellId' not in already_processed: - already_processed.add('postCellId') - self.postCellId = value value = find_attr_value_('id', node) if value is not None and 'id' not in already_processed: already_processed.add('id') @@ -4493,6 +4141,10 @@ class Connection(GeneratedsSuper): if value is not None and 'preCellId' not in already_processed: already_processed.add('preCellId') self.preCellId = value + value = find_attr_value_('postCellId', node) + if value is not None and 'postCellId' not in already_processed: + already_processed.add('postCellId') + self.postCellId = value def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class Connection @@ -4504,23 +4156,28 @@ class ExplicitInput(GeneratedsSuper): element""" subclass = None superclass = None - def __init__(self, input=None, destination=None, target=None): + def __init__(self, target=None, input=None, destination=None): + self.original_tagname_ = None + self.target = _cast(None, target) self.input = _cast(None, input) self.destination = _cast(None, destination) - self.target = _cast(None, target) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExplicitInput) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExplicitInput.subclass: return ExplicitInput.subclass(*args_, **kwargs_) else: return ExplicitInput(*args_, **kwargs_) factory = staticmethod(factory) + def get_target(self): return self.target + def set_target(self, target): self.target = target def get_input(self): return self.input def set_input(self, input): self.input = input def get_destination(self): return self.destination def set_destination(self, destination): self.destination = destination - def get_target(self): return self.target - def set_target(self, target): self.target = target def hasContent_(self): if ( @@ -4533,48 +4190,29 @@ class ExplicitInput(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExplicitInput') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExplicitInput', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='ExplicitInput'): - if self.input is not None and 'input' not in already_processed: - already_processed.add('input') - outfile.write(' input=%s' % (self.gds_format_string(quote_attrib(self.input).encode(ExternalEncoding), input_name='input'), )) - if self.destination is not None and 'destination' not in already_processed: - already_processed.add('destination') - outfile.write(' destination=%s' % (self.gds_format_string(quote_attrib(self.destination).encode(ExternalEncoding), input_name='destination'), )) if self.target is not None and 'target' not in already_processed: already_processed.add('target') - outfile.write(' target=%s' % (self.gds_format_string(quote_attrib(self.target).encode(ExternalEncoding), input_name='target'), )) - def exportChildren(self, outfile, level, namespace_='', name_='ExplicitInput', fromsubclass_=False, pretty_print=True): - pass - def exportLiteral(self, outfile, level, name_='ExplicitInput'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): + outfile.write(' target=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.target), input_name='target')), )) if self.input is not None and 'input' not in already_processed: already_processed.add('input') - showIndent(outfile, level) - outfile.write('input="%s",\n' % (self.input,)) + outfile.write(' input=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.input), input_name='input')), )) if self.destination is not None and 'destination' not in already_processed: already_processed.add('destination') - showIndent(outfile, level) - outfile.write('destination="%s",\n' % (self.destination,)) - if self.target is not None and 'target' not in already_processed: - already_processed.add('target') - showIndent(outfile, level) - outfile.write('target="%s",\n' % (self.target,)) - def exportLiteralChildren(self, outfile, level, name_): + outfile.write(' destination=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.destination), input_name='destination')), )) + def exportChildren(self, outfile, level, namespace_='', name_='ExplicitInput', fromsubclass_=False, pretty_print=True): pass def build(self, node): already_processed = set() @@ -4582,7 +4220,12 @@ class ExplicitInput(GeneratedsSuper): for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('target', node) + if value is not None and 'target' not in already_processed: + already_processed.add('target') + self.target = value value = find_attr_value_('input', node) if value is not None and 'input' not in already_processed: already_processed.add('input') @@ -4591,10 +4234,6 @@ class ExplicitInput(GeneratedsSuper): if value is not None and 'destination' not in already_processed: already_processed.add('destination') self.destination = value - value = find_attr_value_('target', node) - if value is not None and 'target' not in already_processed: - already_processed.add('target') - self.target = value def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class ExplicitInput @@ -4604,26 +4243,35 @@ class Input(GeneratedsSuper): """Subject to change as it gets tested with LEMS""" subclass = None superclass = None - def __init__(self, destination=None, id=None, target=None): - self.destination = _cast(None, destination) + def __init__(self, id=None, target=None, destination=None): + self.original_tagname_ = None self.id = _cast(int, id) self.target = _cast(None, target) - pass + self.destination = _cast(None, destination) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Input) + if subclass is not None: + return subclass(*args_, **kwargs_) if Input.subclass: return Input.subclass(*args_, **kwargs_) else: return Input(*args_, **kwargs_) factory = staticmethod(factory) - def get_destination(self): return self.destination - def set_destination(self, destination): self.destination = destination - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass def get_id(self): return self.id def set_id(self, id): self.id = id def get_target(self): return self.target def set_target(self, target): self.target = target + def get_destination(self): return self.destination + def set_destination(self, destination): self.destination = destination + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( @@ -4636,61 +4284,38 @@ class Input(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Input') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Input', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Input'): - if self.destination is not None and 'destination' not in already_processed: - already_processed.add('destination') - outfile.write(' destination=%s' % (quote_attrib(self.destination), )) if self.id is not None and 'id' not in already_processed: already_processed.add('id') outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id')) if self.target is not None and 'target' not in already_processed: already_processed.add('target') - outfile.write(' target=%s' % (self.gds_format_string(quote_attrib(self.target).encode(ExternalEncoding), input_name='target'), )) + outfile.write(' target=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.target), input_name='target')), )) + if self.destination is not None and 'destination' not in already_processed: + already_processed.add('destination') + outfile.write(' destination=%s' % (quote_attrib(self.destination), )) def exportChildren(self, outfile, level, namespace_='', name_='Input', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='Input'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.destination is not None and 'destination' not in already_processed: - already_processed.add('destination') - showIndent(outfile, level) - outfile.write('destination="%s",\n' % (self.destination,)) - if self.id is not None and 'id' not in already_processed: - already_processed.add('id') - showIndent(outfile, level) - outfile.write('id=%d,\n' % (self.id,)) - if self.target is not None and 'target' not in already_processed: - already_processed.add('target') - showIndent(outfile, level) - outfile.write('target="%s",\n' % (self.target,)) - def exportLiteralChildren(self, outfile, level, name_): - pass - def build(self, node): + def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('destination', node) - if value is not None and 'destination' not in already_processed: - already_processed.add('destination') - self.destination = value - self.validate_NmlId(self.destination) # validate type NmlId value = find_attr_value_('id', node) if value is not None and 'id' not in already_processed: already_processed.add('id') @@ -4704,6 +4329,11 @@ class Input(GeneratedsSuper): if value is not None and 'target' not in already_processed: already_processed.add('target') self.target = value + value = find_attr_value_('destination', node) + if value is not None and 'destination' not in already_processed: + already_processed.add('destination') + self.destination = value + self.validate_NmlId(self.destination) # validate type NmlId def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass # end class Input @@ -4715,10 +4345,16 @@ class Base(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, neuroLexId=None, extensiontype_=None): + self.original_tagname_ = None self.id = _cast(None, id) self.neuroLexId = _cast(None, neuroLexId) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Base) + if subclass is not None: + return subclass(*args_, **kwargs_) if Base.subclass: return Base.subclass(*args_, **kwargs_) else: @@ -4726,16 +4362,24 @@ class Base(GeneratedsSuper): factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass def get_neuroLexId(self): return self.neuroLexId def set_neuroLexId(self, neuroLexId): self.neuroLexId = neuroLexId - def validate_NeuroLexId(self, value): - # Validate type NeuroLexId, a restriction on xs:string. - pass def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_NeuroLexId(self, value): + # Validate type NeuroLexId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NeuroLexId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NeuroLexId_patterns_, )) + validate_NeuroLexId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( @@ -4748,13 +4392,15 @@ class Base(GeneratedsSuper): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Base') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Base', pretty_print=pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) @@ -4771,29 +4417,13 @@ class Base(GeneratedsSuper): outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='Base', fromsubclass_=False, pretty_print=True): pass - def exportLiteral(self, outfile, level, name_='Base'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.id is not None and 'id' not in already_processed: - already_processed.add('id') - showIndent(outfile, level) - outfile.write('id="%s",\n' % (self.id,)) - if self.neuroLexId is not None and 'neuroLexId' not in already_processed: - already_processed.add('neuroLexId') - showIndent(outfile, level) - outfile.write('neuroLexId="%s",\n' % (self.neuroLexId,)) - def exportLiteralChildren(self, outfile, level, name_): - pass def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('id', node) if value is not None and 'id' not in already_processed: @@ -4821,13 +4451,20 @@ class Standalone(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, extensiontype_=None): + self.original_tagname_ = None super(Standalone, self).__init__(id, neuroLexId, extensiontype_, ) self.name = _cast(None, name) self.metaid = _cast(None, metaid) self.notes = notes + self.validate_Notes(self.notes) self.annotation = annotation self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Standalone) + if subclass is not None: + return subclass(*args_, **kwargs_) if Standalone.subclass: return Standalone.subclass(*args_, **kwargs_) else: @@ -4835,20 +4472,25 @@ class Standalone(Base): factory = staticmethod(factory) def get_notes(self): return self.notes def set_notes(self, notes): self.notes = notes - def validate_Notes(self, value): - # Validate type Notes, a restriction on xs:string. - pass def get_annotation(self): return self.annotation def set_annotation(self, annotation): self.annotation = annotation def get_name(self): return self.name def set_name(self, name): self.name = name def get_metaid(self): return self.metaid def set_metaid(self, metaid): self.metaid = metaid - def validate_MetaId(self, value): - # Validate type MetaId, a restriction on xs:string. - pass def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_Notes(self, value): + # Validate type Notes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + pass + def validate_MetaId(self, value): + # Validate type MetaId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_MetaId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_MetaId_patterns_, )) + validate_MetaId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( self.notes is not None or @@ -4863,13 +4505,15 @@ class Standalone(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Standalone') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Standalone', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -4878,7 +4522,7 @@ class Standalone(Base): super(Standalone, self).exportAttributes(outfile, level, already_processed, namespace_, name_='Standalone') if self.name is not None and 'name' not in already_processed: already_processed.add('name') - outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) + outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), )) if self.metaid is not None and 'metaid' not in already_processed: already_processed.add('metaid') outfile.write(' metaid=%s' % (quote_attrib(self.metaid), )) @@ -4894,42 +4538,16 @@ class Standalone(Base): eol_ = '' if self.notes is not None: showIndent(outfile, level, pretty_print) - outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_format_string(quote_xml(self.notes).encode(ExternalEncoding), input_name='notes'), namespace_, eol_)) + outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.notes), input_name='notes')), namespace_, eol_)) if self.annotation is not None: self.annotation.export(outfile, level, namespace_, name_='annotation', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Standalone'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.name is not None and 'name' not in already_processed: - already_processed.add('name') - showIndent(outfile, level) - outfile.write('name="%s",\n' % (self.name,)) - if self.metaid is not None and 'metaid' not in already_processed: - already_processed.add('metaid') - showIndent(outfile, level) - outfile.write('metaid="%s",\n' % (self.metaid,)) - super(Standalone, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Standalone, self).exportLiteralChildren(outfile, level, name_) - if self.notes is not None: - showIndent(outfile, level) - outfile.write('notes=%s,\n' % quote_python(self.notes).encode(ExternalEncoding)) - if self.annotation is not None: - showIndent(outfile, level) - outfile.write('annotation=model_.Annotation(\n') - self.annotation.exportLiteral(outfile, level, name_='annotation') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('name', node) if value is not None and 'name' not in already_processed: @@ -4950,11 +4568,13 @@ class Standalone(Base): notes_ = child_.text notes_ = self.gds_validate_string(notes_, node, 'notes') self.notes = notes_ - self.validate_Notes(self.notes) # validate type Notes + # validate type Notes + self.validate_Notes(self.notes) elif nodeName_ == 'annotation': obj_ = Annotation.factory() obj_.build(child_) - self.set_annotation(obj_) + self.annotation = obj_ + obj_.original_tagname_ = 'annotation' super(Standalone, self).buildChildren(child_, node, nodeName_, True) # end class Standalone @@ -4962,30 +4582,43 @@ class Standalone(Base): class SpikeSourcePoisson(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, duration=None, start=None, rate=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, start=None, duration=None, rate=None): + self.original_tagname_ = None super(SpikeSourcePoisson, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) - self.duration = _cast(None, duration) self.start = _cast(None, start) + self.duration = _cast(None, duration) self.rate = _cast(None, rate) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SpikeSourcePoisson) + if subclass is not None: + return subclass(*args_, **kwargs_) if SpikeSourcePoisson.subclass: return SpikeSourcePoisson.subclass(*args_, **kwargs_) else: return SpikeSourcePoisson(*args_, **kwargs_) factory = staticmethod(factory) - def get_duration(self): return self.duration - def set_duration(self, duration): self.duration = duration - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass def get_start(self): return self.start def set_start(self, start): self.start = start + def get_duration(self): return self.duration + def set_duration(self, duration): self.duration = duration def get_rate(self): return self.rate def set_rate(self, rate): self.rate = rate + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def validate_Nml2Quantity_pertime(self, value): # Validate type Nml2Quantity_pertime, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_pertime_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_pertime_patterns_, )) + validate_Nml2Quantity_pertime_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(per_s|per_ms|Hz)$']] def hasContent_(self): if ( super(SpikeSourcePoisson, self).hasContent_() @@ -4998,69 +4631,50 @@ class SpikeSourcePoisson(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeSourcePoisson') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SpikeSourcePoisson', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='SpikeSourcePoisson'): super(SpikeSourcePoisson, self).exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeSourcePoisson') - if self.duration is not None and 'duration' not in already_processed: - already_processed.add('duration') - outfile.write(' duration=%s' % (quote_attrib(self.duration), )) if self.start is not None and 'start' not in already_processed: already_processed.add('start') outfile.write(' start=%s' % (quote_attrib(self.start), )) + if self.duration is not None and 'duration' not in already_processed: + already_processed.add('duration') + outfile.write(' duration=%s' % (quote_attrib(self.duration), )) if self.rate is not None and 'rate' not in already_processed: already_processed.add('rate') outfile.write(' rate=%s' % (quote_attrib(self.rate), )) def exportChildren(self, outfile, level, namespace_='', name_='SpikeSourcePoisson', fromsubclass_=False, pretty_print=True): super(SpikeSourcePoisson, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SpikeSourcePoisson'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.duration is not None and 'duration' not in already_processed: - already_processed.add('duration') - showIndent(outfile, level) - outfile.write('duration="%s",\n' % (self.duration,)) - if self.start is not None and 'start' not in already_processed: - already_processed.add('start') - showIndent(outfile, level) - outfile.write('start="%s",\n' % (self.start,)) - if self.rate is not None and 'rate' not in already_processed: - already_processed.add('rate') - showIndent(outfile, level) - outfile.write('rate="%s",\n' % (self.rate,)) - super(SpikeSourcePoisson, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SpikeSourcePoisson, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('duration', node) - if value is not None and 'duration' not in already_processed: - already_processed.add('duration') - self.duration = value - self.validate_Nml2Quantity_time(self.duration) # validate type Nml2Quantity_time value = find_attr_value_('start', node) if value is not None and 'start' not in already_processed: already_processed.add('start') self.start = value self.validate_Nml2Quantity_time(self.start) # validate type Nml2Quantity_time + value = find_attr_value_('duration', node) + if value is not None and 'duration' not in already_processed: + already_processed.add('duration') + self.duration = value + self.validate_Nml2Quantity_time(self.duration) # validate type Nml2Quantity_time value = find_attr_value_('rate', node) if value is not None and 'rate' not in already_processed: already_processed.add('rate') @@ -5077,15 +4691,21 @@ class InputList(Base): """Subject to change as it gets tested with LEMS""" subclass = None superclass = Base - def __init__(self, id=None, neuroLexId=None, component=None, population=None, input=None): + def __init__(self, id=None, neuroLexId=None, population=None, component=None, input=None): + self.original_tagname_ = None super(InputList, self).__init__(id, neuroLexId, ) - self.component = _cast(None, component) self.population = _cast(None, population) + self.component = _cast(None, component) if input is None: self.input = [] else: self.input = input def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, InputList) + if subclass is not None: + return subclass(*args_, **kwargs_) if InputList.subclass: return InputList.subclass(*args_, **kwargs_) else: @@ -5094,14 +4714,19 @@ class InputList(Base): def get_input(self): return self.input def set_input(self, input): self.input = input def add_input(self, value): self.input.append(value) - def insert_input(self, index, value): self.input[index] = value + def insert_input_at(self, index, value): self.input.insert(index, value) + def replace_input_at(self, index, value): self.input[index] = value + def get_population(self): return self.population + def set_population(self, population): self.population = population def get_component(self): return self.component def set_component(self, component): self.component = component def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass - def get_population(self): return self.population - def set_population(self, population): self.population = population + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( self.input or @@ -5115,25 +4740,27 @@ class InputList(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='InputList') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='InputList', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='InputList'): super(InputList, self).exportAttributes(outfile, level, already_processed, namespace_, name_='InputList') - if self.component is not None and 'component' not in already_processed: - already_processed.add('component') - outfile.write(' component=%s' % (quote_attrib(self.component), )) if self.population is not None and 'population' not in already_processed: already_processed.add('population') outfile.write(' population=%s' % (quote_attrib(self.population), )) + if self.component is not None and 'component' not in already_processed: + already_processed.add('component') + outfile.write(' component=%s' % (quote_attrib(self.component), )) def exportChildren(self, outfile, level, namespace_='', name_='InputList', fromsubclass_=False, pretty_print=True): super(InputList, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -5142,59 +4769,31 @@ class InputList(Base): eol_ = '' for input_ in self.input: input_.export(outfile, level, namespace_, name_='input', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='InputList'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.component is not None and 'component' not in already_processed: - already_processed.add('component') - showIndent(outfile, level) - outfile.write('component="%s",\n' % (self.component,)) - if self.population is not None and 'population' not in already_processed: - already_processed.add('population') - showIndent(outfile, level) - outfile.write('population="%s",\n' % (self.population,)) - super(InputList, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(InputList, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('input=[\n') - level += 1 - for input_ in self.input: - showIndent(outfile, level) - outfile.write('model_.Input(\n') - input_.exportLiteral(outfile, level, name_='Input') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('component', node) - if value is not None and 'component' not in already_processed: - already_processed.add('component') - self.component = value - self.validate_NmlId(self.component) # validate type NmlId value = find_attr_value_('population', node) if value is not None and 'population' not in already_processed: already_processed.add('population') self.population = value self.validate_NmlId(self.population) # validate type NmlId + value = find_attr_value_('component', node) + if value is not None and 'component' not in already_processed: + already_processed.add('component') + self.component = value + self.validate_NmlId(self.component) # validate type NmlId super(InputList, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'input': obj_ = Input.factory() obj_.build(child_) self.input.append(obj_) + obj_.original_tagname_ = 'input' super(InputList, self).buildChildren(child_, node, nodeName_, True) # end class InputList @@ -5203,16 +4802,22 @@ class Projection(Base): """Subject to change as it gets tested with LEMS""" subclass = None superclass = Base - def __init__(self, id=None, neuroLexId=None, postsynapticPopulation=None, presynapticPopulation=None, synapse=None, connection=None): + def __init__(self, id=None, neuroLexId=None, presynapticPopulation=None, postsynapticPopulation=None, synapse=None, connection=None): + self.original_tagname_ = None super(Projection, self).__init__(id, neuroLexId, ) - self.postsynapticPopulation = _cast(None, postsynapticPopulation) self.presynapticPopulation = _cast(None, presynapticPopulation) + self.postsynapticPopulation = _cast(None, postsynapticPopulation) self.synapse = _cast(None, synapse) if connection is None: self.connection = [] else: self.connection = connection def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Projection) + if subclass is not None: + return subclass(*args_, **kwargs_) if Projection.subclass: return Projection.subclass(*args_, **kwargs_) else: @@ -5221,16 +4826,21 @@ class Projection(Base): def get_connection(self): return self.connection def set_connection(self, connection): self.connection = connection def add_connection(self, value): self.connection.append(value) - def insert_connection(self, index, value): self.connection[index] = value - def get_postsynapticPopulation(self): return self.postsynapticPopulation - def set_postsynapticPopulation(self, postsynapticPopulation): self.postsynapticPopulation = postsynapticPopulation - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass + def insert_connection_at(self, index, value): self.connection.insert(index, value) + def replace_connection_at(self, index, value): self.connection[index] = value def get_presynapticPopulation(self): return self.presynapticPopulation def set_presynapticPopulation(self, presynapticPopulation): self.presynapticPopulation = presynapticPopulation + def get_postsynapticPopulation(self): return self.postsynapticPopulation + def set_postsynapticPopulation(self, postsynapticPopulation): self.postsynapticPopulation = postsynapticPopulation def get_synapse(self): return self.synapse def set_synapse(self, synapse): self.synapse = synapse + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( self.connection or @@ -5244,25 +4854,27 @@ class Projection(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Projection') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Projection', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Projection'): super(Projection, self).exportAttributes(outfile, level, already_processed, namespace_, name_='Projection') - if self.postsynapticPopulation is not None and 'postsynapticPopulation' not in already_processed: - already_processed.add('postsynapticPopulation') - outfile.write(' postsynapticPopulation=%s' % (quote_attrib(self.postsynapticPopulation), )) if self.presynapticPopulation is not None and 'presynapticPopulation' not in already_processed: already_processed.add('presynapticPopulation') outfile.write(' presynapticPopulation=%s' % (quote_attrib(self.presynapticPopulation), )) + if self.postsynapticPopulation is not None and 'postsynapticPopulation' not in already_processed: + already_processed.add('postsynapticPopulation') + outfile.write(' postsynapticPopulation=%s' % (quote_attrib(self.postsynapticPopulation), )) if self.synapse is not None and 'synapse' not in already_processed: already_processed.add('synapse') outfile.write(' synapse=%s' % (quote_attrib(self.synapse), )) @@ -5274,57 +4886,24 @@ class Projection(Base): eol_ = '' for connection_ in self.connection: connection_.export(outfile, level, namespace_, name_='connection', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Projection'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.postsynapticPopulation is not None and 'postsynapticPopulation' not in already_processed: - already_processed.add('postsynapticPopulation') - showIndent(outfile, level) - outfile.write('postsynapticPopulation="%s",\n' % (self.postsynapticPopulation,)) - if self.presynapticPopulation is not None and 'presynapticPopulation' not in already_processed: - already_processed.add('presynapticPopulation') - showIndent(outfile, level) - outfile.write('presynapticPopulation="%s",\n' % (self.presynapticPopulation,)) - if self.synapse is not None and 'synapse' not in already_processed: - already_processed.add('synapse') - showIndent(outfile, level) - outfile.write('synapse="%s",\n' % (self.synapse,)) - super(Projection, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Projection, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('connection=[\n') - level += 1 - for connection_ in self.connection: - showIndent(outfile, level) - outfile.write('model_.Connection(\n') - connection_.exportLiteral(outfile, level, name_='Connection') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('postsynapticPopulation', node) - if value is not None and 'postsynapticPopulation' not in already_processed: - already_processed.add('postsynapticPopulation') - self.postsynapticPopulation = value - self.validate_NmlId(self.postsynapticPopulation) # validate type NmlId value = find_attr_value_('presynapticPopulation', node) if value is not None and 'presynapticPopulation' not in already_processed: already_processed.add('presynapticPopulation') self.presynapticPopulation = value self.validate_NmlId(self.presynapticPopulation) # validate type NmlId + value = find_attr_value_('postsynapticPopulation', node) + if value is not None and 'postsynapticPopulation' not in already_processed: + already_processed.add('postsynapticPopulation') + self.postsynapticPopulation = value + self.validate_NmlId(self.postsynapticPopulation) # validate type NmlId value = find_attr_value_('synapse', node) if value is not None and 'synapse' not in already_processed: already_processed.add('synapse') @@ -5336,6 +4915,7 @@ class Projection(Base): obj_ = Connection.factory() obj_.build(child_) self.connection.append(obj_) + obj_.original_tagname_ = 'connection' super(Projection, self).buildChildren(child_, node, nodeName_, True) # end class Projection @@ -5344,6 +4924,7 @@ class CellSet(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, select=None, anytypeobjs_=None): + self.original_tagname_ = None super(CellSet, self).__init__(id, neuroLexId, ) self.select = _cast(None, select) if anytypeobjs_ is None: @@ -5351,6 +4932,11 @@ class CellSet(Base): else: self.anytypeobjs_ = anytypeobjs_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, CellSet) + if subclass is not None: + return subclass(*args_, **kwargs_) if CellSet.subclass: return CellSet.subclass(*args_, **kwargs_) else: @@ -5375,13 +4961,15 @@ class CellSet(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='CellSet') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='CellSet', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -5390,7 +4978,7 @@ class CellSet(Base): super(CellSet, self).exportAttributes(outfile, level, already_processed, namespace_, name_='CellSet') if self.select is not None and 'select' not in already_processed: already_processed.add('select') - outfile.write(' select=%s' % (self.gds_format_string(quote_attrib(self.select).encode(ExternalEncoding), input_name='select'), )) + outfile.write(' select=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.select), input_name='select')), )) def exportChildren(self, outfile, level, namespace_='', name_='CellSet', fromsubclass_=False, pretty_print=True): super(CellSet, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -5399,34 +4987,13 @@ class CellSet(Base): eol_ = '' for obj_ in self.anytypeobjs_: obj_.export(outfile, level, namespace_, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='CellSet'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.select is not None and 'select' not in already_processed: - already_processed.add('select') - showIndent(outfile, level) - outfile.write('select="%s",\n' % (self.select,)) - super(CellSet, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(CellSet, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('anytypeobjs_=[\n') - level += 1 - for anytypeobjs_ in self.anytypeobjs_: - anytypeobjs_.exportLiteral(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('select', node) if value is not None and 'select' not in already_processed: @@ -5444,20 +5011,26 @@ class CellSet(Base): class Population(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, extracellularProperties=None, network=None, component=None, cell=None, type_=None, size=None, layout=None, instance=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cell=None, network=None, component=None, size=None, type_=None, extracellularProperties=None, layout=None, instance=None): + self.original_tagname_ = None super(Population, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) - self.extracellularProperties = _cast(None, extracellularProperties) + self.cell = _cast(None, cell) self.network = _cast(None, network) self.component = _cast(None, component) - self.cell = _cast(None, cell) - self.type_ = _cast(None, type_) self.size = _cast(int, size) + self.type_ = _cast(None, type_) + self.extracellularProperties = _cast(None, extracellularProperties) self.layout = layout if instance is None: self.instance = [] else: self.instance = instance def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Population) + if subclass is not None: + return subclass(*args_, **kwargs_) if Population.subclass: return Population.subclass(*args_, **kwargs_) else: @@ -5468,25 +5041,39 @@ class Population(Standalone): def get_instance(self): return self.instance def set_instance(self, instance): self.instance = instance def add_instance(self, value): self.instance.append(value) - def insert_instance(self, index, value): self.instance[index] = value - def get_extracellularProperties(self): return self.extracellularProperties - def set_extracellularProperties(self, extracellularProperties): self.extracellularProperties = extracellularProperties - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass + def insert_instance_at(self, index, value): self.instance.insert(index, value) + def replace_instance_at(self, index, value): self.instance[index] = value + def get_cell(self): return self.cell + def set_cell(self, cell): self.cell = cell def get_network(self): return self.network def set_network(self, network): self.network = network def get_component(self): return self.component def set_component(self, component): self.component = component - def get_cell(self): return self.cell - def set_cell(self, cell): self.cell = cell + def get_size(self): return self.size + def set_size(self, size): self.size = size def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ + def get_extracellularProperties(self): return self.extracellularProperties + def set_extracellularProperties(self, extracellularProperties): self.extracellularProperties = extracellularProperties + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def validate_populationTypes(self, value): # Validate type populationTypes, a restriction on xs:string. - pass - def get_size(self): return self.size - def set_size(self, size): self.size = size + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['population', 'populationList'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on populationTypes' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.layout is not None or @@ -5501,37 +5088,39 @@ class Population(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Population') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Population', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Population'): super(Population, self).exportAttributes(outfile, level, already_processed, namespace_, name_='Population') - if self.extracellularProperties is not None and 'extracellularProperties' not in already_processed: - already_processed.add('extracellularProperties') - outfile.write(' extracellularProperties=%s' % (quote_attrib(self.extracellularProperties), )) + if self.cell is not None and 'cell' not in already_processed: + already_processed.add('cell') + outfile.write(' cell=%s' % (quote_attrib(self.cell), )) if self.network is not None and 'network' not in already_processed: already_processed.add('network') outfile.write(' network=%s' % (quote_attrib(self.network), )) if self.component is not None and 'component' not in already_processed: already_processed.add('component') outfile.write(' component=%s' % (quote_attrib(self.component), )) - if self.cell is not None and 'cell' not in already_processed: - already_processed.add('cell') - outfile.write(' cell=%s' % (quote_attrib(self.cell), )) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.size is not None and 'size' not in already_processed: already_processed.add('size') outfile.write(' size="%s"' % self.gds_format_integer(self.size, input_name='size')) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('type_') + outfile.write(' type=%s' % (quote_attrib(self.type_), )) + if self.extracellularProperties is not None and 'extracellularProperties' not in already_processed: + already_processed.add('extracellularProperties') + outfile.write(' extracellularProperties=%s' % (quote_attrib(self.extracellularProperties), )) def exportChildren(self, outfile, level, namespace_='', name_='Population', fromsubclass_=False, pretty_print=True): super(Population, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -5542,90 +5131,29 @@ class Population(Standalone): self.layout.export(outfile, level, namespace_, name_='layout', pretty_print=pretty_print) for instance_ in self.instance: instance_.export(outfile, level, namespace_, name_='instance', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Population'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.extracellularProperties is not None and 'extracellularProperties' not in already_processed: - already_processed.add('extracellularProperties') - showIndent(outfile, level) - outfile.write('extracellularProperties="%s",\n' % (self.extracellularProperties,)) - if self.network is not None and 'network' not in already_processed: - already_processed.add('network') - showIndent(outfile, level) - outfile.write('network="%s",\n' % (self.network,)) - if self.component is not None and 'component' not in already_processed: - already_processed.add('component') - showIndent(outfile, level) - outfile.write('component="%s",\n' % (self.component,)) - if self.cell is not None and 'cell' not in already_processed: - already_processed.add('cell') - showIndent(outfile, level) - outfile.write('cell="%s",\n' % (self.cell,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - if self.size is not None and 'size' not in already_processed: - already_processed.add('size') - showIndent(outfile, level) - outfile.write('size=%d,\n' % (self.size,)) - super(Population, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Population, self).exportLiteralChildren(outfile, level, name_) - if self.layout is not None: - showIndent(outfile, level) - outfile.write('layout=model_.Layout(\n') - self.layout.exportLiteral(outfile, level, name_='layout') - showIndent(outfile, level) - outfile.write('),\n') - showIndent(outfile, level) - outfile.write('instance=[\n') - level += 1 - for instance_ in self.instance: - showIndent(outfile, level) - outfile.write('model_.Instance(\n') - instance_.exportLiteral(outfile, level, name_='Instance') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('extracellularProperties', node) - if value is not None and 'extracellularProperties' not in already_processed: - already_processed.add('extracellularProperties') - self.extracellularProperties = value - self.validate_NmlId(self.extracellularProperties) # validate type NmlId - value = find_attr_value_('network', node) - if value is not None and 'network' not in already_processed: - already_processed.add('network') - self.network = value + value = find_attr_value_('cell', node) + if value is not None and 'cell' not in already_processed: + already_processed.add('cell') + self.cell = value + self.validate_NmlId(self.cell) # validate type NmlId + value = find_attr_value_('network', node) + if value is not None and 'network' not in already_processed: + already_processed.add('network') + self.network = value self.validate_NmlId(self.network) # validate type NmlId value = find_attr_value_('component', node) if value is not None and 'component' not in already_processed: already_processed.add('component') self.component = value self.validate_NmlId(self.component) # validate type NmlId - value = find_attr_value_('cell', node) - if value is not None and 'cell' not in already_processed: - already_processed.add('cell') - self.cell = value - self.validate_NmlId(self.cell) # validate type NmlId - value = find_attr_value_('type', node) - if value is not None and 'type' not in already_processed: - already_processed.add('type') - self.type_ = value - self.validate_populationTypes(self.type_) # validate type populationTypes value = find_attr_value_('size', node) if value is not None and 'size' not in already_processed: already_processed.add('size') @@ -5633,16 +5161,28 @@ class Population(Standalone): self.size = int(value) except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + self.validate_populationTypes(self.type_) # validate type populationTypes + value = find_attr_value_('extracellularProperties', node) + if value is not None and 'extracellularProperties' not in already_processed: + already_processed.add('extracellularProperties') + self.extracellularProperties = value + self.validate_NmlId(self.extracellularProperties) # validate type NmlId super(Population, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'layout': obj_ = Layout.factory() obj_.build(child_) - self.set_layout(obj_) + self.layout = obj_ + obj_.original_tagname_ = 'layout' elif nodeName_ == 'instance': obj_ = Instance.factory() obj_.build(child_) self.instance.append(obj_) + obj_.original_tagname_ = 'instance' super(Population, self).buildChildren(child_, node, nodeName_, True) # end class Population @@ -5651,6 +5191,7 @@ class Region(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, space=None, anytypeobjs_=None): + self.original_tagname_ = None super(Region, self).__init__(id, neuroLexId, ) self.space = _cast(None, space) if anytypeobjs_ is None: @@ -5658,6 +5199,11 @@ class Region(Base): else: self.anytypeobjs_ = anytypeobjs_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Region) + if subclass is not None: + return subclass(*args_, **kwargs_) if Region.subclass: return Region.subclass(*args_, **kwargs_) else: @@ -5671,7 +5217,11 @@ class Region(Base): def set_space(self, space): self.space = space def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] def hasContent_(self): if ( self.anytypeobjs_ or @@ -5685,13 +5235,15 @@ class Region(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Region') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Region', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -5709,34 +5261,13 @@ class Region(Base): eol_ = '' for obj_ in self.anytypeobjs_: obj_.export(outfile, level, namespace_, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Region'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.space is not None and 'space' not in already_processed: - already_processed.add('space') - showIndent(outfile, level) - outfile.write('space="%s",\n' % (self.space,)) - super(Region, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Region, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('anytypeobjs_=[\n') - level += 1 - for anytypeobjs_ in self.anytypeobjs_: - anytypeobjs_.exportLiteral(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('space', node) if value is not None and 'space' not in already_processed: @@ -5756,10 +5287,16 @@ class Space(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, basedOn=None, structure=None): + self.original_tagname_ = None super(Space, self).__init__(id, neuroLexId, ) self.basedOn = _cast(None, basedOn) self.structure = structure def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Space) + if subclass is not None: + return subclass(*args_, **kwargs_) if Space.subclass: return Space.subclass(*args_, **kwargs_) else: @@ -5771,7 +5308,16 @@ class Space(Base): def set_basedOn(self, basedOn): self.basedOn = basedOn def validate_allowedSpaces(self, value): # Validate type allowedSpaces, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['Euclidean_1D', 'Euclidean_2D', 'Euclidean_3D', 'Grid_1D', 'Grid_2D', 'Grid_3D'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on allowedSpaces' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.structure is not None or @@ -5785,13 +5331,15 @@ class Space(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Space') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Space', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -5809,32 +5357,13 @@ class Space(Base): eol_ = '' if self.structure is not None: self.structure.export(outfile, level, namespace_, name_='structure', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Space'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.basedOn is not None and 'basedOn' not in already_processed: - already_processed.add('basedOn') - showIndent(outfile, level) - outfile.write('basedOn="%s",\n' % (self.basedOn,)) - super(Space, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Space, self).exportLiteralChildren(outfile, level, name_) - if self.structure is not None: - showIndent(outfile, level) - outfile.write('structure=model_.SpaceStructure(\n') - self.structure.exportLiteral(outfile, level, name_='structure') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('basedOn', node) if value is not None and 'basedOn' not in already_processed: @@ -5846,7 +5375,8 @@ class Space(Base): if nodeName_ == 'structure': obj_ = SpaceStructure.factory() obj_.build(child_) - self.set_structure(obj_) + self.structure = obj_ + obj_.original_tagname_ = 'structure' super(Space, self).buildChildren(child_, node, nodeName_, True) # end class Space @@ -5855,6 +5385,7 @@ class Network(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, space=None, region=None, extracellularProperties=None, population=None, cellSet=None, synapticConnection=None, projection=None, explicitInput=None, inputList=None): + self.original_tagname_ = None super(Network, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) if space is None: self.space = [] @@ -5893,6 +5424,11 @@ class Network(Standalone): else: self.inputList = inputList def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Network) + if subclass is not None: + return subclass(*args_, **kwargs_) if Network.subclass: return Network.subclass(*args_, **kwargs_) else: @@ -5901,39 +5437,48 @@ class Network(Standalone): def get_space(self): return self.space def set_space(self, space): self.space = space def add_space(self, value): self.space.append(value) - def insert_space(self, index, value): self.space[index] = value + def insert_space_at(self, index, value): self.space.insert(index, value) + def replace_space_at(self, index, value): self.space[index] = value def get_region(self): return self.region def set_region(self, region): self.region = region def add_region(self, value): self.region.append(value) - def insert_region(self, index, value): self.region[index] = value + def insert_region_at(self, index, value): self.region.insert(index, value) + def replace_region_at(self, index, value): self.region[index] = value def get_extracellularProperties(self): return self.extracellularProperties def set_extracellularProperties(self, extracellularProperties): self.extracellularProperties = extracellularProperties def add_extracellularProperties(self, value): self.extracellularProperties.append(value) - def insert_extracellularProperties(self, index, value): self.extracellularProperties[index] = value + def insert_extracellularProperties_at(self, index, value): self.extracellularProperties.insert(index, value) + def replace_extracellularProperties_at(self, index, value): self.extracellularProperties[index] = value def get_population(self): return self.population def set_population(self, population): self.population = population def add_population(self, value): self.population.append(value) - def insert_population(self, index, value): self.population[index] = value + def insert_population_at(self, index, value): self.population.insert(index, value) + def replace_population_at(self, index, value): self.population[index] = value def get_cellSet(self): return self.cellSet def set_cellSet(self, cellSet): self.cellSet = cellSet def add_cellSet(self, value): self.cellSet.append(value) - def insert_cellSet(self, index, value): self.cellSet[index] = value + def insert_cellSet_at(self, index, value): self.cellSet.insert(index, value) + def replace_cellSet_at(self, index, value): self.cellSet[index] = value def get_synapticConnection(self): return self.synapticConnection def set_synapticConnection(self, synapticConnection): self.synapticConnection = synapticConnection def add_synapticConnection(self, value): self.synapticConnection.append(value) - def insert_synapticConnection(self, index, value): self.synapticConnection[index] = value + def insert_synapticConnection_at(self, index, value): self.synapticConnection.insert(index, value) + def replace_synapticConnection_at(self, index, value): self.synapticConnection[index] = value def get_projection(self): return self.projection def set_projection(self, projection): self.projection = projection def add_projection(self, value): self.projection.append(value) - def insert_projection(self, index, value): self.projection[index] = value + def insert_projection_at(self, index, value): self.projection.insert(index, value) + def replace_projection_at(self, index, value): self.projection[index] = value def get_explicitInput(self): return self.explicitInput def set_explicitInput(self, explicitInput): self.explicitInput = explicitInput def add_explicitInput(self, value): self.explicitInput.append(value) - def insert_explicitInput(self, index, value): self.explicitInput[index] = value + def insert_explicitInput_at(self, index, value): self.explicitInput.insert(index, value) + def replace_explicitInput_at(self, index, value): self.explicitInput[index] = value def get_inputList(self): return self.inputList def set_inputList(self, inputList): self.inputList = inputList def add_inputList(self, value): self.inputList.append(value) - def insert_inputList(self, index, value): self.inputList[index] = value + def insert_inputList_at(self, index, value): self.inputList.insert(index, value) + def replace_inputList_at(self, index, value): self.inputList[index] = value def hasContent_(self): if ( self.space or @@ -5955,13 +5500,15 @@ class Network(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Network') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Network', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -5992,130 +5539,13 @@ class Network(Standalone): explicitInput_.export(outfile, level, namespace_, name_='explicitInput', pretty_print=pretty_print) for inputList_ in self.inputList: inputList_.export(outfile, level, namespace_, name_='inputList', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Network'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(Network, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Network, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('space=[\n') - level += 1 - for space_ in self.space: - showIndent(outfile, level) - outfile.write('model_.Space(\n') - space_.exportLiteral(outfile, level, name_='Space') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('region=[\n') - level += 1 - for region_ in self.region: - showIndent(outfile, level) - outfile.write('model_.Region(\n') - region_.exportLiteral(outfile, level, name_='Region') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('extracellularProperties=[\n') - level += 1 - for extracellularProperties_ in self.extracellularProperties: - showIndent(outfile, level) - outfile.write('model_.ExtracellularPropertiesLocal(\n') - extracellularProperties_.exportLiteral(outfile, level, name_='ExtracellularPropertiesLocal') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('population=[\n') - level += 1 - for population_ in self.population: - showIndent(outfile, level) - outfile.write('model_.Population(\n') - population_.exportLiteral(outfile, level, name_='Population') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('cellSet=[\n') - level += 1 - for cellSet_ in self.cellSet: - showIndent(outfile, level) - outfile.write('model_.CellSet(\n') - cellSet_.exportLiteral(outfile, level, name_='CellSet') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('synapticConnection=[\n') - level += 1 - for synapticConnection_ in self.synapticConnection: - showIndent(outfile, level) - outfile.write('model_.SynapticConnection(\n') - synapticConnection_.exportLiteral(outfile, level, name_='SynapticConnection') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('projection=[\n') - level += 1 - for projection_ in self.projection: - showIndent(outfile, level) - outfile.write('model_.Projection(\n') - projection_.exportLiteral(outfile, level, name_='Projection') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('explicitInput=[\n') - level += 1 - for explicitInput_ in self.explicitInput: - showIndent(outfile, level) - outfile.write('model_.ExplicitInput(\n') - explicitInput_.exportLiteral(outfile, level, name_='ExplicitInput') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('inputList=[\n') - level += 1 - for inputList_ in self.inputList: - showIndent(outfile, level) - outfile.write('model_.InputList(\n') - inputList_.exportLiteral(outfile, level, name_='InputList') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(Network, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -6123,38 +5553,47 @@ class Network(Standalone): obj_ = Space.factory() obj_.build(child_) self.space.append(obj_) + obj_.original_tagname_ = 'space' elif nodeName_ == 'region': obj_ = Region.factory() obj_.build(child_) self.region.append(obj_) + obj_.original_tagname_ = 'region' elif nodeName_ == 'extracellularProperties': obj_ = ExtracellularPropertiesLocal.factory() obj_.build(child_) self.extracellularProperties.append(obj_) + obj_.original_tagname_ = 'extracellularProperties' elif nodeName_ == 'population': obj_ = Population.factory() obj_.build(child_) self.population.append(obj_) + obj_.original_tagname_ = 'population' elif nodeName_ == 'cellSet': obj_ = CellSet.factory() obj_.build(child_) self.cellSet.append(obj_) + obj_.original_tagname_ = 'cellSet' elif nodeName_ == 'synapticConnection': obj_ = SynapticConnection.factory() obj_.build(child_) self.synapticConnection.append(obj_) + obj_.original_tagname_ = 'synapticConnection' elif nodeName_ == 'projection': obj_ = Projection.factory() obj_.build(child_) self.projection.append(obj_) + obj_.original_tagname_ = 'projection' elif nodeName_ == 'explicitInput': obj_ = ExplicitInput.factory() obj_.build(child_) self.explicitInput.append(obj_) + obj_.original_tagname_ = 'explicitInput' elif nodeName_ == 'inputList': obj_ = InputList.factory() obj_.build(child_) self.inputList.append(obj_) + obj_.original_tagname_ = 'inputList' super(Network, self).buildChildren(child_, node, nodeName_, True) # end class Network @@ -6163,10 +5602,15 @@ class SpikeGeneratorPoisson(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, averageRate=None): + self.original_tagname_ = None super(SpikeGeneratorPoisson, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.averageRate = _cast(None, averageRate) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SpikeGeneratorPoisson) + if subclass is not None: + return subclass(*args_, **kwargs_) if SpikeGeneratorPoisson.subclass: return SpikeGeneratorPoisson.subclass(*args_, **kwargs_) else: @@ -6176,7 +5620,11 @@ class SpikeGeneratorPoisson(Standalone): def set_averageRate(self, averageRate): self.averageRate = averageRate def validate_Nml2Quantity_pertime(self, value): # Validate type Nml2Quantity_pertime, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_pertime_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_pertime_patterns_, )) + validate_Nml2Quantity_pertime_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(per_s|per_ms|Hz)$']] def hasContent_(self): if ( super(SpikeGeneratorPoisson, self).hasContent_() @@ -6189,13 +5637,15 @@ class SpikeGeneratorPoisson(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeGeneratorPoisson') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SpikeGeneratorPoisson', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6207,26 +5657,13 @@ class SpikeGeneratorPoisson(Standalone): outfile.write(' averageRate=%s' % (quote_attrib(self.averageRate), )) def exportChildren(self, outfile, level, namespace_='', name_='SpikeGeneratorPoisson', fromsubclass_=False, pretty_print=True): super(SpikeGeneratorPoisson, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SpikeGeneratorPoisson'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.averageRate is not None and 'averageRate' not in already_processed: - already_processed.add('averageRate') - showIndent(outfile, level) - outfile.write('averageRate="%s",\n' % (self.averageRate,)) - super(SpikeGeneratorPoisson, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SpikeGeneratorPoisson, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('averageRate', node) if value is not None and 'averageRate' not in already_processed: @@ -6243,24 +5680,33 @@ class SpikeGeneratorPoisson(Standalone): class SpikeGeneratorRandom(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, minISI=None, maxISI=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, maxISI=None, minISI=None): + self.original_tagname_ = None super(SpikeGeneratorRandom, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) - self.minISI = _cast(None, minISI) self.maxISI = _cast(None, maxISI) - pass + self.minISI = _cast(None, minISI) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SpikeGeneratorRandom) + if subclass is not None: + return subclass(*args_, **kwargs_) if SpikeGeneratorRandom.subclass: return SpikeGeneratorRandom.subclass(*args_, **kwargs_) else: return SpikeGeneratorRandom(*args_, **kwargs_) factory = staticmethod(factory) + def get_maxISI(self): return self.maxISI + def set_maxISI(self, maxISI): self.maxISI = maxISI def get_minISI(self): return self.minISI def set_minISI(self, minISI): self.minISI = minISI def validate_Nml2Quantity_time(self, value): # Validate type Nml2Quantity_time, a restriction on xs:string. - pass - def get_maxISI(self): return self.maxISI - def set_maxISI(self, maxISI): self.maxISI = maxISI + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(SpikeGeneratorRandom, self).hasContent_() @@ -6273,62 +5719,47 @@ class SpikeGeneratorRandom(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeGeneratorRandom') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SpikeGeneratorRandom', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='SpikeGeneratorRandom'): super(SpikeGeneratorRandom, self).exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeGeneratorRandom') - if self.minISI is not None and 'minISI' not in already_processed: - already_processed.add('minISI') - outfile.write(' minISI=%s' % (quote_attrib(self.minISI), )) if self.maxISI is not None and 'maxISI' not in already_processed: already_processed.add('maxISI') outfile.write(' maxISI=%s' % (quote_attrib(self.maxISI), )) - def exportChildren(self, outfile, level, namespace_='', name_='SpikeGeneratorRandom', fromsubclass_=False, pretty_print=True): - super(SpikeGeneratorRandom, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SpikeGeneratorRandom'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.minISI is not None and 'minISI' not in already_processed: already_processed.add('minISI') - showIndent(outfile, level) - outfile.write('minISI="%s",\n' % (self.minISI,)) - if self.maxISI is not None and 'maxISI' not in already_processed: - already_processed.add('maxISI') - showIndent(outfile, level) - outfile.write('maxISI="%s",\n' % (self.maxISI,)) - super(SpikeGeneratorRandom, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SpikeGeneratorRandom, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' minISI=%s' % (quote_attrib(self.minISI), )) + def exportChildren(self, outfile, level, namespace_='', name_='SpikeGeneratorRandom', fromsubclass_=False, pretty_print=True): + super(SpikeGeneratorRandom, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('minISI', node) - if value is not None and 'minISI' not in already_processed: - already_processed.add('minISI') - self.minISI = value - self.validate_Nml2Quantity_time(self.minISI) # validate type Nml2Quantity_time value = find_attr_value_('maxISI', node) if value is not None and 'maxISI' not in already_processed: already_processed.add('maxISI') self.maxISI = value self.validate_Nml2Quantity_time(self.maxISI) # validate type Nml2Quantity_time + value = find_attr_value_('minISI', node) + if value is not None and 'minISI' not in already_processed: + already_processed.add('minISI') + self.minISI = value + self.validate_Nml2Quantity_time(self.minISI) # validate type Nml2Quantity_time super(SpikeGeneratorRandom, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(SpikeGeneratorRandom, self).buildChildren(child_, node, nodeName_, True) @@ -6340,10 +5771,15 @@ class SpikeGenerator(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, period=None): + self.original_tagname_ = None super(SpikeGenerator, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.period = _cast(None, period) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SpikeGenerator) + if subclass is not None: + return subclass(*args_, **kwargs_) if SpikeGenerator.subclass: return SpikeGenerator.subclass(*args_, **kwargs_) else: @@ -6353,7 +5789,11 @@ class SpikeGenerator(Standalone): def set_period(self, period): self.period = period def validate_Nml2Quantity_time(self, value): # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(SpikeGenerator, self).hasContent_() @@ -6366,13 +5806,15 @@ class SpikeGenerator(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeGenerator') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SpikeGenerator', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6384,26 +5826,13 @@ class SpikeGenerator(Standalone): outfile.write(' period=%s' % (quote_attrib(self.period), )) def exportChildren(self, outfile, level, namespace_='', name_='SpikeGenerator', fromsubclass_=False, pretty_print=True): super(SpikeGenerator, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SpikeGenerator'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.period is not None and 'period' not in already_processed: - already_processed.add('period') - showIndent(outfile, level) - outfile.write('period="%s",\n' % (self.period,)) - super(SpikeGenerator, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SpikeGenerator, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('period', node) if value is not None and 'period' not in already_processed: @@ -6421,12 +5850,18 @@ class SpikeArray(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, spike=None): + self.original_tagname_ = None super(SpikeArray, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) if spike is None: self.spike = [] else: self.spike = spike def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SpikeArray) + if subclass is not None: + return subclass(*args_, **kwargs_) if SpikeArray.subclass: return SpikeArray.subclass(*args_, **kwargs_) else: @@ -6435,7 +5870,8 @@ class SpikeArray(Standalone): def get_spike(self): return self.spike def set_spike(self, spike): self.spike = spike def add_spike(self, value): self.spike.append(value) - def insert_spike(self, index, value): self.spike[index] = value + def insert_spike_at(self, index, value): self.spike.insert(index, value) + def replace_spike_at(self, index, value): self.spike[index] = value def hasContent_(self): if ( self.spike or @@ -6449,13 +5885,15 @@ class SpikeArray(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpikeArray') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SpikeArray', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6470,34 +5908,13 @@ class SpikeArray(Standalone): eol_ = '' for spike_ in self.spike: spike_.export(outfile, level, namespace_, name_='spike', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SpikeArray'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(SpikeArray, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SpikeArray, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('spike=[\n') - level += 1 - for spike_ in self.spike: - showIndent(outfile, level) - outfile.write('model_.Spike(\n') - spike_.exportLiteral(outfile, level, name_='Spike') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(SpikeArray, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -6505,6 +5922,7 @@ class SpikeArray(Standalone): obj_ = Spike.factory() obj_.build(child_) self.spike.append(obj_) + obj_.original_tagname_ = 'spike' super(SpikeArray, self).buildChildren(child_, node, nodeName_, True) # end class SpikeArray @@ -6513,10 +5931,15 @@ class Spike(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, time=None): + self.original_tagname_ = None super(Spike, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.time = _cast(None, time) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Spike) + if subclass is not None: + return subclass(*args_, **kwargs_) if Spike.subclass: return Spike.subclass(*args_, **kwargs_) else: @@ -6526,7 +5949,11 @@ class Spike(Standalone): def set_time(self, time): self.time = time def validate_Nml2Quantity_time(self, value): # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(Spike, self).hasContent_() @@ -6539,13 +5966,15 @@ class Spike(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Spike') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Spike', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6557,26 +5986,13 @@ class Spike(Standalone): outfile.write(' time=%s' % (quote_attrib(self.time), )) def exportChildren(self, outfile, level, namespace_='', name_='Spike', fromsubclass_=False, pretty_print=True): super(Spike, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Spike'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.time is not None and 'time' not in already_processed: - already_processed.add('time') - showIndent(outfile, level) - outfile.write('time="%s",\n' % (self.time,)) - super(Spike, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Spike, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('time', node) if value is not None and 'time' not in already_processed: @@ -6593,14 +6009,19 @@ class Spike(Standalone): class VoltageClamp(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, seriesResistance=None, targetVoltage=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, targetVoltage=None, seriesResistance=None): + self.original_tagname_ = None super(VoltageClamp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.delay = _cast(None, delay) self.duration = _cast(None, duration) - self.seriesResistance = _cast(None, seriesResistance) self.targetVoltage = _cast(None, targetVoltage) - pass + self.seriesResistance = _cast(None, seriesResistance) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, VoltageClamp) + if subclass is not None: + return subclass(*args_, **kwargs_) if VoltageClamp.subclass: return VoltageClamp.subclass(*args_, **kwargs_) else: @@ -6608,21 +6029,33 @@ class VoltageClamp(Standalone): factory = staticmethod(factory) def get_delay(self): return self.delay def set_delay(self, delay): self.delay = delay - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass def get_duration(self): return self.duration def set_duration(self, duration): self.duration = duration - def get_seriesResistance(self): return self.seriesResistance - def set_seriesResistance(self, seriesResistance): self.seriesResistance = seriesResistance - def validate_Nml2Quantity_resistance(self, value): - # Validate type Nml2Quantity_resistance, a restriction on xs:string. - pass def get_targetVoltage(self): return self.targetVoltage def set_targetVoltage(self, targetVoltage): self.targetVoltage = targetVoltage + def get_seriesResistance(self): return self.seriesResistance + def set_seriesResistance(self, seriesResistance): self.seriesResistance = seriesResistance + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def validate_Nml2Quantity_voltage(self, value): # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] + def validate_Nml2Quantity_resistance(self, value): + # Validate type Nml2Quantity_resistance, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_resistance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_resistance_patterns_, )) + validate_Nml2Quantity_resistance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(ohm|Kohm|Mohm)$']] def hasContent_(self): if ( super(VoltageClamp, self).hasContent_() @@ -6635,13 +6068,15 @@ class VoltageClamp(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='VoltageClamp') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='VoltageClamp', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6654,46 +6089,21 @@ class VoltageClamp(Standalone): if self.duration is not None and 'duration' not in already_processed: already_processed.add('duration') outfile.write(' duration=%s' % (quote_attrib(self.duration), )) - if self.seriesResistance is not None and 'seriesResistance' not in already_processed: - already_processed.add('seriesResistance') - outfile.write(' seriesResistance=%s' % (quote_attrib(self.seriesResistance), )) if self.targetVoltage is not None and 'targetVoltage' not in already_processed: already_processed.add('targetVoltage') outfile.write(' targetVoltage=%s' % (quote_attrib(self.targetVoltage), )) - def exportChildren(self, outfile, level, namespace_='', name_='VoltageClamp', fromsubclass_=False, pretty_print=True): - super(VoltageClamp, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='VoltageClamp'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.delay is not None and 'delay' not in already_processed: - already_processed.add('delay') - showIndent(outfile, level) - outfile.write('delay="%s",\n' % (self.delay,)) - if self.duration is not None and 'duration' not in already_processed: - already_processed.add('duration') - showIndent(outfile, level) - outfile.write('duration="%s",\n' % (self.duration,)) if self.seriesResistance is not None and 'seriesResistance' not in already_processed: already_processed.add('seriesResistance') - showIndent(outfile, level) - outfile.write('seriesResistance="%s",\n' % (self.seriesResistance,)) - if self.targetVoltage is not None and 'targetVoltage' not in already_processed: - already_processed.add('targetVoltage') - showIndent(outfile, level) - outfile.write('targetVoltage="%s",\n' % (self.targetVoltage,)) - super(VoltageClamp, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(VoltageClamp, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' seriesResistance=%s' % (quote_attrib(self.seriesResistance), )) + def exportChildren(self, outfile, level, namespace_='', name_='VoltageClamp', fromsubclass_=False, pretty_print=True): + super(VoltageClamp, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('delay', node) if value is not None and 'delay' not in already_processed: @@ -6705,16 +6115,16 @@ class VoltageClamp(Standalone): already_processed.add('duration') self.duration = value self.validate_Nml2Quantity_time(self.duration) # validate type Nml2Quantity_time - value = find_attr_value_('seriesResistance', node) - if value is not None and 'seriesResistance' not in already_processed: - already_processed.add('seriesResistance') - self.seriesResistance = value - self.validate_Nml2Quantity_resistance(self.seriesResistance) # validate type Nml2Quantity_resistance value = find_attr_value_('targetVoltage', node) if value is not None and 'targetVoltage' not in already_processed: already_processed.add('targetVoltage') self.targetVoltage = value self.validate_Nml2Quantity_voltage(self.targetVoltage) # validate type Nml2Quantity_voltage + value = find_attr_value_('seriesResistance', node) + if value is not None and 'seriesResistance' not in already_processed: + already_processed.add('seriesResistance') + self.seriesResistance = value + self.validate_Nml2Quantity_resistance(self.seriesResistance) # validate type Nml2Quantity_resistance super(VoltageClamp, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(VoltageClamp, self).buildChildren(child_, node, nodeName_, True) @@ -6725,15 +6135,20 @@ class VoltageClamp(Standalone): class RampGenerator(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, baselineAmplitude=None, startAmplitude=None, finishAmplitude=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, startAmplitude=None, finishAmplitude=None, baselineAmplitude=None): + self.original_tagname_ = None super(RampGenerator, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.delay = _cast(None, delay) self.duration = _cast(None, duration) - self.baselineAmplitude = _cast(None, baselineAmplitude) self.startAmplitude = _cast(None, startAmplitude) self.finishAmplitude = _cast(None, finishAmplitude) - pass + self.baselineAmplitude = _cast(None, baselineAmplitude) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, RampGenerator) + if subclass is not None: + return subclass(*args_, **kwargs_) if RampGenerator.subclass: return RampGenerator.subclass(*args_, **kwargs_) else: @@ -6741,20 +6156,28 @@ class RampGenerator(Standalone): factory = staticmethod(factory) def get_delay(self): return self.delay def set_delay(self, delay): self.delay = delay - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass def get_duration(self): return self.duration def set_duration(self, duration): self.duration = duration - def get_baselineAmplitude(self): return self.baselineAmplitude - def set_baselineAmplitude(self, baselineAmplitude): self.baselineAmplitude = baselineAmplitude - def validate_Nml2Quantity_current(self, value): - # Validate type Nml2Quantity_current, a restriction on xs:string. - pass def get_startAmplitude(self): return self.startAmplitude def set_startAmplitude(self, startAmplitude): self.startAmplitude = startAmplitude def get_finishAmplitude(self): return self.finishAmplitude def set_finishAmplitude(self, finishAmplitude): self.finishAmplitude = finishAmplitude + def get_baselineAmplitude(self): return self.baselineAmplitude + def set_baselineAmplitude(self, baselineAmplitude): self.baselineAmplitude = baselineAmplitude + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] + def validate_Nml2Quantity_current(self, value): + # Validate type Nml2Quantity_current, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_current_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_current_patterns_, )) + validate_Nml2Quantity_current_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(A|uA|nA|pA)$']] def hasContent_(self): if ( super(RampGenerator, self).hasContent_() @@ -6767,13 +6190,15 @@ class RampGenerator(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='RampGenerator') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='RampGenerator', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6786,53 +6211,24 @@ class RampGenerator(Standalone): if self.duration is not None and 'duration' not in already_processed: already_processed.add('duration') outfile.write(' duration=%s' % (quote_attrib(self.duration), )) - if self.baselineAmplitude is not None and 'baselineAmplitude' not in already_processed: - already_processed.add('baselineAmplitude') - outfile.write(' baselineAmplitude=%s' % (quote_attrib(self.baselineAmplitude), )) if self.startAmplitude is not None and 'startAmplitude' not in already_processed: already_processed.add('startAmplitude') outfile.write(' startAmplitude=%s' % (quote_attrib(self.startAmplitude), )) if self.finishAmplitude is not None and 'finishAmplitude' not in already_processed: already_processed.add('finishAmplitude') outfile.write(' finishAmplitude=%s' % (quote_attrib(self.finishAmplitude), )) - def exportChildren(self, outfile, level, namespace_='', name_='RampGenerator', fromsubclass_=False, pretty_print=True): - super(RampGenerator, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='RampGenerator'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.delay is not None and 'delay' not in already_processed: - already_processed.add('delay') - showIndent(outfile, level) - outfile.write('delay="%s",\n' % (self.delay,)) - if self.duration is not None and 'duration' not in already_processed: - already_processed.add('duration') - showIndent(outfile, level) - outfile.write('duration="%s",\n' % (self.duration,)) if self.baselineAmplitude is not None and 'baselineAmplitude' not in already_processed: already_processed.add('baselineAmplitude') - showIndent(outfile, level) - outfile.write('baselineAmplitude="%s",\n' % (self.baselineAmplitude,)) - if self.startAmplitude is not None and 'startAmplitude' not in already_processed: - already_processed.add('startAmplitude') - showIndent(outfile, level) - outfile.write('startAmplitude="%s",\n' % (self.startAmplitude,)) - if self.finishAmplitude is not None and 'finishAmplitude' not in already_processed: - already_processed.add('finishAmplitude') - showIndent(outfile, level) - outfile.write('finishAmplitude="%s",\n' % (self.finishAmplitude,)) - super(RampGenerator, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(RampGenerator, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' baselineAmplitude=%s' % (quote_attrib(self.baselineAmplitude), )) + def exportChildren(self, outfile, level, namespace_='', name_='RampGenerator', fromsubclass_=False, pretty_print=True): + super(RampGenerator, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('delay', node) if value is not None and 'delay' not in already_processed: @@ -6844,11 +6240,6 @@ class RampGenerator(Standalone): already_processed.add('duration') self.duration = value self.validate_Nml2Quantity_time(self.duration) # validate type Nml2Quantity_time - value = find_attr_value_('baselineAmplitude', node) - if value is not None and 'baselineAmplitude' not in already_processed: - already_processed.add('baselineAmplitude') - self.baselineAmplitude = value - self.validate_Nml2Quantity_current(self.baselineAmplitude) # validate type Nml2Quantity_current value = find_attr_value_('startAmplitude', node) if value is not None and 'startAmplitude' not in already_processed: already_processed.add('startAmplitude') @@ -6859,6 +6250,11 @@ class RampGenerator(Standalone): already_processed.add('finishAmplitude') self.finishAmplitude = value self.validate_Nml2Quantity_current(self.finishAmplitude) # validate type Nml2Quantity_current + value = find_attr_value_('baselineAmplitude', node) + if value is not None and 'baselineAmplitude' not in already_processed: + already_processed.add('baselineAmplitude') + self.baselineAmplitude = value + self.validate_Nml2Quantity_current(self.baselineAmplitude) # validate type Nml2Quantity_current super(RampGenerator, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(RampGenerator, self).buildChildren(child_, node, nodeName_, True) @@ -6869,15 +6265,20 @@ class RampGenerator(Standalone): class SineGenerator(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, phase=None, duration=None, period=None, amplitude=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, phase=None, duration=None, amplitude=None, period=None): + self.original_tagname_ = None super(SineGenerator, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.delay = _cast(None, delay) self.phase = _cast(None, phase) self.duration = _cast(None, duration) - self.period = _cast(None, period) self.amplitude = _cast(None, amplitude) - pass + self.period = _cast(None, period) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SineGenerator) + if subclass is not None: + return subclass(*args_, **kwargs_) if SineGenerator.subclass: return SineGenerator.subclass(*args_, **kwargs_) else: @@ -6885,23 +6286,35 @@ class SineGenerator(Standalone): factory = staticmethod(factory) def get_delay(self): return self.delay def set_delay(self, delay): self.delay = delay - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass def get_phase(self): return self.phase def set_phase(self, phase): self.phase = phase - def validate_Nml2Quantity_none(self, value): - # Validate type Nml2Quantity_none, a restriction on xs:string. - pass def get_duration(self): return self.duration def set_duration(self, duration): self.duration = duration - def get_period(self): return self.period - def set_period(self, period): self.period = period def get_amplitude(self): return self.amplitude def set_amplitude(self, amplitude): self.amplitude = amplitude + def get_period(self): return self.period + def set_period(self, period): self.period = period + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] + def validate_Nml2Quantity_none(self, value): + # Validate type Nml2Quantity_none, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_none_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_none_patterns_, )) + validate_Nml2Quantity_none_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?$']] def validate_Nml2Quantity_current(self, value): # Validate type Nml2Quantity_current, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_current_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_current_patterns_, )) + validate_Nml2Quantity_current_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(A|uA|nA|pA)$']] def hasContent_(self): if ( super(SineGenerator, self).hasContent_() @@ -6914,13 +6327,15 @@ class SineGenerator(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SineGenerator') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SineGenerator', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -6936,50 +6351,21 @@ class SineGenerator(Standalone): if self.duration is not None and 'duration' not in already_processed: already_processed.add('duration') outfile.write(' duration=%s' % (quote_attrib(self.duration), )) - if self.period is not None and 'period' not in already_processed: - already_processed.add('period') - outfile.write(' period=%s' % (quote_attrib(self.period), )) if self.amplitude is not None and 'amplitude' not in already_processed: already_processed.add('amplitude') outfile.write(' amplitude=%s' % (quote_attrib(self.amplitude), )) + if self.period is not None and 'period' not in already_processed: + already_processed.add('period') + outfile.write(' period=%s' % (quote_attrib(self.period), )) def exportChildren(self, outfile, level, namespace_='', name_='SineGenerator', fromsubclass_=False, pretty_print=True): super(SineGenerator, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SineGenerator'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.delay is not None and 'delay' not in already_processed: - already_processed.add('delay') - showIndent(outfile, level) - outfile.write('delay="%s",\n' % (self.delay,)) - if self.phase is not None and 'phase' not in already_processed: - already_processed.add('phase') - showIndent(outfile, level) - outfile.write('phase="%s",\n' % (self.phase,)) - if self.duration is not None and 'duration' not in already_processed: - already_processed.add('duration') - showIndent(outfile, level) - outfile.write('duration="%s",\n' % (self.duration,)) - if self.period is not None and 'period' not in already_processed: - already_processed.add('period') - showIndent(outfile, level) - outfile.write('period="%s",\n' % (self.period,)) - if self.amplitude is not None and 'amplitude' not in already_processed: - already_processed.add('amplitude') - showIndent(outfile, level) - outfile.write('amplitude="%s",\n' % (self.amplitude,)) - super(SineGenerator, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SineGenerator, self).exportLiteralChildren(outfile, level, name_) - def build(self, node): + def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('delay', node) if value is not None and 'delay' not in already_processed: @@ -6996,16 +6382,16 @@ class SineGenerator(Standalone): already_processed.add('duration') self.duration = value self.validate_Nml2Quantity_time(self.duration) # validate type Nml2Quantity_time - value = find_attr_value_('period', node) - if value is not None and 'period' not in already_processed: - already_processed.add('period') - self.period = value - self.validate_Nml2Quantity_time(self.period) # validate type Nml2Quantity_time value = find_attr_value_('amplitude', node) if value is not None and 'amplitude' not in already_processed: already_processed.add('amplitude') self.amplitude = value self.validate_Nml2Quantity_current(self.amplitude) # validate type Nml2Quantity_current + value = find_attr_value_('period', node) + if value is not None and 'period' not in already_processed: + already_processed.add('period') + self.period = value + self.validate_Nml2Quantity_time(self.period) # validate type Nml2Quantity_time super(SineGenerator, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(SineGenerator, self).buildChildren(child_, node, nodeName_, True) @@ -7017,12 +6403,17 @@ class PulseGenerator(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, amplitude=None): + self.original_tagname_ = None super(PulseGenerator, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.delay = _cast(None, delay) self.duration = _cast(None, duration) self.amplitude = _cast(None, amplitude) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, PulseGenerator) + if subclass is not None: + return subclass(*args_, **kwargs_) if PulseGenerator.subclass: return PulseGenerator.subclass(*args_, **kwargs_) else: @@ -7030,16 +6421,24 @@ class PulseGenerator(Standalone): factory = staticmethod(factory) def get_delay(self): return self.delay def set_delay(self, delay): self.delay = delay - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass def get_duration(self): return self.duration def set_duration(self, duration): self.duration = duration def get_amplitude(self): return self.amplitude def set_amplitude(self, amplitude): self.amplitude = amplitude + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def validate_Nml2Quantity_current(self, value): # Validate type Nml2Quantity_current, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_current_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_current_patterns_, )) + validate_Nml2Quantity_current_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(A|uA|nA|pA)$']] def hasContent_(self): if ( super(PulseGenerator, self).hasContent_() @@ -7052,13 +6451,15 @@ class PulseGenerator(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='PulseGenerator') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='PulseGenerator', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -7076,34 +6477,13 @@ class PulseGenerator(Standalone): outfile.write(' amplitude=%s' % (quote_attrib(self.amplitude), )) def exportChildren(self, outfile, level, namespace_='', name_='PulseGenerator', fromsubclass_=False, pretty_print=True): super(PulseGenerator, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='PulseGenerator'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.delay is not None and 'delay' not in already_processed: - already_processed.add('delay') - showIndent(outfile, level) - outfile.write('delay="%s",\n' % (self.delay,)) - if self.duration is not None and 'duration' not in already_processed: - already_processed.add('duration') - showIndent(outfile, level) - outfile.write('duration="%s",\n' % (self.duration,)) - if self.amplitude is not None and 'amplitude' not in already_processed: - already_processed.add('amplitude') - showIndent(outfile, level) - outfile.write('amplitude="%s",\n' % (self.amplitude,)) - super(PulseGenerator, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(PulseGenerator, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('delay', node) if value is not None and 'delay' not in already_processed: @@ -7131,6 +6511,7 @@ class ReactionScheme(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, source=None, type_=None, anytypeobjs_=None): + self.original_tagname_ = None super(ReactionScheme, self).__init__(id, neuroLexId, ) self.source = _cast(None, source) self.type_ = _cast(None, type_) @@ -7139,6 +6520,11 @@ class ReactionScheme(Base): else: self.anytypeobjs_ = anytypeobjs_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ReactionScheme) + if subclass is not None: + return subclass(*args_, **kwargs_) if ReactionScheme.subclass: return ReactionScheme.subclass(*args_, **kwargs_) else: @@ -7165,13 +6551,15 @@ class ReactionScheme(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ReactionScheme') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ReactionScheme', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -7180,10 +6568,10 @@ class ReactionScheme(Base): super(ReactionScheme, self).exportAttributes(outfile, level, already_processed, namespace_, name_='ReactionScheme') if self.source is not None and 'source' not in already_processed: already_processed.add('source') - outfile.write(' source=%s' % (self.gds_format_string(quote_attrib(self.source).encode(ExternalEncoding), input_name='source'), )) + outfile.write(' source=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.source), input_name='source')), )) if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') - outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), )) + outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), )) def exportChildren(self, outfile, level, namespace_='', name_='ReactionScheme', fromsubclass_=False, pretty_print=True): super(ReactionScheme, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -7192,38 +6580,13 @@ class ReactionScheme(Base): eol_ = '' for obj_ in self.anytypeobjs_: obj_.export(outfile, level, namespace_, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ReactionScheme'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.source is not None and 'source' not in already_processed: - already_processed.add('source') - showIndent(outfile, level) - outfile.write('source="%s",\n' % (self.source,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(ReactionScheme, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ReactionScheme, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('anytypeobjs_=[\n') - level += 1 - for anytypeobjs_ in self.anytypeobjs_: - anytypeobjs_.exportLiteral(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('source', node) if value is not None and 'source' not in already_processed: @@ -7246,6 +6609,7 @@ class ExtracellularProperties(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, temperature=None, species=None): + self.original_tagname_ = None super(ExtracellularProperties, self).__init__(id, neuroLexId, ) self.temperature = _cast(None, temperature) if species is None: @@ -7253,6 +6617,11 @@ class ExtracellularProperties(Base): else: self.species = species def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExtracellularProperties) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExtracellularProperties.subclass: return ExtracellularProperties.subclass(*args_, **kwargs_) else: @@ -7261,12 +6630,17 @@ class ExtracellularProperties(Base): def get_species(self): return self.species def set_species(self, species): self.species = species def add_species(self, value): self.species.append(value) - def insert_species(self, index, value): self.species[index] = value + def insert_species_at(self, index, value): self.species.insert(index, value) + def replace_species_at(self, index, value): self.species[index] = value def get_temperature(self): return self.temperature def set_temperature(self, temperature): self.temperature = temperature def validate_Nml2Quantity_temperature(self, value): # Validate type Nml2Quantity_temperature, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_temperature_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_temperature_patterns_, )) + validate_Nml2Quantity_temperature_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(degC)$']] def hasContent_(self): if ( self.species or @@ -7280,13 +6654,15 @@ class ExtracellularProperties(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExtracellularProperties') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExtracellularProperties', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -7304,38 +6680,13 @@ class ExtracellularProperties(Base): eol_ = '' for species_ in self.species: species_.export(outfile, level, namespace_, name_='species', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ExtracellularProperties'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.temperature is not None and 'temperature' not in already_processed: - already_processed.add('temperature') - showIndent(outfile, level) - outfile.write('temperature="%s",\n' % (self.temperature,)) - super(ExtracellularProperties, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ExtracellularProperties, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('species=[\n') - level += 1 - for species_ in self.species: - showIndent(outfile, level) - outfile.write('model_.Species(\n') - species_.exportLiteral(outfile, level, name_='Species') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('temperature', node) if value is not None and 'temperature' not in already_processed: @@ -7348,6 +6699,7 @@ class ExtracellularProperties(Base): obj_ = Species.factory() obj_.build(child_) self.species.append(obj_) + obj_.original_tagname_ = 'species' super(ExtracellularProperties, self).buildChildren(child_, node, nodeName_, True) # end class ExtracellularProperties @@ -7361,19 +6713,25 @@ class ChannelDensity(Base): ionChannel element. TODO: remove.""" subclass = None superclass = Base - def __init__(self, id=None, neuroLexId=None, segmentGroup='all', ion=None, ionChannel=None, erev=None, condDensity=None, segment=None, variableParameter=None): + def __init__(self, id=None, neuroLexId=None, ionChannel=None, condDensity=None, erev=None, segmentGroup='all', segment=None, ion=None, variableParameter=None): + self.original_tagname_ = None super(ChannelDensity, self).__init__(id, neuroLexId, ) - self.segmentGroup = _cast(None, segmentGroup) - self.ion = _cast(None, ion) self.ionChannel = _cast(None, ionChannel) - self.erev = _cast(None, erev) self.condDensity = _cast(None, condDensity) + self.erev = _cast(None, erev) + self.segmentGroup = _cast(None, segmentGroup) self.segment = _cast(None, segment) + self.ion = _cast(None, ion) if variableParameter is None: self.variableParameter = [] else: self.variableParameter = variableParameter def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ChannelDensity) + if subclass is not None: + return subclass(*args_, **kwargs_) if ChannelDensity.subclass: return ChannelDensity.subclass(*args_, **kwargs_) else: @@ -7382,28 +6740,41 @@ class ChannelDensity(Base): def get_variableParameter(self): return self.variableParameter def set_variableParameter(self, variableParameter): self.variableParameter = variableParameter def add_variableParameter(self, value): self.variableParameter.append(value) - def insert_variableParameter(self, index, value): self.variableParameter[index] = value - def get_segmentGroup(self): return self.segmentGroup - def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass - def get_ion(self): return self.ion - def set_ion(self, ion): self.ion = ion + def insert_variableParameter_at(self, index, value): self.variableParameter.insert(index, value) + def replace_variableParameter_at(self, index, value): self.variableParameter[index] = value def get_ionChannel(self): return self.ionChannel def set_ionChannel(self, ionChannel): self.ionChannel = ionChannel - def get_erev(self): return self.erev - def set_erev(self, erev): self.erev = erev - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass def get_condDensity(self): return self.condDensity def set_condDensity(self, condDensity): self.condDensity = condDensity - def validate_Nml2Quantity_conductanceDensity(self, value): - # Validate type Nml2Quantity_conductanceDensity, a restriction on xs:string. - pass + def get_erev(self): return self.erev + def set_erev(self, erev): self.erev = erev + def get_segmentGroup(self): return self.segmentGroup + def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def get_segment(self): return self.segment def set_segment(self, segment): self.segment = segment + def get_ion(self): return self.ion + def set_ion(self, ion): self.ion = ion + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_conductanceDensity(self, value): + # Validate type Nml2Quantity_conductanceDensity, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_conductanceDensity_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_conductanceDensity_patterns_, )) + validate_Nml2Quantity_conductanceDensity_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(S_per_m2|mS_per_cm2|S_per_cm2)$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( self.variableParameter or @@ -7417,37 +6788,39 @@ class ChannelDensity(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ChannelDensity') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ChannelDensity', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='ChannelDensity'): super(ChannelDensity, self).exportAttributes(outfile, level, already_processed, namespace_, name_='ChannelDensity') - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - outfile.write(' ion=%s' % (quote_attrib(self.ion), )) if self.ionChannel is not None and 'ionChannel' not in already_processed: already_processed.add('ionChannel') outfile.write(' ionChannel=%s' % (quote_attrib(self.ionChannel), )) - if self.erev is not None and 'erev' not in already_processed: - already_processed.add('erev') - outfile.write(' erev=%s' % (quote_attrib(self.erev), )) if self.condDensity is not None and 'condDensity' not in already_processed: already_processed.add('condDensity') outfile.write(' condDensity=%s' % (quote_attrib(self.condDensity), )) + if self.erev is not None and 'erev' not in already_processed: + already_processed.add('erev') + outfile.write(' erev=%s' % (quote_attrib(self.erev), )) + if self.segmentGroup != "all" and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) if self.segment is not None and 'segment' not in already_processed: already_processed.add('segment') outfile.write(' segment=%s' % (quote_attrib(self.segment), )) + if self.ion is not None and 'ion' not in already_processed: + already_processed.add('ion') + outfile.write(' ion=%s' % (quote_attrib(self.ion), )) def exportChildren(self, outfile, level, namespace_='', name_='ChannelDensity', fromsubclass_=False, pretty_print=True): super(ChannelDensity, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -7456,95 +6829,51 @@ class ChannelDensity(Base): eol_ = '' for variableParameter_ in self.variableParameter: variableParameter_.export(outfile, level, namespace_, name_='variableParameter', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ChannelDensity'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - showIndent(outfile, level) - outfile.write('segmentGroup="%s",\n' % (self.segmentGroup,)) - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - showIndent(outfile, level) - outfile.write('ion="%s",\n' % (self.ion,)) - if self.ionChannel is not None and 'ionChannel' not in already_processed: - already_processed.add('ionChannel') - showIndent(outfile, level) - outfile.write('ionChannel="%s",\n' % (self.ionChannel,)) - if self.erev is not None and 'erev' not in already_processed: - already_processed.add('erev') - showIndent(outfile, level) - outfile.write('erev="%s",\n' % (self.erev,)) - if self.condDensity is not None and 'condDensity' not in already_processed: - already_processed.add('condDensity') - showIndent(outfile, level) - outfile.write('condDensity="%s",\n' % (self.condDensity,)) - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - showIndent(outfile, level) - outfile.write('segment="%s",\n' % (self.segment,)) - super(ChannelDensity, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ChannelDensity, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('variableParameter=[\n') - level += 1 - for variableParameter_ in self.variableParameter: - showIndent(outfile, level) - outfile.write('model_.VariableParameter(\n') - variableParameter_.exportLiteral(outfile, level, name_='VariableParameter') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('segmentGroup', node) - if value is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - self.segmentGroup = value - self.validate_NmlId(self.segmentGroup) # validate type NmlId - value = find_attr_value_('ion', node) - if value is not None and 'ion' not in already_processed: - already_processed.add('ion') - self.ion = value - self.validate_NmlId(self.ion) # validate type NmlId value = find_attr_value_('ionChannel', node) if value is not None and 'ionChannel' not in already_processed: already_processed.add('ionChannel') self.ionChannel = value self.validate_NmlId(self.ionChannel) # validate type NmlId - value = find_attr_value_('erev', node) - if value is not None and 'erev' not in already_processed: - already_processed.add('erev') - self.erev = value - self.validate_Nml2Quantity_voltage(self.erev) # validate type Nml2Quantity_voltage value = find_attr_value_('condDensity', node) if value is not None and 'condDensity' not in already_processed: already_processed.add('condDensity') self.condDensity = value self.validate_Nml2Quantity_conductanceDensity(self.condDensity) # validate type Nml2Quantity_conductanceDensity + value = find_attr_value_('erev', node) + if value is not None and 'erev' not in already_processed: + already_processed.add('erev') + self.erev = value + self.validate_Nml2Quantity_voltage(self.erev) # validate type Nml2Quantity_voltage + value = find_attr_value_('segmentGroup', node) + if value is not None and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + self.segmentGroup = value + self.validate_NmlId(self.segmentGroup) # validate type NmlId value = find_attr_value_('segment', node) if value is not None and 'segment' not in already_processed: already_processed.add('segment') self.segment = value self.validate_NmlId(self.segment) # validate type NmlId + value = find_attr_value_('ion', node) + if value is not None and 'ion' not in already_processed: + already_processed.add('ion') + self.ion = value + self.validate_NmlId(self.ion) # validate type NmlId super(ChannelDensity, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'variableParameter': obj_ = VariableParameter.factory() obj_.build(child_) self.variableParameter.append(obj_) + obj_.original_tagname_ = 'variableParameter' super(ChannelDensity, self).buildChildren(child_, node, nodeName_, True) # end class ChannelDensity @@ -7558,19 +6887,25 @@ class ChannelPopulation(Base): ionChannel element. TODO: remove.""" subclass = None superclass = Base - def __init__(self, id=None, neuroLexId=None, segmentGroup='all', ion=None, number=None, ionChannel=None, erev=None, segment=None, variableParameter=None): + def __init__(self, id=None, neuroLexId=None, ionChannel=None, number=None, erev=None, segmentGroup='all', segment=None, ion=None, variableParameter=None): + self.original_tagname_ = None super(ChannelPopulation, self).__init__(id, neuroLexId, ) - self.segmentGroup = _cast(None, segmentGroup) - self.ion = _cast(None, ion) - self.number = _cast(int, number) self.ionChannel = _cast(None, ionChannel) + self.number = _cast(int, number) self.erev = _cast(None, erev) + self.segmentGroup = _cast(None, segmentGroup) self.segment = _cast(None, segment) + self.ion = _cast(None, ion) if variableParameter is None: self.variableParameter = [] else: self.variableParameter = variableParameter def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ChannelPopulation) + if subclass is not None: + return subclass(*args_, **kwargs_) if ChannelPopulation.subclass: return ChannelPopulation.subclass(*args_, **kwargs_) else: @@ -7579,25 +6914,34 @@ class ChannelPopulation(Base): def get_variableParameter(self): return self.variableParameter def set_variableParameter(self, variableParameter): self.variableParameter = variableParameter def add_variableParameter(self, value): self.variableParameter.append(value) - def insert_variableParameter(self, index, value): self.variableParameter[index] = value - def get_segmentGroup(self): return self.segmentGroup - def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass - def get_ion(self): return self.ion - def set_ion(self, ion): self.ion = ion - def get_number(self): return self.number - def set_number(self, number): self.number = number + def insert_variableParameter_at(self, index, value): self.variableParameter.insert(index, value) + def replace_variableParameter_at(self, index, value): self.variableParameter[index] = value def get_ionChannel(self): return self.ionChannel def set_ionChannel(self, ionChannel): self.ionChannel = ionChannel + def get_number(self): return self.number + def set_number(self, number): self.number = number def get_erev(self): return self.erev def set_erev(self, erev): self.erev = erev - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass + def get_segmentGroup(self): return self.segmentGroup + def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def get_segment(self): return self.segment def set_segment(self, segment): self.segment = segment + def get_ion(self): return self.ion + def set_ion(self, ion): self.ion = ion + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( self.variableParameter or @@ -7611,37 +6955,39 @@ class ChannelPopulation(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ChannelPopulation') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ChannelPopulation', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='ChannelPopulation'): super(ChannelPopulation, self).exportAttributes(outfile, level, already_processed, namespace_, name_='ChannelPopulation') - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - outfile.write(' ion=%s' % (quote_attrib(self.ion), )) - if self.number is not None and 'number' not in already_processed: - already_processed.add('number') - outfile.write(' number="%s"' % self.gds_format_integer(self.number, input_name='number')) if self.ionChannel is not None and 'ionChannel' not in already_processed: already_processed.add('ionChannel') outfile.write(' ionChannel=%s' % (quote_attrib(self.ionChannel), )) + if self.number is not None and 'number' not in already_processed: + already_processed.add('number') + outfile.write(' number="%s"' % self.gds_format_integer(self.number, input_name='number')) if self.erev is not None and 'erev' not in already_processed: already_processed.add('erev') outfile.write(' erev=%s' % (quote_attrib(self.erev), )) + if self.segmentGroup != "all" and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + outfile.write(' segmentGroup=%s' % (quote_attrib(self.segmentGroup), )) if self.segment is not None and 'segment' not in already_processed: already_processed.add('segment') outfile.write(' segment=%s' % (quote_attrib(self.segment), )) + if self.ion is not None and 'ion' not in already_processed: + already_processed.add('ion') + outfile.write(' ion=%s' % (quote_attrib(self.ion), )) def exportChildren(self, outfile, level, namespace_='', name_='ChannelPopulation', fromsubclass_=False, pretty_print=True): super(ChannelPopulation, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -7650,69 +6996,19 @@ class ChannelPopulation(Base): eol_ = '' for variableParameter_ in self.variableParameter: variableParameter_.export(outfile, level, namespace_, name_='variableParameter', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ChannelPopulation'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.segmentGroup is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - showIndent(outfile, level) - outfile.write('segmentGroup="%s",\n' % (self.segmentGroup,)) - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - showIndent(outfile, level) - outfile.write('ion="%s",\n' % (self.ion,)) - if self.number is not None and 'number' not in already_processed: - already_processed.add('number') - showIndent(outfile, level) - outfile.write('number=%d,\n' % (self.number,)) - if self.ionChannel is not None and 'ionChannel' not in already_processed: - already_processed.add('ionChannel') - showIndent(outfile, level) - outfile.write('ionChannel="%s",\n' % (self.ionChannel,)) - if self.erev is not None and 'erev' not in already_processed: - already_processed.add('erev') - showIndent(outfile, level) - outfile.write('erev="%s",\n' % (self.erev,)) - if self.segment is not None and 'segment' not in already_processed: - already_processed.add('segment') - showIndent(outfile, level) - outfile.write('segment="%s",\n' % (self.segment,)) - super(ChannelPopulation, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ChannelPopulation, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('variableParameter=[\n') - level += 1 - for variableParameter_ in self.variableParameter: - showIndent(outfile, level) - outfile.write('model_.VariableParameter(\n') - variableParameter_.exportLiteral(outfile, level, name_='VariableParameter') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('segmentGroup', node) - if value is not None and 'segmentGroup' not in already_processed: - already_processed.add('segmentGroup') - self.segmentGroup = value - self.validate_NmlId(self.segmentGroup) # validate type NmlId - value = find_attr_value_('ion', node) - if value is not None and 'ion' not in already_processed: - already_processed.add('ion') - self.ion = value - self.validate_NmlId(self.ion) # validate type NmlId + value = find_attr_value_('ionChannel', node) + if value is not None and 'ionChannel' not in already_processed: + already_processed.add('ionChannel') + self.ionChannel = value + self.validate_NmlId(self.ionChannel) # validate type NmlId value = find_attr_value_('number', node) if value is not None and 'number' not in already_processed: already_processed.add('number') @@ -7722,27 +7018,33 @@ class ChannelPopulation(Base): raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.number < 0: raise_parse_error(node, 'Invalid NonNegativeInteger') - value = find_attr_value_('ionChannel', node) - if value is not None and 'ionChannel' not in already_processed: - already_processed.add('ionChannel') - self.ionChannel = value - self.validate_NmlId(self.ionChannel) # validate type NmlId value = find_attr_value_('erev', node) if value is not None and 'erev' not in already_processed: already_processed.add('erev') self.erev = value self.validate_Nml2Quantity_voltage(self.erev) # validate type Nml2Quantity_voltage - value = find_attr_value_('segment', node) - if value is not None and 'segment' not in already_processed: - already_processed.add('segment') - self.segment = value + value = find_attr_value_('segmentGroup', node) + if value is not None and 'segmentGroup' not in already_processed: + already_processed.add('segmentGroup') + self.segmentGroup = value + self.validate_NmlId(self.segmentGroup) # validate type NmlId + value = find_attr_value_('segment', node) + if value is not None and 'segment' not in already_processed: + already_processed.add('segment') + self.segment = value self.validate_NmlId(self.segment) # validate type NmlId + value = find_attr_value_('ion', node) + if value is not None and 'ion' not in already_processed: + already_processed.add('ion') + self.ion = value + self.validate_NmlId(self.ion) # validate type NmlId super(ChannelPopulation, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'variableParameter': obj_ = VariableParameter.factory() obj_.build(child_) self.variableParameter.append(obj_) + obj_.original_tagname_ = 'variableParameter' super(ChannelPopulation, self).buildChildren(child_, node, nodeName_, True) # end class ChannelPopulation @@ -7753,11 +7055,17 @@ class BiophysicalProperties(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, membraneProperties=None, intracellularProperties=None, extracellularProperties=None): + self.original_tagname_ = None super(BiophysicalProperties, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) self.membraneProperties = membraneProperties self.intracellularProperties = intracellularProperties self.extracellularProperties = extracellularProperties def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BiophysicalProperties) + if subclass is not None: + return subclass(*args_, **kwargs_) if BiophysicalProperties.subclass: return BiophysicalProperties.subclass(*args_, **kwargs_) else: @@ -7784,13 +7092,15 @@ class BiophysicalProperties(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BiophysicalProperties') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BiophysicalProperties', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -7809,55 +7119,31 @@ class BiophysicalProperties(Standalone): self.intracellularProperties.export(outfile, level, namespace_, name_='intracellularProperties', pretty_print=pretty_print) if self.extracellularProperties is not None: self.extracellularProperties.export(outfile, level, namespace_, name_='extracellularProperties', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='BiophysicalProperties'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(BiophysicalProperties, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(BiophysicalProperties, self).exportLiteralChildren(outfile, level, name_) - if self.membraneProperties is not None: - showIndent(outfile, level) - outfile.write('membraneProperties=model_.MembraneProperties(\n') - self.membraneProperties.exportLiteral(outfile, level, name_='membraneProperties') - showIndent(outfile, level) - outfile.write('),\n') - if self.intracellularProperties is not None: - showIndent(outfile, level) - outfile.write('intracellularProperties=model_.IntracellularProperties(\n') - self.intracellularProperties.exportLiteral(outfile, level, name_='intracellularProperties') - showIndent(outfile, level) - outfile.write('),\n') - if self.extracellularProperties is not None: - showIndent(outfile, level) - outfile.write('extracellularProperties=model_.ExtracellularProperties(\n') - self.extracellularProperties.exportLiteral(outfile, level, name_='extracellularProperties') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(BiophysicalProperties, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'membraneProperties': obj_ = MembraneProperties.factory() obj_.build(child_) - self.set_membraneProperties(obj_) + self.membraneProperties = obj_ + obj_.original_tagname_ = 'membraneProperties' elif nodeName_ == 'intracellularProperties': obj_ = IntracellularProperties.factory() obj_.build(child_) - self.set_intracellularProperties(obj_) + self.intracellularProperties = obj_ + obj_.original_tagname_ = 'intracellularProperties' elif nodeName_ == 'extracellularProperties': obj_ = ExtracellularProperties.factory() obj_.build(child_) - self.set_extracellularProperties(obj_) + self.extracellularProperties = obj_ + obj_.original_tagname_ = 'extracellularProperties' super(BiophysicalProperties, self).buildChildren(child_, node, nodeName_, True) # end class BiophysicalProperties @@ -7866,12 +7152,18 @@ class InhomogeneousParam(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, variable=None, metric=None, proximal=None, distal=None): + self.original_tagname_ = None super(InhomogeneousParam, self).__init__(id, neuroLexId, ) self.variable = _cast(None, variable) self.metric = _cast(None, metric) self.proximal = proximal self.distal = distal def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, InhomogeneousParam) + if subclass is not None: + return subclass(*args_, **kwargs_) if InhomogeneousParam.subclass: return InhomogeneousParam.subclass(*args_, **kwargs_) else: @@ -7887,7 +7179,16 @@ class InhomogeneousParam(Base): def set_metric(self, metric): self.metric = metric def validate_Metric(self, value): # Validate type Metric, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['Path Length from root'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on Metric' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.proximal is not None or @@ -7902,13 +7203,15 @@ class InhomogeneousParam(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='InhomogeneousParam') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='InhomogeneousParam', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -7917,7 +7220,7 @@ class InhomogeneousParam(Base): super(InhomogeneousParam, self).exportAttributes(outfile, level, already_processed, namespace_, name_='InhomogeneousParam') if self.variable is not None and 'variable' not in already_processed: already_processed.add('variable') - outfile.write(' variable=%s' % (self.gds_format_string(quote_attrib(self.variable).encode(ExternalEncoding), input_name='variable'), )) + outfile.write(' variable=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.variable), input_name='variable')), )) if self.metric is not None and 'metric' not in already_processed: already_processed.add('metric') outfile.write(' metric=%s' % (quote_attrib(self.metric), )) @@ -7931,42 +7234,13 @@ class InhomogeneousParam(Base): self.proximal.export(outfile, level, namespace_, name_='proximal', pretty_print=pretty_print) if self.distal is not None: self.distal.export(outfile, level, namespace_, name_='distal', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='InhomogeneousParam'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.variable is not None and 'variable' not in already_processed: - already_processed.add('variable') - showIndent(outfile, level) - outfile.write('variable="%s",\n' % (self.variable,)) - if self.metric is not None and 'metric' not in already_processed: - already_processed.add('metric') - showIndent(outfile, level) - outfile.write('metric="%s",\n' % (self.metric,)) - super(InhomogeneousParam, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(InhomogeneousParam, self).exportLiteralChildren(outfile, level, name_) - if self.proximal is not None: - showIndent(outfile, level) - outfile.write('proximal=model_.ProximalDetails(\n') - self.proximal.exportLiteral(outfile, level, name_='proximal') - showIndent(outfile, level) - outfile.write('),\n') - if self.distal is not None: - showIndent(outfile, level) - outfile.write('distal=model_.DistalDetails(\n') - self.distal.exportLiteral(outfile, level, name_='distal') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('variable', node) if value is not None and 'variable' not in already_processed: @@ -7982,11 +7256,13 @@ class InhomogeneousParam(Base): if nodeName_ == 'proximal': obj_ = ProximalDetails.factory() obj_.build(child_) - self.set_proximal(obj_) + self.proximal = obj_ + obj_.original_tagname_ = 'proximal' elif nodeName_ == 'distal': obj_ = DistalDetails.factory() obj_.build(child_) - self.set_distal(obj_) + self.distal = obj_ + obj_.original_tagname_ = 'distal' super(InhomogeneousParam, self).buildChildren(child_, node, nodeName_, True) # end class InhomogeneousParam @@ -7995,6 +7271,7 @@ class SegmentGroup(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, member=None, include=None, path=None, subTree=None, inhomogeneousParam=None): + self.original_tagname_ = None super(SegmentGroup, self).__init__(id, neuroLexId, ) if member is None: self.member = [] @@ -8017,6 +7294,11 @@ class SegmentGroup(Base): else: self.inhomogeneousParam = inhomogeneousParam def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, SegmentGroup) + if subclass is not None: + return subclass(*args_, **kwargs_) if SegmentGroup.subclass: return SegmentGroup.subclass(*args_, **kwargs_) else: @@ -8025,23 +7307,28 @@ class SegmentGroup(Base): def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) - def insert_member(self, index, value): self.member[index] = value + def insert_member_at(self, index, value): self.member.insert(index, value) + def replace_member_at(self, index, value): self.member[index] = value def get_include(self): return self.include def set_include(self, include): self.include = include def add_include(self, value): self.include.append(value) - def insert_include(self, index, value): self.include[index] = value + def insert_include_at(self, index, value): self.include.insert(index, value) + def replace_include_at(self, index, value): self.include[index] = value def get_path(self): return self.path def set_path(self, path): self.path = path def add_path(self, value): self.path.append(value) - def insert_path(self, index, value): self.path[index] = value + def insert_path_at(self, index, value): self.path.insert(index, value) + def replace_path_at(self, index, value): self.path[index] = value def get_subTree(self): return self.subTree def set_subTree(self, subTree): self.subTree = subTree def add_subTree(self, value): self.subTree.append(value) - def insert_subTree(self, index, value): self.subTree[index] = value + def insert_subTree_at(self, index, value): self.subTree.insert(index, value) + def replace_subTree_at(self, index, value): self.subTree[index] = value def get_inhomogeneousParam(self): return self.inhomogeneousParam def set_inhomogeneousParam(self, inhomogeneousParam): self.inhomogeneousParam = inhomogeneousParam def add_inhomogeneousParam(self, value): self.inhomogeneousParam.append(value) - def insert_inhomogeneousParam(self, index, value): self.inhomogeneousParam[index] = value + def insert_inhomogeneousParam_at(self, index, value): self.inhomogeneousParam.insert(index, value) + def replace_inhomogeneousParam_at(self, index, value): self.inhomogeneousParam[index] = value def hasContent_(self): if ( self.member or @@ -8059,13 +7346,15 @@ class SegmentGroup(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='SegmentGroup') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='SegmentGroup', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -8088,82 +7377,13 @@ class SegmentGroup(Base): subTree_.export(outfile, level, namespace_, name_='subTree', pretty_print=pretty_print) for inhomogeneousParam_ in self.inhomogeneousParam: inhomogeneousParam_.export(outfile, level, namespace_, name_='inhomogeneousParam', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='SegmentGroup'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(SegmentGroup, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(SegmentGroup, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('member=[\n') - level += 1 - for member_ in self.member: - showIndent(outfile, level) - outfile.write('model_.Member(\n') - member_.exportLiteral(outfile, level, name_='Member') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('include=[\n') - level += 1 - for include_ in self.include: - showIndent(outfile, level) - outfile.write('model_.Include(\n') - include_.exportLiteral(outfile, level, name_='Include') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('path=[\n') - level += 1 - for path_ in self.path: - showIndent(outfile, level) - outfile.write('model_.Path(\n') - path_.exportLiteral(outfile, level, name_='Path') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('subTree=[\n') - level += 1 - for subTree_ in self.subTree: - showIndent(outfile, level) - outfile.write('model_.SubTree(\n') - subTree_.exportLiteral(outfile, level, name_='SubTree') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('inhomogeneousParam=[\n') - level += 1 - for inhomogeneousParam_ in self.inhomogeneousParam: - showIndent(outfile, level) - outfile.write('model_.InhomogeneousParam(\n') - inhomogeneousParam_.exportLiteral(outfile, level, name_='InhomogeneousParam') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(SegmentGroup, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -8171,22 +7391,27 @@ class SegmentGroup(Base): obj_ = Member.factory() obj_.build(child_) self.member.append(obj_) + obj_.original_tagname_ = 'member' elif nodeName_ == 'include': obj_ = Include.factory() obj_.build(child_) self.include.append(obj_) + obj_.original_tagname_ = 'include' elif nodeName_ == 'path': obj_ = Path.factory() obj_.build(child_) self.path.append(obj_) + obj_.original_tagname_ = 'path' elif nodeName_ == 'subTree': obj_ = SubTree.factory() obj_.build(child_) self.subTree.append(obj_) + obj_.original_tagname_ = 'subTree' elif nodeName_ == 'inhomogeneousParam': obj_ = InhomogeneousParam.factory() obj_.build(child_) self.inhomogeneousParam.append(obj_) + obj_.original_tagname_ = 'inhomogeneousParam' super(SegmentGroup, self).buildChildren(child_, node, nodeName_, True) # end class SegmentGroup @@ -8195,12 +7420,18 @@ class Segment(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, name=None, parent=None, proximal=None, distal=None): + self.original_tagname_ = None super(Segment, self).__init__(id, neuroLexId, ) self.name = _cast(None, name) self.parent = parent self.proximal = proximal self.distal = distal def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Segment) + if subclass is not None: + return subclass(*args_, **kwargs_) if Segment.subclass: return Segment.subclass(*args_, **kwargs_) else: @@ -8229,13 +7460,15 @@ class Segment(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Segment') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Segment', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -8244,7 +7477,7 @@ class Segment(Base): super(Segment, self).exportAttributes(outfile, level, already_processed, namespace_, name_='Segment') if self.name is not None and 'name' not in already_processed: already_processed.add('name') - outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) + outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), )) def exportChildren(self, outfile, level, namespace_='', name_='Segment', fromsubclass_=False, pretty_print=True): super(Segment, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -8257,44 +7490,13 @@ class Segment(Base): self.proximal.export(outfile, level, namespace_, name_='proximal', pretty_print=pretty_print) if self.distal is not None: self.distal.export(outfile, level, namespace_, name_='distal', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Segment'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.name is not None and 'name' not in already_processed: - already_processed.add('name') - showIndent(outfile, level) - outfile.write('name="%s",\n' % (self.name,)) - super(Segment, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Segment, self).exportLiteralChildren(outfile, level, name_) - if self.parent is not None: - showIndent(outfile, level) - outfile.write('parent=model_.SegmentParent(\n') - self.parent.exportLiteral(outfile, level, name_='parent') - showIndent(outfile, level) - outfile.write('),\n') - if self.proximal is not None: - showIndent(outfile, level) - outfile.write('proximal=model_.Point3DWithDiam(\n') - self.proximal.exportLiteral(outfile, level, name_='proximal') - showIndent(outfile, level) - outfile.write('),\n') - if self.distal is not None: - showIndent(outfile, level) - outfile.write('distal=model_.Point3DWithDiam(\n') - self.distal.exportLiteral(outfile, level, name_='distal') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('name', node) if value is not None and 'name' not in already_processed: @@ -8305,15 +7507,18 @@ class Segment(Base): if nodeName_ == 'parent': obj_ = SegmentParent.factory() obj_.build(child_) - self.set_parent(obj_) + self.parent = obj_ + obj_.original_tagname_ = 'parent' elif nodeName_ == 'proximal': obj_ = Point3DWithDiam.factory() obj_.build(child_) - self.set_proximal(obj_) + self.proximal = obj_ + obj_.original_tagname_ = 'proximal' elif nodeName_ == 'distal': obj_ = Point3DWithDiam.factory() obj_.build(child_) - self.set_distal(obj_) + self.distal = obj_ + obj_.original_tagname_ = 'distal' super(Segment, self).buildChildren(child_, node, nodeName_, True) # end class Segment @@ -8324,6 +7529,7 @@ class Morphology(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, segment=None, segmentGroup=None): + self.original_tagname_ = None super(Morphology, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) if segment is None: self.segment = [] @@ -8334,6 +7540,11 @@ class Morphology(Standalone): else: self.segmentGroup = segmentGroup def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Morphology) + if subclass is not None: + return subclass(*args_, **kwargs_) if Morphology.subclass: return Morphology.subclass(*args_, **kwargs_) else: @@ -8342,11 +7553,13 @@ class Morphology(Standalone): def get_segment(self): return self.segment def set_segment(self, segment): self.segment = segment def add_segment(self, value): self.segment.append(value) - def insert_segment(self, index, value): self.segment[index] = value + def insert_segment_at(self, index, value): self.segment.insert(index, value) + def replace_segment_at(self, index, value): self.segment[index] = value def get_segmentGroup(self): return self.segmentGroup def set_segmentGroup(self, segmentGroup): self.segmentGroup = segmentGroup def add_segmentGroup(self, value): self.segmentGroup.append(value) - def insert_segmentGroup(self, index, value): self.segmentGroup[index] = value + def insert_segmentGroup_at(self, index, value): self.segmentGroup.insert(index, value) + def replace_segmentGroup_at(self, index, value): self.segmentGroup[index] = value def hasContent_(self): if ( self.segment or @@ -8361,13 +7574,15 @@ class Morphology(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Morphology') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Morphology', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -8384,46 +7599,13 @@ class Morphology(Standalone): segment_.export(outfile, level, namespace_, name_='segment', pretty_print=pretty_print) for segmentGroup_ in self.segmentGroup: segmentGroup_.export(outfile, level, namespace_, name_='segmentGroup', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Morphology'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(Morphology, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Morphology, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('segment=[\n') - level += 1 - for segment_ in self.segment: - showIndent(outfile, level) - outfile.write('model_.Segment(\n') - segment_.exportLiteral(outfile, level, name_='Segment') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('segmentGroup=[\n') - level += 1 - for segmentGroup_ in self.segmentGroup: - showIndent(outfile, level) - outfile.write('model_.SegmentGroup(\n') - segmentGroup_.exportLiteral(outfile, level, name_='SegmentGroup') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(Morphology, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -8431,10 +7613,12 @@ class Morphology(Standalone): obj_ = Segment.factory() obj_.build(child_) self.segment.append(obj_) + obj_.original_tagname_ = 'segment' elif nodeName_ == 'segmentGroup': obj_ = SegmentGroup.factory() obj_.build(child_) self.segmentGroup.append(obj_) + obj_.original_tagname_ = 'segmentGroup' super(Morphology, self).buildChildren(child_, node, nodeName_, True) # end class Morphology @@ -8443,9 +7627,15 @@ class BaseCell(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, extensiontype_=None): + self.original_tagname_ = None super(BaseCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BaseCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if BaseCell.subclass: return BaseCell.subclass(*args_, **kwargs_) else: @@ -8465,13 +7655,15 @@ class BaseCell(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BaseCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BaseCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -8484,22 +7676,13 @@ class BaseCell(Standalone): outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='BaseCell', fromsubclass_=False, pretty_print=True): super(BaseCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='BaseCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(BaseCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(BaseCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: @@ -8516,9 +7699,15 @@ class BaseSynapse(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, extensiontype_=None): + self.original_tagname_ = None super(BaseSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BaseSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if BaseSynapse.subclass: return BaseSynapse.subclass(*args_, **kwargs_) else: @@ -8538,13 +7727,15 @@ class BaseSynapse(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BaseSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BaseSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -8557,22 +7748,13 @@ class BaseSynapse(Standalone): outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='BaseSynapse', fromsubclass_=False, pretty_print=True): super(BaseSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='BaseSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(BaseSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(BaseSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: @@ -8589,14 +7771,20 @@ class DecayingPoolConcentrationModel(Standalone): """Should not be required, as it's present on the species element!""" subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, shellThickness=None, restingConc=None, decayConstant=None, extensiontype_=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, restingConc=None, decayConstant=None, shellThickness=None, extensiontype_=None): + self.original_tagname_ = None super(DecayingPoolConcentrationModel, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) self.ion = _cast(None, ion) - self.shellThickness = _cast(None, shellThickness) self.restingConc = _cast(None, restingConc) self.decayConstant = _cast(None, decayConstant) + self.shellThickness = _cast(None, shellThickness) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, DecayingPoolConcentrationModel) + if subclass is not None: + return subclass(*args_, **kwargs_) if DecayingPoolConcentrationModel.subclass: return DecayingPoolConcentrationModel.subclass(*args_, **kwargs_) else: @@ -8604,26 +7792,42 @@ class DecayingPoolConcentrationModel(Standalone): factory = staticmethod(factory) def get_ion(self): return self.ion def set_ion(self, ion): self.ion = ion - def validate_NmlId(self, value): - # Validate type NmlId, a restriction on xs:string. - pass - def get_shellThickness(self): return self.shellThickness - def set_shellThickness(self, shellThickness): self.shellThickness = shellThickness - def validate_Nml2Quantity_length(self, value): - # Validate type Nml2Quantity_length, a restriction on xs:string. - pass def get_restingConc(self): return self.restingConc def set_restingConc(self, restingConc): self.restingConc = restingConc - def validate_Nml2Quantity_concentration(self, value): - # Validate type Nml2Quantity_concentration, a restriction on xs:string. - pass def get_decayConstant(self): return self.decayConstant def set_decayConstant(self, decayConstant): self.decayConstant = decayConstant - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + def get_shellThickness(self): return self.shellThickness + def set_shellThickness(self, shellThickness): self.shellThickness = shellThickness def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_NmlId(self, value): + # Validate type NmlId, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_Nml2Quantity_concentration(self, value): + # Validate type Nml2Quantity_concentration, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_concentration_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_concentration_patterns_, )) + validate_Nml2Quantity_concentration_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(mol_per_m3|mol_per_cm3|M|mM)$']] + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] + def validate_Nml2Quantity_length(self, value): + # Validate type Nml2Quantity_length, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_length_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_length_patterns_, )) + validate_Nml2Quantity_length_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(m|cm|um)$']] def hasContent_(self): if ( super(DecayingPoolConcentrationModel, self).hasContent_() @@ -8636,13 +7840,15 @@ class DecayingPoolConcentrationModel(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='DecayingPoolConcentrationModel') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='DecayingPoolConcentrationModel', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -8652,64 +7858,34 @@ class DecayingPoolConcentrationModel(Standalone): if self.ion is not None and 'ion' not in already_processed: already_processed.add('ion') outfile.write(' ion=%s' % (quote_attrib(self.ion), )) - if self.shellThickness is not None and 'shellThickness' not in already_processed: - already_processed.add('shellThickness') - outfile.write(' shellThickness=%s' % (quote_attrib(self.shellThickness), )) if self.restingConc is not None and 'restingConc' not in already_processed: already_processed.add('restingConc') outfile.write(' restingConc=%s' % (quote_attrib(self.restingConc), )) if self.decayConstant is not None and 'decayConstant' not in already_processed: already_processed.add('decayConstant') outfile.write(' decayConstant=%s' % (quote_attrib(self.decayConstant), )) + if self.shellThickness is not None and 'shellThickness' not in already_processed: + already_processed.add('shellThickness') + outfile.write(' shellThickness=%s' % (quote_attrib(self.shellThickness), )) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='DecayingPoolConcentrationModel', fromsubclass_=False, pretty_print=True): super(DecayingPoolConcentrationModel, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='DecayingPoolConcentrationModel'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.ion is not None and 'ion' not in already_processed: - already_processed.add('ion') - showIndent(outfile, level) - outfile.write('ion="%s",\n' % (self.ion,)) - if self.shellThickness is not None and 'shellThickness' not in already_processed: - already_processed.add('shellThickness') - showIndent(outfile, level) - outfile.write('shellThickness="%s",\n' % (self.shellThickness,)) - if self.restingConc is not None and 'restingConc' not in already_processed: - already_processed.add('restingConc') - showIndent(outfile, level) - outfile.write('restingConc="%s",\n' % (self.restingConc,)) - if self.decayConstant is not None and 'decayConstant' not in already_processed: - already_processed.add('decayConstant') - showIndent(outfile, level) - outfile.write('decayConstant="%s",\n' % (self.decayConstant,)) - super(DecayingPoolConcentrationModel, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(DecayingPoolConcentrationModel, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('ion', node) if value is not None and 'ion' not in already_processed: already_processed.add('ion') self.ion = value self.validate_NmlId(self.ion) # validate type NmlId - value = find_attr_value_('shellThickness', node) - if value is not None and 'shellThickness' not in already_processed: - already_processed.add('shellThickness') - self.shellThickness = value - self.validate_Nml2Quantity_length(self.shellThickness) # validate type Nml2Quantity_length value = find_attr_value_('restingConc', node) if value is not None and 'restingConc' not in already_processed: already_processed.add('restingConc') @@ -8720,6 +7896,11 @@ class DecayingPoolConcentrationModel(Standalone): already_processed.add('decayConstant') self.decayConstant = value self.validate_Nml2Quantity_time(self.decayConstant) # validate type Nml2Quantity_time + value = find_attr_value_('shellThickness', node) + if value is not None and 'shellThickness' not in already_processed: + already_processed.add('shellThickness') + self.shellThickness = value + self.validate_Nml2Quantity_length(self.shellThickness) # validate type Nml2Quantity_length value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -8735,15 +7916,22 @@ class GateHHRatesInf(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, instances=1, type_=None, notes=None, q10Settings=None, forwardRate=None, reverseRate=None, steadyState=None): + self.original_tagname_ = None super(GateHHRatesInf, self).__init__(id, neuroLexId, ) self.instances = _cast(int, instances) self.type_ = _cast(None, type_) self.notes = notes + self.validate_Notes(self.notes) self.q10Settings = q10Settings self.forwardRate = forwardRate self.reverseRate = reverseRate self.steadyState = steadyState def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, GateHHRatesInf) + if subclass is not None: + return subclass(*args_, **kwargs_) if GateHHRatesInf.subclass: return GateHHRatesInf.subclass(*args_, **kwargs_) else: @@ -8751,9 +7939,6 @@ class GateHHRatesInf(Base): factory = staticmethod(factory) def get_notes(self): return self.notes def set_notes(self, notes): self.notes = notes - def validate_Notes(self, value): - # Validate type Notes, a restriction on xs:string. - pass def get_q10Settings(self): return self.q10Settings def set_q10Settings(self, q10Settings): self.q10Settings = q10Settings def get_forwardRate(self): return self.forwardRate @@ -8766,9 +7951,22 @@ class GateHHRatesInf(Base): def set_instances(self, instances): self.instances = instances def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ + def validate_Notes(self, value): + # Validate type Notes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + pass def validate_gateTypes(self, value): # Validate type gateTypes, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['gateHHrates', 'gateHHratesTau', 'gateHHtauInf', 'gateHHratesInf', 'gateKS'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on gateTypes' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.notes is not None or @@ -8786,20 +7984,22 @@ class GateHHRatesInf(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHRatesInf') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='GateHHRatesInf', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GateHHRatesInf'): super(GateHHRatesInf, self).exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHRatesInf') - if self.instances is not None and 'instances' not in already_processed: + if self.instances != 1 and 'instances' not in already_processed: already_processed.add('instances') outfile.write(' instances="%s"' % self.gds_format_integer(self.instances, input_name='instances')) if self.type_ is not None and 'type_' not in already_processed: @@ -8813,7 +8013,7 @@ class GateHHRatesInf(Base): eol_ = '' if self.notes is not None: showIndent(outfile, level, pretty_print) - outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_format_string(quote_xml(self.notes).encode(ExternalEncoding), input_name='notes'), namespace_, eol_)) + outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.notes), input_name='notes')), namespace_, eol_)) if self.q10Settings is not None: self.q10Settings.export(outfile, level, namespace_, name_='q10Settings', pretty_print=pretty_print) if self.forwardRate is not None: @@ -8822,57 +8022,13 @@ class GateHHRatesInf(Base): self.reverseRate.export(outfile, level, namespace_, name_='reverseRate', pretty_print=pretty_print) if self.steadyState is not None: self.steadyState.export(outfile, level, namespace_, name_='steadyState', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='GateHHRatesInf'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.instances is not None and 'instances' not in already_processed: - already_processed.add('instances') - showIndent(outfile, level) - outfile.write('instances=%d,\n' % (self.instances,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(GateHHRatesInf, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(GateHHRatesInf, self).exportLiteralChildren(outfile, level, name_) - if self.notes is not None: - showIndent(outfile, level) - outfile.write('notes=%s,\n' % quote_python(self.notes).encode(ExternalEncoding)) - if self.q10Settings is not None: - showIndent(outfile, level) - outfile.write('q10Settings=model_.Q10Settings(\n') - self.q10Settings.exportLiteral(outfile, level, name_='q10Settings') - showIndent(outfile, level) - outfile.write('),\n') - if self.forwardRate is not None: - showIndent(outfile, level) - outfile.write('forwardRate=model_.HHRate(\n') - self.forwardRate.exportLiteral(outfile, level, name_='forwardRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.reverseRate is not None: - showIndent(outfile, level) - outfile.write('reverseRate=model_.HHRate(\n') - self.reverseRate.exportLiteral(outfile, level, name_='reverseRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.steadyState is not None: - showIndent(outfile, level) - outfile.write('steadyState=model_.HHVariable(\n') - self.steadyState.exportLiteral(outfile, level, name_='steadyState') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('instances', node) if value is not None and 'instances' not in already_processed: @@ -8892,23 +8048,28 @@ class GateHHRatesInf(Base): notes_ = child_.text notes_ = self.gds_validate_string(notes_, node, 'notes') self.notes = notes_ - self.validate_Notes(self.notes) # validate type Notes + # validate type Notes + self.validate_Notes(self.notes) elif nodeName_ == 'q10Settings': obj_ = Q10Settings.factory() obj_.build(child_) - self.set_q10Settings(obj_) + self.q10Settings = obj_ + obj_.original_tagname_ = 'q10Settings' elif nodeName_ == 'forwardRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_forwardRate(obj_) + self.forwardRate = obj_ + obj_.original_tagname_ = 'forwardRate' elif nodeName_ == 'reverseRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_reverseRate(obj_) + self.reverseRate = obj_ + obj_.original_tagname_ = 'reverseRate' elif nodeName_ == 'steadyState': obj_ = HHVariable.factory() obj_.build(child_) - self.set_steadyState(obj_) + self.steadyState = obj_ + obj_.original_tagname_ = 'steadyState' super(GateHHRatesInf, self).buildChildren(child_, node, nodeName_, True) # end class GateHHRatesInf @@ -8917,15 +8078,22 @@ class GateHHRatesTau(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, instances=1, type_=None, notes=None, q10Settings=None, forwardRate=None, reverseRate=None, timeCourse=None): + self.original_tagname_ = None super(GateHHRatesTau, self).__init__(id, neuroLexId, ) self.instances = _cast(int, instances) self.type_ = _cast(None, type_) self.notes = notes + self.validate_Notes(self.notes) self.q10Settings = q10Settings self.forwardRate = forwardRate self.reverseRate = reverseRate self.timeCourse = timeCourse def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, GateHHRatesTau) + if subclass is not None: + return subclass(*args_, **kwargs_) if GateHHRatesTau.subclass: return GateHHRatesTau.subclass(*args_, **kwargs_) else: @@ -8933,9 +8101,6 @@ class GateHHRatesTau(Base): factory = staticmethod(factory) def get_notes(self): return self.notes def set_notes(self, notes): self.notes = notes - def validate_Notes(self, value): - # Validate type Notes, a restriction on xs:string. - pass def get_q10Settings(self): return self.q10Settings def set_q10Settings(self, q10Settings): self.q10Settings = q10Settings def get_forwardRate(self): return self.forwardRate @@ -8948,9 +8113,22 @@ class GateHHRatesTau(Base): def set_instances(self, instances): self.instances = instances def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ + def validate_Notes(self, value): + # Validate type Notes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + pass def validate_gateTypes(self, value): # Validate type gateTypes, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['gateHHrates', 'gateHHratesTau', 'gateHHtauInf', 'gateHHratesInf', 'gateKS'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on gateTypes' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.notes is not None or @@ -8968,20 +8146,22 @@ class GateHHRatesTau(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHRatesTau') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='GateHHRatesTau', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GateHHRatesTau'): super(GateHHRatesTau, self).exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHRatesTau') - if self.instances is not None and 'instances' not in already_processed: + if self.instances != 1 and 'instances' not in already_processed: already_processed.add('instances') outfile.write(' instances="%s"' % self.gds_format_integer(self.instances, input_name='instances')) if self.type_ is not None and 'type_' not in already_processed: @@ -8995,7 +8175,7 @@ class GateHHRatesTau(Base): eol_ = '' if self.notes is not None: showIndent(outfile, level, pretty_print) - outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_format_string(quote_xml(self.notes).encode(ExternalEncoding), input_name='notes'), namespace_, eol_)) + outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.notes), input_name='notes')), namespace_, eol_)) if self.q10Settings is not None: self.q10Settings.export(outfile, level, namespace_, name_='q10Settings', pretty_print=pretty_print) if self.forwardRate is not None: @@ -9004,57 +8184,13 @@ class GateHHRatesTau(Base): self.reverseRate.export(outfile, level, namespace_, name_='reverseRate', pretty_print=pretty_print) if self.timeCourse is not None: self.timeCourse.export(outfile, level, namespace_, name_='timeCourse', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='GateHHRatesTau'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.instances is not None and 'instances' not in already_processed: - already_processed.add('instances') - showIndent(outfile, level) - outfile.write('instances=%d,\n' % (self.instances,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(GateHHRatesTau, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(GateHHRatesTau, self).exportLiteralChildren(outfile, level, name_) - if self.notes is not None: - showIndent(outfile, level) - outfile.write('notes=%s,\n' % quote_python(self.notes).encode(ExternalEncoding)) - if self.q10Settings is not None: - showIndent(outfile, level) - outfile.write('q10Settings=model_.Q10Settings(\n') - self.q10Settings.exportLiteral(outfile, level, name_='q10Settings') - showIndent(outfile, level) - outfile.write('),\n') - if self.forwardRate is not None: - showIndent(outfile, level) - outfile.write('forwardRate=model_.HHRate(\n') - self.forwardRate.exportLiteral(outfile, level, name_='forwardRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.reverseRate is not None: - showIndent(outfile, level) - outfile.write('reverseRate=model_.HHRate(\n') - self.reverseRate.exportLiteral(outfile, level, name_='reverseRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.timeCourse is not None: - showIndent(outfile, level) - outfile.write('timeCourse=model_.HHTime(\n') - self.timeCourse.exportLiteral(outfile, level, name_='timeCourse') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('instances', node) if value is not None and 'instances' not in already_processed: @@ -9074,23 +8210,28 @@ class GateHHRatesTau(Base): notes_ = child_.text notes_ = self.gds_validate_string(notes_, node, 'notes') self.notes = notes_ - self.validate_Notes(self.notes) # validate type Notes + # validate type Notes + self.validate_Notes(self.notes) elif nodeName_ == 'q10Settings': obj_ = Q10Settings.factory() obj_.build(child_) - self.set_q10Settings(obj_) + self.q10Settings = obj_ + obj_.original_tagname_ = 'q10Settings' elif nodeName_ == 'forwardRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_forwardRate(obj_) + self.forwardRate = obj_ + obj_.original_tagname_ = 'forwardRate' elif nodeName_ == 'reverseRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_reverseRate(obj_) + self.reverseRate = obj_ + obj_.original_tagname_ = 'reverseRate' elif nodeName_ == 'timeCourse': obj_ = HHTime.factory() obj_.build(child_) - self.set_timeCourse(obj_) + self.timeCourse = obj_ + obj_.original_tagname_ = 'timeCourse' super(GateHHRatesTau, self).buildChildren(child_, node, nodeName_, True) # end class GateHHRatesTau @@ -9099,14 +8240,21 @@ class GateHHTauInf(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, instances=1, type_=None, notes=None, q10Settings=None, timeCourse=None, steadyState=None): + self.original_tagname_ = None super(GateHHTauInf, self).__init__(id, neuroLexId, ) self.instances = _cast(int, instances) self.type_ = _cast(None, type_) self.notes = notes + self.validate_Notes(self.notes) self.q10Settings = q10Settings self.timeCourse = timeCourse self.steadyState = steadyState def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, GateHHTauInf) + if subclass is not None: + return subclass(*args_, **kwargs_) if GateHHTauInf.subclass: return GateHHTauInf.subclass(*args_, **kwargs_) else: @@ -9114,9 +8262,6 @@ class GateHHTauInf(Base): factory = staticmethod(factory) def get_notes(self): return self.notes def set_notes(self, notes): self.notes = notes - def validate_Notes(self, value): - # Validate type Notes, a restriction on xs:string. - pass def get_q10Settings(self): return self.q10Settings def set_q10Settings(self, q10Settings): self.q10Settings = q10Settings def get_timeCourse(self): return self.timeCourse @@ -9127,9 +8272,22 @@ class GateHHTauInf(Base): def set_instances(self, instances): self.instances = instances def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ + def validate_Notes(self, value): + # Validate type Notes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + pass def validate_gateTypes(self, value): # Validate type gateTypes, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['gateHHrates', 'gateHHratesTau', 'gateHHtauInf', 'gateHHratesInf', 'gateKS'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on gateTypes' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.notes is not None or @@ -9146,20 +8304,22 @@ class GateHHTauInf(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHTauInf') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='GateHHTauInf', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GateHHTauInf'): super(GateHHTauInf, self).exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHTauInf') - if self.instances is not None and 'instances' not in already_processed: + if self.instances != 1 and 'instances' not in already_processed: already_processed.add('instances') outfile.write(' instances="%s"' % self.gds_format_integer(self.instances, input_name='instances')) if self.type_ is not None and 'type_' not in already_processed: @@ -9173,58 +8333,20 @@ class GateHHTauInf(Base): eol_ = '' if self.notes is not None: showIndent(outfile, level, pretty_print) - outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_format_string(quote_xml(self.notes).encode(ExternalEncoding), input_name='notes'), namespace_, eol_)) + outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.notes), input_name='notes')), namespace_, eol_)) if self.q10Settings is not None: self.q10Settings.export(outfile, level, namespace_, name_='q10Settings', pretty_print=pretty_print) if self.timeCourse is not None: self.timeCourse.export(outfile, level, namespace_, name_='timeCourse', pretty_print=pretty_print) if self.steadyState is not None: self.steadyState.export(outfile, level, namespace_, name_='steadyState', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='GateHHTauInf'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.instances is not None and 'instances' not in already_processed: - already_processed.add('instances') - showIndent(outfile, level) - outfile.write('instances=%d,\n' % (self.instances,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(GateHHTauInf, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(GateHHTauInf, self).exportLiteralChildren(outfile, level, name_) - if self.notes is not None: - showIndent(outfile, level) - outfile.write('notes=%s,\n' % quote_python(self.notes).encode(ExternalEncoding)) - if self.q10Settings is not None: - showIndent(outfile, level) - outfile.write('q10Settings=model_.Q10Settings(\n') - self.q10Settings.exportLiteral(outfile, level, name_='q10Settings') - showIndent(outfile, level) - outfile.write('),\n') - if self.timeCourse is not None: - showIndent(outfile, level) - outfile.write('timeCourse=model_.HHTime(\n') - self.timeCourse.exportLiteral(outfile, level, name_='timeCourse') - showIndent(outfile, level) - outfile.write('),\n') - if self.steadyState is not None: - showIndent(outfile, level) - outfile.write('steadyState=model_.HHVariable(\n') - self.steadyState.exportLiteral(outfile, level, name_='steadyState') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('instances', node) if value is not None and 'instances' not in already_processed: @@ -9244,19 +8366,23 @@ class GateHHTauInf(Base): notes_ = child_.text notes_ = self.gds_validate_string(notes_, node, 'notes') self.notes = notes_ - self.validate_Notes(self.notes) # validate type Notes + # validate type Notes + self.validate_Notes(self.notes) elif nodeName_ == 'q10Settings': obj_ = Q10Settings.factory() obj_.build(child_) - self.set_q10Settings(obj_) + self.q10Settings = obj_ + obj_.original_tagname_ = 'q10Settings' elif nodeName_ == 'timeCourse': obj_ = HHTime.factory() obj_.build(child_) - self.set_timeCourse(obj_) + self.timeCourse = obj_ + obj_.original_tagname_ = 'timeCourse' elif nodeName_ == 'steadyState': obj_ = HHVariable.factory() obj_.build(child_) - self.set_steadyState(obj_) + self.steadyState = obj_ + obj_.original_tagname_ = 'steadyState' super(GateHHTauInf, self).buildChildren(child_, node, nodeName_, True) # end class GateHHTauInf @@ -9265,14 +8391,21 @@ class GateHHRates(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, instances=1, type_=None, notes=None, q10Settings=None, forwardRate=None, reverseRate=None): + self.original_tagname_ = None super(GateHHRates, self).__init__(id, neuroLexId, ) self.instances = _cast(int, instances) self.type_ = _cast(None, type_) self.notes = notes + self.validate_Notes(self.notes) self.q10Settings = q10Settings self.forwardRate = forwardRate self.reverseRate = reverseRate def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, GateHHRates) + if subclass is not None: + return subclass(*args_, **kwargs_) if GateHHRates.subclass: return GateHHRates.subclass(*args_, **kwargs_) else: @@ -9280,9 +8413,6 @@ class GateHHRates(Base): factory = staticmethod(factory) def get_notes(self): return self.notes def set_notes(self, notes): self.notes = notes - def validate_Notes(self, value): - # Validate type Notes, a restriction on xs:string. - pass def get_q10Settings(self): return self.q10Settings def set_q10Settings(self, q10Settings): self.q10Settings = q10Settings def get_forwardRate(self): return self.forwardRate @@ -9293,9 +8423,22 @@ class GateHHRates(Base): def set_instances(self, instances): self.instances = instances def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ + def validate_Notes(self, value): + # Validate type Notes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + pass def validate_gateTypes(self, value): # Validate type gateTypes, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['gateHHrates', 'gateHHratesTau', 'gateHHtauInf', 'gateHHratesInf', 'gateKS'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on gateTypes' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.notes is not None or @@ -9312,20 +8455,22 @@ class GateHHRates(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHRates') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='GateHHRates', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GateHHRates'): super(GateHHRates, self).exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHRates') - if self.instances is not None and 'instances' not in already_processed: + if self.instances != 1 and 'instances' not in already_processed: already_processed.add('instances') outfile.write(' instances="%s"' % self.gds_format_integer(self.instances, input_name='instances')) if self.type_ is not None and 'type_' not in already_processed: @@ -9339,58 +8484,20 @@ class GateHHRates(Base): eol_ = '' if self.notes is not None: showIndent(outfile, level, pretty_print) - outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_format_string(quote_xml(self.notes).encode(ExternalEncoding), input_name='notes'), namespace_, eol_)) + outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.notes), input_name='notes')), namespace_, eol_)) if self.q10Settings is not None: self.q10Settings.export(outfile, level, namespace_, name_='q10Settings', pretty_print=pretty_print) if self.forwardRate is not None: self.forwardRate.export(outfile, level, namespace_, name_='forwardRate', pretty_print=pretty_print) if self.reverseRate is not None: self.reverseRate.export(outfile, level, namespace_, name_='reverseRate', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='GateHHRates'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.instances is not None and 'instances' not in already_processed: - already_processed.add('instances') - showIndent(outfile, level) - outfile.write('instances=%d,\n' % (self.instances,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(GateHHRates, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(GateHHRates, self).exportLiteralChildren(outfile, level, name_) - if self.notes is not None: - showIndent(outfile, level) - outfile.write('notes=%s,\n' % quote_python(self.notes).encode(ExternalEncoding)) - if self.q10Settings is not None: - showIndent(outfile, level) - outfile.write('q10Settings=model_.Q10Settings(\n') - self.q10Settings.exportLiteral(outfile, level, name_='q10Settings') - showIndent(outfile, level) - outfile.write('),\n') - if self.forwardRate is not None: - showIndent(outfile, level) - outfile.write('forwardRate=model_.HHRate(\n') - self.forwardRate.exportLiteral(outfile, level, name_='forwardRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.reverseRate is not None: - showIndent(outfile, level) - outfile.write('reverseRate=model_.HHRate(\n') - self.reverseRate.exportLiteral(outfile, level, name_='reverseRate') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('instances', node) if value is not None and 'instances' not in already_processed: @@ -9410,19 +8517,23 @@ class GateHHRates(Base): notes_ = child_.text notes_ = self.gds_validate_string(notes_, node, 'notes') self.notes = notes_ - self.validate_Notes(self.notes) # validate type Notes + # validate type Notes + self.validate_Notes(self.notes) elif nodeName_ == 'q10Settings': obj_ = Q10Settings.factory() obj_.build(child_) - self.set_q10Settings(obj_) + self.q10Settings = obj_ + obj_.original_tagname_ = 'q10Settings' elif nodeName_ == 'forwardRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_forwardRate(obj_) + self.forwardRate = obj_ + obj_.original_tagname_ = 'forwardRate' elif nodeName_ == 'reverseRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_reverseRate(obj_) + self.reverseRate = obj_ + obj_.original_tagname_ = 'reverseRate' super(GateHHRates, self).buildChildren(child_, node, nodeName_, True) # end class GateHHRates @@ -9431,16 +8542,23 @@ class GateHHUndetermined(Base): subclass = None superclass = Base def __init__(self, id=None, neuroLexId=None, instances=1, type_=None, notes=None, q10Settings=None, forwardRate=None, reverseRate=None, timeCourse=None, steadyState=None): + self.original_tagname_ = None super(GateHHUndetermined, self).__init__(id, neuroLexId, ) self.instances = _cast(int, instances) self.type_ = _cast(None, type_) self.notes = notes + self.validate_Notes(self.notes) self.q10Settings = q10Settings self.forwardRate = forwardRate self.reverseRate = reverseRate self.timeCourse = timeCourse self.steadyState = steadyState def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, GateHHUndetermined) + if subclass is not None: + return subclass(*args_, **kwargs_) if GateHHUndetermined.subclass: return GateHHUndetermined.subclass(*args_, **kwargs_) else: @@ -9448,9 +8566,6 @@ class GateHHUndetermined(Base): factory = staticmethod(factory) def get_notes(self): return self.notes def set_notes(self, notes): self.notes = notes - def validate_Notes(self, value): - # Validate type Notes, a restriction on xs:string. - pass def get_q10Settings(self): return self.q10Settings def set_q10Settings(self, q10Settings): self.q10Settings = q10Settings def get_forwardRate(self): return self.forwardRate @@ -9465,9 +8580,22 @@ class GateHHUndetermined(Base): def set_instances(self, instances): self.instances = instances def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ + def validate_Notes(self, value): + # Validate type Notes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + pass def validate_gateTypes(self, value): # Validate type gateTypes, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['gateHHrates', 'gateHHratesTau', 'gateHHtauInf', 'gateHHratesInf', 'gateKS'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on gateTypes' % {"value" : value.encode("utf-8")} ) def hasContent_(self): if ( self.notes is not None or @@ -9486,20 +8614,22 @@ class GateHHUndetermined(Base): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHUndetermined') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='GateHHUndetermined', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GateHHUndetermined'): super(GateHHUndetermined, self).exportAttributes(outfile, level, already_processed, namespace_, name_='GateHHUndetermined') - if self.instances is not None and 'instances' not in already_processed: + if self.instances != 1 and 'instances' not in already_processed: already_processed.add('instances') outfile.write(' instances="%s"' % self.gds_format_integer(self.instances, input_name='instances')) if self.type_ is not None and 'type_' not in already_processed: @@ -9513,7 +8643,7 @@ class GateHHUndetermined(Base): eol_ = '' if self.notes is not None: showIndent(outfile, level, pretty_print) - outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_format_string(quote_xml(self.notes).encode(ExternalEncoding), input_name='notes'), namespace_, eol_)) + outfile.write('<%snotes>%s</%snotes>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.notes), input_name='notes')), namespace_, eol_)) if self.q10Settings is not None: self.q10Settings.export(outfile, level, namespace_, name_='q10Settings', pretty_print=pretty_print) if self.forwardRate is not None: @@ -9524,66 +8654,16 @@ class GateHHUndetermined(Base): self.timeCourse.export(outfile, level, namespace_, name_='timeCourse', pretty_print=pretty_print) if self.steadyState is not None: self.steadyState.export(outfile, level, namespace_, name_='steadyState', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='GateHHUndetermined'): - level += 1 + def build(self, node): already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.instances is not None and 'instances' not in already_processed: - already_processed.add('instances') - showIndent(outfile, level) - outfile.write('instances=%d,\n' % (self.instances,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(GateHHUndetermined, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(GateHHUndetermined, self).exportLiteralChildren(outfile, level, name_) - if self.notes is not None: - showIndent(outfile, level) - outfile.write('notes=%s,\n' % quote_python(self.notes).encode(ExternalEncoding)) - if self.q10Settings is not None: - showIndent(outfile, level) - outfile.write('q10Settings=model_.Q10Settings(\n') - self.q10Settings.exportLiteral(outfile, level, name_='q10Settings') - showIndent(outfile, level) - outfile.write('),\n') - if self.forwardRate is not None: - showIndent(outfile, level) - outfile.write('forwardRate=model_.HHRate(\n') - self.forwardRate.exportLiteral(outfile, level, name_='forwardRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.reverseRate is not None: - showIndent(outfile, level) - outfile.write('reverseRate=model_.HHRate(\n') - self.reverseRate.exportLiteral(outfile, level, name_='reverseRate') - showIndent(outfile, level) - outfile.write('),\n') - if self.timeCourse is not None: - showIndent(outfile, level) - outfile.write('timeCourse=model_.HHTime(\n') - self.timeCourse.exportLiteral(outfile, level, name_='timeCourse') - showIndent(outfile, level) - outfile.write('),\n') - if self.steadyState is not None: - showIndent(outfile, level) - outfile.write('steadyState=model_.HHVariable(\n') - self.steadyState.exportLiteral(outfile, level, name_='steadyState') - showIndent(outfile, level) - outfile.write('),\n') - def build(self, node): - already_processed = set() - self.buildAttributes(node, node.attrib, already_processed) - for child in node: - nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, node, nodeName_) - def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('instances', node) - if value is not None and 'instances' not in already_processed: + self.buildAttributes(node, node.attrib, already_processed) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('instances', node) + if value is not None and 'instances' not in already_processed: already_processed.add('instances') try: self.instances = int(value) @@ -9600,27 +8680,33 @@ class GateHHUndetermined(Base): notes_ = child_.text notes_ = self.gds_validate_string(notes_, node, 'notes') self.notes = notes_ - self.validate_Notes(self.notes) # validate type Notes + # validate type Notes + self.validate_Notes(self.notes) elif nodeName_ == 'q10Settings': obj_ = Q10Settings.factory() obj_.build(child_) - self.set_q10Settings(obj_) + self.q10Settings = obj_ + obj_.original_tagname_ = 'q10Settings' elif nodeName_ == 'forwardRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_forwardRate(obj_) + self.forwardRate = obj_ + obj_.original_tagname_ = 'forwardRate' elif nodeName_ == 'reverseRate': obj_ = HHRate.factory() obj_.build(child_) - self.set_reverseRate(obj_) + self.reverseRate = obj_ + obj_.original_tagname_ = 'reverseRate' elif nodeName_ == 'timeCourse': obj_ = HHTime.factory() obj_.build(child_) - self.set_timeCourse(obj_) + self.timeCourse = obj_ + obj_.original_tagname_ = 'timeCourse' elif nodeName_ == 'steadyState': obj_ = HHVariable.factory() obj_.build(child_) - self.set_steadyState(obj_) + self.steadyState = obj_ + obj_.original_tagname_ = 'steadyState' super(GateHHUndetermined, self).buildChildren(child_, node, nodeName_, True) # end class GateHHUndetermined @@ -9628,11 +8714,12 @@ class GateHHUndetermined(Base): class IonChannel(Standalone): subclass = None superclass = Standalone - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, conductance=None, type_=None, species=None, gate=None, gateHHrates=None, gateHHratesTau=None, gateHHtauInf=None, gateHHratesInf=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, species=None, type_=None, conductance=None, gate=None, gateHHrates=None, gateHHratesTau=None, gateHHtauInf=None, gateHHratesInf=None): + self.original_tagname_ = None super(IonChannel, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) - self.conductance = _cast(None, conductance) - self.type_ = _cast(None, type_) self.species = _cast(None, species) + self.type_ = _cast(None, type_) + self.conductance = _cast(None, conductance) if gate is None: self.gate = [] else: @@ -9654,6 +8741,11 @@ class IonChannel(Standalone): else: self.gateHHratesInf = gateHHratesInf def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IonChannel) + if subclass is not None: + return subclass(*args_, **kwargs_) if IonChannel.subclass: return IonChannel.subclass(*args_, **kwargs_) else: @@ -9662,38 +8754,60 @@ class IonChannel(Standalone): def get_gate(self): return self.gate def set_gate(self, gate): self.gate = gate def add_gate(self, value): self.gate.append(value) - def insert_gate(self, index, value): self.gate[index] = value + def insert_gate_at(self, index, value): self.gate.insert(index, value) + def replace_gate_at(self, index, value): self.gate[index] = value def get_gateHHrates(self): return self.gateHHrates def set_gateHHrates(self, gateHHrates): self.gateHHrates = gateHHrates def add_gateHHrates(self, value): self.gateHHrates.append(value) - def insert_gateHHrates(self, index, value): self.gateHHrates[index] = value + def insert_gateHHrates_at(self, index, value): self.gateHHrates.insert(index, value) + def replace_gateHHrates_at(self, index, value): self.gateHHrates[index] = value def get_gateHHratesTau(self): return self.gateHHratesTau def set_gateHHratesTau(self, gateHHratesTau): self.gateHHratesTau = gateHHratesTau def add_gateHHratesTau(self, value): self.gateHHratesTau.append(value) - def insert_gateHHratesTau(self, index, value): self.gateHHratesTau[index] = value + def insert_gateHHratesTau_at(self, index, value): self.gateHHratesTau.insert(index, value) + def replace_gateHHratesTau_at(self, index, value): self.gateHHratesTau[index] = value def get_gateHHtauInf(self): return self.gateHHtauInf def set_gateHHtauInf(self, gateHHtauInf): self.gateHHtauInf = gateHHtauInf def add_gateHHtauInf(self, value): self.gateHHtauInf.append(value) - def insert_gateHHtauInf(self, index, value): self.gateHHtauInf[index] = value + def insert_gateHHtauInf_at(self, index, value): self.gateHHtauInf.insert(index, value) + def replace_gateHHtauInf_at(self, index, value): self.gateHHtauInf[index] = value def get_gateHHratesInf(self): return self.gateHHratesInf def set_gateHHratesInf(self, gateHHratesInf): self.gateHHratesInf = gateHHratesInf def add_gateHHratesInf(self, value): self.gateHHratesInf.append(value) - def insert_gateHHratesInf(self, index, value): self.gateHHratesInf[index] = value - def get_conductance(self): return self.conductance - def set_conductance(self, conductance): self.conductance = conductance - def validate_Nml2Quantity_conductance(self, value): - # Validate type Nml2Quantity_conductance, a restriction on xs:string. - pass - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ - def validate_channelTypes(self, value): - # Validate type channelTypes, a restriction on xs:string. - pass + def insert_gateHHratesInf_at(self, index, value): self.gateHHratesInf.insert(index, value) + def replace_gateHHratesInf_at(self, index, value): self.gateHHratesInf[index] = value def get_species(self): return self.species def set_species(self, species): self.species = species + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + def get_conductance(self): return self.conductance + def set_conductance(self, conductance): self.conductance = conductance def validate_NmlId(self, value): # Validate type NmlId, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_NmlId_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_NmlId_patterns_, )) + validate_NmlId_patterns_ = [['^[a-zA-Z0-9_]*$']] + def validate_channelTypes(self, value): + # Validate type channelTypes, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['ionChannelPassive', 'ionChannelHH', 'ionChannelKS'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on channelTypes' % {"value" : value.encode("utf-8")} ) + def validate_Nml2Quantity_conductance(self, value): + # Validate type Nml2Quantity_conductance, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_conductance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_conductance_patterns_, )) + validate_Nml2Quantity_conductance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(S|mS|uS|nS|pS)$']] def hasContent_(self): if ( self.gate or @@ -9711,28 +8825,30 @@ class IonChannel(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IonChannel') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IonChannel', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='IonChannel'): super(IonChannel, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IonChannel') - if self.conductance is not None and 'conductance' not in already_processed: - already_processed.add('conductance') - outfile.write(' conductance=%s' % (quote_attrib(self.conductance), )) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.species is not None and 'species' not in already_processed: already_processed.add('species') outfile.write(' species=%s' % (quote_attrib(self.species), )) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('type_') + outfile.write(' type=%s' % (quote_attrib(self.type_), )) + if self.conductance is not None and 'conductance' not in already_processed: + already_processed.add('conductance') + outfile.write(' conductance=%s' % (quote_attrib(self.conductance), )) def exportChildren(self, outfile, level, namespace_='', name_='IonChannel', fromsubclass_=False, pretty_print=True): super(IonChannel, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -9749,132 +8865,56 @@ class IonChannel(Standalone): gateHHtauInf_.export(outfile, level, namespace_, name_='gateHHtauInf', pretty_print=pretty_print) for gateHHratesInf_ in self.gateHHratesInf: gateHHratesInf_.export(outfile, level, namespace_, name_='gateHHratesInf', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IonChannel'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.conductance is not None and 'conductance' not in already_processed: - already_processed.add('conductance') - showIndent(outfile, level) - outfile.write('conductance="%s",\n' % (self.conductance,)) - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - if self.species is not None and 'species' not in already_processed: - already_processed.add('species') - showIndent(outfile, level) - outfile.write('species="%s",\n' % (self.species,)) - super(IonChannel, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IonChannel, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('gate=[\n') - level += 1 - for gate_ in self.gate: - showIndent(outfile, level) - outfile.write('model_.GateHHUndetermined(\n') - gate_.exportLiteral(outfile, level, name_='GateHHUndetermined') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('gateHHrates=[\n') - level += 1 - for gateHHrates_ in self.gateHHrates: - showIndent(outfile, level) - outfile.write('model_.GateHHRates(\n') - gateHHrates_.exportLiteral(outfile, level, name_='GateHHRates') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('gateHHratesTau=[\n') - level += 1 - for gateHHratesTau_ in self.gateHHratesTau: - showIndent(outfile, level) - outfile.write('model_.GateHHRatesTau(\n') - gateHHratesTau_.exportLiteral(outfile, level, name_='GateHHRatesTau') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('gateHHtauInf=[\n') - level += 1 - for gateHHtauInf_ in self.gateHHtauInf: - showIndent(outfile, level) - outfile.write('model_.GateHHTauInf(\n') - gateHHtauInf_.exportLiteral(outfile, level, name_='GateHHTauInf') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('gateHHratesInf=[\n') - level += 1 - for gateHHratesInf_ in self.gateHHratesInf: - showIndent(outfile, level) - outfile.write('model_.GateHHRatesInf(\n') - gateHHratesInf_.exportLiteral(outfile, level, name_='GateHHRatesInf') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('conductance', node) - if value is not None and 'conductance' not in already_processed: - already_processed.add('conductance') - self.conductance = value - self.validate_Nml2Quantity_conductance(self.conductance) # validate type Nml2Quantity_conductance - value = find_attr_value_('type', node) - if value is not None and 'type' not in already_processed: - already_processed.add('type') - self.type_ = value - self.validate_channelTypes(self.type_) # validate type channelTypes value = find_attr_value_('species', node) if value is not None and 'species' not in already_processed: already_processed.add('species') self.species = value self.validate_NmlId(self.species) # validate type NmlId + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + self.validate_channelTypes(self.type_) # validate type channelTypes + value = find_attr_value_('conductance', node) + if value is not None and 'conductance' not in already_processed: + already_processed.add('conductance') + self.conductance = value + self.validate_Nml2Quantity_conductance(self.conductance) # validate type Nml2Quantity_conductance super(IonChannel, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'gate': obj_ = GateHHUndetermined.factory() obj_.build(child_) self.gate.append(obj_) + obj_.original_tagname_ = 'gate' elif nodeName_ == 'gateHHrates': obj_ = GateHHRates.factory() obj_.build(child_) self.gateHHrates.append(obj_) + obj_.original_tagname_ = 'gateHHrates' elif nodeName_ == 'gateHHratesTau': obj_ = GateHHRatesTau.factory() obj_.build(child_) self.gateHHratesTau.append(obj_) + obj_.original_tagname_ = 'gateHHratesTau' elif nodeName_ == 'gateHHtauInf': obj_ = GateHHTauInf.factory() obj_.build(child_) self.gateHHtauInf.append(obj_) + obj_.original_tagname_ = 'gateHHtauInf' elif nodeName_ == 'gateHHratesInf': obj_ = GateHHRatesInf.factory() obj_.build(child_) self.gateHHratesInf.append(obj_) + obj_.original_tagname_ = 'gateHHratesInf' super(IonChannel, self).buildChildren(child_, node, nodeName_, True) # end class IonChannel @@ -9883,6 +8923,7 @@ class NeuroMLDocument(Standalone): subclass = None superclass = Standalone def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, include=None, extracellularProperties=None, intracellularProperties=None, morphology=None, ionChannel=None, decayingPoolConcentrationModel=None, expOneSynapse=None, expTwoSynapse=None, blockingPlasticSynapse=None, biophysicalProperties=None, cell=None, baseCell=None, iafTauCell=None, iafTauRefCell=None, iafCell=None, iafRefCell=None, izhikevichCell=None, adExIaFCell=None, pulseGenerator=None, sineGenerator=None, rampGenerator=None, voltageClamp=None, spikeArray=None, spikeGenerator=None, spikeGeneratorRandom=None, spikeGeneratorPoisson=None, IF_curr_alpha=None, IF_curr_exp=None, IF_cond_alpha=None, IF_cond_exp=None, EIF_cond_exp_isfa_ista=None, EIF_cond_alpha_isfa_ista=None, HH_cond_exp=None, expCondSynapse=None, alphaCondSynapse=None, expCurrSynapse=None, alphaCurrSynapse=None, SpikeSourcePoisson=None, network=None, ComponentType=None): + self.original_tagname_ = None super(NeuroMLDocument, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) if include is None: self.include = [] @@ -10045,6 +9086,11 @@ class NeuroMLDocument(Standalone): else: self.ComponentType = ComponentType def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, NeuroMLDocument) + if subclass is not None: + return subclass(*args_, **kwargs_) if NeuroMLDocument.subclass: return NeuroMLDocument.subclass(*args_, **kwargs_) else: @@ -10053,163 +9099,203 @@ class NeuroMLDocument(Standalone): def get_include(self): return self.include def set_include(self, include): self.include = include def add_include(self, value): self.include.append(value) - def insert_include(self, index, value): self.include[index] = value + def insert_include_at(self, index, value): self.include.insert(index, value) + def replace_include_at(self, index, value): self.include[index] = value def get_extracellularProperties(self): return self.extracellularProperties def set_extracellularProperties(self, extracellularProperties): self.extracellularProperties = extracellularProperties def add_extracellularProperties(self, value): self.extracellularProperties.append(value) - def insert_extracellularProperties(self, index, value): self.extracellularProperties[index] = value + def insert_extracellularProperties_at(self, index, value): self.extracellularProperties.insert(index, value) + def replace_extracellularProperties_at(self, index, value): self.extracellularProperties[index] = value def get_intracellularProperties(self): return self.intracellularProperties def set_intracellularProperties(self, intracellularProperties): self.intracellularProperties = intracellularProperties def add_intracellularProperties(self, value): self.intracellularProperties.append(value) - def insert_intracellularProperties(self, index, value): self.intracellularProperties[index] = value + def insert_intracellularProperties_at(self, index, value): self.intracellularProperties.insert(index, value) + def replace_intracellularProperties_at(self, index, value): self.intracellularProperties[index] = value def get_morphology(self): return self.morphology def set_morphology(self, morphology): self.morphology = morphology def add_morphology(self, value): self.morphology.append(value) - def insert_morphology(self, index, value): self.morphology[index] = value + def insert_morphology_at(self, index, value): self.morphology.insert(index, value) + def replace_morphology_at(self, index, value): self.morphology[index] = value def get_ionChannel(self): return self.ionChannel def set_ionChannel(self, ionChannel): self.ionChannel = ionChannel def add_ionChannel(self, value): self.ionChannel.append(value) - def insert_ionChannel(self, index, value): self.ionChannel[index] = value + def insert_ionChannel_at(self, index, value): self.ionChannel.insert(index, value) + def replace_ionChannel_at(self, index, value): self.ionChannel[index] = value def get_decayingPoolConcentrationModel(self): return self.decayingPoolConcentrationModel def set_decayingPoolConcentrationModel(self, decayingPoolConcentrationModel): self.decayingPoolConcentrationModel = decayingPoolConcentrationModel def add_decayingPoolConcentrationModel(self, value): self.decayingPoolConcentrationModel.append(value) - def insert_decayingPoolConcentrationModel(self, index, value): self.decayingPoolConcentrationModel[index] = value + def insert_decayingPoolConcentrationModel_at(self, index, value): self.decayingPoolConcentrationModel.insert(index, value) + def replace_decayingPoolConcentrationModel_at(self, index, value): self.decayingPoolConcentrationModel[index] = value def get_expOneSynapse(self): return self.expOneSynapse def set_expOneSynapse(self, expOneSynapse): self.expOneSynapse = expOneSynapse def add_expOneSynapse(self, value): self.expOneSynapse.append(value) - def insert_expOneSynapse(self, index, value): self.expOneSynapse[index] = value + def insert_expOneSynapse_at(self, index, value): self.expOneSynapse.insert(index, value) + def replace_expOneSynapse_at(self, index, value): self.expOneSynapse[index] = value def get_expTwoSynapse(self): return self.expTwoSynapse def set_expTwoSynapse(self, expTwoSynapse): self.expTwoSynapse = expTwoSynapse def add_expTwoSynapse(self, value): self.expTwoSynapse.append(value) - def insert_expTwoSynapse(self, index, value): self.expTwoSynapse[index] = value + def insert_expTwoSynapse_at(self, index, value): self.expTwoSynapse.insert(index, value) + def replace_expTwoSynapse_at(self, index, value): self.expTwoSynapse[index] = value def get_blockingPlasticSynapse(self): return self.blockingPlasticSynapse def set_blockingPlasticSynapse(self, blockingPlasticSynapse): self.blockingPlasticSynapse = blockingPlasticSynapse def add_blockingPlasticSynapse(self, value): self.blockingPlasticSynapse.append(value) - def insert_blockingPlasticSynapse(self, index, value): self.blockingPlasticSynapse[index] = value + def insert_blockingPlasticSynapse_at(self, index, value): self.blockingPlasticSynapse.insert(index, value) + def replace_blockingPlasticSynapse_at(self, index, value): self.blockingPlasticSynapse[index] = value def get_biophysicalProperties(self): return self.biophysicalProperties def set_biophysicalProperties(self, biophysicalProperties): self.biophysicalProperties = biophysicalProperties def add_biophysicalProperties(self, value): self.biophysicalProperties.append(value) - def insert_biophysicalProperties(self, index, value): self.biophysicalProperties[index] = value + def insert_biophysicalProperties_at(self, index, value): self.biophysicalProperties.insert(index, value) + def replace_biophysicalProperties_at(self, index, value): self.biophysicalProperties[index] = value def get_cell(self): return self.cell def set_cell(self, cell): self.cell = cell def add_cell(self, value): self.cell.append(value) - def insert_cell(self, index, value): self.cell[index] = value + def insert_cell_at(self, index, value): self.cell.insert(index, value) + def replace_cell_at(self, index, value): self.cell[index] = value def get_baseCell(self): return self.baseCell def set_baseCell(self, baseCell): self.baseCell = baseCell def add_baseCell(self, value): self.baseCell.append(value) - def insert_baseCell(self, index, value): self.baseCell[index] = value + def insert_baseCell_at(self, index, value): self.baseCell.insert(index, value) + def replace_baseCell_at(self, index, value): self.baseCell[index] = value def get_iafTauCell(self): return self.iafTauCell def set_iafTauCell(self, iafTauCell): self.iafTauCell = iafTauCell def add_iafTauCell(self, value): self.iafTauCell.append(value) - def insert_iafTauCell(self, index, value): self.iafTauCell[index] = value + def insert_iafTauCell_at(self, index, value): self.iafTauCell.insert(index, value) + def replace_iafTauCell_at(self, index, value): self.iafTauCell[index] = value def get_iafTauRefCell(self): return self.iafTauRefCell def set_iafTauRefCell(self, iafTauRefCell): self.iafTauRefCell = iafTauRefCell def add_iafTauRefCell(self, value): self.iafTauRefCell.append(value) - def insert_iafTauRefCell(self, index, value): self.iafTauRefCell[index] = value + def insert_iafTauRefCell_at(self, index, value): self.iafTauRefCell.insert(index, value) + def replace_iafTauRefCell_at(self, index, value): self.iafTauRefCell[index] = value def get_iafCell(self): return self.iafCell def set_iafCell(self, iafCell): self.iafCell = iafCell def add_iafCell(self, value): self.iafCell.append(value) - def insert_iafCell(self, index, value): self.iafCell[index] = value + def insert_iafCell_at(self, index, value): self.iafCell.insert(index, value) + def replace_iafCell_at(self, index, value): self.iafCell[index] = value def get_iafRefCell(self): return self.iafRefCell def set_iafRefCell(self, iafRefCell): self.iafRefCell = iafRefCell def add_iafRefCell(self, value): self.iafRefCell.append(value) - def insert_iafRefCell(self, index, value): self.iafRefCell[index] = value + def insert_iafRefCell_at(self, index, value): self.iafRefCell.insert(index, value) + def replace_iafRefCell_at(self, index, value): self.iafRefCell[index] = value def get_izhikevichCell(self): return self.izhikevichCell def set_izhikevichCell(self, izhikevichCell): self.izhikevichCell = izhikevichCell def add_izhikevichCell(self, value): self.izhikevichCell.append(value) - def insert_izhikevichCell(self, index, value): self.izhikevichCell[index] = value + def insert_izhikevichCell_at(self, index, value): self.izhikevichCell.insert(index, value) + def replace_izhikevichCell_at(self, index, value): self.izhikevichCell[index] = value def get_adExIaFCell(self): return self.adExIaFCell def set_adExIaFCell(self, adExIaFCell): self.adExIaFCell = adExIaFCell def add_adExIaFCell(self, value): self.adExIaFCell.append(value) - def insert_adExIaFCell(self, index, value): self.adExIaFCell[index] = value + def insert_adExIaFCell_at(self, index, value): self.adExIaFCell.insert(index, value) + def replace_adExIaFCell_at(self, index, value): self.adExIaFCell[index] = value def get_pulseGenerator(self): return self.pulseGenerator def set_pulseGenerator(self, pulseGenerator): self.pulseGenerator = pulseGenerator def add_pulseGenerator(self, value): self.pulseGenerator.append(value) - def insert_pulseGenerator(self, index, value): self.pulseGenerator[index] = value + def insert_pulseGenerator_at(self, index, value): self.pulseGenerator.insert(index, value) + def replace_pulseGenerator_at(self, index, value): self.pulseGenerator[index] = value def get_sineGenerator(self): return self.sineGenerator def set_sineGenerator(self, sineGenerator): self.sineGenerator = sineGenerator def add_sineGenerator(self, value): self.sineGenerator.append(value) - def insert_sineGenerator(self, index, value): self.sineGenerator[index] = value + def insert_sineGenerator_at(self, index, value): self.sineGenerator.insert(index, value) + def replace_sineGenerator_at(self, index, value): self.sineGenerator[index] = value def get_rampGenerator(self): return self.rampGenerator def set_rampGenerator(self, rampGenerator): self.rampGenerator = rampGenerator def add_rampGenerator(self, value): self.rampGenerator.append(value) - def insert_rampGenerator(self, index, value): self.rampGenerator[index] = value + def insert_rampGenerator_at(self, index, value): self.rampGenerator.insert(index, value) + def replace_rampGenerator_at(self, index, value): self.rampGenerator[index] = value def get_voltageClamp(self): return self.voltageClamp def set_voltageClamp(self, voltageClamp): self.voltageClamp = voltageClamp def add_voltageClamp(self, value): self.voltageClamp.append(value) - def insert_voltageClamp(self, index, value): self.voltageClamp[index] = value + def insert_voltageClamp_at(self, index, value): self.voltageClamp.insert(index, value) + def replace_voltageClamp_at(self, index, value): self.voltageClamp[index] = value def get_spikeArray(self): return self.spikeArray def set_spikeArray(self, spikeArray): self.spikeArray = spikeArray def add_spikeArray(self, value): self.spikeArray.append(value) - def insert_spikeArray(self, index, value): self.spikeArray[index] = value + def insert_spikeArray_at(self, index, value): self.spikeArray.insert(index, value) + def replace_spikeArray_at(self, index, value): self.spikeArray[index] = value def get_spikeGenerator(self): return self.spikeGenerator def set_spikeGenerator(self, spikeGenerator): self.spikeGenerator = spikeGenerator def add_spikeGenerator(self, value): self.spikeGenerator.append(value) - def insert_spikeGenerator(self, index, value): self.spikeGenerator[index] = value + def insert_spikeGenerator_at(self, index, value): self.spikeGenerator.insert(index, value) + def replace_spikeGenerator_at(self, index, value): self.spikeGenerator[index] = value def get_spikeGeneratorRandom(self): return self.spikeGeneratorRandom def set_spikeGeneratorRandom(self, spikeGeneratorRandom): self.spikeGeneratorRandom = spikeGeneratorRandom def add_spikeGeneratorRandom(self, value): self.spikeGeneratorRandom.append(value) - def insert_spikeGeneratorRandom(self, index, value): self.spikeGeneratorRandom[index] = value + def insert_spikeGeneratorRandom_at(self, index, value): self.spikeGeneratorRandom.insert(index, value) + def replace_spikeGeneratorRandom_at(self, index, value): self.spikeGeneratorRandom[index] = value def get_spikeGeneratorPoisson(self): return self.spikeGeneratorPoisson def set_spikeGeneratorPoisson(self, spikeGeneratorPoisson): self.spikeGeneratorPoisson = spikeGeneratorPoisson def add_spikeGeneratorPoisson(self, value): self.spikeGeneratorPoisson.append(value) - def insert_spikeGeneratorPoisson(self, index, value): self.spikeGeneratorPoisson[index] = value + def insert_spikeGeneratorPoisson_at(self, index, value): self.spikeGeneratorPoisson.insert(index, value) + def replace_spikeGeneratorPoisson_at(self, index, value): self.spikeGeneratorPoisson[index] = value def get_IF_curr_alpha(self): return self.IF_curr_alpha def set_IF_curr_alpha(self, IF_curr_alpha): self.IF_curr_alpha = IF_curr_alpha def add_IF_curr_alpha(self, value): self.IF_curr_alpha.append(value) - def insert_IF_curr_alpha(self, index, value): self.IF_curr_alpha[index] = value + def insert_IF_curr_alpha_at(self, index, value): self.IF_curr_alpha.insert(index, value) + def replace_IF_curr_alpha_at(self, index, value): self.IF_curr_alpha[index] = value def get_IF_curr_exp(self): return self.IF_curr_exp def set_IF_curr_exp(self, IF_curr_exp): self.IF_curr_exp = IF_curr_exp def add_IF_curr_exp(self, value): self.IF_curr_exp.append(value) - def insert_IF_curr_exp(self, index, value): self.IF_curr_exp[index] = value + def insert_IF_curr_exp_at(self, index, value): self.IF_curr_exp.insert(index, value) + def replace_IF_curr_exp_at(self, index, value): self.IF_curr_exp[index] = value def get_IF_cond_alpha(self): return self.IF_cond_alpha def set_IF_cond_alpha(self, IF_cond_alpha): self.IF_cond_alpha = IF_cond_alpha def add_IF_cond_alpha(self, value): self.IF_cond_alpha.append(value) - def insert_IF_cond_alpha(self, index, value): self.IF_cond_alpha[index] = value + def insert_IF_cond_alpha_at(self, index, value): self.IF_cond_alpha.insert(index, value) + def replace_IF_cond_alpha_at(self, index, value): self.IF_cond_alpha[index] = value def get_IF_cond_exp(self): return self.IF_cond_exp def set_IF_cond_exp(self, IF_cond_exp): self.IF_cond_exp = IF_cond_exp def add_IF_cond_exp(self, value): self.IF_cond_exp.append(value) - def insert_IF_cond_exp(self, index, value): self.IF_cond_exp[index] = value + def insert_IF_cond_exp_at(self, index, value): self.IF_cond_exp.insert(index, value) + def replace_IF_cond_exp_at(self, index, value): self.IF_cond_exp[index] = value def get_EIF_cond_exp_isfa_ista(self): return self.EIF_cond_exp_isfa_ista def set_EIF_cond_exp_isfa_ista(self, EIF_cond_exp_isfa_ista): self.EIF_cond_exp_isfa_ista = EIF_cond_exp_isfa_ista def add_EIF_cond_exp_isfa_ista(self, value): self.EIF_cond_exp_isfa_ista.append(value) - def insert_EIF_cond_exp_isfa_ista(self, index, value): self.EIF_cond_exp_isfa_ista[index] = value + def insert_EIF_cond_exp_isfa_ista_at(self, index, value): self.EIF_cond_exp_isfa_ista.insert(index, value) + def replace_EIF_cond_exp_isfa_ista_at(self, index, value): self.EIF_cond_exp_isfa_ista[index] = value def get_EIF_cond_alpha_isfa_ista(self): return self.EIF_cond_alpha_isfa_ista def set_EIF_cond_alpha_isfa_ista(self, EIF_cond_alpha_isfa_ista): self.EIF_cond_alpha_isfa_ista = EIF_cond_alpha_isfa_ista def add_EIF_cond_alpha_isfa_ista(self, value): self.EIF_cond_alpha_isfa_ista.append(value) - def insert_EIF_cond_alpha_isfa_ista(self, index, value): self.EIF_cond_alpha_isfa_ista[index] = value + def insert_EIF_cond_alpha_isfa_ista_at(self, index, value): self.EIF_cond_alpha_isfa_ista.insert(index, value) + def replace_EIF_cond_alpha_isfa_ista_at(self, index, value): self.EIF_cond_alpha_isfa_ista[index] = value def get_HH_cond_exp(self): return self.HH_cond_exp def set_HH_cond_exp(self, HH_cond_exp): self.HH_cond_exp = HH_cond_exp def add_HH_cond_exp(self, value): self.HH_cond_exp.append(value) - def insert_HH_cond_exp(self, index, value): self.HH_cond_exp[index] = value + def insert_HH_cond_exp_at(self, index, value): self.HH_cond_exp.insert(index, value) + def replace_HH_cond_exp_at(self, index, value): self.HH_cond_exp[index] = value def get_expCondSynapse(self): return self.expCondSynapse def set_expCondSynapse(self, expCondSynapse): self.expCondSynapse = expCondSynapse def add_expCondSynapse(self, value): self.expCondSynapse.append(value) - def insert_expCondSynapse(self, index, value): self.expCondSynapse[index] = value + def insert_expCondSynapse_at(self, index, value): self.expCondSynapse.insert(index, value) + def replace_expCondSynapse_at(self, index, value): self.expCondSynapse[index] = value def get_alphaCondSynapse(self): return self.alphaCondSynapse def set_alphaCondSynapse(self, alphaCondSynapse): self.alphaCondSynapse = alphaCondSynapse def add_alphaCondSynapse(self, value): self.alphaCondSynapse.append(value) - def insert_alphaCondSynapse(self, index, value): self.alphaCondSynapse[index] = value + def insert_alphaCondSynapse_at(self, index, value): self.alphaCondSynapse.insert(index, value) + def replace_alphaCondSynapse_at(self, index, value): self.alphaCondSynapse[index] = value def get_expCurrSynapse(self): return self.expCurrSynapse def set_expCurrSynapse(self, expCurrSynapse): self.expCurrSynapse = expCurrSynapse def add_expCurrSynapse(self, value): self.expCurrSynapse.append(value) - def insert_expCurrSynapse(self, index, value): self.expCurrSynapse[index] = value + def insert_expCurrSynapse_at(self, index, value): self.expCurrSynapse.insert(index, value) + def replace_expCurrSynapse_at(self, index, value): self.expCurrSynapse[index] = value def get_alphaCurrSynapse(self): return self.alphaCurrSynapse def set_alphaCurrSynapse(self, alphaCurrSynapse): self.alphaCurrSynapse = alphaCurrSynapse def add_alphaCurrSynapse(self, value): self.alphaCurrSynapse.append(value) - def insert_alphaCurrSynapse(self, index, value): self.alphaCurrSynapse[index] = value + def insert_alphaCurrSynapse_at(self, index, value): self.alphaCurrSynapse.insert(index, value) + def replace_alphaCurrSynapse_at(self, index, value): self.alphaCurrSynapse[index] = value def get_SpikeSourcePoisson(self): return self.SpikeSourcePoisson def set_SpikeSourcePoisson(self, SpikeSourcePoisson): self.SpikeSourcePoisson = SpikeSourcePoisson def add_SpikeSourcePoisson(self, value): self.SpikeSourcePoisson.append(value) - def insert_SpikeSourcePoisson(self, index, value): self.SpikeSourcePoisson[index] = value + def insert_SpikeSourcePoisson_at(self, index, value): self.SpikeSourcePoisson.insert(index, value) + def replace_SpikeSourcePoisson_at(self, index, value): self.SpikeSourcePoisson[index] = value def get_network(self): return self.network def set_network(self, network): self.network = network def add_network(self, value): self.network.append(value) - def insert_network(self, index, value): self.network[index] = value + def insert_network_at(self, index, value): self.network.insert(index, value) + def replace_network_at(self, index, value): self.network[index] = value def get_ComponentType(self): return self.ComponentType def set_ComponentType(self, ComponentType): self.ComponentType = ComponentType def add_ComponentType(self, value): self.ComponentType.append(value) - def insert_ComponentType(self, index, value): self.ComponentType[index] = value + def insert_ComponentType_at(self, index, value): self.ComponentType.insert(index, value) + def replace_ComponentType_at(self, index, value): self.ComponentType[index] = value def hasContent_(self): if ( self.include or @@ -10262,13 +9348,15 @@ class NeuroMLDocument(Standalone): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='NeuroMLDocument') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='NeuroMLDocument', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -10361,502 +9449,13 @@ class NeuroMLDocument(Standalone): network_.export(outfile, level, namespace_, name_='network', pretty_print=pretty_print) for ComponentType_ in self.ComponentType: ComponentType_.export(outfile, level, namespace_, name_='ComponentType', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='NeuroMLDocument'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(NeuroMLDocument, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(NeuroMLDocument, self).exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('include=[\n') - level += 1 - for include_ in self.include: - showIndent(outfile, level) - outfile.write('model_.IncludeType(\n') - include_.exportLiteral(outfile, level, name_='IncludeType') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('extracellularProperties=[\n') - level += 1 - for extracellularProperties_ in self.extracellularProperties: - showIndent(outfile, level) - outfile.write('model_.ExtracellularProperties(\n') - extracellularProperties_.exportLiteral(outfile, level, name_='ExtracellularProperties') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('intracellularProperties=[\n') - level += 1 - for intracellularProperties_ in self.intracellularProperties: - showIndent(outfile, level) - outfile.write('model_.IntracellularProperties(\n') - intracellularProperties_.exportLiteral(outfile, level, name_='IntracellularProperties') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('morphology=[\n') - level += 1 - for morphology_ in self.morphology: - showIndent(outfile, level) - outfile.write('model_.Morphology(\n') - morphology_.exportLiteral(outfile, level, name_='Morphology') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('ionChannel=[\n') - level += 1 - for ionChannel_ in self.ionChannel: - showIndent(outfile, level) - outfile.write('model_.IonChannel(\n') - ionChannel_.exportLiteral(outfile, level, name_='IonChannel') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('decayingPoolConcentrationModel=[\n') - level += 1 - for decayingPoolConcentrationModel_ in self.decayingPoolConcentrationModel: - showIndent(outfile, level) - outfile.write('model_.DecayingPoolConcentrationModel(\n') - decayingPoolConcentrationModel_.exportLiteral(outfile, level, name_='DecayingPoolConcentrationModel') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('expOneSynapse=[\n') - level += 1 - for expOneSynapse_ in self.expOneSynapse: - showIndent(outfile, level) - outfile.write('model_.ExpOneSynapse(\n') - expOneSynapse_.exportLiteral(outfile, level, name_='ExpOneSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('expTwoSynapse=[\n') - level += 1 - for expTwoSynapse_ in self.expTwoSynapse: - showIndent(outfile, level) - outfile.write('model_.ExpTwoSynapse(\n') - expTwoSynapse_.exportLiteral(outfile, level, name_='ExpTwoSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('blockingPlasticSynapse=[\n') - level += 1 - for blockingPlasticSynapse_ in self.blockingPlasticSynapse: - showIndent(outfile, level) - outfile.write('model_.BlockingPlasticSynapse(\n') - blockingPlasticSynapse_.exportLiteral(outfile, level, name_='BlockingPlasticSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('biophysicalProperties=[\n') - level += 1 - for biophysicalProperties_ in self.biophysicalProperties: - showIndent(outfile, level) - outfile.write('model_.BiophysicalProperties(\n') - biophysicalProperties_.exportLiteral(outfile, level, name_='BiophysicalProperties') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('cell=[\n') - level += 1 - for cell_ in self.cell: - showIndent(outfile, level) - outfile.write('model_.Cell(\n') - cell_.exportLiteral(outfile, level, name_='Cell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('baseCell=[\n') - level += 1 - for baseCell_ in self.baseCell: - showIndent(outfile, level) - outfile.write('model_.BaseCell(\n') - baseCell_.exportLiteral(outfile, level, name_='BaseCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('iafTauCell=[\n') - level += 1 - for iafTauCell_ in self.iafTauCell: - showIndent(outfile, level) - outfile.write('model_.IaFTauCell(\n') - iafTauCell_.exportLiteral(outfile, level, name_='IaFTauCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('iafTauRefCell=[\n') - level += 1 - for iafTauRefCell_ in self.iafTauRefCell: - showIndent(outfile, level) - outfile.write('model_.IaFTauRefCell(\n') - iafTauRefCell_.exportLiteral(outfile, level, name_='IaFTauRefCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('iafCell=[\n') - level += 1 - for iafCell_ in self.iafCell: - showIndent(outfile, level) - outfile.write('model_.IaFCell(\n') - iafCell_.exportLiteral(outfile, level, name_='IaFCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('iafRefCell=[\n') - level += 1 - for iafRefCell_ in self.iafRefCell: - showIndent(outfile, level) - outfile.write('model_.IaFRefCell(\n') - iafRefCell_.exportLiteral(outfile, level, name_='IaFRefCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('izhikevichCell=[\n') - level += 1 - for izhikevichCell_ in self.izhikevichCell: - showIndent(outfile, level) - outfile.write('model_.IzhikevichCell(\n') - izhikevichCell_.exportLiteral(outfile, level, name_='IzhikevichCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('adExIaFCell=[\n') - level += 1 - for adExIaFCell_ in self.adExIaFCell: - showIndent(outfile, level) - outfile.write('model_.AdExIaFCell(\n') - adExIaFCell_.exportLiteral(outfile, level, name_='AdExIaFCell') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('pulseGenerator=[\n') - level += 1 - for pulseGenerator_ in self.pulseGenerator: - showIndent(outfile, level) - outfile.write('model_.PulseGenerator(\n') - pulseGenerator_.exportLiteral(outfile, level, name_='PulseGenerator') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('sineGenerator=[\n') - level += 1 - for sineGenerator_ in self.sineGenerator: - showIndent(outfile, level) - outfile.write('model_.SineGenerator(\n') - sineGenerator_.exportLiteral(outfile, level, name_='SineGenerator') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('rampGenerator=[\n') - level += 1 - for rampGenerator_ in self.rampGenerator: - showIndent(outfile, level) - outfile.write('model_.RampGenerator(\n') - rampGenerator_.exportLiteral(outfile, level, name_='RampGenerator') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('voltageClamp=[\n') - level += 1 - for voltageClamp_ in self.voltageClamp: - showIndent(outfile, level) - outfile.write('model_.VoltageClamp(\n') - voltageClamp_.exportLiteral(outfile, level, name_='VoltageClamp') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('spikeArray=[\n') - level += 1 - for spikeArray_ in self.spikeArray: - showIndent(outfile, level) - outfile.write('model_.SpikeArray(\n') - spikeArray_.exportLiteral(outfile, level, name_='SpikeArray') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('spikeGenerator=[\n') - level += 1 - for spikeGenerator_ in self.spikeGenerator: - showIndent(outfile, level) - outfile.write('model_.SpikeGenerator(\n') - spikeGenerator_.exportLiteral(outfile, level, name_='SpikeGenerator') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('spikeGeneratorRandom=[\n') - level += 1 - for spikeGeneratorRandom_ in self.spikeGeneratorRandom: - showIndent(outfile, level) - outfile.write('model_.SpikeGeneratorRandom(\n') - spikeGeneratorRandom_.exportLiteral(outfile, level, name_='SpikeGeneratorRandom') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('spikeGeneratorPoisson=[\n') - level += 1 - for spikeGeneratorPoisson_ in self.spikeGeneratorPoisson: - showIndent(outfile, level) - outfile.write('model_.SpikeGeneratorPoisson(\n') - spikeGeneratorPoisson_.exportLiteral(outfile, level, name_='SpikeGeneratorPoisson') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('IF_curr_alpha=[\n') - level += 1 - for IF_curr_alpha_ in self.IF_curr_alpha: - showIndent(outfile, level) - outfile.write('model_.IF_curr_alpha(\n') - IF_curr_alpha_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('IF_curr_exp=[\n') - level += 1 - for IF_curr_exp_ in self.IF_curr_exp: - showIndent(outfile, level) - outfile.write('model_.IF_curr_exp(\n') - IF_curr_exp_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('IF_cond_alpha=[\n') - level += 1 - for IF_cond_alpha_ in self.IF_cond_alpha: - showIndent(outfile, level) - outfile.write('model_.IF_cond_alpha(\n') - IF_cond_alpha_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('IF_cond_exp=[\n') - level += 1 - for IF_cond_exp_ in self.IF_cond_exp: - showIndent(outfile, level) - outfile.write('model_.IF_cond_exp(\n') - IF_cond_exp_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('EIF_cond_exp_isfa_ista=[\n') - level += 1 - for EIF_cond_exp_isfa_ista_ in self.EIF_cond_exp_isfa_ista: - showIndent(outfile, level) - outfile.write('model_.EIF_cond_exp_isfa_ista(\n') - EIF_cond_exp_isfa_ista_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('EIF_cond_alpha_isfa_ista=[\n') - level += 1 - for EIF_cond_alpha_isfa_ista_ in self.EIF_cond_alpha_isfa_ista: - showIndent(outfile, level) - outfile.write('model_.EIF_cond_alpha_isfa_ista(\n') - EIF_cond_alpha_isfa_ista_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('HH_cond_exp=[\n') - level += 1 - for HH_cond_exp_ in self.HH_cond_exp: - showIndent(outfile, level) - outfile.write('model_.HH_cond_exp(\n') - HH_cond_exp_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('expCondSynapse=[\n') - level += 1 - for expCondSynapse_ in self.expCondSynapse: - showIndent(outfile, level) - outfile.write('model_.ExpCondSynapse(\n') - expCondSynapse_.exportLiteral(outfile, level, name_='ExpCondSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('alphaCondSynapse=[\n') - level += 1 - for alphaCondSynapse_ in self.alphaCondSynapse: - showIndent(outfile, level) - outfile.write('model_.AlphaCondSynapse(\n') - alphaCondSynapse_.exportLiteral(outfile, level, name_='AlphaCondSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('expCurrSynapse=[\n') - level += 1 - for expCurrSynapse_ in self.expCurrSynapse: - showIndent(outfile, level) - outfile.write('model_.ExpCurrSynapse(\n') - expCurrSynapse_.exportLiteral(outfile, level, name_='ExpCurrSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('alphaCurrSynapse=[\n') - level += 1 - for alphaCurrSynapse_ in self.alphaCurrSynapse: - showIndent(outfile, level) - outfile.write('model_.AlphaCurrSynapse(\n') - alphaCurrSynapse_.exportLiteral(outfile, level, name_='AlphaCurrSynapse') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('SpikeSourcePoisson=[\n') - level += 1 - for SpikeSourcePoisson_ in self.SpikeSourcePoisson: - showIndent(outfile, level) - outfile.write('model_.SpikeSourcePoisson(\n') - SpikeSourcePoisson_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('network=[\n') - level += 1 - for network_ in self.network: - showIndent(outfile, level) - outfile.write('model_.Network(\n') - network_.exportLiteral(outfile, level, name_='Network') - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') - showIndent(outfile, level) - outfile.write('ComponentType=[\n') - level += 1 - for ComponentType_ in self.ComponentType: - showIndent(outfile, level) - outfile.write('model_.ComponentType(\n') - ComponentType_.exportLiteral(outfile, level) - showIndent(outfile, level) - outfile.write('),\n') - level -= 1 - showIndent(outfile, level) - outfile.write('],\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(NeuroMLDocument, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -10864,167 +9463,207 @@ class NeuroMLDocument(Standalone): obj_ = IncludeType.factory() obj_.build(child_) self.include.append(obj_) + obj_.original_tagname_ = 'include' elif nodeName_ == 'extracellularProperties': obj_ = ExtracellularProperties.factory() obj_.build(child_) self.extracellularProperties.append(obj_) + obj_.original_tagname_ = 'extracellularProperties' elif nodeName_ == 'intracellularProperties': obj_ = IntracellularProperties.factory() obj_.build(child_) self.intracellularProperties.append(obj_) + obj_.original_tagname_ = 'intracellularProperties' elif nodeName_ == 'morphology': obj_ = Morphology.factory() obj_.build(child_) self.morphology.append(obj_) + obj_.original_tagname_ = 'morphology' elif nodeName_ == 'ionChannel': obj_ = IonChannel.factory() obj_.build(child_) self.ionChannel.append(obj_) + obj_.original_tagname_ = 'ionChannel' elif nodeName_ == 'decayingPoolConcentrationModel': class_obj_ = self.get_class_obj_(child_, DecayingPoolConcentrationModel) obj_ = class_obj_.factory() obj_.build(child_) self.decayingPoolConcentrationModel.append(obj_) + obj_.original_tagname_ = 'decayingPoolConcentrationModel' elif nodeName_ == 'expOneSynapse': obj_ = ExpOneSynapse.factory() obj_.build(child_) self.expOneSynapse.append(obj_) + obj_.original_tagname_ = 'expOneSynapse' elif nodeName_ == 'expTwoSynapse': class_obj_ = self.get_class_obj_(child_, ExpTwoSynapse) obj_ = class_obj_.factory() obj_.build(child_) self.expTwoSynapse.append(obj_) + obj_.original_tagname_ = 'expTwoSynapse' elif nodeName_ == 'blockingPlasticSynapse': obj_ = BlockingPlasticSynapse.factory() obj_.build(child_) self.blockingPlasticSynapse.append(obj_) + obj_.original_tagname_ = 'blockingPlasticSynapse' elif nodeName_ == 'biophysicalProperties': obj_ = BiophysicalProperties.factory() obj_.build(child_) self.biophysicalProperties.append(obj_) + obj_.original_tagname_ = 'biophysicalProperties' elif nodeName_ == 'cell': obj_ = Cell.factory() obj_.build(child_) self.cell.append(obj_) + obj_.original_tagname_ = 'cell' elif nodeName_ == 'baseCell': class_obj_ = self.get_class_obj_(child_, BaseCell) obj_ = class_obj_.factory() obj_.build(child_) self.baseCell.append(obj_) + obj_.original_tagname_ = 'baseCell' elif nodeName_ == 'iafTauCell': class_obj_ = self.get_class_obj_(child_, IaFTauCell) obj_ = class_obj_.factory() obj_.build(child_) self.iafTauCell.append(obj_) + obj_.original_tagname_ = 'iafTauCell' elif nodeName_ == 'iafTauRefCell': obj_ = IaFTauRefCell.factory() obj_.build(child_) self.iafTauRefCell.append(obj_) + obj_.original_tagname_ = 'iafTauRefCell' elif nodeName_ == 'iafCell': class_obj_ = self.get_class_obj_(child_, IaFCell) obj_ = class_obj_.factory() obj_.build(child_) self.iafCell.append(obj_) + obj_.original_tagname_ = 'iafCell' elif nodeName_ == 'iafRefCell': obj_ = IaFRefCell.factory() obj_.build(child_) self.iafRefCell.append(obj_) + obj_.original_tagname_ = 'iafRefCell' elif nodeName_ == 'izhikevichCell': obj_ = IzhikevichCell.factory() obj_.build(child_) self.izhikevichCell.append(obj_) + obj_.original_tagname_ = 'izhikevichCell' elif nodeName_ == 'adExIaFCell': obj_ = AdExIaFCell.factory() obj_.build(child_) self.adExIaFCell.append(obj_) + obj_.original_tagname_ = 'adExIaFCell' elif nodeName_ == 'pulseGenerator': obj_ = PulseGenerator.factory() obj_.build(child_) self.pulseGenerator.append(obj_) + obj_.original_tagname_ = 'pulseGenerator' elif nodeName_ == 'sineGenerator': obj_ = SineGenerator.factory() obj_.build(child_) self.sineGenerator.append(obj_) + obj_.original_tagname_ = 'sineGenerator' elif nodeName_ == 'rampGenerator': obj_ = RampGenerator.factory() obj_.build(child_) self.rampGenerator.append(obj_) + obj_.original_tagname_ = 'rampGenerator' elif nodeName_ == 'voltageClamp': obj_ = VoltageClamp.factory() obj_.build(child_) self.voltageClamp.append(obj_) + obj_.original_tagname_ = 'voltageClamp' elif nodeName_ == 'spikeArray': obj_ = SpikeArray.factory() obj_.build(child_) self.spikeArray.append(obj_) + obj_.original_tagname_ = 'spikeArray' elif nodeName_ == 'spikeGenerator': obj_ = SpikeGenerator.factory() obj_.build(child_) self.spikeGenerator.append(obj_) + obj_.original_tagname_ = 'spikeGenerator' elif nodeName_ == 'spikeGeneratorRandom': obj_ = SpikeGeneratorRandom.factory() obj_.build(child_) self.spikeGeneratorRandom.append(obj_) + obj_.original_tagname_ = 'spikeGeneratorRandom' elif nodeName_ == 'spikeGeneratorPoisson': obj_ = SpikeGeneratorPoisson.factory() obj_.build(child_) self.spikeGeneratorPoisson.append(obj_) + obj_.original_tagname_ = 'spikeGeneratorPoisson' elif nodeName_ == 'IF_curr_alpha': obj_ = IF_curr_alpha.factory() obj_.build(child_) self.IF_curr_alpha.append(obj_) + obj_.original_tagname_ = 'IF_curr_alpha' elif nodeName_ == 'IF_curr_exp': obj_ = IF_curr_exp.factory() obj_.build(child_) self.IF_curr_exp.append(obj_) + obj_.original_tagname_ = 'IF_curr_exp' elif nodeName_ == 'IF_cond_alpha': obj_ = IF_cond_alpha.factory() obj_.build(child_) self.IF_cond_alpha.append(obj_) + obj_.original_tagname_ = 'IF_cond_alpha' elif nodeName_ == 'IF_cond_exp': obj_ = IF_cond_exp.factory() obj_.build(child_) self.IF_cond_exp.append(obj_) + obj_.original_tagname_ = 'IF_cond_exp' elif nodeName_ == 'EIF_cond_exp_isfa_ista': obj_ = EIF_cond_exp_isfa_ista.factory() obj_.build(child_) self.EIF_cond_exp_isfa_ista.append(obj_) + obj_.original_tagname_ = 'EIF_cond_exp_isfa_ista' elif nodeName_ == 'EIF_cond_alpha_isfa_ista': obj_ = EIF_cond_alpha_isfa_ista.factory() obj_.build(child_) self.EIF_cond_alpha_isfa_ista.append(obj_) + obj_.original_tagname_ = 'EIF_cond_alpha_isfa_ista' elif nodeName_ == 'HH_cond_exp': obj_ = HH_cond_exp.factory() obj_.build(child_) self.HH_cond_exp.append(obj_) + obj_.original_tagname_ = 'HH_cond_exp' elif nodeName_ == 'expCondSynapse': obj_ = ExpCondSynapse.factory() obj_.build(child_) self.expCondSynapse.append(obj_) + obj_.original_tagname_ = 'expCondSynapse' elif nodeName_ == 'alphaCondSynapse': obj_ = AlphaCondSynapse.factory() obj_.build(child_) self.alphaCondSynapse.append(obj_) + obj_.original_tagname_ = 'alphaCondSynapse' elif nodeName_ == 'expCurrSynapse': obj_ = ExpCurrSynapse.factory() obj_.build(child_) self.expCurrSynapse.append(obj_) + obj_.original_tagname_ = 'expCurrSynapse' elif nodeName_ == 'alphaCurrSynapse': obj_ = AlphaCurrSynapse.factory() obj_.build(child_) self.alphaCurrSynapse.append(obj_) + obj_.original_tagname_ = 'alphaCurrSynapse' elif nodeName_ == 'SpikeSourcePoisson': obj_ = SpikeSourcePoisson.factory() obj_.build(child_) self.SpikeSourcePoisson.append(obj_) + obj_.original_tagname_ = 'SpikeSourcePoisson' elif nodeName_ == 'network': obj_ = Network.factory() obj_.build(child_) self.network.append(obj_) + obj_.original_tagname_ = 'network' elif nodeName_ == 'ComponentType': obj_ = ComponentType.factory() obj_.build(child_) self.ComponentType.append(obj_) + obj_.original_tagname_ = 'ComponentType' super(NeuroMLDocument, self).buildChildren(child_, node, nodeName_, True) # end class NeuroMLDocument @@ -11033,10 +9672,16 @@ class BasePynnSynapse(BaseSynapse): subclass = None superclass = BaseSynapse def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn=None, extensiontype_=None): + self.original_tagname_ = None super(BasePynnSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) self.tau_syn = _cast(float, tau_syn) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BasePynnSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if BasePynnSynapse.subclass: return BasePynnSynapse.subclass(*args_, **kwargs_) else: @@ -11058,13 +9703,15 @@ class BasePynnSynapse(BaseSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BasePynnSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BasePynnSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -11080,26 +9727,13 @@ class BasePynnSynapse(BaseSynapse): outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='BasePynnSynapse', fromsubclass_=False, pretty_print=True): super(BasePynnSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='BasePynnSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.tau_syn is not None and 'tau_syn' not in already_processed: - already_processed.add('tau_syn') - showIndent(outfile, level) - outfile.write('tau_syn=%e,\n' % (self.tau_syn,)) - super(BasePynnSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(BasePynnSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('tau_syn', node) if value is not None and 'tau_syn' not in already_processed: @@ -11122,33 +9756,39 @@ class BasePynnSynapse(BaseSynapse): class basePyNNCell(BaseCell): subclass = None superclass = BaseCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, extensiontype_=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, extensiontype_=None): + self.original_tagname_ = None super(basePyNNCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) - self.tau_syn_I = _cast(float, tau_syn_I) - self.tau_syn_E = _cast(float, tau_syn_E) - self.i_offset = _cast(float, i_offset) self.cm = _cast(float, cm) + self.i_offset = _cast(float, i_offset) + self.tau_syn_E = _cast(float, tau_syn_E) + self.tau_syn_I = _cast(float, tau_syn_I) self.v_init = _cast(float, v_init) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, basePyNNCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if basePyNNCell.subclass: return basePyNNCell.subclass(*args_, **kwargs_) else: return basePyNNCell(*args_, **kwargs_) factory = staticmethod(factory) - def get_tau_syn_I(self): return self.tau_syn_I - def set_tau_syn_I(self, tau_syn_I): self.tau_syn_I = tau_syn_I - def get_tau_syn_E(self): return self.tau_syn_E - def set_tau_syn_E(self, tau_syn_E): self.tau_syn_E = tau_syn_E - def get_i_offset(self): return self.i_offset - def set_i_offset(self, i_offset): self.i_offset = i_offset def get_cm(self): return self.cm def set_cm(self, cm): self.cm = cm - def get_v_init(self): return self.v_init - def set_v_init(self, v_init): self.v_init = v_init - def get_extensiontype_(self): return self.extensiontype_ - def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ - def hasContent_(self): + def get_i_offset(self): return self.i_offset + def set_i_offset(self, i_offset): self.i_offset = i_offset + def get_tau_syn_E(self): return self.tau_syn_E + def set_tau_syn_E(self, tau_syn_E): self.tau_syn_E = tau_syn_E + def get_tau_syn_I(self): return self.tau_syn_I + def set_tau_syn_I(self, tau_syn_I): self.tau_syn_I = tau_syn_I + def get_v_init(self): return self.v_init + def set_v_init(self, v_init): self.v_init = v_init + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def hasContent_(self): if ( super(basePyNNCell, self).hasContent_() ): @@ -11160,31 +9800,33 @@ class basePyNNCell(BaseCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='basePyNNCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='basePyNNCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='basePyNNCell'): super(basePyNNCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='basePyNNCell') - if self.tau_syn_I is not None and 'tau_syn_I' not in already_processed: - already_processed.add('tau_syn_I') - outfile.write(' tau_syn_I="%s"' % self.gds_format_double(self.tau_syn_I, input_name='tau_syn_I')) - if self.tau_syn_E is not None and 'tau_syn_E' not in already_processed: - already_processed.add('tau_syn_E') - outfile.write(' tau_syn_E="%s"' % self.gds_format_double(self.tau_syn_E, input_name='tau_syn_E')) - if self.i_offset is not None and 'i_offset' not in already_processed: - already_processed.add('i_offset') - outfile.write(' i_offset="%s"' % self.gds_format_double(self.i_offset, input_name='i_offset')) if self.cm is not None and 'cm' not in already_processed: already_processed.add('cm') outfile.write(' cm="%s"' % self.gds_format_double(self.cm, input_name='cm')) + if self.i_offset is not None and 'i_offset' not in already_processed: + already_processed.add('i_offset') + outfile.write(' i_offset="%s"' % self.gds_format_double(self.i_offset, input_name='i_offset')) + if self.tau_syn_E is not None and 'tau_syn_E' not in already_processed: + already_processed.add('tau_syn_E') + outfile.write(' tau_syn_E="%s"' % self.gds_format_double(self.tau_syn_E, input_name='tau_syn_E')) + if self.tau_syn_I is not None and 'tau_syn_I' not in already_processed: + already_processed.add('tau_syn_I') + outfile.write(' tau_syn_I="%s"' % self.gds_format_double(self.tau_syn_I, input_name='tau_syn_I')) if self.v_init is not None and 'v_init' not in already_processed: already_processed.add('v_init') outfile.write(' v_init="%s"' % self.gds_format_double(self.v_init, input_name='v_init')) @@ -11194,57 +9836,21 @@ class basePyNNCell(BaseCell): outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='basePyNNCell', fromsubclass_=False, pretty_print=True): super(basePyNNCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='basePyNNCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.tau_syn_I is not None and 'tau_syn_I' not in already_processed: - already_processed.add('tau_syn_I') - showIndent(outfile, level) - outfile.write('tau_syn_I=%e,\n' % (self.tau_syn_I,)) - if self.tau_syn_E is not None and 'tau_syn_E' not in already_processed: - already_processed.add('tau_syn_E') - showIndent(outfile, level) - outfile.write('tau_syn_E=%e,\n' % (self.tau_syn_E,)) - if self.i_offset is not None and 'i_offset' not in already_processed: - already_processed.add('i_offset') - showIndent(outfile, level) - outfile.write('i_offset=%e,\n' % (self.i_offset,)) - if self.cm is not None and 'cm' not in already_processed: - already_processed.add('cm') - showIndent(outfile, level) - outfile.write('cm=%e,\n' % (self.cm,)) - if self.v_init is not None and 'v_init' not in already_processed: - already_processed.add('v_init') - showIndent(outfile, level) - outfile.write('v_init=%e,\n' % (self.v_init,)) - super(basePyNNCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(basePyNNCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('tau_syn_I', node) - if value is not None and 'tau_syn_I' not in already_processed: - already_processed.add('tau_syn_I') - try: - self.tau_syn_I = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (tau_syn_I): %s' % exp) - value = find_attr_value_('tau_syn_E', node) - if value is not None and 'tau_syn_E' not in already_processed: - already_processed.add('tau_syn_E') + value = find_attr_value_('cm', node) + if value is not None and 'cm' not in already_processed: + already_processed.add('cm') try: - self.tau_syn_E = float(value) + self.cm = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (tau_syn_E): %s' % exp) + raise ValueError('Bad float/double attribute (cm): %s' % exp) value = find_attr_value_('i_offset', node) if value is not None and 'i_offset' not in already_processed: already_processed.add('i_offset') @@ -11252,13 +9858,20 @@ class basePyNNCell(BaseCell): self.i_offset = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (i_offset): %s' % exp) - value = find_attr_value_('cm', node) - if value is not None and 'cm' not in already_processed: - already_processed.add('cm') + value = find_attr_value_('tau_syn_E', node) + if value is not None and 'tau_syn_E' not in already_processed: + already_processed.add('tau_syn_E') try: - self.cm = float(value) + self.tau_syn_E = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (cm): %s' % exp) + raise ValueError('Bad float/double attribute (tau_syn_E): %s' % exp) + value = find_attr_value_('tau_syn_I', node) + if value is not None and 'tau_syn_I' not in already_processed: + already_processed.add('tau_syn_I') + try: + self.tau_syn_I = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (tau_syn_I): %s' % exp) value = find_attr_value_('v_init', node) if value is not None and 'v_init' not in already_processed: already_processed.add('v_init') @@ -11280,11 +9893,16 @@ class basePyNNCell(BaseCell): class ConcentrationModel_D(DecayingPoolConcentrationModel): subclass = None superclass = DecayingPoolConcentrationModel - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, shellThickness=None, restingConc=None, decayConstant=None, type_=None): - super(ConcentrationModel_D, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ion, shellThickness, restingConc, decayConstant, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, restingConc=None, decayConstant=None, shellThickness=None, type_=None): + self.original_tagname_ = None + super(ConcentrationModel_D, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ion, restingConc, decayConstant, shellThickness, ) self.type_ = _cast(None, type_) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ConcentrationModel_D) + if subclass is not None: + return subclass(*args_, **kwargs_) if ConcentrationModel_D.subclass: return ConcentrationModel_D.subclass(*args_, **kwargs_) else: @@ -11304,13 +9922,15 @@ class ConcentrationModel_D(DecayingPoolConcentrationModel): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ConcentrationModel_D') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ConcentrationModel_D', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -11319,29 +9939,16 @@ class ConcentrationModel_D(DecayingPoolConcentrationModel): super(ConcentrationModel_D, self).exportAttributes(outfile, level, already_processed, namespace_, name_='ConcentrationModel_D') if self.type_ is not None and 'type_' not in already_processed: already_processed.add('type_') - outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), )) + outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), )) def exportChildren(self, outfile, level, namespace_='', name_='ConcentrationModel_D', fromsubclass_=False, pretty_print=True): super(ConcentrationModel_D, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ConcentrationModel_D'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.type_ is not None and 'type_' not in already_processed: - already_processed.add('type_') - showIndent(outfile, level) - outfile.write('type_="%s",\n' % (self.type_,)) - super(ConcentrationModel_D, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ConcentrationModel_D, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('type', node) if value is not None and 'type' not in already_processed: @@ -11361,13 +9968,19 @@ class Cell(BaseCell): to the id of the biophysicalProperties""" subclass = None superclass = BaseCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, biophysicalProperties_attr=None, morphology_attr=None, morphology=None, biophysicalProperties=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, morphology_attr=None, biophysicalProperties_attr=None, morphology=None, biophysicalProperties=None): + self.original_tagname_ = None super(Cell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) - self.biophysicalProperties_attr = _cast(None, biophysicalProperties_attr) self.morphology_attr = _cast(None, morphology_attr) + self.biophysicalProperties_attr = _cast(None, biophysicalProperties_attr) self.morphology = morphology self.biophysicalProperties = biophysicalProperties def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, Cell) + if subclass is not None: + return subclass(*args_, **kwargs_) if Cell.subclass: return Cell.subclass(*args_, **kwargs_) else: @@ -11377,10 +9990,10 @@ class Cell(BaseCell): def set_morphology(self, morphology): self.morphology = morphology def get_biophysicalProperties(self): return self.biophysicalProperties def set_biophysicalProperties(self, biophysicalProperties): self.biophysicalProperties = biophysicalProperties - def get_biophysicalProperties_attr(self): return self.biophysicalProperties_attr - def set_biophysicalProperties_attr(self, biophysicalProperties_attr): self.biophysicalProperties_attr = biophysicalProperties_attr def get_morphology_attr(self): return self.morphology_attr def set_morphology_attr(self, morphology_attr): self.morphology_attr = morphology_attr + def get_biophysicalProperties_attr(self): return self.biophysicalProperties_attr + def set_biophysicalProperties_attr(self, biophysicalProperties_attr): self.biophysicalProperties_attr = biophysicalProperties_attr def hasContent_(self): if ( self.morphology is not None or @@ -11395,25 +10008,27 @@ class Cell(BaseCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='Cell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='Cell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='Cell'): super(Cell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='Cell') - if self.biophysicalProperties_attr is not None and 'biophysicalProperties_attr' not in already_processed: - already_processed.add('biophysicalProperties_attr') - outfile.write(' biophysicalProperties=%s' % (self.gds_format_string(quote_attrib(self.biophysicalProperties_attr).encode(ExternalEncoding), input_name='biophysicalProperties_attr'), )) if self.morphology_attr is not None and 'morphology_attr' not in already_processed: already_processed.add('morphology_attr') - outfile.write(' morphology=%s' % (self.gds_format_string(quote_attrib(self.morphology_attr).encode(ExternalEncoding), input_name='morphology_attr'), )) + outfile.write(' morphology=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.morphology_attr), input_name='morphology_attr')), )) + if self.biophysicalProperties_attr is not None and 'biophysicalProperties_attr' not in already_processed: + already_processed.add('biophysicalProperties_attr') + outfile.write(' biophysicalProperties=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.biophysicalProperties_attr), input_name='biophysicalProperties_attr')), )) def exportChildren(self, outfile, level, namespace_='', name_='Cell', fromsubclass_=False, pretty_print=True): super(Cell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) if pretty_print: @@ -11424,61 +10039,34 @@ class Cell(BaseCell): self.morphology.export(outfile, level, namespace_, name_='morphology', pretty_print=pretty_print) if self.biophysicalProperties is not None: self.biophysicalProperties.export(outfile, level, namespace_, name_='biophysicalProperties', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='Cell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.biophysicalProperties_attr is not None and 'biophysicalProperties_attr' not in already_processed: - already_processed.add('biophysicalProperties_attr') - showIndent(outfile, level) - outfile.write('biophysicalProperties_attr="%s",\n' % (self.biophysicalProperties_attr,)) - if self.morphology_attr is not None and 'morphology_attr' not in already_processed: - already_processed.add('morphology_attr') - showIndent(outfile, level) - outfile.write('morphology_attr="%s",\n' % (self.morphology_attr,)) - super(Cell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(Cell, self).exportLiteralChildren(outfile, level, name_) - if self.morphology is not None: - showIndent(outfile, level) - outfile.write('morphology=model_.Morphology(\n') - self.morphology.exportLiteral(outfile, level, name_='morphology') - showIndent(outfile, level) - outfile.write('),\n') - if self.biophysicalProperties is not None: - showIndent(outfile, level) - outfile.write('biophysicalProperties=model_.BiophysicalProperties(\n') - self.biophysicalProperties.exportLiteral(outfile, level, name_='biophysicalProperties') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('biophysicalProperties', node) - if value is not None and 'biophysicalProperties_attr' not in already_processed: - already_processed.add('biophysicalProperties_attr') - self.biophysicalProperties_attr = value value = find_attr_value_('morphology', node) if value is not None and 'morphology_attr' not in already_processed: already_processed.add('morphology_attr') self.morphology_attr = value + value = find_attr_value_('biophysicalProperties', node) + if value is not None and 'biophysicalProperties_attr' not in already_processed: + already_processed.add('biophysicalProperties_attr') + self.biophysicalProperties_attr = value super(Cell, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'morphology': obj_ = Morphology.factory() obj_.build(child_) - self.set_morphology(obj_) + self.morphology = obj_ + obj_.original_tagname_ = 'morphology' elif nodeName_ == 'biophysicalProperties': obj_ = BiophysicalProperties.factory() obj_.build(child_) - self.set_biophysicalProperties(obj_) + self.biophysicalProperties = obj_ + obj_.original_tagname_ = 'biophysicalProperties' super(Cell, self).buildChildren(child_, node, nodeName_, True) # end class Cell @@ -11486,63 +10074,88 @@ class Cell(BaseCell): class AdExIaFCell(BaseCell): subclass = None superclass = BaseCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, EL=None, C=None, b=None, refract=None, VT=None, delT=None, a=None, thresh=None, gL=None, tauw=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, C=None, gL=None, EL=None, reset=None, VT=None, thresh=None, delT=None, tauw=None, refract=None, a=None, b=None): + self.original_tagname_ = None super(AdExIaFCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) - self.reset = _cast(None, reset) - self.EL = _cast(None, EL) self.C = _cast(None, C) - self.b = _cast(None, b) - self.refract = _cast(None, refract) + self.gL = _cast(None, gL) + self.EL = _cast(None, EL) + self.reset = _cast(None, reset) self.VT = _cast(None, VT) - self.delT = _cast(None, delT) - self.a = _cast(None, a) self.thresh = _cast(None, thresh) - self.gL = _cast(None, gL) + self.delT = _cast(None, delT) self.tauw = _cast(None, tauw) - pass + self.refract = _cast(None, refract) + self.a = _cast(None, a) + self.b = _cast(None, b) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, AdExIaFCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if AdExIaFCell.subclass: return AdExIaFCell.subclass(*args_, **kwargs_) else: return AdExIaFCell(*args_, **kwargs_) factory = staticmethod(factory) - def get_reset(self): return self.reset - def set_reset(self, reset): self.reset = reset - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass - def get_EL(self): return self.EL - def set_EL(self, EL): self.EL = EL def get_C(self): return self.C def set_C(self, C): self.C = C - def validate_Nml2Quantity_capacitance(self, value): - # Validate type Nml2Quantity_capacitance, a restriction on xs:string. - pass - def get_b(self): return self.b - def set_b(self, b): self.b = b - def validate_Nml2Quantity_current(self, value): - # Validate type Nml2Quantity_current, a restriction on xs:string. - pass - def get_refract(self): return self.refract - def set_refract(self, refract): self.refract = refract - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + def get_gL(self): return self.gL + def set_gL(self, gL): self.gL = gL + def get_EL(self): return self.EL + def set_EL(self, EL): self.EL = EL + def get_reset(self): return self.reset + def set_reset(self, reset): self.reset = reset def get_VT(self): return self.VT def set_VT(self, VT): self.VT = VT + def get_thresh(self): return self.thresh + def set_thresh(self, thresh): self.thresh = thresh def get_delT(self): return self.delT def set_delT(self, delT): self.delT = delT + def get_tauw(self): return self.tauw + def set_tauw(self, tauw): self.tauw = tauw + def get_refract(self): return self.refract + def set_refract(self, refract): self.refract = refract def get_a(self): return self.a def set_a(self, a): self.a = a + def get_b(self): return self.b + def set_b(self, b): self.b = b + def validate_Nml2Quantity_capacitance(self, value): + # Validate type Nml2Quantity_capacitance, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_capacitance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_capacitance_patterns_, )) + validate_Nml2Quantity_capacitance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(F|uF|nF|pF)$']] def validate_Nml2Quantity_conductance(self, value): # Validate type Nml2Quantity_conductance, a restriction on xs:string. - pass - def get_thresh(self): return self.thresh - def set_thresh(self, thresh): self.thresh = thresh - def get_gL(self): return self.gL - def set_gL(self, gL): self.gL = gL - def get_tauw(self): return self.tauw - def set_tauw(self, tauw): self.tauw = tauw + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_conductance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_conductance_patterns_, )) + validate_Nml2Quantity_conductance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(S|mS|uS|nS|pS)$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] + def validate_Nml2Quantity_current(self, value): + # Validate type Nml2Quantity_current, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_current_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_current_patterns_, )) + validate_Nml2Quantity_current_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(A|uA|nA|pA)$']] def hasContent_(self): if ( super(AdExIaFCell, self).hasContent_() @@ -11555,170 +10168,119 @@ class AdExIaFCell(BaseCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='AdExIaFCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='AdExIaFCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='AdExIaFCell'): super(AdExIaFCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='AdExIaFCell') - if self.reset is not None and 'reset' not in already_processed: - already_processed.add('reset') - outfile.write(' reset=%s' % (quote_attrib(self.reset), )) - if self.EL is not None and 'EL' not in already_processed: - already_processed.add('EL') - outfile.write(' EL=%s' % (quote_attrib(self.EL), )) if self.C is not None and 'C' not in already_processed: already_processed.add('C') outfile.write(' C=%s' % (quote_attrib(self.C), )) - if self.b is not None and 'b' not in already_processed: - already_processed.add('b') - outfile.write(' b=%s' % (quote_attrib(self.b), )) - if self.refract is not None and 'refract' not in already_processed: - already_processed.add('refract') - outfile.write(' refract=%s' % (quote_attrib(self.refract), )) + if self.gL is not None and 'gL' not in already_processed: + already_processed.add('gL') + outfile.write(' gL=%s' % (quote_attrib(self.gL), )) + if self.EL is not None and 'EL' not in already_processed: + already_processed.add('EL') + outfile.write(' EL=%s' % (quote_attrib(self.EL), )) + if self.reset is not None and 'reset' not in already_processed: + already_processed.add('reset') + outfile.write(' reset=%s' % (quote_attrib(self.reset), )) if self.VT is not None and 'VT' not in already_processed: already_processed.add('VT') outfile.write(' VT=%s' % (quote_attrib(self.VT), )) - if self.delT is not None and 'delT' not in already_processed: - already_processed.add('delT') - outfile.write(' delT=%s' % (quote_attrib(self.delT), )) - if self.a is not None and 'a' not in already_processed: - already_processed.add('a') - outfile.write(' a=%s' % (quote_attrib(self.a), )) if self.thresh is not None and 'thresh' not in already_processed: already_processed.add('thresh') outfile.write(' thresh=%s' % (quote_attrib(self.thresh), )) - if self.gL is not None and 'gL' not in already_processed: - already_processed.add('gL') - outfile.write(' gL=%s' % (quote_attrib(self.gL), )) + if self.delT is not None and 'delT' not in already_processed: + already_processed.add('delT') + outfile.write(' delT=%s' % (quote_attrib(self.delT), )) if self.tauw is not None and 'tauw' not in already_processed: already_processed.add('tauw') outfile.write(' tauw=%s' % (quote_attrib(self.tauw), )) - def exportChildren(self, outfile, level, namespace_='', name_='AdExIaFCell', fromsubclass_=False, pretty_print=True): - super(AdExIaFCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='AdExIaFCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.reset is not None and 'reset' not in already_processed: - already_processed.add('reset') - showIndent(outfile, level) - outfile.write('reset="%s",\n' % (self.reset,)) - if self.EL is not None and 'EL' not in already_processed: - already_processed.add('EL') - showIndent(outfile, level) - outfile.write('EL="%s",\n' % (self.EL,)) - if self.C is not None and 'C' not in already_processed: - already_processed.add('C') - showIndent(outfile, level) - outfile.write('C="%s",\n' % (self.C,)) - if self.b is not None and 'b' not in already_processed: - already_processed.add('b') - showIndent(outfile, level) - outfile.write('b="%s",\n' % (self.b,)) if self.refract is not None and 'refract' not in already_processed: already_processed.add('refract') - showIndent(outfile, level) - outfile.write('refract="%s",\n' % (self.refract,)) - if self.VT is not None and 'VT' not in already_processed: - already_processed.add('VT') - showIndent(outfile, level) - outfile.write('VT="%s",\n' % (self.VT,)) - if self.delT is not None and 'delT' not in already_processed: - already_processed.add('delT') - showIndent(outfile, level) - outfile.write('delT="%s",\n' % (self.delT,)) + outfile.write(' refract=%s' % (quote_attrib(self.refract), )) if self.a is not None and 'a' not in already_processed: already_processed.add('a') - showIndent(outfile, level) - outfile.write('a="%s",\n' % (self.a,)) - if self.thresh is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - showIndent(outfile, level) - outfile.write('thresh="%s",\n' % (self.thresh,)) - if self.gL is not None and 'gL' not in already_processed: - already_processed.add('gL') - showIndent(outfile, level) - outfile.write('gL="%s",\n' % (self.gL,)) - if self.tauw is not None and 'tauw' not in already_processed: - already_processed.add('tauw') - showIndent(outfile, level) - outfile.write('tauw="%s",\n' % (self.tauw,)) - super(AdExIaFCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(AdExIaFCell, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' a=%s' % (quote_attrib(self.a), )) + if self.b is not None and 'b' not in already_processed: + already_processed.add('b') + outfile.write(' b=%s' % (quote_attrib(self.b), )) + def exportChildren(self, outfile, level, namespace_='', name_='AdExIaFCell', fromsubclass_=False, pretty_print=True): + super(AdExIaFCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('reset', node) - if value is not None and 'reset' not in already_processed: - already_processed.add('reset') - self.reset = value - self.validate_Nml2Quantity_voltage(self.reset) # validate type Nml2Quantity_voltage - value = find_attr_value_('EL', node) - if value is not None and 'EL' not in already_processed: - already_processed.add('EL') - self.EL = value - self.validate_Nml2Quantity_voltage(self.EL) # validate type Nml2Quantity_voltage value = find_attr_value_('C', node) if value is not None and 'C' not in already_processed: already_processed.add('C') self.C = value self.validate_Nml2Quantity_capacitance(self.C) # validate type Nml2Quantity_capacitance - value = find_attr_value_('b', node) - if value is not None and 'b' not in already_processed: - already_processed.add('b') - self.b = value - self.validate_Nml2Quantity_current(self.b) # validate type Nml2Quantity_current - value = find_attr_value_('refract', node) - if value is not None and 'refract' not in already_processed: - already_processed.add('refract') - self.refract = value - self.validate_Nml2Quantity_time(self.refract) # validate type Nml2Quantity_time + value = find_attr_value_('gL', node) + if value is not None and 'gL' not in already_processed: + already_processed.add('gL') + self.gL = value + self.validate_Nml2Quantity_conductance(self.gL) # validate type Nml2Quantity_conductance + value = find_attr_value_('EL', node) + if value is not None and 'EL' not in already_processed: + already_processed.add('EL') + self.EL = value + self.validate_Nml2Quantity_voltage(self.EL) # validate type Nml2Quantity_voltage + value = find_attr_value_('reset', node) + if value is not None and 'reset' not in already_processed: + already_processed.add('reset') + self.reset = value + self.validate_Nml2Quantity_voltage(self.reset) # validate type Nml2Quantity_voltage value = find_attr_value_('VT', node) if value is not None and 'VT' not in already_processed: already_processed.add('VT') self.VT = value self.validate_Nml2Quantity_voltage(self.VT) # validate type Nml2Quantity_voltage - value = find_attr_value_('delT', node) - if value is not None and 'delT' not in already_processed: - already_processed.add('delT') - self.delT = value - self.validate_Nml2Quantity_voltage(self.delT) # validate type Nml2Quantity_voltage - value = find_attr_value_('a', node) - if value is not None and 'a' not in already_processed: - already_processed.add('a') - self.a = value - self.validate_Nml2Quantity_conductance(self.a) # validate type Nml2Quantity_conductance value = find_attr_value_('thresh', node) if value is not None and 'thresh' not in already_processed: already_processed.add('thresh') self.thresh = value self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage - value = find_attr_value_('gL', node) - if value is not None and 'gL' not in already_processed: - already_processed.add('gL') - self.gL = value - self.validate_Nml2Quantity_conductance(self.gL) # validate type Nml2Quantity_conductance + value = find_attr_value_('delT', node) + if value is not None and 'delT' not in already_processed: + already_processed.add('delT') + self.delT = value + self.validate_Nml2Quantity_voltage(self.delT) # validate type Nml2Quantity_voltage value = find_attr_value_('tauw', node) if value is not None and 'tauw' not in already_processed: already_processed.add('tauw') self.tauw = value self.validate_Nml2Quantity_time(self.tauw) # validate type Nml2Quantity_time + value = find_attr_value_('refract', node) + if value is not None and 'refract' not in already_processed: + already_processed.add('refract') + self.refract = value + self.validate_Nml2Quantity_time(self.refract) # validate type Nml2Quantity_time + value = find_attr_value_('a', node) + if value is not None and 'a' not in already_processed: + already_processed.add('a') + self.a = value + self.validate_Nml2Quantity_conductance(self.a) # validate type Nml2Quantity_conductance + value = find_attr_value_('b', node) + if value is not None and 'b' not in already_processed: + already_processed.add('b') + self.b = value + self.validate_Nml2Quantity_current(self.b) # validate type Nml2Quantity_current super(AdExIaFCell, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(AdExIaFCell, self).buildChildren(child_, node, nodeName_, True) @@ -11729,39 +10291,52 @@ class AdExIaFCell(BaseCell): class IzhikevichCell(BaseCell): subclass = None superclass = BaseCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, a=None, c=None, b=None, d=None, v0=None, thresh=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, v0=None, thresh=None, a=None, b=None, c=None, d=None): + self.original_tagname_ = None super(IzhikevichCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ) + self.v0 = _cast(None, v0) + self.thresh = _cast(None, thresh) self.a = _cast(None, a) - self.c = _cast(None, c) self.b = _cast(None, b) + self.c = _cast(None, c) self.d = _cast(None, d) - self.v0 = _cast(None, v0) - self.thresh = _cast(None, thresh) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IzhikevichCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if IzhikevichCell.subclass: return IzhikevichCell.subclass(*args_, **kwargs_) else: return IzhikevichCell(*args_, **kwargs_) factory = staticmethod(factory) + def get_v0(self): return self.v0 + def set_v0(self, v0): self.v0 = v0 + def get_thresh(self): return self.thresh + def set_thresh(self, thresh): self.thresh = thresh def get_a(self): return self.a def set_a(self, a): self.a = a - def validate_Nml2Quantity_none(self, value): - # Validate type Nml2Quantity_none, a restriction on xs:string. - pass - def get_c(self): return self.c - def set_c(self, c): self.c = c def get_b(self): return self.b def set_b(self, b): self.b = b + def get_c(self): return self.c + def set_c(self, c): self.c = c def get_d(self): return self.d def set_d(self, d): self.d = d - def get_v0(self): return self.v0 - def set_v0(self, v0): self.v0 = v0 def validate_Nml2Quantity_voltage(self, value): # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass - def get_thresh(self): return self.thresh - def set_thresh(self, thresh): self.thresh = thresh + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] + def validate_Nml2Quantity_none(self, value): + # Validate type Nml2Quantity_none, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_none_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_none_patterns_, )) + validate_Nml2Quantity_none_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?$']] def hasContent_(self): if ( super(IzhikevichCell, self).hasContent_() @@ -11774,110 +10349,79 @@ class IzhikevichCell(BaseCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IzhikevichCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IzhikevichCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='IzhikevichCell'): super(IzhikevichCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IzhikevichCell') - if self.a is not None and 'a' not in already_processed: - already_processed.add('a') - outfile.write(' a=%s' % (quote_attrib(self.a), )) - if self.c is not None and 'c' not in already_processed: - already_processed.add('c') - outfile.write(' c=%s' % (quote_attrib(self.c), )) - if self.b is not None and 'b' not in already_processed: - already_processed.add('b') - outfile.write(' b=%s' % (quote_attrib(self.b), )) - if self.d is not None and 'd' not in already_processed: - already_processed.add('d') - outfile.write(' d=%s' % (quote_attrib(self.d), )) if self.v0 is not None and 'v0' not in already_processed: already_processed.add('v0') outfile.write(' v0=%s' % (quote_attrib(self.v0), )) if self.thresh is not None and 'thresh' not in already_processed: already_processed.add('thresh') outfile.write(' thresh=%s' % (quote_attrib(self.thresh), )) - def exportChildren(self, outfile, level, namespace_='', name_='IzhikevichCell', fromsubclass_=False, pretty_print=True): - super(IzhikevichCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IzhikevichCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.a is not None and 'a' not in already_processed: already_processed.add('a') - showIndent(outfile, level) - outfile.write('a="%s",\n' % (self.a,)) - if self.c is not None and 'c' not in already_processed: - already_processed.add('c') - showIndent(outfile, level) - outfile.write('c="%s",\n' % (self.c,)) + outfile.write(' a=%s' % (quote_attrib(self.a), )) if self.b is not None and 'b' not in already_processed: already_processed.add('b') - showIndent(outfile, level) - outfile.write('b="%s",\n' % (self.b,)) + outfile.write(' b=%s' % (quote_attrib(self.b), )) + if self.c is not None and 'c' not in already_processed: + already_processed.add('c') + outfile.write(' c=%s' % (quote_attrib(self.c), )) if self.d is not None and 'd' not in already_processed: already_processed.add('d') - showIndent(outfile, level) - outfile.write('d="%s",\n' % (self.d,)) - if self.v0 is not None and 'v0' not in already_processed: - already_processed.add('v0') - showIndent(outfile, level) - outfile.write('v0="%s",\n' % (self.v0,)) - if self.thresh is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - showIndent(outfile, level) - outfile.write('thresh="%s",\n' % (self.thresh,)) - super(IzhikevichCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IzhikevichCell, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' d=%s' % (quote_attrib(self.d), )) + def exportChildren(self, outfile, level, namespace_='', name_='IzhikevichCell', fromsubclass_=False, pretty_print=True): + super(IzhikevichCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('v0', node) + if value is not None and 'v0' not in already_processed: + already_processed.add('v0') + self.v0 = value + self.validate_Nml2Quantity_voltage(self.v0) # validate type Nml2Quantity_voltage + value = find_attr_value_('thresh', node) + if value is not None and 'thresh' not in already_processed: + already_processed.add('thresh') + self.thresh = value + self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage value = find_attr_value_('a', node) if value is not None and 'a' not in already_processed: already_processed.add('a') self.a = value self.validate_Nml2Quantity_none(self.a) # validate type Nml2Quantity_none - value = find_attr_value_('c', node) - if value is not None and 'c' not in already_processed: - already_processed.add('c') - self.c = value - self.validate_Nml2Quantity_none(self.c) # validate type Nml2Quantity_none value = find_attr_value_('b', node) if value is not None and 'b' not in already_processed: already_processed.add('b') self.b = value self.validate_Nml2Quantity_none(self.b) # validate type Nml2Quantity_none + value = find_attr_value_('c', node) + if value is not None and 'c' not in already_processed: + already_processed.add('c') + self.c = value + self.validate_Nml2Quantity_none(self.c) # validate type Nml2Quantity_none value = find_attr_value_('d', node) if value is not None and 'd' not in already_processed: already_processed.add('d') self.d = value self.validate_Nml2Quantity_none(self.d) # validate type Nml2Quantity_none - value = find_attr_value_('v0', node) - if value is not None and 'v0' not in already_processed: - already_processed.add('v0') - self.v0 = value - self.validate_Nml2Quantity_voltage(self.v0) # validate type Nml2Quantity_voltage - value = find_attr_value_('thresh', node) - if value is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - self.thresh = value - self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage super(IzhikevichCell, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(IzhikevichCell, self).buildChildren(child_, node, nodeName_, True) @@ -11888,41 +10432,59 @@ class IzhikevichCell(BaseCell): class IaFCell(BaseCell): subclass = None superclass = BaseCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, C=None, thresh=None, leakConductance=None, leakReversal=None, extensiontype_=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, C=None, leakConductance=None, extensiontype_=None): + self.original_tagname_ = None super(IaFCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) + self.leakReversal = _cast(None, leakReversal) + self.thresh = _cast(None, thresh) self.reset = _cast(None, reset) self.C = _cast(None, C) - self.thresh = _cast(None, thresh) self.leakConductance = _cast(None, leakConductance) - self.leakReversal = _cast(None, leakReversal) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IaFCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if IaFCell.subclass: return IaFCell.subclass(*args_, **kwargs_) else: return IaFCell(*args_, **kwargs_) factory = staticmethod(factory) - def get_reset(self): return self.reset - def set_reset(self, reset): self.reset = reset - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass - def get_C(self): return self.C - def set_C(self, C): self.C = C - def validate_Nml2Quantity_capacitance(self, value): - # Validate type Nml2Quantity_capacitance, a restriction on xs:string. - pass + def get_leakReversal(self): return self.leakReversal + def set_leakReversal(self, leakReversal): self.leakReversal = leakReversal def get_thresh(self): return self.thresh def set_thresh(self, thresh): self.thresh = thresh + def get_reset(self): return self.reset + def set_reset(self, reset): self.reset = reset + def get_C(self): return self.C + def set_C(self, C): self.C = C def get_leakConductance(self): return self.leakConductance def set_leakConductance(self, leakConductance): self.leakConductance = leakConductance - def validate_Nml2Quantity_conductance(self, value): - # Validate type Nml2Quantity_conductance, a restriction on xs:string. - pass - def get_leakReversal(self): return self.leakReversal - def set_leakReversal(self, leakReversal): self.leakReversal = leakReversal def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] + def validate_Nml2Quantity_capacitance(self, value): + # Validate type Nml2Quantity_capacitance, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_capacitance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_capacitance_patterns_, )) + validate_Nml2Quantity_capacitance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(F|uF|nF|pF)$']] + def validate_Nml2Quantity_conductance(self, value): + # Validate type Nml2Quantity_conductance, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_conductance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_conductance_patterns_, )) + validate_Nml2Quantity_conductance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(S|mS|uS|nS|pS)$']] def hasContent_(self): if ( super(IaFCell, self).hasContent_() @@ -11935,77 +10497,60 @@ class IaFCell(BaseCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IaFCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IaFCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='IaFCell'): super(IaFCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IaFCell') + if self.leakReversal is not None and 'leakReversal' not in already_processed: + already_processed.add('leakReversal') + outfile.write(' leakReversal=%s' % (quote_attrib(self.leakReversal), )) + if self.thresh is not None and 'thresh' not in already_processed: + already_processed.add('thresh') + outfile.write(' thresh=%s' % (quote_attrib(self.thresh), )) if self.reset is not None and 'reset' not in already_processed: already_processed.add('reset') outfile.write(' reset=%s' % (quote_attrib(self.reset), )) if self.C is not None and 'C' not in already_processed: already_processed.add('C') outfile.write(' C=%s' % (quote_attrib(self.C), )) - if self.thresh is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - outfile.write(' thresh=%s' % (quote_attrib(self.thresh), )) if self.leakConductance is not None and 'leakConductance' not in already_processed: already_processed.add('leakConductance') outfile.write(' leakConductance=%s' % (quote_attrib(self.leakConductance), )) - if self.leakReversal is not None and 'leakReversal' not in already_processed: - already_processed.add('leakReversal') - outfile.write(' leakReversal=%s' % (quote_attrib(self.leakReversal), )) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='IaFCell', fromsubclass_=False, pretty_print=True): super(IaFCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IaFCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.reset is not None and 'reset' not in already_processed: - already_processed.add('reset') - showIndent(outfile, level) - outfile.write('reset="%s",\n' % (self.reset,)) - if self.C is not None and 'C' not in already_processed: - already_processed.add('C') - showIndent(outfile, level) - outfile.write('C="%s",\n' % (self.C,)) - if self.thresh is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - showIndent(outfile, level) - outfile.write('thresh="%s",\n' % (self.thresh,)) - if self.leakConductance is not None and 'leakConductance' not in already_processed: - already_processed.add('leakConductance') - showIndent(outfile, level) - outfile.write('leakConductance="%s",\n' % (self.leakConductance,)) - if self.leakReversal is not None and 'leakReversal' not in already_processed: - already_processed.add('leakReversal') - showIndent(outfile, level) - outfile.write('leakReversal="%s",\n' % (self.leakReversal,)) - super(IaFCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IaFCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('leakReversal', node) + if value is not None and 'leakReversal' not in already_processed: + already_processed.add('leakReversal') + self.leakReversal = value + self.validate_Nml2Quantity_voltage(self.leakReversal) # validate type Nml2Quantity_voltage + value = find_attr_value_('thresh', node) + if value is not None and 'thresh' not in already_processed: + already_processed.add('thresh') + self.thresh = value + self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage value = find_attr_value_('reset', node) if value is not None and 'reset' not in already_processed: already_processed.add('reset') @@ -12016,21 +10561,11 @@ class IaFCell(BaseCell): already_processed.add('C') self.C = value self.validate_Nml2Quantity_capacitance(self.C) # validate type Nml2Quantity_capacitance - value = find_attr_value_('thresh', node) - if value is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - self.thresh = value - self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage value = find_attr_value_('leakConductance', node) if value is not None and 'leakConductance' not in already_processed: already_processed.add('leakConductance') self.leakConductance = value self.validate_Nml2Quantity_conductance(self.leakConductance) # validate type Nml2Quantity_conductance - value = find_attr_value_('leakReversal', node) - if value is not None and 'leakReversal' not in already_processed: - already_processed.add('leakReversal') - self.leakReversal = value - self.validate_Nml2Quantity_voltage(self.leakReversal) # validate type Nml2Quantity_voltage value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -12045,35 +10580,49 @@ class IaFCell(BaseCell): class IaFTauCell(BaseCell): subclass = None superclass = BaseCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, tau=None, thresh=None, leakReversal=None, extensiontype_=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, tau=None, extensiontype_=None): + self.original_tagname_ = None super(IaFTauCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) + self.leakReversal = _cast(None, leakReversal) + self.thresh = _cast(None, thresh) self.reset = _cast(None, reset) self.tau = _cast(None, tau) - self.thresh = _cast(None, thresh) - self.leakReversal = _cast(None, leakReversal) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IaFTauCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if IaFTauCell.subclass: return IaFTauCell.subclass(*args_, **kwargs_) else: return IaFTauCell(*args_, **kwargs_) factory = staticmethod(factory) + def get_leakReversal(self): return self.leakReversal + def set_leakReversal(self, leakReversal): self.leakReversal = leakReversal + def get_thresh(self): return self.thresh + def set_thresh(self, thresh): self.thresh = thresh def get_reset(self): return self.reset def set_reset(self, reset): self.reset = reset - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass def get_tau(self): return self.tau def set_tau(self, tau): self.tau = tau - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass - def get_thresh(self): return self.thresh - def set_thresh(self, thresh): self.thresh = thresh - def get_leakReversal(self): return self.leakReversal - def set_leakReversal(self, leakReversal): self.leakReversal = leakReversal def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(IaFTauCell, self).hasContent_() @@ -12086,70 +10635,57 @@ class IaFTauCell(BaseCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IaFTauCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IaFTauCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='IaFTauCell'): super(IaFTauCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IaFTauCell') + if self.leakReversal is not None and 'leakReversal' not in already_processed: + already_processed.add('leakReversal') + outfile.write(' leakReversal=%s' % (quote_attrib(self.leakReversal), )) + if self.thresh is not None and 'thresh' not in already_processed: + already_processed.add('thresh') + outfile.write(' thresh=%s' % (quote_attrib(self.thresh), )) if self.reset is not None and 'reset' not in already_processed: already_processed.add('reset') outfile.write(' reset=%s' % (quote_attrib(self.reset), )) if self.tau is not None and 'tau' not in already_processed: already_processed.add('tau') outfile.write(' tau=%s' % (quote_attrib(self.tau), )) - if self.thresh is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - outfile.write(' thresh=%s' % (quote_attrib(self.thresh), )) - if self.leakReversal is not None and 'leakReversal' not in already_processed: - already_processed.add('leakReversal') - outfile.write(' leakReversal=%s' % (quote_attrib(self.leakReversal), )) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='IaFTauCell', fromsubclass_=False, pretty_print=True): super(IaFTauCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IaFTauCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.reset is not None and 'reset' not in already_processed: - already_processed.add('reset') - showIndent(outfile, level) - outfile.write('reset="%s",\n' % (self.reset,)) - if self.tau is not None and 'tau' not in already_processed: - already_processed.add('tau') - showIndent(outfile, level) - outfile.write('tau="%s",\n' % (self.tau,)) - if self.thresh is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - showIndent(outfile, level) - outfile.write('thresh="%s",\n' % (self.thresh,)) - if self.leakReversal is not None and 'leakReversal' not in already_processed: - already_processed.add('leakReversal') - showIndent(outfile, level) - outfile.write('leakReversal="%s",\n' % (self.leakReversal,)) - super(IaFTauCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IaFTauCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('leakReversal', node) + if value is not None and 'leakReversal' not in already_processed: + already_processed.add('leakReversal') + self.leakReversal = value + self.validate_Nml2Quantity_voltage(self.leakReversal) # validate type Nml2Quantity_voltage + value = find_attr_value_('thresh', node) + if value is not None and 'thresh' not in already_processed: + already_processed.add('thresh') + self.thresh = value + self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage value = find_attr_value_('reset', node) if value is not None and 'reset' not in already_processed: already_processed.add('reset') @@ -12160,16 +10696,6 @@ class IaFTauCell(BaseCell): already_processed.add('tau') self.tau = value self.validate_Nml2Quantity_time(self.tau) # validate type Nml2Quantity_time - value = find_attr_value_('thresh', node) - if value is not None and 'thresh' not in already_processed: - already_processed.add('thresh') - self.thresh = value - self.validate_Nml2Quantity_voltage(self.thresh) # validate type Nml2Quantity_voltage - value = find_attr_value_('leakReversal', node) - if value is not None and 'leakReversal' not in already_processed: - already_processed.add('leakReversal') - self.leakReversal = value - self.validate_Nml2Quantity_voltage(self.leakReversal) # validate type Nml2Quantity_voltage value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -12184,29 +10710,43 @@ class IaFTauCell(BaseCell): class BaseConductanceBasedSynapse(BaseSynapse): subclass = None superclass = BaseSynapse - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, extensiontype_=None): + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, extensiontype_=None): + self.original_tagname_ = None super(BaseConductanceBasedSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extensiontype_, ) - self.erev = _cast(None, erev) self.gbase = _cast(None, gbase) + self.erev = _cast(None, erev) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BaseConductanceBasedSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if BaseConductanceBasedSynapse.subclass: return BaseConductanceBasedSynapse.subclass(*args_, **kwargs_) else: return BaseConductanceBasedSynapse(*args_, **kwargs_) factory = staticmethod(factory) - def get_erev(self): return self.erev - def set_erev(self, erev): self.erev = erev - def validate_Nml2Quantity_voltage(self, value): - # Validate type Nml2Quantity_voltage, a restriction on xs:string. - pass def get_gbase(self): return self.gbase def set_gbase(self, gbase): self.gbase = gbase - def validate_Nml2Quantity_conductance(self, value): - # Validate type Nml2Quantity_conductance, a restriction on xs:string. - pass + def get_erev(self): return self.erev + def set_erev(self, erev): self.erev = erev def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_Nml2Quantity_conductance(self, value): + # Validate type Nml2Quantity_conductance, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_conductance_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_conductance_patterns_, )) + validate_Nml2Quantity_conductance_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(S|mS|uS|nS|pS)$']] + def validate_Nml2Quantity_voltage(self, value): + # Validate type Nml2Quantity_voltage, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_voltage_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_voltage_patterns_, )) + validate_Nml2Quantity_voltage_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(V|mV)$']] def hasContent_(self): if ( super(BaseConductanceBasedSynapse, self).hasContent_() @@ -12219,66 +10759,51 @@ class BaseConductanceBasedSynapse(BaseSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BaseConductanceBasedSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BaseConductanceBasedSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='BaseConductanceBasedSynapse'): super(BaseConductanceBasedSynapse, self).exportAttributes(outfile, level, already_processed, namespace_, name_='BaseConductanceBasedSynapse') - if self.erev is not None and 'erev' not in already_processed: - already_processed.add('erev') - outfile.write(' erev=%s' % (quote_attrib(self.erev), )) if self.gbase is not None and 'gbase' not in already_processed: already_processed.add('gbase') outfile.write(' gbase=%s' % (quote_attrib(self.gbase), )) + if self.erev is not None and 'erev' not in already_processed: + already_processed.add('erev') + outfile.write(' erev=%s' % (quote_attrib(self.erev), )) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='BaseConductanceBasedSynapse', fromsubclass_=False, pretty_print=True): super(BaseConductanceBasedSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='BaseConductanceBasedSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.erev is not None and 'erev' not in already_processed: - already_processed.add('erev') - showIndent(outfile, level) - outfile.write('erev="%s",\n' % (self.erev,)) - if self.gbase is not None and 'gbase' not in already_processed: - already_processed.add('gbase') - showIndent(outfile, level) - outfile.write('gbase="%s",\n' % (self.gbase,)) - super(BaseConductanceBasedSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(BaseConductanceBasedSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('erev', node) - if value is not None and 'erev' not in already_processed: - already_processed.add('erev') - self.erev = value - self.validate_Nml2Quantity_voltage(self.erev) # validate type Nml2Quantity_voltage value = find_attr_value_('gbase', node) if value is not None and 'gbase' not in already_processed: already_processed.add('gbase') self.gbase = value self.validate_Nml2Quantity_conductance(self.gbase) # validate type Nml2Quantity_conductance + value = find_attr_value_('erev', node) + if value is not None and 'erev' not in already_processed: + already_processed.add('erev') + self.erev = value + self.validate_Nml2Quantity_voltage(self.erev) # validate type Nml2Quantity_voltage value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -12294,9 +10819,14 @@ class AlphaCurrSynapse(BasePynnSynapse): subclass = None superclass = BasePynnSynapse def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn=None): + self.original_tagname_ = None super(AlphaCurrSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn, ) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, AlphaCurrSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if AlphaCurrSynapse.subclass: return AlphaCurrSynapse.subclass(*args_, **kwargs_) else: @@ -12314,13 +10844,15 @@ class AlphaCurrSynapse(BasePynnSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='AlphaCurrSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='AlphaCurrSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -12329,22 +10861,13 @@ class AlphaCurrSynapse(BasePynnSynapse): super(AlphaCurrSynapse, self).exportAttributes(outfile, level, already_processed, namespace_, name_='AlphaCurrSynapse') def exportChildren(self, outfile, level, namespace_='', name_='AlphaCurrSynapse', fromsubclass_=False, pretty_print=True): super(AlphaCurrSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='AlphaCurrSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(AlphaCurrSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(AlphaCurrSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(AlphaCurrSynapse, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -12357,9 +10880,14 @@ class ExpCurrSynapse(BasePynnSynapse): subclass = None superclass = BasePynnSynapse def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn=None): + self.original_tagname_ = None super(ExpCurrSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn, ) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExpCurrSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExpCurrSynapse.subclass: return ExpCurrSynapse.subclass(*args_, **kwargs_) else: @@ -12377,13 +10905,15 @@ class ExpCurrSynapse(BasePynnSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExpCurrSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExpCurrSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -12392,22 +10922,13 @@ class ExpCurrSynapse(BasePynnSynapse): super(ExpCurrSynapse, self).exportAttributes(outfile, level, already_processed, namespace_, name_='ExpCurrSynapse') def exportChildren(self, outfile, level, namespace_='', name_='ExpCurrSynapse', fromsubclass_=False, pretty_print=True): super(ExpCurrSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ExpCurrSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(ExpCurrSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ExpCurrSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(ExpCurrSynapse, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -12420,10 +10941,15 @@ class AlphaCondSynapse(BasePynnSynapse): subclass = None superclass = BasePynnSynapse def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn=None, e_rev=None): + self.original_tagname_ = None super(AlphaCondSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn, ) self.e_rev = _cast(float, e_rev) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, AlphaCondSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if AlphaCondSynapse.subclass: return AlphaCondSynapse.subclass(*args_, **kwargs_) else: @@ -12443,13 +10969,15 @@ class AlphaCondSynapse(BasePynnSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='AlphaCondSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='AlphaCondSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -12461,26 +10989,13 @@ class AlphaCondSynapse(BasePynnSynapse): outfile.write(' e_rev="%s"' % self.gds_format_double(self.e_rev, input_name='e_rev')) def exportChildren(self, outfile, level, namespace_='', name_='AlphaCondSynapse', fromsubclass_=False, pretty_print=True): super(AlphaCondSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='AlphaCondSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.e_rev is not None and 'e_rev' not in already_processed: - already_processed.add('e_rev') - showIndent(outfile, level) - outfile.write('e_rev=%e,\n' % (self.e_rev,)) - super(AlphaCondSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(AlphaCondSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('e_rev', node) if value is not None and 'e_rev' not in already_processed: @@ -12500,10 +11015,15 @@ class ExpCondSynapse(BasePynnSynapse): subclass = None superclass = BasePynnSynapse def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn=None, e_rev=None): + self.original_tagname_ = None super(ExpCondSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn, ) self.e_rev = _cast(float, e_rev) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExpCondSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExpCondSynapse.subclass: return ExpCondSynapse.subclass(*args_, **kwargs_) else: @@ -12523,13 +11043,15 @@ class ExpCondSynapse(BasePynnSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExpCondSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExpCondSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -12541,26 +11063,13 @@ class ExpCondSynapse(BasePynnSynapse): outfile.write(' e_rev="%s"' % self.gds_format_double(self.e_rev, input_name='e_rev')) def exportChildren(self, outfile, level, namespace_='', name_='ExpCondSynapse', fromsubclass_=False, pretty_print=True): super(ExpCondSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ExpCondSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.e_rev is not None and 'e_rev' not in already_processed: - already_processed.add('e_rev') - showIndent(outfile, level) - outfile.write('e_rev=%e,\n' % (self.e_rev,)) - super(ExpCondSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ExpCondSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('e_rev', node) if value is not None and 'e_rev' not in already_processed: @@ -12579,40 +11088,45 @@ class ExpCondSynapse(BasePynnSynapse): class HH_cond_exp(basePyNNCell): subclass = None superclass = basePyNNCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, gbar_K=None, e_rev_E=None, g_leak=None, e_rev_Na=None, e_rev_I=None, e_rev_K=None, e_rev_leak=None, v_offset=None, gbar_Na=None): - super(HH_cond_exp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, ) - self.gbar_K = _cast(float, gbar_K) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, v_offset=None, e_rev_E=None, e_rev_I=None, e_rev_K=None, e_rev_Na=None, e_rev_leak=None, g_leak=None, gbar_K=None, gbar_Na=None): + self.original_tagname_ = None + super(HH_cond_exp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, ) + self.v_offset = _cast(float, v_offset) self.e_rev_E = _cast(float, e_rev_E) - self.g_leak = _cast(float, g_leak) - self.e_rev_Na = _cast(float, e_rev_Na) self.e_rev_I = _cast(float, e_rev_I) self.e_rev_K = _cast(float, e_rev_K) + self.e_rev_Na = _cast(float, e_rev_Na) self.e_rev_leak = _cast(float, e_rev_leak) - self.v_offset = _cast(float, v_offset) + self.g_leak = _cast(float, g_leak) + self.gbar_K = _cast(float, gbar_K) self.gbar_Na = _cast(float, gbar_Na) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, HH_cond_exp) + if subclass is not None: + return subclass(*args_, **kwargs_) if HH_cond_exp.subclass: return HH_cond_exp.subclass(*args_, **kwargs_) else: return HH_cond_exp(*args_, **kwargs_) factory = staticmethod(factory) - def get_gbar_K(self): return self.gbar_K - def set_gbar_K(self, gbar_K): self.gbar_K = gbar_K + def get_v_offset(self): return self.v_offset + def set_v_offset(self, v_offset): self.v_offset = v_offset def get_e_rev_E(self): return self.e_rev_E def set_e_rev_E(self, e_rev_E): self.e_rev_E = e_rev_E - def get_g_leak(self): return self.g_leak - def set_g_leak(self, g_leak): self.g_leak = g_leak - def get_e_rev_Na(self): return self.e_rev_Na - def set_e_rev_Na(self, e_rev_Na): self.e_rev_Na = e_rev_Na def get_e_rev_I(self): return self.e_rev_I def set_e_rev_I(self, e_rev_I): self.e_rev_I = e_rev_I def get_e_rev_K(self): return self.e_rev_K def set_e_rev_K(self, e_rev_K): self.e_rev_K = e_rev_K + def get_e_rev_Na(self): return self.e_rev_Na + def set_e_rev_Na(self, e_rev_Na): self.e_rev_Na = e_rev_Na def get_e_rev_leak(self): return self.e_rev_leak def set_e_rev_leak(self, e_rev_leak): self.e_rev_leak = e_rev_leak - def get_v_offset(self): return self.v_offset - def set_v_offset(self, v_offset): self.v_offset = v_offset + def get_g_leak(self): return self.g_leak + def set_g_leak(self, g_leak): self.g_leak = g_leak + def get_gbar_K(self): return self.gbar_K + def set_gbar_K(self, gbar_K): self.gbar_K = gbar_K def get_gbar_Na(self): return self.gbar_Na def set_gbar_Na(self, gbar_Na): self.gbar_Na = gbar_Na def hasContent_(self): @@ -12627,108 +11141,65 @@ class HH_cond_exp(basePyNNCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='HH_cond_exp') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='HH_cond_exp', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='HH_cond_exp'): super(HH_cond_exp, self).exportAttributes(outfile, level, already_processed, namespace_, name_='HH_cond_exp') - if self.gbar_K is not None and 'gbar_K' not in already_processed: - already_processed.add('gbar_K') - outfile.write(' gbar_K="%s"' % self.gds_format_double(self.gbar_K, input_name='gbar_K')) - if self.e_rev_E is not None and 'e_rev_E' not in already_processed: - already_processed.add('e_rev_E') - outfile.write(' e_rev_E="%s"' % self.gds_format_double(self.e_rev_E, input_name='e_rev_E')) - if self.g_leak is not None and 'g_leak' not in already_processed: - already_processed.add('g_leak') - outfile.write(' g_leak="%s"' % self.gds_format_double(self.g_leak, input_name='g_leak')) - if self.e_rev_Na is not None and 'e_rev_Na' not in already_processed: - already_processed.add('e_rev_Na') - outfile.write(' e_rev_Na="%s"' % self.gds_format_double(self.e_rev_Na, input_name='e_rev_Na')) - if self.e_rev_I is not None and 'e_rev_I' not in already_processed: - already_processed.add('e_rev_I') - outfile.write(' e_rev_I="%s"' % self.gds_format_double(self.e_rev_I, input_name='e_rev_I')) - if self.e_rev_K is not None and 'e_rev_K' not in already_processed: - already_processed.add('e_rev_K') - outfile.write(' e_rev_K="%s"' % self.gds_format_double(self.e_rev_K, input_name='e_rev_K')) - if self.e_rev_leak is not None and 'e_rev_leak' not in already_processed: - already_processed.add('e_rev_leak') - outfile.write(' e_rev_leak="%s"' % self.gds_format_double(self.e_rev_leak, input_name='e_rev_leak')) if self.v_offset is not None and 'v_offset' not in already_processed: already_processed.add('v_offset') outfile.write(' v_offset="%s"' % self.gds_format_double(self.v_offset, input_name='v_offset')) - if self.gbar_Na is not None and 'gbar_Na' not in already_processed: - already_processed.add('gbar_Na') - outfile.write(' gbar_Na="%s"' % self.gds_format_double(self.gbar_Na, input_name='gbar_Na')) - def exportChildren(self, outfile, level, namespace_='', name_='HH_cond_exp', fromsubclass_=False, pretty_print=True): - super(HH_cond_exp, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='HH_cond_exp'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.gbar_K is not None and 'gbar_K' not in already_processed: - already_processed.add('gbar_K') - showIndent(outfile, level) - outfile.write('gbar_K=%e,\n' % (self.gbar_K,)) if self.e_rev_E is not None and 'e_rev_E' not in already_processed: already_processed.add('e_rev_E') - showIndent(outfile, level) - outfile.write('e_rev_E=%e,\n' % (self.e_rev_E,)) - if self.g_leak is not None and 'g_leak' not in already_processed: - already_processed.add('g_leak') - showIndent(outfile, level) - outfile.write('g_leak=%e,\n' % (self.g_leak,)) - if self.e_rev_Na is not None and 'e_rev_Na' not in already_processed: - already_processed.add('e_rev_Na') - showIndent(outfile, level) - outfile.write('e_rev_Na=%e,\n' % (self.e_rev_Na,)) + outfile.write(' e_rev_E="%s"' % self.gds_format_double(self.e_rev_E, input_name='e_rev_E')) if self.e_rev_I is not None and 'e_rev_I' not in already_processed: already_processed.add('e_rev_I') - showIndent(outfile, level) - outfile.write('e_rev_I=%e,\n' % (self.e_rev_I,)) + outfile.write(' e_rev_I="%s"' % self.gds_format_double(self.e_rev_I, input_name='e_rev_I')) if self.e_rev_K is not None and 'e_rev_K' not in already_processed: already_processed.add('e_rev_K') - showIndent(outfile, level) - outfile.write('e_rev_K=%e,\n' % (self.e_rev_K,)) + outfile.write(' e_rev_K="%s"' % self.gds_format_double(self.e_rev_K, input_name='e_rev_K')) + if self.e_rev_Na is not None and 'e_rev_Na' not in already_processed: + already_processed.add('e_rev_Na') + outfile.write(' e_rev_Na="%s"' % self.gds_format_double(self.e_rev_Na, input_name='e_rev_Na')) if self.e_rev_leak is not None and 'e_rev_leak' not in already_processed: already_processed.add('e_rev_leak') - showIndent(outfile, level) - outfile.write('e_rev_leak=%e,\n' % (self.e_rev_leak,)) - if self.v_offset is not None and 'v_offset' not in already_processed: - already_processed.add('v_offset') - showIndent(outfile, level) - outfile.write('v_offset=%e,\n' % (self.v_offset,)) + outfile.write(' e_rev_leak="%s"' % self.gds_format_double(self.e_rev_leak, input_name='e_rev_leak')) + if self.g_leak is not None and 'g_leak' not in already_processed: + already_processed.add('g_leak') + outfile.write(' g_leak="%s"' % self.gds_format_double(self.g_leak, input_name='g_leak')) + if self.gbar_K is not None and 'gbar_K' not in already_processed: + already_processed.add('gbar_K') + outfile.write(' gbar_K="%s"' % self.gds_format_double(self.gbar_K, input_name='gbar_K')) if self.gbar_Na is not None and 'gbar_Na' not in already_processed: already_processed.add('gbar_Na') - showIndent(outfile, level) - outfile.write('gbar_Na=%e,\n' % (self.gbar_Na,)) - super(HH_cond_exp, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(HH_cond_exp, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' gbar_Na="%s"' % self.gds_format_double(self.gbar_Na, input_name='gbar_Na')) + def exportChildren(self, outfile, level, namespace_='', name_='HH_cond_exp', fromsubclass_=False, pretty_print=True): + super(HH_cond_exp, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('gbar_K', node) - if value is not None and 'gbar_K' not in already_processed: - already_processed.add('gbar_K') + value = find_attr_value_('v_offset', node) + if value is not None and 'v_offset' not in already_processed: + already_processed.add('v_offset') try: - self.gbar_K = float(value) + self.v_offset = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (gbar_K): %s' % exp) + raise ValueError('Bad float/double attribute (v_offset): %s' % exp) value = find_attr_value_('e_rev_E', node) if value is not None and 'e_rev_E' not in already_processed: already_processed.add('e_rev_E') @@ -12736,20 +11207,6 @@ class HH_cond_exp(basePyNNCell): self.e_rev_E = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (e_rev_E): %s' % exp) - value = find_attr_value_('g_leak', node) - if value is not None and 'g_leak' not in already_processed: - already_processed.add('g_leak') - try: - self.g_leak = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (g_leak): %s' % exp) - value = find_attr_value_('e_rev_Na', node) - if value is not None and 'e_rev_Na' not in already_processed: - already_processed.add('e_rev_Na') - try: - self.e_rev_Na = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (e_rev_Na): %s' % exp) value = find_attr_value_('e_rev_I', node) if value is not None and 'e_rev_I' not in already_processed: already_processed.add('e_rev_I') @@ -12764,6 +11221,13 @@ class HH_cond_exp(basePyNNCell): self.e_rev_K = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (e_rev_K): %s' % exp) + value = find_attr_value_('e_rev_Na', node) + if value is not None and 'e_rev_Na' not in already_processed: + already_processed.add('e_rev_Na') + try: + self.e_rev_Na = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (e_rev_Na): %s' % exp) value = find_attr_value_('e_rev_leak', node) if value is not None and 'e_rev_leak' not in already_processed: already_processed.add('e_rev_leak') @@ -12771,13 +11235,20 @@ class HH_cond_exp(basePyNNCell): self.e_rev_leak = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (e_rev_leak): %s' % exp) - value = find_attr_value_('v_offset', node) - if value is not None and 'v_offset' not in already_processed: - already_processed.add('v_offset') + value = find_attr_value_('g_leak', node) + if value is not None and 'g_leak' not in already_processed: + already_processed.add('g_leak') try: - self.v_offset = float(value) + self.g_leak = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (v_offset): %s' % exp) + raise ValueError('Bad float/double attribute (g_leak): %s' % exp) + value = find_attr_value_('gbar_K', node) + if value is not None and 'gbar_K' not in already_processed: + already_processed.add('gbar_K') + try: + self.gbar_K = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (gbar_K): %s' % exp) value = find_attr_value_('gbar_Na', node) if value is not None and 'gbar_Na' not in already_processed: already_processed.add('gbar_Na') @@ -12795,30 +11266,36 @@ class HH_cond_exp(basePyNNCell): class basePyNNIaFCell(basePyNNCell): subclass = None superclass = basePyNNCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, extensiontype_=None): - super(basePyNNIaFCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, extensiontype_, ) - self.tau_refrac = _cast(float, tau_refrac) - self.v_thresh = _cast(float, v_thresh) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, extensiontype_=None): + self.original_tagname_ = None + super(basePyNNIaFCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, extensiontype_, ) self.tau_m = _cast(float, tau_m) + self.tau_refrac = _cast(float, tau_refrac) self.v_reset = _cast(float, v_reset) self.v_rest = _cast(float, v_rest) + self.v_thresh = _cast(float, v_thresh) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, basePyNNIaFCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if basePyNNIaFCell.subclass: return basePyNNIaFCell.subclass(*args_, **kwargs_) else: return basePyNNIaFCell(*args_, **kwargs_) factory = staticmethod(factory) - def get_tau_refrac(self): return self.tau_refrac - def set_tau_refrac(self, tau_refrac): self.tau_refrac = tau_refrac - def get_v_thresh(self): return self.v_thresh - def set_v_thresh(self, v_thresh): self.v_thresh = v_thresh def get_tau_m(self): return self.tau_m def set_tau_m(self, tau_m): self.tau_m = tau_m + def get_tau_refrac(self): return self.tau_refrac + def set_tau_refrac(self, tau_refrac): self.tau_refrac = tau_refrac def get_v_reset(self): return self.v_reset def set_v_reset(self, v_reset): self.v_reset = v_reset def get_v_rest(self): return self.v_rest def set_v_rest(self, v_rest): self.v_rest = v_rest + def get_v_thresh(self): return self.v_thresh + def set_v_thresh(self, v_thresh): self.v_thresh = v_thresh def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ def hasContent_(self): @@ -12833,91 +11310,50 @@ class basePyNNIaFCell(basePyNNCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='basePyNNIaFCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='basePyNNIaFCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='basePyNNIaFCell'): super(basePyNNIaFCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='basePyNNIaFCell') - if self.tau_refrac is not None and 'tau_refrac' not in already_processed: - already_processed.add('tau_refrac') - outfile.write(' tau_refrac="%s"' % self.gds_format_double(self.tau_refrac, input_name='tau_refrac')) - if self.v_thresh is not None and 'v_thresh' not in already_processed: - already_processed.add('v_thresh') - outfile.write(' v_thresh="%s"' % self.gds_format_double(self.v_thresh, input_name='v_thresh')) if self.tau_m is not None and 'tau_m' not in already_processed: already_processed.add('tau_m') outfile.write(' tau_m="%s"' % self.gds_format_double(self.tau_m, input_name='tau_m')) + if self.tau_refrac is not None and 'tau_refrac' not in already_processed: + already_processed.add('tau_refrac') + outfile.write(' tau_refrac="%s"' % self.gds_format_double(self.tau_refrac, input_name='tau_refrac')) if self.v_reset is not None and 'v_reset' not in already_processed: already_processed.add('v_reset') outfile.write(' v_reset="%s"' % self.gds_format_double(self.v_reset, input_name='v_reset')) if self.v_rest is not None and 'v_rest' not in already_processed: already_processed.add('v_rest') outfile.write(' v_rest="%s"' % self.gds_format_double(self.v_rest, input_name='v_rest')) + if self.v_thresh is not None and 'v_thresh' not in already_processed: + already_processed.add('v_thresh') + outfile.write(' v_thresh="%s"' % self.gds_format_double(self.v_thresh, input_name='v_thresh')) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='basePyNNIaFCell', fromsubclass_=False, pretty_print=True): super(basePyNNIaFCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='basePyNNIaFCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.tau_refrac is not None and 'tau_refrac' not in already_processed: - already_processed.add('tau_refrac') - showIndent(outfile, level) - outfile.write('tau_refrac=%e,\n' % (self.tau_refrac,)) - if self.v_thresh is not None and 'v_thresh' not in already_processed: - already_processed.add('v_thresh') - showIndent(outfile, level) - outfile.write('v_thresh=%e,\n' % (self.v_thresh,)) - if self.tau_m is not None and 'tau_m' not in already_processed: - already_processed.add('tau_m') - showIndent(outfile, level) - outfile.write('tau_m=%e,\n' % (self.tau_m,)) - if self.v_reset is not None and 'v_reset' not in already_processed: - already_processed.add('v_reset') - showIndent(outfile, level) - outfile.write('v_reset=%e,\n' % (self.v_reset,)) - if self.v_rest is not None and 'v_rest' not in already_processed: - already_processed.add('v_rest') - showIndent(outfile, level) - outfile.write('v_rest=%e,\n' % (self.v_rest,)) - super(basePyNNIaFCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(basePyNNIaFCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('tau_refrac', node) - if value is not None and 'tau_refrac' not in already_processed: - already_processed.add('tau_refrac') - try: - self.tau_refrac = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (tau_refrac): %s' % exp) - value = find_attr_value_('v_thresh', node) - if value is not None and 'v_thresh' not in already_processed: - already_processed.add('v_thresh') - try: - self.v_thresh = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (v_thresh): %s' % exp) value = find_attr_value_('tau_m', node) if value is not None and 'tau_m' not in already_processed: already_processed.add('tau_m') @@ -12925,6 +11361,13 @@ class basePyNNIaFCell(basePyNNCell): self.tau_m = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (tau_m): %s' % exp) + value = find_attr_value_('tau_refrac', node) + if value is not None and 'tau_refrac' not in already_processed: + already_processed.add('tau_refrac') + try: + self.tau_refrac = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (tau_refrac): %s' % exp) value = find_attr_value_('v_reset', node) if value is not None and 'v_reset' not in already_processed: already_processed.add('v_reset') @@ -12939,6 +11382,13 @@ class basePyNNIaFCell(basePyNNCell): self.v_rest = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (v_rest): %s' % exp) + value = find_attr_value_('v_thresh', node) + if value is not None and 'v_thresh' not in already_processed: + already_processed.add('v_thresh') + try: + self.v_thresh = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (v_thresh): %s' % exp) value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -12953,11 +11403,16 @@ class basePyNNIaFCell(basePyNNCell): class IaFRefCell(IaFCell): subclass = None superclass = IaFCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, C=None, thresh=None, leakConductance=None, leakReversal=None, refract=None): - super(IaFRefCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, C, thresh, leakConductance, leakReversal, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, C=None, leakConductance=None, refract=None): + self.original_tagname_ = None + super(IaFRefCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, leakReversal, thresh, reset, C, leakConductance, ) self.refract = _cast(None, refract) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IaFRefCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if IaFRefCell.subclass: return IaFRefCell.subclass(*args_, **kwargs_) else: @@ -12967,7 +11422,11 @@ class IaFRefCell(IaFCell): def set_refract(self, refract): self.refract = refract def validate_Nml2Quantity_time(self, value): # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(IaFRefCell, self).hasContent_() @@ -12980,13 +11439,15 @@ class IaFRefCell(IaFCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IaFRefCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IaFRefCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -12998,26 +11459,13 @@ class IaFRefCell(IaFCell): outfile.write(' refract=%s' % (quote_attrib(self.refract), )) def exportChildren(self, outfile, level, namespace_='', name_='IaFRefCell', fromsubclass_=False, pretty_print=True): super(IaFRefCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IaFRefCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.refract is not None and 'refract' not in already_processed: - already_processed.add('refract') - showIndent(outfile, level) - outfile.write('refract="%s",\n' % (self.refract,)) - super(IaFRefCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IaFRefCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('refract', node) if value is not None and 'refract' not in already_processed: @@ -13034,11 +11482,16 @@ class IaFRefCell(IaFCell): class IaFTauRefCell(IaFTauCell): subclass = None superclass = IaFTauCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, tau=None, thresh=None, leakReversal=None, refract=None): - super(IaFTauRefCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, tau, thresh, leakReversal, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, tau=None, refract=None): + self.original_tagname_ = None + super(IaFTauRefCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, leakReversal, thresh, reset, tau, ) self.refract = _cast(None, refract) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IaFTauRefCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if IaFTauRefCell.subclass: return IaFTauRefCell.subclass(*args_, **kwargs_) else: @@ -13048,7 +11501,11 @@ class IaFTauRefCell(IaFTauCell): def set_refract(self, refract): self.refract = refract def validate_Nml2Quantity_time(self, value): # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(IaFTauRefCell, self).hasContent_() @@ -13061,13 +11518,15 @@ class IaFTauRefCell(IaFTauCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IaFTauRefCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IaFTauRefCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13079,26 +11538,13 @@ class IaFTauRefCell(IaFTauCell): outfile.write(' refract=%s' % (quote_attrib(self.refract), )) def exportChildren(self, outfile, level, namespace_='', name_='IaFTauRefCell', fromsubclass_=False, pretty_print=True): super(IaFTauRefCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IaFTauRefCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.refract is not None and 'refract' not in already_processed: - already_processed.add('refract') - showIndent(outfile, level) - outfile.write('refract="%s",\n' % (self.refract,)) - super(IaFTauRefCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IaFTauRefCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('refract', node) if value is not None and 'refract' not in already_processed: @@ -13115,12 +11561,18 @@ class IaFTauRefCell(IaFTauCell): class ExpTwoSynapse(BaseConductanceBasedSynapse): subclass = None superclass = BaseConductanceBasedSynapse - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, tauDecay=None, tauRise=None, extensiontype_=None): - super(ExpTwoSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, tauDecay=None, tauRise=None, extensiontype_=None): + self.original_tagname_ = None + super(ExpTwoSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, extensiontype_, ) self.tauDecay = _cast(None, tauDecay) self.tauRise = _cast(None, tauRise) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExpTwoSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExpTwoSynapse.subclass: return ExpTwoSynapse.subclass(*args_, **kwargs_) else: @@ -13128,13 +11580,17 @@ class ExpTwoSynapse(BaseConductanceBasedSynapse): factory = staticmethod(factory) def get_tauDecay(self): return self.tauDecay def set_tauDecay(self, tauDecay): self.tauDecay = tauDecay - def validate_Nml2Quantity_time(self, value): - # Validate type Nml2Quantity_time, a restriction on xs:string. - pass def get_tauRise(self): return self.tauRise def set_tauRise(self, tauRise): self.tauRise = tauRise def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_Nml2Quantity_time(self, value): + # Validate type Nml2Quantity_time, a restriction on xs:string. + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(ExpTwoSynapse, self).hasContent_() @@ -13147,13 +11603,15 @@ class ExpTwoSynapse(BaseConductanceBasedSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExpTwoSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExpTwoSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13172,30 +11630,13 @@ class ExpTwoSynapse(BaseConductanceBasedSynapse): outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='ExpTwoSynapse', fromsubclass_=False, pretty_print=True): super(ExpTwoSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ExpTwoSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.tauDecay is not None and 'tauDecay' not in already_processed: - already_processed.add('tauDecay') - showIndent(outfile, level) - outfile.write('tauDecay="%s",\n' % (self.tauDecay,)) - if self.tauRise is not None and 'tauRise' not in already_processed: - already_processed.add('tauRise') - showIndent(outfile, level) - outfile.write('tauRise="%s",\n' % (self.tauRise,)) - super(ExpTwoSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ExpTwoSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('tauDecay', node) if value is not None and 'tauDecay' not in already_processed: @@ -13221,11 +11662,16 @@ class ExpTwoSynapse(BaseConductanceBasedSynapse): class ExpOneSynapse(BaseConductanceBasedSynapse): subclass = None superclass = BaseConductanceBasedSynapse - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, tauDecay=None): - super(ExpOneSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, tauDecay=None): + self.original_tagname_ = None + super(ExpOneSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, ) self.tauDecay = _cast(None, tauDecay) - pass def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, ExpOneSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if ExpOneSynapse.subclass: return ExpOneSynapse.subclass(*args_, **kwargs_) else: @@ -13235,7 +11681,11 @@ class ExpOneSynapse(BaseConductanceBasedSynapse): def set_tauDecay(self, tauDecay): self.tauDecay = tauDecay def validate_Nml2Quantity_time(self, value): # Validate type Nml2Quantity_time, a restriction on xs:string. - pass + if value is not None and Validate_simpletypes_: + if not self.gds_validate_simple_patterns( + self.validate_Nml2Quantity_time_patterns_, value): + warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_Nml2Quantity_time_patterns_, )) + validate_Nml2Quantity_time_patterns_ = [['^-?([0-9]*(\\.[0-9]+)?)([eE]-?[0-9]+)?[\\s]*(s|ms)$']] def hasContent_(self): if ( super(ExpOneSynapse, self).hasContent_() @@ -13248,13 +11698,15 @@ class ExpOneSynapse(BaseConductanceBasedSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExpOneSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='ExpOneSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13266,26 +11718,13 @@ class ExpOneSynapse(BaseConductanceBasedSynapse): outfile.write(' tauDecay=%s' % (quote_attrib(self.tauDecay), )) def exportChildren(self, outfile, level, namespace_='', name_='ExpOneSynapse', fromsubclass_=False, pretty_print=True): super(ExpOneSynapse, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='ExpOneSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.tauDecay is not None and 'tauDecay' not in already_processed: - already_processed.add('tauDecay') - showIndent(outfile, level) - outfile.write('tauDecay="%s",\n' % (self.tauDecay,)) - super(ExpOneSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(ExpOneSynapse, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('tauDecay', node) if value is not None and 'tauDecay' not in already_processed: @@ -13302,10 +11741,15 @@ class ExpOneSynapse(BaseConductanceBasedSynapse): class IF_curr_exp(basePyNNIaFCell): subclass = None superclass = basePyNNIaFCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None): - super(IF_curr_exp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, ) - pass + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None): + self.original_tagname_ = None + super(IF_curr_exp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, ) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IF_curr_exp) + if subclass is not None: + return subclass(*args_, **kwargs_) if IF_curr_exp.subclass: return IF_curr_exp.subclass(*args_, **kwargs_) else: @@ -13323,13 +11767,15 @@ class IF_curr_exp(basePyNNIaFCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IF_curr_exp') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IF_curr_exp', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13338,22 +11784,13 @@ class IF_curr_exp(basePyNNIaFCell): super(IF_curr_exp, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IF_curr_exp') def exportChildren(self, outfile, level, namespace_='', name_='IF_curr_exp', fromsubclass_=False, pretty_print=True): super(IF_curr_exp, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IF_curr_exp'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(IF_curr_exp, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IF_curr_exp, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(IF_curr_exp, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -13365,10 +11802,15 @@ class IF_curr_exp(basePyNNIaFCell): class IF_curr_alpha(basePyNNIaFCell): subclass = None superclass = basePyNNIaFCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None): - super(IF_curr_alpha, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, ) - pass + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None): + self.original_tagname_ = None + super(IF_curr_alpha, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, ) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IF_curr_alpha) + if subclass is not None: + return subclass(*args_, **kwargs_) if IF_curr_alpha.subclass: return IF_curr_alpha.subclass(*args_, **kwargs_) else: @@ -13386,13 +11828,15 @@ class IF_curr_alpha(basePyNNIaFCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IF_curr_alpha') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IF_curr_alpha', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13401,22 +11845,13 @@ class IF_curr_alpha(basePyNNIaFCell): super(IF_curr_alpha, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IF_curr_alpha') def exportChildren(self, outfile, level, namespace_='', name_='IF_curr_alpha', fromsubclass_=False, pretty_print=True): super(IF_curr_alpha, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IF_curr_alpha'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(IF_curr_alpha, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IF_curr_alpha, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(IF_curr_alpha, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -13428,21 +11863,27 @@ class IF_curr_alpha(basePyNNIaFCell): class basePyNNIaFCondCell(basePyNNIaFCell): subclass = None superclass = basePyNNIaFCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None, extensiontype_=None): - super(basePyNNIaFCondCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, extensiontype_, ) - self.e_rev_I = _cast(float, e_rev_I) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None, extensiontype_=None): + self.original_tagname_ = None + super(basePyNNIaFCondCell, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, extensiontype_, ) self.e_rev_E = _cast(float, e_rev_E) + self.e_rev_I = _cast(float, e_rev_I) self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, basePyNNIaFCondCell) + if subclass is not None: + return subclass(*args_, **kwargs_) if basePyNNIaFCondCell.subclass: return basePyNNIaFCondCell.subclass(*args_, **kwargs_) else: return basePyNNIaFCondCell(*args_, **kwargs_) factory = staticmethod(factory) - def get_e_rev_I(self): return self.e_rev_I - def set_e_rev_I(self, e_rev_I): self.e_rev_I = e_rev_I def get_e_rev_E(self): return self.e_rev_E def set_e_rev_E(self, e_rev_E): self.e_rev_E = e_rev_E + def get_e_rev_I(self): return self.e_rev_I + def set_e_rev_I(self, e_rev_I): self.e_rev_I = e_rev_I def get_extensiontype_(self): return self.extensiontype_ def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ def hasContent_(self): @@ -13457,63 +11898,41 @@ class basePyNNIaFCondCell(basePyNNIaFCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='basePyNNIaFCondCell') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='basePyNNIaFCondCell', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: outfile.write('/>%s' % (eol_, )) def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='basePyNNIaFCondCell'): super(basePyNNIaFCondCell, self).exportAttributes(outfile, level, already_processed, namespace_, name_='basePyNNIaFCondCell') - if self.e_rev_I is not None and 'e_rev_I' not in already_processed: - already_processed.add('e_rev_I') - outfile.write(' e_rev_I="%s"' % self.gds_format_double(self.e_rev_I, input_name='e_rev_I')) if self.e_rev_E is not None and 'e_rev_E' not in already_processed: already_processed.add('e_rev_E') outfile.write(' e_rev_E="%s"' % self.gds_format_double(self.e_rev_E, input_name='e_rev_E')) + if self.e_rev_I is not None and 'e_rev_I' not in already_processed: + already_processed.add('e_rev_I') + outfile.write(' e_rev_I="%s"' % self.gds_format_double(self.e_rev_I, input_name='e_rev_I')) if self.extensiontype_ is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') outfile.write(' xsi:type="%s"' % self.extensiontype_) def exportChildren(self, outfile, level, namespace_='', name_='basePyNNIaFCondCell', fromsubclass_=False, pretty_print=True): super(basePyNNIaFCondCell, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='basePyNNIaFCondCell'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.e_rev_I is not None and 'e_rev_I' not in already_processed: - already_processed.add('e_rev_I') - showIndent(outfile, level) - outfile.write('e_rev_I=%e,\n' % (self.e_rev_I,)) - if self.e_rev_E is not None and 'e_rev_E' not in already_processed: - already_processed.add('e_rev_E') - showIndent(outfile, level) - outfile.write('e_rev_E=%e,\n' % (self.e_rev_E,)) - super(basePyNNIaFCondCell, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(basePyNNIaFCondCell, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = find_attr_value_('e_rev_I', node) - if value is not None and 'e_rev_I' not in already_processed: - already_processed.add('e_rev_I') - try: - self.e_rev_I = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (e_rev_I): %s' % exp) value = find_attr_value_('e_rev_E', node) if value is not None and 'e_rev_E' not in already_processed: already_processed.add('e_rev_E') @@ -13521,6 +11940,13 @@ class basePyNNIaFCondCell(basePyNNIaFCell): self.e_rev_E = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (e_rev_E): %s' % exp) + value = find_attr_value_('e_rev_I', node) + if value is not None and 'e_rev_I' not in already_processed: + already_processed.add('e_rev_I') + try: + self.e_rev_I = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (e_rev_I): %s' % exp) value = find_attr_value_('xsi:type', node) if value is not None and 'xsi:type' not in already_processed: already_processed.add('xsi:type') @@ -13535,11 +11961,17 @@ class basePyNNIaFCondCell(basePyNNIaFCell): class BlockingPlasticSynapse(ExpTwoSynapse): subclass = None superclass = ExpTwoSynapse - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, tauDecay=None, tauRise=None, plasticityMechanism=None, blockMechanism=None): - super(BlockingPlasticSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, tauDecay, tauRise, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, tauDecay=None, tauRise=None, plasticityMechanism=None, blockMechanism=None): + self.original_tagname_ = None + super(BlockingPlasticSynapse, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, tauDecay, tauRise, ) self.plasticityMechanism = plasticityMechanism self.blockMechanism = blockMechanism def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, BlockingPlasticSynapse) + if subclass is not None: + return subclass(*args_, **kwargs_) if BlockingPlasticSynapse.subclass: return BlockingPlasticSynapse.subclass(*args_, **kwargs_) else: @@ -13563,13 +11995,15 @@ class BlockingPlasticSynapse(ExpTwoSynapse): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='BlockingPlasticSynapse') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='BlockingPlasticSynapse', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13586,45 +12020,26 @@ class BlockingPlasticSynapse(ExpTwoSynapse): self.plasticityMechanism.export(outfile, level, namespace_, name_='plasticityMechanism', pretty_print=pretty_print) if self.blockMechanism is not None: self.blockMechanism.export(outfile, level, namespace_, name_='blockMechanism', pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='BlockingPlasticSynapse'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(BlockingPlasticSynapse, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(BlockingPlasticSynapse, self).exportLiteralChildren(outfile, level, name_) - if self.plasticityMechanism is not None: - showIndent(outfile, level) - outfile.write('plasticityMechanism=model_.PlasticityMechanism(\n') - self.plasticityMechanism.exportLiteral(outfile, level, name_='plasticityMechanism') - showIndent(outfile, level) - outfile.write('),\n') - if self.blockMechanism is not None: - showIndent(outfile, level) - outfile.write('blockMechanism=model_.BlockMechanism(\n') - self.blockMechanism.exportLiteral(outfile, level, name_='blockMechanism') - showIndent(outfile, level) - outfile.write('),\n') def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(BlockingPlasticSynapse, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'plasticityMechanism': obj_ = PlasticityMechanism.factory() obj_.build(child_) - self.set_plasticityMechanism(obj_) + self.plasticityMechanism = obj_ + obj_.original_tagname_ = 'plasticityMechanism' elif nodeName_ == 'blockMechanism': obj_ = BlockMechanism.factory() obj_.build(child_) - self.set_blockMechanism(obj_) + self.blockMechanism = obj_ + obj_.original_tagname_ = 'blockMechanism' super(BlockingPlasticSynapse, self).buildChildren(child_, node, nodeName_, True) # end class BlockingPlasticSynapse @@ -13632,15 +12047,20 @@ class BlockingPlasticSynapse(ExpTwoSynapse): class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): subclass = None superclass = basePyNNIaFCondCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None, a=None, delta_T=None, b=None, v_spike=None, tau_w=None): - super(EIF_cond_alpha_isfa_ista, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None, a=None, b=None, delta_T=None, tau_w=None, v_spike=None): + self.original_tagname_ = None + super(EIF_cond_alpha_isfa_ista, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, ) self.a = _cast(float, a) - self.delta_T = _cast(float, delta_T) self.b = _cast(float, b) - self.v_spike = _cast(float, v_spike) + self.delta_T = _cast(float, delta_T) self.tau_w = _cast(float, tau_w) - pass + self.v_spike = _cast(float, v_spike) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, EIF_cond_alpha_isfa_ista) + if subclass is not None: + return subclass(*args_, **kwargs_) if EIF_cond_alpha_isfa_ista.subclass: return EIF_cond_alpha_isfa_ista.subclass(*args_, **kwargs_) else: @@ -13648,14 +12068,14 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): factory = staticmethod(factory) def get_a(self): return self.a def set_a(self, a): self.a = a - def get_delta_T(self): return self.delta_T - def set_delta_T(self, delta_T): self.delta_T = delta_T def get_b(self): return self.b def set_b(self, b): self.b = b - def get_v_spike(self): return self.v_spike - def set_v_spike(self, v_spike): self.v_spike = v_spike + def get_delta_T(self): return self.delta_T + def set_delta_T(self, delta_T): self.delta_T = delta_T def get_tau_w(self): return self.tau_w def set_tau_w(self, tau_w): self.tau_w = tau_w + def get_v_spike(self): return self.v_spike + def set_v_spike(self, v_spike): self.v_spike = v_spike def hasContent_(self): if ( super(EIF_cond_alpha_isfa_ista, self).hasContent_() @@ -13668,13 +12088,15 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='EIF_cond_alpha_isfa_ista') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='EIF_cond_alpha_isfa_ista', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13683,57 +12105,28 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): super(EIF_cond_alpha_isfa_ista, self).exportAttributes(outfile, level, already_processed, namespace_, name_='EIF_cond_alpha_isfa_ista') if self.a is not None and 'a' not in already_processed: already_processed.add('a') - outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a')) - if self.delta_T is not None and 'delta_T' not in already_processed: - already_processed.add('delta_T') - outfile.write(' delta_T="%s"' % self.gds_format_double(self.delta_T, input_name='delta_T')) - if self.b is not None and 'b' not in already_processed: - already_processed.add('b') - outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b')) - if self.v_spike is not None and 'v_spike' not in already_processed: - already_processed.add('v_spike') - outfile.write(' v_spike="%s"' % self.gds_format_double(self.v_spike, input_name='v_spike')) - if self.tau_w is not None and 'tau_w' not in already_processed: - already_processed.add('tau_w') - outfile.write(' tau_w="%s"' % self.gds_format_double(self.tau_w, input_name='tau_w')) - def exportChildren(self, outfile, level, namespace_='', name_='EIF_cond_alpha_isfa_ista', fromsubclass_=False, pretty_print=True): - super(EIF_cond_alpha_isfa_ista, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='EIF_cond_alpha_isfa_ista'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.a is not None and 'a' not in already_processed: - already_processed.add('a') - showIndent(outfile, level) - outfile.write('a=%e,\n' % (self.a,)) - if self.delta_T is not None and 'delta_T' not in already_processed: - already_processed.add('delta_T') - showIndent(outfile, level) - outfile.write('delta_T=%e,\n' % (self.delta_T,)) + outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a')) if self.b is not None and 'b' not in already_processed: already_processed.add('b') - showIndent(outfile, level) - outfile.write('b=%e,\n' % (self.b,)) - if self.v_spike is not None and 'v_spike' not in already_processed: - already_processed.add('v_spike') - showIndent(outfile, level) - outfile.write('v_spike=%e,\n' % (self.v_spike,)) + outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b')) + if self.delta_T is not None and 'delta_T' not in already_processed: + already_processed.add('delta_T') + outfile.write(' delta_T="%s"' % self.gds_format_double(self.delta_T, input_name='delta_T')) if self.tau_w is not None and 'tau_w' not in already_processed: already_processed.add('tau_w') - showIndent(outfile, level) - outfile.write('tau_w=%e,\n' % (self.tau_w,)) - super(EIF_cond_alpha_isfa_ista, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(EIF_cond_alpha_isfa_ista, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' tau_w="%s"' % self.gds_format_double(self.tau_w, input_name='tau_w')) + if self.v_spike is not None and 'v_spike' not in already_processed: + already_processed.add('v_spike') + outfile.write(' v_spike="%s"' % self.gds_format_double(self.v_spike, input_name='v_spike')) + def exportChildren(self, outfile, level, namespace_='', name_='EIF_cond_alpha_isfa_ista', fromsubclass_=False, pretty_print=True): + super(EIF_cond_alpha_isfa_ista, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('a', node) if value is not None and 'a' not in already_processed: @@ -13742,13 +12135,6 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): self.a = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (a): %s' % exp) - value = find_attr_value_('delta_T', node) - if value is not None and 'delta_T' not in already_processed: - already_processed.add('delta_T') - try: - self.delta_T = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (delta_T): %s' % exp) value = find_attr_value_('b', node) if value is not None and 'b' not in already_processed: already_processed.add('b') @@ -13756,13 +12142,13 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): self.b = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (b): %s' % exp) - value = find_attr_value_('v_spike', node) - if value is not None and 'v_spike' not in already_processed: - already_processed.add('v_spike') + value = find_attr_value_('delta_T', node) + if value is not None and 'delta_T' not in already_processed: + already_processed.add('delta_T') try: - self.v_spike = float(value) + self.delta_T = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (v_spike): %s' % exp) + raise ValueError('Bad float/double attribute (delta_T): %s' % exp) value = find_attr_value_('tau_w', node) if value is not None and 'tau_w' not in already_processed: already_processed.add('tau_w') @@ -13770,6 +12156,13 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): self.tau_w = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (tau_w): %s' % exp) + value = find_attr_value_('v_spike', node) + if value is not None and 'v_spike' not in already_processed: + already_processed.add('v_spike') + try: + self.v_spike = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (v_spike): %s' % exp) super(EIF_cond_alpha_isfa_ista, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(EIF_cond_alpha_isfa_ista, self).buildChildren(child_, node, nodeName_, True) @@ -13780,15 +12173,20 @@ class EIF_cond_alpha_isfa_ista(basePyNNIaFCondCell): class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): subclass = None superclass = basePyNNIaFCondCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None, a=None, delta_T=None, b=None, v_spike=None, tau_w=None): - super(EIF_cond_exp_isfa_ista, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None, a=None, b=None, delta_T=None, tau_w=None, v_spike=None): + self.original_tagname_ = None + super(EIF_cond_exp_isfa_ista, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, ) self.a = _cast(float, a) - self.delta_T = _cast(float, delta_T) self.b = _cast(float, b) - self.v_spike = _cast(float, v_spike) + self.delta_T = _cast(float, delta_T) self.tau_w = _cast(float, tau_w) - pass + self.v_spike = _cast(float, v_spike) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, EIF_cond_exp_isfa_ista) + if subclass is not None: + return subclass(*args_, **kwargs_) if EIF_cond_exp_isfa_ista.subclass: return EIF_cond_exp_isfa_ista.subclass(*args_, **kwargs_) else: @@ -13796,14 +12194,14 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): factory = staticmethod(factory) def get_a(self): return self.a def set_a(self, a): self.a = a - def get_delta_T(self): return self.delta_T - def set_delta_T(self, delta_T): self.delta_T = delta_T def get_b(self): return self.b def set_b(self, b): self.b = b - def get_v_spike(self): return self.v_spike - def set_v_spike(self, v_spike): self.v_spike = v_spike + def get_delta_T(self): return self.delta_T + def set_delta_T(self, delta_T): self.delta_T = delta_T def get_tau_w(self): return self.tau_w def set_tau_w(self, tau_w): self.tau_w = tau_w + def get_v_spike(self): return self.v_spike + def set_v_spike(self, v_spike): self.v_spike = v_spike def hasContent_(self): if ( super(EIF_cond_exp_isfa_ista, self).hasContent_() @@ -13816,13 +12214,15 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='EIF_cond_exp_isfa_ista') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='EIF_cond_exp_isfa_ista', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13832,56 +12232,27 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): if self.a is not None and 'a' not in already_processed: already_processed.add('a') outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a')) - if self.delta_T is not None and 'delta_T' not in already_processed: - already_processed.add('delta_T') - outfile.write(' delta_T="%s"' % self.gds_format_double(self.delta_T, input_name='delta_T')) if self.b is not None and 'b' not in already_processed: already_processed.add('b') outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b')) - if self.v_spike is not None and 'v_spike' not in already_processed: - already_processed.add('v_spike') - outfile.write(' v_spike="%s"' % self.gds_format_double(self.v_spike, input_name='v_spike')) + if self.delta_T is not None and 'delta_T' not in already_processed: + already_processed.add('delta_T') + outfile.write(' delta_T="%s"' % self.gds_format_double(self.delta_T, input_name='delta_T')) if self.tau_w is not None and 'tau_w' not in already_processed: already_processed.add('tau_w') outfile.write(' tau_w="%s"' % self.gds_format_double(self.tau_w, input_name='tau_w')) - def exportChildren(self, outfile, level, namespace_='', name_='EIF_cond_exp_isfa_ista', fromsubclass_=False, pretty_print=True): - super(EIF_cond_exp_isfa_ista, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='EIF_cond_exp_isfa_ista'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.a is not None and 'a' not in already_processed: - already_processed.add('a') - showIndent(outfile, level) - outfile.write('a=%e,\n' % (self.a,)) - if self.delta_T is not None and 'delta_T' not in already_processed: - already_processed.add('delta_T') - showIndent(outfile, level) - outfile.write('delta_T=%e,\n' % (self.delta_T,)) - if self.b is not None and 'b' not in already_processed: - already_processed.add('b') - showIndent(outfile, level) - outfile.write('b=%e,\n' % (self.b,)) if self.v_spike is not None and 'v_spike' not in already_processed: already_processed.add('v_spike') - showIndent(outfile, level) - outfile.write('v_spike=%e,\n' % (self.v_spike,)) - if self.tau_w is not None and 'tau_w' not in already_processed: - already_processed.add('tau_w') - showIndent(outfile, level) - outfile.write('tau_w=%e,\n' % (self.tau_w,)) - super(EIF_cond_exp_isfa_ista, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(EIF_cond_exp_isfa_ista, self).exportLiteralChildren(outfile, level, name_) + outfile.write(' v_spike="%s"' % self.gds_format_double(self.v_spike, input_name='v_spike')) + def exportChildren(self, outfile, level, namespace_='', name_='EIF_cond_exp_isfa_ista', fromsubclass_=False, pretty_print=True): + super(EIF_cond_exp_isfa_ista, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): value = find_attr_value_('a', node) if value is not None and 'a' not in already_processed: @@ -13890,13 +12261,6 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): self.a = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (a): %s' % exp) - value = find_attr_value_('delta_T', node) - if value is not None and 'delta_T' not in already_processed: - already_processed.add('delta_T') - try: - self.delta_T = float(value) - except ValueError as exp: - raise ValueError('Bad float/double attribute (delta_T): %s' % exp) value = find_attr_value_('b', node) if value is not None and 'b' not in already_processed: already_processed.add('b') @@ -13904,13 +12268,13 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): self.b = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (b): %s' % exp) - value = find_attr_value_('v_spike', node) - if value is not None and 'v_spike' not in already_processed: - already_processed.add('v_spike') + value = find_attr_value_('delta_T', node) + if value is not None and 'delta_T' not in already_processed: + already_processed.add('delta_T') try: - self.v_spike = float(value) + self.delta_T = float(value) except ValueError as exp: - raise ValueError('Bad float/double attribute (v_spike): %s' % exp) + raise ValueError('Bad float/double attribute (delta_T): %s' % exp) value = find_attr_value_('tau_w', node) if value is not None and 'tau_w' not in already_processed: already_processed.add('tau_w') @@ -13918,6 +12282,13 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): self.tau_w = float(value) except ValueError as exp: raise ValueError('Bad float/double attribute (tau_w): %s' % exp) + value = find_attr_value_('v_spike', node) + if value is not None and 'v_spike' not in already_processed: + already_processed.add('v_spike') + try: + self.v_spike = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (v_spike): %s' % exp) super(EIF_cond_exp_isfa_ista, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): super(EIF_cond_exp_isfa_ista, self).buildChildren(child_, node, nodeName_, True) @@ -13928,10 +12299,15 @@ class EIF_cond_exp_isfa_ista(basePyNNIaFCondCell): class IF_cond_exp(basePyNNIaFCondCell): subclass = None superclass = basePyNNIaFCondCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None): - super(IF_cond_exp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, ) - pass + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None): + self.original_tagname_ = None + super(IF_cond_exp, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, ) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IF_cond_exp) + if subclass is not None: + return subclass(*args_, **kwargs_) if IF_cond_exp.subclass: return IF_cond_exp.subclass(*args_, **kwargs_) else: @@ -13949,13 +12325,15 @@ class IF_cond_exp(basePyNNIaFCondCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IF_cond_exp') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IF_cond_exp', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -13964,22 +12342,13 @@ class IF_cond_exp(basePyNNIaFCondCell): super(IF_cond_exp, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IF_cond_exp') def exportChildren(self, outfile, level, namespace_='', name_='IF_cond_exp', fromsubclass_=False, pretty_print=True): super(IF_cond_exp, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IF_cond_exp'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(IF_cond_exp, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IF_cond_exp, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(IF_cond_exp, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -13991,10 +12360,15 @@ class IF_cond_exp(basePyNNIaFCondCell): class IF_cond_alpha(basePyNNIaFCondCell): subclass = None superclass = basePyNNIaFCondCell - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None): - super(IF_cond_alpha, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, ) - pass + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None): + self.original_tagname_ = None + super(IF_cond_alpha, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, ) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, IF_cond_alpha) + if subclass is not None: + return subclass(*args_, **kwargs_) if IF_cond_alpha.subclass: return IF_cond_alpha.subclass(*args_, **kwargs_) else: @@ -14012,13 +12386,15 @@ class IF_cond_alpha(basePyNNIaFCondCell): eol_ = '\n' else: eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) already_processed = set() self.exportAttributes(outfile, level, already_processed, namespace_, name_='IF_cond_alpha') if self.hasContent_(): outfile.write('>%s' % (eol_, )) - self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + self.exportChildren(outfile, level + 1, namespace_='', name_='IF_cond_alpha', pretty_print=pretty_print) showIndent(outfile, level, pretty_print) outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: @@ -14027,22 +12403,13 @@ class IF_cond_alpha(basePyNNIaFCondCell): super(IF_cond_alpha, self).exportAttributes(outfile, level, already_processed, namespace_, name_='IF_cond_alpha') def exportChildren(self, outfile, level, namespace_='', name_='IF_cond_alpha', fromsubclass_=False, pretty_print=True): super(IF_cond_alpha, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) - def exportLiteral(self, outfile, level, name_='IF_cond_alpha'): - level += 1 - already_processed = set() - self.exportLiteralAttributes(outfile, level, already_processed, name_) - if self.hasContent_(): - self.exportLiteralChildren(outfile, level, name_) - def exportLiteralAttributes(self, outfile, level, already_processed, name_): - super(IF_cond_alpha, self).exportLiteralAttributes(outfile, level, already_processed, name_) - def exportLiteralChildren(self, outfile, level, name_): - super(IF_cond_alpha, self).exportLiteralChildren(outfile, level, name_) def build(self, node): already_processed = set() self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(IF_cond_alpha, self).buildAttributes(node, attrs, already_processed) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): @@ -14052,91 +12419,91 @@ class IF_cond_alpha(basePyNNIaFCondCell): GDSClassesMapping = { - 'intracellularProperties': IntracellularProperties, - 'inhomogeneousParam': InhomogeneousParam, - 'q10Settings': Q10Settings, - 'spikeGenerator': SpikeGenerator, + 'adExIaFCell': AdExIaFCell, + 'alphaCondSynapse': AlphaCondSynapse, + 'alphaCurrSynapse': AlphaCurrSynapse, + 'annotation': Annotation, + 'baseCell': BaseCell, + 'biophysicalProperties': BiophysicalProperties, + 'blockMechanism': BlockMechanism, + 'blockingPlasticSynapse': BlockingPlasticSynapse, + 'cell': Cell, + 'cellSet': CellSet, + 'channelDensity': ChannelDensity, + 'channelPopulation': ChannelPopulation, + 'connection': Connection, + 'decayingPoolConcentrationModel': DecayingPoolConcentrationModel, 'distal': DistalDetails, - 'random': RandomLayout, - 'variableParameter': VariableParameter, - 'subTree': SubTree, - 'gateHHtauInf': GateHHTauInf, - 'inputList': InputList, - 'specificCapacitance': ValueAcrossSegOrSegGroup, - 'ionChannel': IonChannel, + 'expCondSynapse': ExpCondSynapse, + 'expCurrSynapse': ExpCurrSynapse, + 'expOneSynapse': ExpOneSynapse, + 'expTwoSynapse': ExpTwoSynapse, + 'explicitInput': ExplicitInput, + 'extracellularProperties': ExtracellularPropertiesLocal, + 'forwardRate': HHRate, + 'from': SegmentEndPoint, + 'gate': GateHHUndetermined, + 'gateHHrates': GateHHRates, + 'gateHHratesInf': GateHHRatesInf, 'gateHHratesTau': GateHHRatesTau, - 'biophysicalProperties': BiophysicalProperties, - 'membraneProperties': MembraneProperties, - 'proximal': ProximalDetails, - 'path': Path, - 'morphology': Morphology, + 'gateHHtauInf': GateHHTauInf, + 'grid': GridLayout, 'iafCell': IaFCell, + 'iafRefCell': IaFRefCell, + 'iafTauCell': IaFTauCell, 'iafTauRefCell': IaFTauRefCell, - 'species': Species, - 'resistivity': ValueAcrossSegOrSegGroup, - 'member': Member, + 'include': Include, + 'inhomogeneousParam': InhomogeneousParam, 'inhomogeneousValue': InhomogeneousValue, - 'spikeGeneratorRandom': SpikeGeneratorRandom, - 'sineGenerator': SineGenerator, - 'expCondSynapse': ExpCondSynapse, - 'network': Network, - 'reverseRate': HHRate, - 'decayingPoolConcentrationModel': DecayingPoolConcentrationModel, - 'segment': Segment, - 'rampGenerator': RampGenerator, - 'cellSet': CellSet, - 'gateHHrates': GateHHRates, - 'cell': Cell, - 'to': SegmentEndPoint, - 'voltageClamp': VoltageClamp, 'initMembPotential': ValueAcrossSegOrSegGroup, - 'projection': Projection, - 'spike': Spike, - 'gate': GateHHUndetermined, - 'steadyState': HHVariable, - 'include': Include, - 'forwardRate': HHRate, + 'input': Input, + 'inputList': InputList, + 'instance': Instance, + 'intracellularProperties': IntracellularProperties, + 'ionChannel': IonChannel, + 'izhikevichCell': IzhikevichCell, + 'layout': Layout, 'location': Location, - 'synapticConnection': SynapticConnection, + 'member': Member, + 'membraneProperties': MembraneProperties, + 'morphology': Morphology, + 'network': Network, 'neuroml': NeuroMLDocument, - 'from': SegmentEndPoint, - 'blockMechanism': BlockMechanism, - 'gateHHratesInf': GateHHRatesInf, 'parent': SegmentParent, + 'path': Path, 'plasticityMechanism': PlasticityMechanism, - 'spikeThresh': ValueAcrossSegOrSegGroup, - 'annotation': Annotation, - 'instance': Instance, - 'adExIaFCell': AdExIaFCell, - 'grid': GridLayout, - 'alphaCondSynapse': AlphaCondSynapse, - 'izhikevichCell': IzhikevichCell, - 'input': Input, - 'iafTauCell': IaFTauCell, - 'segmentGroup': SegmentGroup, - 'expTwoSynapse': ExpTwoSynapse, + 'population': Population, + 'projection': Projection, + 'proximal': ProximalDetails, 'pulseGenerator': PulseGenerator, - 'iafRefCell': IaFRefCell, - 'structure': SpaceStructure, - 'spikeArray': SpikeArray, - 'unstructured': UnstructuredLayout, - 'blockingPlasticSynapse': BlockingPlasticSynapse, - 'reversalPotential': ReversalPotential, - 'channelPopulation': ChannelPopulation, - 'alphaCurrSynapse': AlphaCurrSynapse, + 'q10Settings': Q10Settings, + 'rampGenerator': RampGenerator, + 'random': RandomLayout, 'region': Region, + 'resistivity': ValueAcrossSegOrSegGroup, + 'reversalPotential': ReversalPotential, + 'reverseRate': HHRate, + 'segment': Segment, + 'segmentGroup': SegmentGroup, + 'sineGenerator': SineGenerator, 'space': Space, - 'expCurrSynapse': ExpCurrSynapse, - 'population': Population, - 'timeCourse': HHTime, - 'explicitInput': ExplicitInput, - 'extracellularProperties': ExtracellularPropertiesLocal, - 'connection': Connection, + 'species': Species, + 'specificCapacitance': ValueAcrossSegOrSegGroup, + 'spike': Spike, + 'spikeArray': SpikeArray, + 'spikeGenerator': SpikeGenerator, 'spikeGeneratorPoisson': SpikeGeneratorPoisson, - 'channelDensity': ChannelDensity, - 'expOneSynapse': ExpOneSynapse, - 'layout': Layout, - 'baseCell': BaseCell, + 'spikeGeneratorRandom': SpikeGeneratorRandom, + 'spikeThresh': ValueAcrossSegOrSegGroup, + 'steadyState': HHVariable, + 'structure': SpaceStructure, + 'subTree': SubTree, + 'synapticConnection': SynapticConnection, + 'timeCourse': HHTime, + 'to': SegmentEndPoint, + 'unstructured': UnstructuredLayout, + 'variableParameter': VariableParameter, + 'voltageClamp': VoltageClamp, } @@ -14158,8 +12525,9 @@ def get_root_tag(node): return tag, rootClass -def parse(inFileName): - doc = parsexml_(inFileName) +def parse(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: @@ -14169,16 +12537,18 @@ def parse(inFileName): rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None -## sys.stdout.write('<?xml version="1.0" ?>\n') -## rootObj.export( -## sys.stdout, 0, name_=rootTag, -## namespacedef_='', -## pretty_print=True) + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='', + pretty_print=True) return rootObj -def parseEtree(inFileName): - doc = parsexml_(inFileName) +def parseEtree(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: @@ -14191,35 +12561,39 @@ def parseEtree(inFileName): mapping = {} rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping) reverse_mapping = rootObj.gds_reverse_node_mapping(mapping) -## content = etree_.tostring( -## rootElement, pretty_print=True, -## xml_declaration=True, encoding="utf-8") -## sys.stdout.write(content) -## sys.stdout.write('\n') + if not silence: + content = etree_.tostring( + rootElement, pretty_print=True, + xml_declaration=True, encoding="utf-8") + sys.stdout.write(content) + sys.stdout.write('\n') return rootObj, rootElement, mapping, reverse_mapping -def parseString(inString): - from io import StringIO - doc = parsexml_(StringIO(inString)) +def parseString(inString, silence=False): + from StringIO import StringIO + parser = None + doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() - roots = get_root_tag(rootNode) - rootClass = roots[1] + rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: + rootTag = 'Annotation' rootClass = Annotation rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None -## sys.stdout.write('<?xml version="1.0" ?>\n') -## rootObj.export( -## sys.stdout, 0, name_="Annotation", -## namespacedef_='') + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='') return rootObj -def parseLiteral(inFileName): - doc = parsexml_(inFileName) +def parseLiteral(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: @@ -14229,11 +12603,12 @@ def parseLiteral(inFileName): rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None -## sys.stdout.write('#from generated_neuroml import *\n\n') -## sys.stdout.write('import generated_neuroml as model_\n\n') -## sys.stdout.write('rootObj = model_.rootTag(\n') -## rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) -## sys.stdout.write(')\n') + if not silence: + sys.stdout.write('#from generated_neuroml import *\n\n') + sys.stdout.write('import generated_neuroml as model_\n\n') + sys.stdout.write('rootObj = model_.rootClass(\n') + rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) + sys.stdout.write(')\n') return rootObj diff --git a/python/moose/neuroml2/generated_neuromlsub.py b/python/moose/neuroml2/generated_neuromlsub.py index 5b2eb233dd326ae5201bcdb64764070ccafb3bee..3f066bdd3c82ad6b5cc8f46713147702ea289bdc 100644 --- a/python/moose/neuroml2/generated_neuromlsub.py +++ b/python/moose/neuroml2/generated_neuromlsub.py @@ -1,64 +1,33 @@ #!/usr/bin/env python # -# Generated Sun Jul 28 10:18:38 2013 by generateDS.py version 2.10a. +# Generated Sun Apr 17 15:01:32 2016 by generateDS.py version 2.22a. +# +# Command line options: +# ('-o', 'generated_neuroml.py') +# ('-s', 'generated_neuromlsub.py') +# +# Command line arguments: +# /home/subha/src/neuroml_dev/NeuroML2/Schemas/NeuroML2/NeuroML_v2beta.xsd +# +# Command line: +# /home/subha/.local/bin/generateDS.py -o "generated_neuroml.py" -s "generated_neuromlsub.py" /home/subha/src/neuroml_dev/NeuroML2/Schemas/NeuroML2/NeuroML_v2beta.xsd +# +# Current working directory (os.getcwd()): +# neuroml2 # import sys +from lxml import etree as etree_ -etree_ = None -Verbose_import_ = False -( - XMLParser_import_none, XMLParser_import_lxml, - XMLParser_import_elementtree -) = range(3) -XMLParser_import_library = None -try: - # lxml - from lxml import etree as etree_ - XMLParser_import_library = XMLParser_import_lxml - if Verbose_import_: - print("running with lxml.etree") -except ImportError: - try: - # cElementTree from Python 2.5+ - import xml.etree.cElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with cElementTree on Python 2.5+") - except ImportError: - try: - # ElementTree from Python 2.5+ - import xml.etree.ElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with ElementTree on Python 2.5+") - except ImportError: - try: - # normal cElementTree install - import cElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with cElementTree") - except ImportError: - try: - # normal ElementTree install - import elementtree.ElementTree as etree_ - XMLParser_import_library = XMLParser_import_elementtree - if Verbose_import_: - print("running with ElementTree") - except ImportError: - raise ImportError( - "Failed to import ElementTree from any known place") - - -def parsexml_(*args, **kwargs): - if (XMLParser_import_library == XMLParser_import_lxml and - 'parser' not in kwargs): +import ??? as supermod + +def parsexml_(infile, parser=None, **kwargs): + if parser is None: # Use the lxml ElementTree compatible parser so that, e.g., # we ignore comments. - kwargs['parser'] = etree_.ETCompatXMLParser() - doc = etree_.parse(*args, **kwargs) + parser = etree_.ETCompatXMLParser() + doc = etree_.parse(infile, parser=parser, **kwargs) return doc # @@ -80,8 +49,8 @@ supermod.Annotation.subclass = AnnotationSub class ComponentTypeSub(supermod.ComponentType): - def __init__(self, extends=None, name=None, description=None, anytypeobjs_=None): - super(ComponentTypeSub, self).__init__(extends, name, description, anytypeobjs_, ) + def __init__(self, name=None, extends=None, description=None, anytypeobjs_=None): + super(ComponentTypeSub, self).__init__(name, extends, description, anytypeobjs_, ) supermod.ComponentType.subclass = ComponentTypeSub # end class ComponentTypeSub @@ -94,57 +63,57 @@ supermod.IncludeType.subclass = IncludeTypeSub class Q10SettingsSub(supermod.Q10Settings): - def __init__(self, fixedQ10=None, experimentalTemp=None, type_=None, q10Factor=None): - super(Q10SettingsSub, self).__init__(fixedQ10, experimentalTemp, type_, q10Factor, ) + def __init__(self, type_=None, fixedQ10=None, q10Factor=None, experimentalTemp=None): + super(Q10SettingsSub, self).__init__(type_, fixedQ10, q10Factor, experimentalTemp, ) supermod.Q10Settings.subclass = Q10SettingsSub # end class Q10SettingsSub class HHRateSub(supermod.HHRate): - def __init__(self, midpoint=None, rate=None, scale=None, type_=None): - super(HHRateSub, self).__init__(midpoint, rate, scale, type_, ) + def __init__(self, type_=None, rate=None, midpoint=None, scale=None): + super(HHRateSub, self).__init__(type_, rate, midpoint, scale, ) supermod.HHRate.subclass = HHRateSub # end class HHRateSub class HHVariableSub(supermod.HHVariable): - def __init__(self, midpoint=None, rate=None, scale=None, type_=None): - super(HHVariableSub, self).__init__(midpoint, rate, scale, type_, ) + def __init__(self, type_=None, rate=None, midpoint=None, scale=None): + super(HHVariableSub, self).__init__(type_, rate, midpoint, scale, ) supermod.HHVariable.subclass = HHVariableSub # end class HHVariableSub class HHTimeSub(supermod.HHTime): - def __init__(self, midpoint=None, rate=None, scale=None, type_=None, tau=None): - super(HHTimeSub, self).__init__(midpoint, rate, scale, type_, tau, ) + def __init__(self, type_=None, rate=None, midpoint=None, scale=None, tau=None): + super(HHTimeSub, self).__init__(type_, rate, midpoint, scale, tau, ) supermod.HHTime.subclass = HHTimeSub # end class HHTimeSub class BlockMechanismSub(supermod.BlockMechanism): - def __init__(self, blockConcentration=None, scalingConc=None, type_=None, species=None, scalingVolt=None): - super(BlockMechanismSub, self).__init__(blockConcentration, scalingConc, type_, species, scalingVolt, ) + def __init__(self, type_=None, species=None, blockConcentration=None, scalingConc=None, scalingVolt=None): + super(BlockMechanismSub, self).__init__(type_, species, blockConcentration, scalingConc, scalingVolt, ) supermod.BlockMechanism.subclass = BlockMechanismSub # end class BlockMechanismSub class PlasticityMechanismSub(supermod.PlasticityMechanism): - def __init__(self, type_=None, tauFac=None, tauRec=None, initReleaseProb=None): - super(PlasticityMechanismSub, self).__init__(type_, tauFac, tauRec, initReleaseProb, ) + def __init__(self, type_=None, initReleaseProb=None, tauRec=None, tauFac=None): + super(PlasticityMechanismSub, self).__init__(type_, initReleaseProb, tauRec, tauFac, ) supermod.PlasticityMechanism.subclass = PlasticityMechanismSub # end class PlasticityMechanismSub class SegmentParentSub(supermod.SegmentParent): - def __init__(self, fractionAlong='1', segment=None): - super(SegmentParentSub, self).__init__(fractionAlong, segment, ) + def __init__(self, segment=None, fractionAlong='1'): + super(SegmentParentSub, self).__init__(segment, fractionAlong, ) supermod.SegmentParent.subclass = SegmentParentSub # end class SegmentParentSub class Point3DWithDiamSub(supermod.Point3DWithDiam): - def __init__(self, y=None, x=None, z=None, diameter=None): - super(Point3DWithDiamSub, self).__init__(y, x, z, diameter, ) + def __init__(self, x=None, y=None, z=None, diameter=None): + super(Point3DWithDiamSub, self).__init__(x, y, z, diameter, ) supermod.Point3DWithDiam.subclass = Point3DWithDiamSub # end class Point3DWithDiamSub @@ -178,15 +147,15 @@ supermod.Include.subclass = IncludeSub class PathSub(supermod.Path): - def __init__(self, fromxx=None, to=None): - super(PathSub, self).__init__(fromxx, to, ) + def __init__(self, from_=None, to=None): + super(PathSub, self).__init__(from_, to, ) supermod.Path.subclass = PathSub # end class PathSub class SubTreeSub(supermod.SubTree): - def __init__(self, fromxx=None, to=None): - super(SubTreeSub, self).__init__(fromxx, to, ) + def __init__(self, from_=None, to=None): + super(SubTreeSub, self).__init__(from_, to, ) supermod.SubTree.subclass = SubTreeSub # end class SubTreeSub @@ -206,15 +175,15 @@ supermod.MembraneProperties.subclass = MembranePropertiesSub class ValueAcrossSegOrSegGroupSub(supermod.ValueAcrossSegOrSegGroup): - def __init__(self, segment=None, segmentGroup='all', value=None, extensiontype_=None): - super(ValueAcrossSegOrSegGroupSub, self).__init__(segment, segmentGroup, value, extensiontype_, ) + def __init__(self, value=None, segmentGroup='all', segment=None, extensiontype_=None): + super(ValueAcrossSegOrSegGroupSub, self).__init__(value, segmentGroup, segment, extensiontype_, ) supermod.ValueAcrossSegOrSegGroup.subclass = ValueAcrossSegOrSegGroupSub # end class ValueAcrossSegOrSegGroupSub class VariableParameterSub(supermod.VariableParameter): - def __init__(self, segmentGroup=None, parameter=None, inhomogeneousValue=None): - super(VariableParameterSub, self).__init__(segmentGroup, parameter, inhomogeneousValue, ) + def __init__(self, parameter=None, segmentGroup=None, inhomogeneousValue=None): + super(VariableParameterSub, self).__init__(parameter, segmentGroup, inhomogeneousValue, ) supermod.VariableParameter.subclass = VariableParameterSub # end class VariableParameterSub @@ -227,15 +196,15 @@ supermod.InhomogeneousValue.subclass = InhomogeneousValueSub class ReversalPotentialSub(supermod.ReversalPotential): - def __init__(self, segment=None, segmentGroup='all', value=None, species=None): - super(ReversalPotentialSub, self).__init__(segment, segmentGroup, value, species, ) + def __init__(self, value=None, segmentGroup='all', segment=None, species=None): + super(ReversalPotentialSub, self).__init__(value, segmentGroup, segment, species, ) supermod.ReversalPotential.subclass = ReversalPotentialSub # end class ReversalPotentialSub class SpeciesSub(supermod.Species): - def __init__(self, segment=None, segmentGroup='all', value=None, ion=None, initialExtConcentration=None, concentrationModel=None, id=None, initialConcentration=None): - super(SpeciesSub, self).__init__(segment, segmentGroup, value, ion, initialExtConcentration, concentrationModel, id, initialConcentration, ) + def __init__(self, value=None, segmentGroup='all', segment=None, id=None, concentrationModel=None, ion=None, initialConcentration=None, initialExtConcentration=None): + super(SpeciesSub, self).__init__(value, segmentGroup, segment, id, concentrationModel, ion, initialConcentration, initialExtConcentration, ) supermod.Species.subclass = SpeciesSub # end class SpeciesSub @@ -255,8 +224,8 @@ supermod.ExtracellularPropertiesLocal.subclass = ExtracellularPropertiesLocalSub class SpaceStructureSub(supermod.SpaceStructure): - def __init__(self, ySpacing=None, zStart=0, yStart=0, zSpacing=None, xStart=0, xSpacing=None): - super(SpaceStructureSub, self).__init__(ySpacing, zStart, yStart, zSpacing, xStart, xSpacing, ) + def __init__(self, xSpacing=None, ySpacing=None, zSpacing=None, xStart=0, yStart=0, zStart=0): + super(SpaceStructureSub, self).__init__(xSpacing, ySpacing, zSpacing, xStart, yStart, zStart, ) supermod.SpaceStructure.subclass = SpaceStructureSub # end class SpaceStructureSub @@ -276,57 +245,57 @@ supermod.UnstructuredLayout.subclass = UnstructuredLayoutSub class RandomLayoutSub(supermod.RandomLayout): - def __init__(self, region=None, number=None): - super(RandomLayoutSub, self).__init__(region, number, ) + def __init__(self, number=None, region=None): + super(RandomLayoutSub, self).__init__(number, region, ) supermod.RandomLayout.subclass = RandomLayoutSub # end class RandomLayoutSub class GridLayoutSub(supermod.GridLayout): - def __init__(self, zSize=None, ySize=None, xSize=None): - super(GridLayoutSub, self).__init__(zSize, ySize, xSize, ) + def __init__(self, xSize=None, ySize=None, zSize=None): + super(GridLayoutSub, self).__init__(xSize, ySize, zSize, ) supermod.GridLayout.subclass = GridLayoutSub # end class GridLayoutSub class InstanceSub(supermod.Instance): - def __init__(self, i=None, k=None, j=None, id=None, location=None): - super(InstanceSub, self).__init__(i, k, j, id, location, ) + def __init__(self, id=None, i=None, j=None, k=None, location=None): + super(InstanceSub, self).__init__(id, i, j, k, location, ) supermod.Instance.subclass = InstanceSub # end class InstanceSub class LocationSub(supermod.Location): - def __init__(self, y=None, x=None, z=None): - super(LocationSub, self).__init__(y, x, z, ) + def __init__(self, x=None, y=None, z=None): + super(LocationSub, self).__init__(x, y, z, ) supermod.Location.subclass = LocationSub # end class LocationSub class SynapticConnectionSub(supermod.SynapticConnection): - def __init__(self, to=None, synapse=None, fromxx=None): - super(SynapticConnectionSub, self).__init__(to, synapse, fromxx, ) + def __init__(self, from_=None, to=None, synapse=None): + super(SynapticConnectionSub, self).__init__(from_, to, synapse, ) supermod.SynapticConnection.subclass = SynapticConnectionSub # end class SynapticConnectionSub class ConnectionSub(supermod.Connection): - def __init__(self, postCellId=None, id=None, preCellId=None): - super(ConnectionSub, self).__init__(postCellId, id, preCellId, ) + def __init__(self, id=None, preCellId=None, postCellId=None): + super(ConnectionSub, self).__init__(id, preCellId, postCellId, ) supermod.Connection.subclass = ConnectionSub # end class ConnectionSub class ExplicitInputSub(supermod.ExplicitInput): - def __init__(self, input=None, destination=None, target=None): - super(ExplicitInputSub, self).__init__(input, destination, target, ) + def __init__(self, target=None, input=None, destination=None): + super(ExplicitInputSub, self).__init__(target, input, destination, ) supermod.ExplicitInput.subclass = ExplicitInputSub # end class ExplicitInputSub class InputSub(supermod.Input): - def __init__(self, destination=None, id=None, target=None): - super(InputSub, self).__init__(destination, id, target, ) + def __init__(self, id=None, target=None, destination=None): + super(InputSub, self).__init__(id, target, destination, ) supermod.Input.subclass = InputSub # end class InputSub @@ -346,22 +315,22 @@ supermod.Standalone.subclass = StandaloneSub class SpikeSourcePoissonSub(supermod.SpikeSourcePoisson): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, duration=None, start=None, rate=None): - super(SpikeSourcePoissonSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, duration, start, rate, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, start=None, duration=None, rate=None): + super(SpikeSourcePoissonSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, start, duration, rate, ) supermod.SpikeSourcePoisson.subclass = SpikeSourcePoissonSub # end class SpikeSourcePoissonSub class InputListSub(supermod.InputList): - def __init__(self, id=None, neuroLexId=None, component=None, population=None, input=None): - super(InputListSub, self).__init__(id, neuroLexId, component, population, input, ) + def __init__(self, id=None, neuroLexId=None, population=None, component=None, input=None): + super(InputListSub, self).__init__(id, neuroLexId, population, component, input, ) supermod.InputList.subclass = InputListSub # end class InputListSub class ProjectionSub(supermod.Projection): - def __init__(self, id=None, neuroLexId=None, postsynapticPopulation=None, presynapticPopulation=None, synapse=None, connection=None): - super(ProjectionSub, self).__init__(id, neuroLexId, postsynapticPopulation, presynapticPopulation, synapse, connection, ) + def __init__(self, id=None, neuroLexId=None, presynapticPopulation=None, postsynapticPopulation=None, synapse=None, connection=None): + super(ProjectionSub, self).__init__(id, neuroLexId, presynapticPopulation, postsynapticPopulation, synapse, connection, ) supermod.Projection.subclass = ProjectionSub # end class ProjectionSub @@ -374,8 +343,8 @@ supermod.CellSet.subclass = CellSetSub class PopulationSub(supermod.Population): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, extracellularProperties=None, network=None, component=None, cell=None, type_=None, size=None, layout=None, instance=None): - super(PopulationSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, extracellularProperties, network, component, cell, type_, size, layout, instance, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cell=None, network=None, component=None, size=None, type_=None, extracellularProperties=None, layout=None, instance=None): + super(PopulationSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cell, network, component, size, type_, extracellularProperties, layout, instance, ) supermod.Population.subclass = PopulationSub # end class PopulationSub @@ -409,8 +378,8 @@ supermod.SpikeGeneratorPoisson.subclass = SpikeGeneratorPoissonSub class SpikeGeneratorRandomSub(supermod.SpikeGeneratorRandom): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, minISI=None, maxISI=None): - super(SpikeGeneratorRandomSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, minISI, maxISI, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, maxISI=None, minISI=None): + super(SpikeGeneratorRandomSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, maxISI, minISI, ) supermod.SpikeGeneratorRandom.subclass = SpikeGeneratorRandomSub # end class SpikeGeneratorRandomSub @@ -437,22 +406,22 @@ supermod.Spike.subclass = SpikeSub class VoltageClampSub(supermod.VoltageClamp): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, seriesResistance=None, targetVoltage=None): - super(VoltageClampSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, delay, duration, seriesResistance, targetVoltage, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, targetVoltage=None, seriesResistance=None): + super(VoltageClampSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, delay, duration, targetVoltage, seriesResistance, ) supermod.VoltageClamp.subclass = VoltageClampSub # end class VoltageClampSub class RampGeneratorSub(supermod.RampGenerator): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, baselineAmplitude=None, startAmplitude=None, finishAmplitude=None): - super(RampGeneratorSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, delay, duration, baselineAmplitude, startAmplitude, finishAmplitude, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, duration=None, startAmplitude=None, finishAmplitude=None, baselineAmplitude=None): + super(RampGeneratorSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, delay, duration, startAmplitude, finishAmplitude, baselineAmplitude, ) supermod.RampGenerator.subclass = RampGeneratorSub # end class RampGeneratorSub class SineGeneratorSub(supermod.SineGenerator): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, phase=None, duration=None, period=None, amplitude=None): - super(SineGeneratorSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, delay, phase, duration, period, amplitude, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, delay=None, phase=None, duration=None, amplitude=None, period=None): + super(SineGeneratorSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, delay, phase, duration, amplitude, period, ) supermod.SineGenerator.subclass = SineGeneratorSub # end class SineGeneratorSub @@ -479,15 +448,15 @@ supermod.ExtracellularProperties.subclass = ExtracellularPropertiesSub class ChannelDensitySub(supermod.ChannelDensity): - def __init__(self, id=None, neuroLexId=None, segmentGroup='all', ion=None, ionChannel=None, erev=None, condDensity=None, segment=None, variableParameter=None): - super(ChannelDensitySub, self).__init__(id, neuroLexId, segmentGroup, ion, ionChannel, erev, condDensity, segment, variableParameter, ) + def __init__(self, id=None, neuroLexId=None, ionChannel=None, condDensity=None, erev=None, segmentGroup='all', segment=None, ion=None, variableParameter=None): + super(ChannelDensitySub, self).__init__(id, neuroLexId, ionChannel, condDensity, erev, segmentGroup, segment, ion, variableParameter, ) supermod.ChannelDensity.subclass = ChannelDensitySub # end class ChannelDensitySub class ChannelPopulationSub(supermod.ChannelPopulation): - def __init__(self, id=None, neuroLexId=None, segmentGroup='all', ion=None, number=None, ionChannel=None, erev=None, segment=None, variableParameter=None): - super(ChannelPopulationSub, self).__init__(id, neuroLexId, segmentGroup, ion, number, ionChannel, erev, segment, variableParameter, ) + def __init__(self, id=None, neuroLexId=None, ionChannel=None, number=None, erev=None, segmentGroup='all', segment=None, ion=None, variableParameter=None): + super(ChannelPopulationSub, self).__init__(id, neuroLexId, ionChannel, number, erev, segmentGroup, segment, ion, variableParameter, ) supermod.ChannelPopulation.subclass = ChannelPopulationSub # end class ChannelPopulationSub @@ -542,8 +511,8 @@ supermod.BaseSynapse.subclass = BaseSynapseSub class DecayingPoolConcentrationModelSub(supermod.DecayingPoolConcentrationModel): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, shellThickness=None, restingConc=None, decayConstant=None, extensiontype_=None): - super(DecayingPoolConcentrationModelSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ion, shellThickness, restingConc, decayConstant, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, restingConc=None, decayConstant=None, shellThickness=None, extensiontype_=None): + super(DecayingPoolConcentrationModelSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ion, restingConc, decayConstant, shellThickness, extensiontype_, ) supermod.DecayingPoolConcentrationModel.subclass = DecayingPoolConcentrationModelSub # end class DecayingPoolConcentrationModelSub @@ -584,8 +553,8 @@ supermod.GateHHUndetermined.subclass = GateHHUndeterminedSub class IonChannelSub(supermod.IonChannel): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, conductance=None, type_=None, species=None, gate=None, gateHHrates=None, gateHHratesTau=None, gateHHtauInf=None, gateHHratesInf=None): - super(IonChannelSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, conductance, type_, species, gate, gateHHrates, gateHHratesTau, gateHHtauInf, gateHHratesInf, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, species=None, type_=None, conductance=None, gate=None, gateHHrates=None, gateHHratesTau=None, gateHHtauInf=None, gateHHratesInf=None): + super(IonChannelSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, species, type_, conductance, gate, gateHHrates, gateHHratesTau, gateHHtauInf, gateHHratesInf, ) supermod.IonChannel.subclass = IonChannelSub # end class IonChannelSub @@ -605,57 +574,57 @@ supermod.BasePynnSynapse.subclass = BasePynnSynapseSub class basePyNNCellSub(supermod.basePyNNCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, extensiontype_=None): - super(basePyNNCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, extensiontype_=None): + super(basePyNNCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, extensiontype_, ) supermod.basePyNNCell.subclass = basePyNNCellSub # end class basePyNNCellSub class ConcentrationModel_DSub(supermod.ConcentrationModel_D): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, shellThickness=None, restingConc=None, decayConstant=None, type_=None): - super(ConcentrationModel_DSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ion, shellThickness, restingConc, decayConstant, type_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, ion=None, restingConc=None, decayConstant=None, shellThickness=None, type_=None): + super(ConcentrationModel_DSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, ion, restingConc, decayConstant, shellThickness, type_, ) supermod.ConcentrationModel_D.subclass = ConcentrationModel_DSub # end class ConcentrationModel_DSub class CellSub(supermod.Cell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, biophysicalProperties_attr=None, morphology_attr=None, morphology=None, biophysicalProperties=None): - super(CellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, biophysicalProperties_attr, morphology_attr, morphology, biophysicalProperties, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, morphology_attr=None, biophysicalProperties_attr=None, morphology=None, biophysicalProperties=None): + super(CellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, morphology_attr, biophysicalProperties_attr, morphology, biophysicalProperties, ) supermod.Cell.subclass = CellSub # end class CellSub class AdExIaFCellSub(supermod.AdExIaFCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, EL=None, C=None, b=None, refract=None, VT=None, delT=None, a=None, thresh=None, gL=None, tauw=None): - super(AdExIaFCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, EL, C, b, refract, VT, delT, a, thresh, gL, tauw, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, C=None, gL=None, EL=None, reset=None, VT=None, thresh=None, delT=None, tauw=None, refract=None, a=None, b=None): + super(AdExIaFCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, C, gL, EL, reset, VT, thresh, delT, tauw, refract, a, b, ) supermod.AdExIaFCell.subclass = AdExIaFCellSub # end class AdExIaFCellSub class IzhikevichCellSub(supermod.IzhikevichCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, a=None, c=None, b=None, d=None, v0=None, thresh=None): - super(IzhikevichCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, a, c, b, d, v0, thresh, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, v0=None, thresh=None, a=None, b=None, c=None, d=None): + super(IzhikevichCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, v0, thresh, a, b, c, d, ) supermod.IzhikevichCell.subclass = IzhikevichCellSub # end class IzhikevichCellSub class IaFCellSub(supermod.IaFCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, C=None, thresh=None, leakConductance=None, leakReversal=None, extensiontype_=None): - super(IaFCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, C, thresh, leakConductance, leakReversal, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, C=None, leakConductance=None, extensiontype_=None): + super(IaFCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, leakReversal, thresh, reset, C, leakConductance, extensiontype_, ) supermod.IaFCell.subclass = IaFCellSub # end class IaFCellSub class IaFTauCellSub(supermod.IaFTauCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, tau=None, thresh=None, leakReversal=None, extensiontype_=None): - super(IaFTauCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, tau, thresh, leakReversal, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, tau=None, extensiontype_=None): + super(IaFTauCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, leakReversal, thresh, reset, tau, extensiontype_, ) supermod.IaFTauCell.subclass = IaFTauCellSub # end class IaFTauCellSub class BaseConductanceBasedSynapseSub(supermod.BaseConductanceBasedSynapse): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, extensiontype_=None): - super(BaseConductanceBasedSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, extensiontype_=None): + super(BaseConductanceBasedSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, extensiontype_, ) supermod.BaseConductanceBasedSynapse.subclass = BaseConductanceBasedSynapseSub # end class BaseConductanceBasedSynapseSub @@ -689,99 +658,99 @@ supermod.ExpCondSynapse.subclass = ExpCondSynapseSub class HH_cond_expSub(supermod.HH_cond_exp): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, gbar_K=None, e_rev_E=None, g_leak=None, e_rev_Na=None, e_rev_I=None, e_rev_K=None, e_rev_leak=None, v_offset=None, gbar_Na=None): - super(HH_cond_expSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, gbar_K, e_rev_E, g_leak, e_rev_Na, e_rev_I, e_rev_K, e_rev_leak, v_offset, gbar_Na, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, v_offset=None, e_rev_E=None, e_rev_I=None, e_rev_K=None, e_rev_Na=None, e_rev_leak=None, g_leak=None, gbar_K=None, gbar_Na=None): + super(HH_cond_expSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, v_offset, e_rev_E, e_rev_I, e_rev_K, e_rev_Na, e_rev_leak, g_leak, gbar_K, gbar_Na, ) supermod.HH_cond_exp.subclass = HH_cond_expSub # end class HH_cond_expSub class basePyNNIaFCellSub(supermod.basePyNNIaFCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, extensiontype_=None): - super(basePyNNIaFCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, extensiontype_=None): + super(basePyNNIaFCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, extensiontype_, ) supermod.basePyNNIaFCell.subclass = basePyNNIaFCellSub # end class basePyNNIaFCellSub class IaFRefCellSub(supermod.IaFRefCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, C=None, thresh=None, leakConductance=None, leakReversal=None, refract=None): - super(IaFRefCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, C, thresh, leakConductance, leakReversal, refract, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, C=None, leakConductance=None, refract=None): + super(IaFRefCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, leakReversal, thresh, reset, C, leakConductance, refract, ) supermod.IaFRefCell.subclass = IaFRefCellSub # end class IaFRefCellSub class IaFTauRefCellSub(supermod.IaFTauRefCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, reset=None, tau=None, thresh=None, leakReversal=None, refract=None): - super(IaFTauRefCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, reset, tau, thresh, leakReversal, refract, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, leakReversal=None, thresh=None, reset=None, tau=None, refract=None): + super(IaFTauRefCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, leakReversal, thresh, reset, tau, refract, ) supermod.IaFTauRefCell.subclass = IaFTauRefCellSub # end class IaFTauRefCellSub class ExpTwoSynapseSub(supermod.ExpTwoSynapse): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, tauDecay=None, tauRise=None, extensiontype_=None): - super(ExpTwoSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, tauDecay, tauRise, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, tauDecay=None, tauRise=None, extensiontype_=None): + super(ExpTwoSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, tauDecay, tauRise, extensiontype_, ) supermod.ExpTwoSynapse.subclass = ExpTwoSynapseSub # end class ExpTwoSynapseSub class ExpOneSynapseSub(supermod.ExpOneSynapse): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, tauDecay=None): - super(ExpOneSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, tauDecay, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, tauDecay=None): + super(ExpOneSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, tauDecay, ) supermod.ExpOneSynapse.subclass = ExpOneSynapseSub # end class ExpOneSynapseSub class IF_curr_expSub(supermod.IF_curr_exp): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None): - super(IF_curr_expSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None): + super(IF_curr_expSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, ) supermod.IF_curr_exp.subclass = IF_curr_expSub # end class IF_curr_expSub class IF_curr_alphaSub(supermod.IF_curr_alpha): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None): - super(IF_curr_alphaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None): + super(IF_curr_alphaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, ) supermod.IF_curr_alpha.subclass = IF_curr_alphaSub # end class IF_curr_alphaSub class basePyNNIaFCondCellSub(supermod.basePyNNIaFCondCell): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None, extensiontype_=None): - super(basePyNNIaFCondCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, extensiontype_, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None, extensiontype_=None): + super(basePyNNIaFCondCellSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, extensiontype_, ) supermod.basePyNNIaFCondCell.subclass = basePyNNIaFCondCellSub # end class basePyNNIaFCondCellSub class BlockingPlasticSynapseSub(supermod.BlockingPlasticSynapse): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, erev=None, gbase=None, tauDecay=None, tauRise=None, plasticityMechanism=None, blockMechanism=None): - super(BlockingPlasticSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, erev, gbase, tauDecay, tauRise, plasticityMechanism, blockMechanism, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, gbase=None, erev=None, tauDecay=None, tauRise=None, plasticityMechanism=None, blockMechanism=None): + super(BlockingPlasticSynapseSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, gbase, erev, tauDecay, tauRise, plasticityMechanism, blockMechanism, ) supermod.BlockingPlasticSynapse.subclass = BlockingPlasticSynapseSub # end class BlockingPlasticSynapseSub class EIF_cond_alpha_isfa_istaSub(supermod.EIF_cond_alpha_isfa_ista): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None, a=None, delta_T=None, b=None, v_spike=None, tau_w=None): - super(EIF_cond_alpha_isfa_istaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, a, delta_T, b, v_spike, tau_w, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None, a=None, b=None, delta_T=None, tau_w=None, v_spike=None): + super(EIF_cond_alpha_isfa_istaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, a, b, delta_T, tau_w, v_spike, ) supermod.EIF_cond_alpha_isfa_ista.subclass = EIF_cond_alpha_isfa_istaSub # end class EIF_cond_alpha_isfa_istaSub class EIF_cond_exp_isfa_istaSub(supermod.EIF_cond_exp_isfa_ista): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None, a=None, delta_T=None, b=None, v_spike=None, tau_w=None): - super(EIF_cond_exp_isfa_istaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, a, delta_T, b, v_spike, tau_w, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None, a=None, b=None, delta_T=None, tau_w=None, v_spike=None): + super(EIF_cond_exp_isfa_istaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, a, b, delta_T, tau_w, v_spike, ) supermod.EIF_cond_exp_isfa_ista.subclass = EIF_cond_exp_isfa_istaSub # end class EIF_cond_exp_isfa_istaSub class IF_cond_expSub(supermod.IF_cond_exp): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None): - super(IF_cond_expSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None): + super(IF_cond_expSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, ) supermod.IF_cond_exp.subclass = IF_cond_expSub # end class IF_cond_expSub class IF_cond_alphaSub(supermod.IF_cond_alpha): - def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, tau_syn_I=None, tau_syn_E=None, i_offset=None, cm=None, v_init=None, tau_refrac=None, v_thresh=None, tau_m=None, v_reset=None, v_rest=None, e_rev_I=None, e_rev_E=None): - super(IF_cond_alphaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, tau_syn_I, tau_syn_E, i_offset, cm, v_init, tau_refrac, v_thresh, tau_m, v_reset, v_rest, e_rev_I, e_rev_E, ) + def __init__(self, id=None, neuroLexId=None, name=None, metaid=None, notes=None, annotation=None, cm=None, i_offset=None, tau_syn_E=None, tau_syn_I=None, v_init=None, tau_m=None, tau_refrac=None, v_reset=None, v_rest=None, v_thresh=None, e_rev_E=None, e_rev_I=None): + super(IF_cond_alphaSub, self).__init__(id, neuroLexId, name, metaid, notes, annotation, cm, i_offset, tau_syn_E, tau_syn_I, v_init, tau_m, tau_refrac, v_reset, v_rest, v_thresh, e_rev_E, e_rev_I, ) supermod.IF_cond_alpha.subclass = IF_cond_alphaSub # end class IF_cond_alphaSub @@ -795,8 +764,9 @@ def get_root_tag(node): return tag, rootClass -def parse(inFilename): - doc = parsexml_(inFilename) +def parse(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: @@ -806,16 +776,18 @@ def parse(inFilename): rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None -## sys.stdout.write('<?xml version="1.0" ?>\n') -## rootObj.export( -## sys.stdout, 0, name_=rootTag, -## namespacedef_='', -## pretty_print=True) + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='', + pretty_print=True) return rootObj -def parseEtree(inFilename): - doc = parsexml_(inFilename) +def parseEtree(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: @@ -828,17 +800,19 @@ def parseEtree(inFilename): mapping = {} rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping) reverse_mapping = rootObj.gds_reverse_node_mapping(mapping) -## content = etree_.tostring( -## rootElement, pretty_print=True, -## xml_declaration=True, encoding="utf-8") -## sys.stdout.write(content) -## sys.stdout.write('\n') + if not silence: + content = etree_.tostring( + rootElement, pretty_print=True, + xml_declaration=True, encoding="utf-8") + sys.stdout.write(content) + sys.stdout.write('\n') return rootObj, rootElement, mapping, reverse_mapping -def parseString(inString): - from io import StringIO - doc = parsexml_(StringIO(inString)) +def parseString(inString, silence=False): + from StringIO import StringIO + parser = None + doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: @@ -848,29 +822,32 @@ def parseString(inString): rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None -## sys.stdout.write('<?xml version="1.0" ?>\n') -## rootObj.export( -## sys.stdout, 0, name_=rootTag, -## namespacedef_='') + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='') return rootObj -def parseLiteral(inFilename): - doc = parsexml_(inFilename) +def parseLiteral(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) rootNode = doc.getroot() - roots = get_root_tag(rootNode) - rootClass = roots[1] + rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: + rootTag = 'Annotation' rootClass = supermod.Annotation rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None -## sys.stdout.write('#from ??? import *\n\n') -## sys.stdout.write('import ??? as model_\n\n') -## sys.stdout.write('rootObj = model_.Annotation(\n') -## rootObj.exportLiteral(sys.stdout, 0, name_="Annotation") -## sys.stdout.write(')\n') + if not silence: + sys.stdout.write('#from ??? import *\n\n') + sys.stdout.write('import ??? as model_\n\n') + sys.stdout.write('rootObj = model_.rootClass(\n') + rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) + sys.stdout.write(')\n') return rootObj diff --git a/python/moose/neuroml2/test_files/NML2_FullCell.nml b/python/moose/neuroml2/test_files/NML2_FullCell.nml index e45c9116631af7376c4120e04bd2ffd9acb97a75..b69375040420117818269c1c5789f67af37cd606 100644 --- a/python/moose/neuroml2/test_files/NML2_FullCell.nml +++ b/python/moose/neuroml2/test_files/NML2_FullCell.nml @@ -3,15 +3,14 @@ <neuroml xmlns="http://www.neuroml.org/schema/neuroml2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude" - xsi:schemaLocation="http://www.neuroml.org/schema/neuroml2 http://neuroml.svn.sourceforge.net/viewvc/neuroml/NeuroML2/Schemas/NeuroML2/NeuroML_v2alpha.xsd" + xsi:schemaLocation="http://www.neuroml.org/schema/neuroml2 ../Schemas/NeuroML2/NeuroML_v2beta3.xsd" id="NML2_FullCell"> <!-- Example of a multicompartmental cell with biophysics in NeuroML 2 --> -<!-- This is a "pure" NeuroML 2 file. It cannot yet be used a simulation by the LEMS - Interpreter as this does not yet support multicompartment cells --> - +<!-- This is a "pure" NeuroML 2 file. It cannot currently used for simulations with + jLEMS/jNeuroML however, as jLEMS does not yet support multicompartmental cells --> <include href="SimpleIonChannel.xml"/> <!-- Contains ionChannel NaConductance --> @@ -25,12 +24,12 @@ <annotation> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"> <rdf:Description rdf:about="HippoCA1Cell"> - <bqbiol:isVersionOf> + <bqbiol:is> <rdf:Bag> <!-- This cell model is a version of a hippocampal CA1 pyramidal cell --> <rdf:li rdf:resource="urn:miriam:neurondb:258"/> </rdf:Bag> - </bqbiol:isVersionOf> + </bqbiol:is> </rdf:Description> </rdf:RDF> </annotation> @@ -82,27 +81,20 @@ <membraneProperties> - <channelPopulation id="naChansDend" ionChannel="NaConductance" segment="2" number="120000"/> <!-- Use population instead of density --> + <channelPopulation id="naChansDend" ionChannel="NaConductance" segment="2" number="120000" erev="50mV"/> <!-- Use population instead of density --> - <channelDensity id="pasChans" ionChannel="pas" condDensity="3.0 S_per_m2"/> <!-- no segmentGroup => all segments! --> + <channelDensity id="pasChans" ionChannel="pas" condDensity="3.0 S_per_m2" erev="-70mV"/> <!-- no segmentGroup => all segments! --> - <channelDensity id="naChansSoma" ionChannel="NaConductance" segmentGroup="soma_group" condDensity="120.0 mS_per_cm2"/> + <channelDensity id="naChansSoma" ionChannel="NaConductance" segmentGroup="soma_group" condDensity="120.0 mS_per_cm2" erev="50mV"/> <specificCapacitance segmentGroup="soma_group" value="1.0 uF_per_cm2"/> <specificCapacitance segmentGroup="dendrite_group" value="2.0 uF_per_cm2"/> - <reversalPotential species="na" value="55mV"/> - </membraneProperties> <intracellularProperties> - <!-- Ions present inside the cell. --> - <species id="ca"> - <fixedConcentration concentration="1e-5 mM"/> - </species> - <resistivity value="0.1 kohm_cm"/> <!-- Used for specific axial resistance --> </intracellularProperties> diff --git a/python/moose/neuroml2/test_files/SimpleIonChannel.xml b/python/moose/neuroml2/test_files/SimpleIonChannel.xml index ea7c8cd7170fd9f18c54dd8f1de099e474e09b93..354cf2ebd0474ab10165e2bbae2087315a50398b 100644 --- a/python/moose/neuroml2/test_files/SimpleIonChannel.xml +++ b/python/moose/neuroml2/test_files/SimpleIonChannel.xml @@ -1,15 +1,24 @@ -<neuroml xmlns="http://www.neuroml.org/schema/neuroml2" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema" id="ChannelMLDemo"> - <ionChannel id="NaConductance" conductance="10pS" type="ionChannelHH" species="na"> - <notes>This is an example voltage-gated Na channel</notes> - <gate id="m" instances="3"> - <forwardRate midpoint="-65mV" rate="0.07per_ms" scale="-20mV" type="HHExpRate"/> - <reverseRate midpoint="-35mV" rate="1per_ms" scale="10mV" type="HHSigmoidRate"/> - </gate> - <gate id="h" instances="1"> - <forwardRate midpoint="-55mV" rate="0.1per_ms" scale="10mV" type="HHExpLinearRate"/> - <reverseRate midpoint="-65mV" rate="0.125per_ms" scale="-80mV" type="HHExpRate"/> - </gate> - </ionChannel> - <ionChannel id="pas" type="ionChannelPassive"> - </ionChannel> +<?xml version="1.0" encoding="UTF-8"?> + +<neuroml xmlns="http://www.neuroml.org/schema/neuroml2" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.neuroml.org/schema/neuroml2 ../Schemas/NeuroML2/NeuroML_v2beta3.xsd" + id="NML2_SimpleIonChannel"> + + <!-- Example of a simple Na+ ion channel in NeuroML 2 --> + + <ionChannelHH id="na" conductance="10pS" species="na"> + + <gateHHrates id="m" instances="3"> + <forwardRate type="HHExpLinearRate" rate="1per_ms" midpoint="-40mV" scale="10mV"/> + <reverseRate type="HHExpRate" rate="4per_ms" midpoint="-65mV" scale="-18mV"/> + </gateHHrates> + + <gateHHrates id="h" instances="1"> + <forwardRate type="HHExpRate" rate="0.07per_ms" midpoint="-65mV" scale="-20mV"/> + <reverseRate type="HHSigmoidRate" rate="1per_ms" midpoint="-35mV" scale="10mV"/> + </gateHHrates> + + </ionChannelHH> + </neuroml> diff --git a/python/moose/writekkit.py b/python/moose/writekkit.py deleted file mode 100644 index f23e49689132f8819e043df167b0816ee38278ed..0000000000000000000000000000000000000000 --- a/python/moose/writekkit.py +++ /dev/null @@ -1,506 +0,0 @@ -import sys -import random -from . import wildcardFind, element, loadModel, ChemCompt, exists, Annotator, Pool, ZombiePool,PoolBase,CplxEnzBase,Function,ZombieFunction -import numpy as np - -#Todo : To be written -# --Notes -# --StimulusTable - -def writeKkit( modelpath, filename,sceneitems=None): - global NA - NA = 6.0221415e23 - global xmin,xmax,ymin,ymax - global cord - global multi - xmin = ymin = 0 - xmax = ymax = 1 - multi = 50 - cord = {} - compt = wildcardFind(modelpath+'/##[ISA=ChemCompt]') - maxVol = estimateDefaultVol(compt) - f = open(filename, 'w') - writeHeader (f,maxVol) - if (compt > 0): - if sceneitems == None: - #if sceneitems is none (loaded from script) then check x,y cord exists - xmin,ymin,xmax,ymax,positionInfoExist = getCor(modelpath,sceneitems) - if not positionInfoExist: - #incase of SBML or cspace or python Annotator is not populated then positionInfoExist= False - #print " x and y cordinates doesn't exist so auto cordinates" - print(" auto co-ordinates needs to be applied") - pass - else: - #This is when it comes from Gui where the objects are already layout on to scene - # so using thoes co-ordinates - xmin,ymin,xmax,ymax,positionInfoExist = getCor(modelpath,sceneitems) - - gtId_vol = writeCompartment(modelpath,compt,f) - writePool(modelpath,f,gtId_vol) - reacList = writeReac(modelpath,f) - enzList = writeEnz(modelpath,f) - writeSumtotal(modelpath,f) - storeReacMsg(reacList,f) - storeEnzMsg(enzList,f) - writeGui(f) - tgraphs = wildcardFind(modelpath+'/##[ISA=Table2]') - if tgraphs: - writeplot(tgraphs,f) - storePlotMsgs(tgraphs,f) - writeFooter(f) - return True - else: - print("Warning: writeKkit:: No model found on " , modelpath) - return False - -def storeCplxEnzMsgs( enz, f ): - for sub in enz.neighbors["subOut"]: - s = "addmsg /kinetics/" + trimPath( sub ) + " /kinetics/" + trimPath(enz) + " SUBSTRATE n \n"; - s = s+ "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath( sub ) + " REAC sA B \n"; - f.write(s) - for prd in enz.neighbors["prd"]: - s = "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath(prd) + " MM_PRD pA\n"; - f.write( s ) - for enzOut in enz.neighbors["enzOut"]: - s = "addmsg /kinetics/" + trimPath( enzOut ) + " /kinetics/" + trimPath(enz) + " ENZYME n\n"; - s = s+ "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath(enzOut) + " REAC eA B\n"; - f.write( s ) - -def storeMMenzMsgs( enz, f): - subList = enz.neighbors["subOut"] - prdList = enz.neighbors["prd"] - enzDestList = enz.neighbors["enzDest"] - for esub in subList: - es = "addmsg /kinetics/" + trimPath(element(esub)) + " /kinetics/" + trimPath(enz) + " SUBSTRATE n \n"; - es = es+"addmsg /kinetics/" + trimPath(enz) + " /kinetics/" + trimPath(element(esub)) + " REAC sA B \n"; - f.write(es) - - for eprd in prdList: - es = "addmsg /kinetics/" + trimPath( enz ) + " /kinetics/" + trimPath( element(eprd)) + " MM_PRD pA \n"; - f.write(es) - for eenzDest in enzDestList: - enzDest = "addmsg /kinetics/" + trimPath( element(eenzDest)) + " /kinetics/" + trimPath( enz ) + " ENZYME n \n"; - f.write(enzDest) - -def storeEnzMsg( enzList, f): - for enz in enzList: - enzClass = enz.className - if (enzClass == "ZombieMMenz" or enzClass == "MMenz"): - storeMMenzMsgs(enz, f) - else: - storeCplxEnzMsgs( enz, f ) - -def writeEnz( modelpath,f): - enzList = wildcardFind(modelpath+'/##[ISA=EnzBase]') - for enz in enzList: - x = random.randrange(0,10) - y = random.randrange(0,10) - textcolor = "green" - color = "red" - k1 = 0; - k2 = 0; - k3 = 0; - nInit = 0; - concInit = 0; - n = 0; - conc = 0; - enzParent = enz.parent - if (isinstance(enzParent.className,Pool)) or (isinstance(enzParent.className,ZombiePool)): - print(" raise exception enz doesn't have pool as parent") - return False - else: - vol = enzParent.volume * NA * 1e-3; - isMichaelisMenten = 0; - enzClass = enz.className - if (enzClass == "ZombieMMenz" or enzClass == "MMenz"): - k1 = enz.numKm - k3 = enz.kcat - k2 = 4.0*k3; - k1 = (k2 + k3) / k1; - isMichaelisMenten = 1; - - elif (enzClass == "ZombieEnz" or enzClass == "Enz"): - k1 = enz.k1 - k2 = enz.k2 - k3 = enz.k3 - cplx = enz.neighbors['cplx'][0] - nInit = cplx.nInit[0]; - - xe = cord[enz]['x'] - ye = cord[enz]['y'] - x = ((xe-xmin)/(xmax-xmin))*multi - y = ((ye-ymin)/(ymax-ymin))*multi - #y = ((ymax-ye)/(ymax-ymin))*multi - einfo = enz.path+'/info' - if exists(einfo): - color = Annotator(einfo).getField('color') - textcolor = Annotator(einfo).getField('textColor') - f.write("simundump kenz /kinetics/" + trimPath(enz) + " " + str(0)+ " " + - str(concInit) + " " + - str(conc) + " " + - str(nInit) + " " + - str(n) + " " + - str(vol) + " " + - str(k1) + " " + - str(k2) + " " + - str(k3) + " " + - str(0) + " " + - str(isMichaelisMenten) + " " + - "\"\"" + " " + - str(color) + " " + str(textcolor) + " \"\"" + - " " + str(x) + " " + str(y) + " "+str(0)+"\n") - return enzList -def storeReacMsg(reacList,f): - for reac in reacList: - reacPath = trimPath( reac); - sublist = reac.neighbors["subOut"] - prdlist = reac.neighbors["prd"] - for sub in sublist: - s = "addmsg /kinetics/" + trimPath( sub ) + " /kinetics/" + reacPath + " SUBSTRATE n \n"; - s = s + "addmsg /kinetics/" + reacPath + " /kinetics/" + trimPath( sub ) + " REAC A B \n"; - f.write(s) - - for prd in prdlist: - s = "addmsg /kinetics/" + trimPath( prd ) + " /kinetics/" + reacPath + " PRODUCT n \n"; - s = s + "addmsg /kinetics/" + reacPath + " /kinetics/" + trimPath( prd ) + " REAC B A\n"; - f.write( s) - -def writeReac(modelpath,f): - reacList = wildcardFind(modelpath+'/##[ISA=ReacBase]') - for reac in reacList : - color = "blue" - textcolor = "red" - kf = reac.numKf - kb = reac.numKb - xr = cord[reac]['x'] - yr = cord[reac]['y'] - x = ((xr-xmin)/(xmax-xmin))*multi - y = ((yr-ymin)/(ymax-ymin))*multi - #y = ((ymax-yr)/(ymax-ymin))*multi - rinfo = reac.path+'/info' - if exists(rinfo): - color = Annotator(rinfo).getField('color') - textcolor = Annotator(rinfo).getField('textColor') - f.write("simundump kreac /kinetics/" + trimPath(reac) + " " +str(0) +" "+ str(kf) + " " + str(kb) + " \"\" " + - str(color) + " " + str(textcolor) + " " + str(x) + " " + str(y) + " 0\n") - return reacList - -def trimPath(mobj): - original = mobj - mobj = element(mobj) - found = False - while not isinstance(mobj,ChemCompt) and mobj.path != "/": - mobj = element(mobj.parent) - found = True - if mobj.path == "/": - print("compartment is not found with the given path and the path has reached root ",original) - return - #other than the kinetics compartment, all the othername are converted to group in Genesis which are place under /kinetics - # Any moose object comes under /kinetics then one level down the path is taken. - # e.g /group/poolObject or /Reac - if found: - if mobj.name != "kinetics": - splitpath = original.path[(original.path.find(mobj.name)):len(original.path)] - else: - - pos = original.path.find(mobj.name) - slash = original.path.find('/',pos+1) - splitpath = original.path[slash+1:len(original.path)] - return splitpath - -def writeSumtotal( modelpath,f): - funclist = wildcardFind(modelpath+'/##[ISA=Function]') - for func in funclist: - funcInputs = element(func.path+'/x[0]') - s = "" - for funcInput in funcInputs.neighbors["input"]: - s = s+ "addmsg /kinetics/" + trimPath(funcInput)+ " /kinetics/" + trimPath(element(func.parent)) + " SUMTOTAL n nInit\n" - f.write(s) - -def storePlotMsgs( tgraphs,f): - s = "" - if tgraphs: - for graph in tgraphs: - slash = graph.path.find('graphs') - if not slash > -1: - slash = graph.path.find('graph_0') - if slash > -1: - conc = graph.path.find('conc') - if conc > -1 : - tabPath = graph.path[slash:len(graph.path)] - else: - slash1 = graph.path.find('/',slash) - tabPath = "graphs/conc1" +graph.path[slash1:len(graph.path)] - - if len(element(graph).msgOut): - poolPath = (element(graph).msgOut)[0].e2.path - poolEle = element(poolPath) - poolName = poolEle.name - bgPath = (poolEle.path+'/info') - bg = Annotator(bgPath).color - s = s+"addmsg /kinetics/" + trimPath( poolEle ) + " /" + tabPath + \ - " PLOT Co *" + poolName + " *" + bg +"\n"; - f.write(s) - -def writeplot( tgraphs,f ): - if tgraphs: - for graphs in tgraphs: - slash = graphs.path.find('graphs') - if not slash > -1: - slash = graphs.path.find('graph_0') - if slash > -1: - conc = graphs.path.find('conc') - if conc > -1 : - tabPath = graphs.path[slash:len(graphs.path)] - else: - slash1 = graphs.path.find('/',slash) - tabPath = "graphs/conc1" +graphs.path[slash1:len(graphs.path)] - - if len(element(graphs).msgOut): - poolPath = (element(graphs).msgOut)[0].e2.path - poolEle = element(poolPath) - poolAnno = (poolEle.path+'/info') - fg = Annotator(poolAnno).textColor - f.write("simundump xplot " + tabPath + " 3 524288 \\\n" + "\"delete_plot.w <s> <d>; edit_plot.D <w>\" " + fg + " 0 0 1\n") - -def writePool(modelpath,f,volIndex ): - for p in wildcardFind(modelpath+'/##[ISA=PoolBase]'): - slave_enable = 0 - if (p.className == "BufPool" or p.className == "ZombieBufPool"): - pool_children = p.children - if pool_children== 0: - slave_enable = 4 - else: - for pchild in pool_children: - if not(pchild.className == "ZombieFunction") and not(pchild.className == "Function"): - slave_enable = 4 - else: - slave_enable = 0 - break - - xp = cord[p]['x'] - yp = cord[p]['y'] - x = ((xp-xmin)/(xmax-xmin))*multi - y = ((yp-ymin)/(ymax-ymin))*multi - #y = ((ymax-yp)/(ymax-ymin))*multi - - pinfo = p.path+'/info' - if exists(pinfo): - color = Annotator(pinfo).getField('color') - textcolor = Annotator(pinfo).getField('textColor') - - geometryName = volIndex[p.volume] - volume = p.volume * NA * 1e-3 - f.write("simundump kpool /kinetics/" + trimPath(p) + " 0 " + - str(p.diffConst) + " " + - str(0) + " " + - str(0) + " " + - str(0) + " " + - str(p.nInit) + " " + - str(0) + " " + str(0) + " " + - str(volume)+ " " + - str(slave_enable) + - " /kinetics"+ geometryName + " " + - str(color) +" " + str(textcolor) + " " + str(x) + " " + str(y) + " "+ str(0)+"\n") - -def getxyCord(xcord,ycord,list1,sceneitems): - for item in list1: - if not ( isinstance(item,Function) and isinstance(item,ZombieFunction) ): - if sceneitems == None: - objInfo = item.path+'/info' - xpos = xyPosition(objInfo,'x') - ypos = xyPosition(objInfo,'y') - else: - co = sceneitems[item] - xpos = co.scenePos().x() - ypos =-co.scenePos().y() - cord[item] ={ 'x': xpos,'y':ypos} - xcord.append(xpos) - ycord.append(ypos) - -def xyPosition(objInfo,xory): - try: - return(float(element(objInfo).getField(xory))) - except ValueError: - return (float(0)) -def getCor(modelRoot,sceneitems): - xmin = ymin = 0.0 - xmax = ymax = 1.0 - positionInfoExist = False - xcord = ycord = [] - mollist = realist = enzlist = cplxlist = tablist = funclist = [] - meshEntryWildcard = '/##[ISA=ChemCompt]' - if modelRoot != '/': - meshEntryWildcard = modelRoot+meshEntryWildcard - for meshEnt in wildcardFind(meshEntryWildcard): - mol_cpl = wildcardFind(meshEnt.path+'/##[ISA=PoolBase]') - realist = wildcardFind(meshEnt.path+'/##[ISA=ReacBase]') - enzlist = wildcardFind(meshEnt.path+'/##[ISA=EnzBase]') - funclist = wildcardFind(meshEnt.path+'/##[ISA=Function]') - tablist = wildcardFind(meshEnt.path+'/##[ISA=StimulusTable]') - if mol_cpl or funclist or enzlist or realist or tablist: - for m in mol_cpl: - if isinstance(element(m.parent),CplxEnzBase): - cplxlist.append(m) - objInfo = m.parent.path+'/info' - elif isinstance(element(m),PoolBase): - mollist.append(m) - objInfo =m.path+'/info' - - if sceneitems == None: - xx = xyPosition(objInfo,'x') - yy = xyPosition(objInfo,'y') - else: - c = sceneitems[m] - xx = c.scenePos().x() - yy =-c.scenePos().y() - - cord[m] ={ 'x': xx,'y':yy} - xcord.append(xx) - ycord.append(yy) - getxyCord(xcord,ycord,realist,sceneitems) - getxyCord(xcord,ycord,enzlist,sceneitems) - getxyCord(xcord,ycord,funclist,sceneitems) - getxyCord(xcord,ycord,tablist,sceneitems) - xmin = min(xcord) - xmax = max(xcord) - ymin = min(ycord) - ymax = max(ycord) - positionInfoExist = not(len(np.nonzero(xcord)[0]) == 0 \ - and len(np.nonzero(ycord)[0]) == 0) - - return(xmin,ymin,xmax,ymax,positionInfoExist) - -def writeCompartment(modelpath,compts,f): - index = 0 - volIndex = {} - for compt in compts: - if compt.name != "kinetics": - xgrp = xmax -random.randrange(1,10) - ygrp = ymin +random.randrange(1,10) - x = ((xgrp-xmin)/(xmax-xmin))*multi - #y = ((ymax-ygrp)/(ymax-ymin))*multi - y = ((ygrp-ymin)/(ymax-ymin))*multi - f.write("simundump group /kinetics/" + compt.name + " 0 " + "blue" + " " + "green" + " x 0 0 \"\" defaultfile \\\n" ) - f.write( " defaultfile.g 0 0 0 " + str(x) + " " + str(y) + " 0\n") - i = 0 - l = len(compts) - geometry = "" - for compt in compts: - size = compt.volume - ndim = compt.numDimensions - vecIndex = l-i-1 - #print vecIndex - i = i+1 - xgeo = xmax -random.randrange(1,10) - ygeo = ymin +random.randrange(1,10) - x = ((xgeo-xmin)/(xmax-xmin))*multi - #y = ((ymax-ygeo)/(ymax-ymin))*multi - y = ((ygeo-ymin)/(ymax-ymin))*multi - if vecIndex > 0: - geometry = geometry+"simundump geometry /kinetics" + "/geometry[" + str(vecIndex) +"] 0 " + str(size) + " " + str(ndim) + " sphere " +" \"\" white black "+ str(x) + " " +str(y) +" 0\n"; - volIndex[size] = "/geometry["+str(vecIndex)+"]" - else: - geometry = geometry+"simundump geometry /kinetics" + "/geometry 0 " + str(size) + " " + str(ndim) + " sphere " +" \"\" white black " + str(x) + " "+str(y)+ " 0\n"; - volIndex[size] = "/geometry" - f.write(geometry) - writeGroup(modelpath,f,xmax,ymax) - return volIndex - -def writeGroup(modelpath,f,xmax,ymax): - ignore = ["graphs","moregraphs","geometry","groups","conc1","conc2","conc3","conc4"] - for g in wildcardFind(modelpath+'/##[TYPE=Neutral]'): - if not g.name in ignore: - if trimPath(g) != None: - xgrp1 = xmax - random.randrange(1,10) - ygrp1 = ymin + random.randrange(1,10) - x = ((xgrp1-xmin)/(xmax-xmin))*multi - #y = ((ymax-ygrp1)/(ymax-ymin))*multi - y = ((ygrp1-ymin)/(ymax-ymin))*multi - f.write("simundump group /kinetics/" + trimPath(g) + " 0 " + "blue" + " " + "green" + " x 0 0 \"\" defaultfile \\\n") - f.write(" defaultfile.g 0 0 0 " + str(x) + " " + str(y) + " 0\n") - -def writeHeader(f,maxVol): - simdt = 0.001 - plotdt = 0.1 - rawtime = 100 - maxtime = 100 - defaultVol = maxVol - f.write("//genesis\n" - "// kkit Version 11 flat dumpfile\n\n" - "// Saved on " + str(rawtime)+"\n" - "include kkit {argv 1}\n" - "FASTDT = " + str(simdt)+"\n" - "SIMDT = " +str(simdt)+"\n" - "CONTROLDT = " +str(plotdt)+"\n" - "PLOTDT = " +str(plotdt)+"\n" - "MAXTIME = " +str(maxtime)+"\n" - "TRANSIENT_TIME = 2"+"\n" - "VARIABLE_DT_FLAG = 0"+"\n" - "DEFAULT_VOL = " +str(defaultVol)+"\n" - "VERSION = 11.0 \n" - "setfield /file/modpath value ~/scripts/modules\n" - "kparms\n\n" - ) - f.write( "//genesis\n" - "initdump -version 3 -ignoreorphans 1\n" - "simobjdump table input output alloced step_mode stepsize x y z\n" - "simobjdump xtree path script namemode sizescale\n" - "simobjdump xcoredraw xmin xmax ymin ymax\n" - "simobjdump xtext editable\n" - "simobjdump xgraph xmin xmax ymin ymax overlay\n" - "simobjdump xplot pixflags script fg ysquish do_slope wy\n" - "simobjdump group xtree_fg_req xtree_textfg_req plotfield expanded movealone \\\n" - " link savename file version md5sum mod_save_flag x y z\n" - "simobjdump geometry size dim shape outside xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump kpool DiffConst CoInit Co n nInit mwt nMin vol slave_enable \\\n" - " geomname xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump kreac kf kb notes xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump kenz CoComplexInit CoComplex nComplexInit nComplex vol k1 k2 k3 \\\n" - " keepconc usecomplex notes xtree_fg_req xtree_textfg_req link x y z\n" - "simobjdump stim level1 width1 delay1 level2 width2 delay2 baselevel trig_time \\\n" - " trig_mode notes xtree_fg_req xtree_textfg_req is_running x y z\n" - "simobjdump xtab input output alloced step_mode stepsize notes editfunc \\\n" - " xtree_fg_req xtree_textfg_req baselevel last_x last_y is_running x y z\n" - "simobjdump kchan perm gmax Vm is_active use_nernst notewriteReacs xtree_fg_req \\\n" - " xtree_textfg_req x y z\n" - "simobjdump transport input output alloced step_mode stepsize dt delay clock \\\n" - " kf xtree_fg_req xtree_textfg_req x y z\n" - "simobjdump proto x y z\n" - ) - -def estimateDefaultVol(compts): - maxVol = 0 - vol = [] - for compt in compts: - vol.append(compt.volume) - if len(vol) > 0: - return max(vol) - return maxVol - -def writeGui( f ): - f.write("simundump xgraph /graphs/conc1 0 0 99 0.001 0.999 0\n" - "simundump xgraph /graphs/conc2 0 0 100 0 1 0\n" - "simundump xgraph /moregraphs/conc3 0 0 100 0 1 0\n" - "simundump xgraph /moregraphs/conc4 0 0 100 0 1 0\n" - "simundump xcoredraw /edit/draw 0 -6 4 -2 6\n" - "simundump xtree /edit/draw/tree 0 \\\n" - " /kinetics/#[],/kinetics/#[]/#[],/kinetics/#[]/#[]/#[][TYPE!=proto],/kinetics/#[]/#[]/#[][TYPE!=linkinfo]/##[] \"edit_elm.D <v>; drag_from_edit.w <d> <S> <x> <y> <z>\" auto 0.6\n" - "simundump xtext /file/notes 0 1\n") - -def writeFooter( f ): - f.write( "\nenddump\n" + - "complete_loading\n") - -if __name__ == "__main__": - import sys - - filename = sys.argv[1] - modelpath = filename[0:filename.find('.')] - loadModel('/home/harsha/genesis_files/gfile/'+filename,'/'+modelpath,"gsl") - output = '/home/harsha/Desktop/moose2genesis/moosefolder_cmd__sep2_'+filename - written = writeKkit('/'+modelpath,output) - if written: - print(" file written to ",output) - else: - print(" could be written to kkit format") diff --git a/python/rdesigneur/rdesigneur.py b/python/rdesigneur/rdesigneur.py index 803d3144b5cb6f324daefb2c018e7afe6a8334c7..e267921c404d9c2954ab5503601778ea4818fae0 100644 --- a/python/rdesigneur/rdesigneur.py +++ b/python/rdesigneur/rdesigneur.py @@ -27,9 +27,28 @@ import rmoogli from rdesigneurProtos import * from moose.neuroml.NeuroML import NeuroML from moose.neuroml.ChannelML import ChannelML -import lxml -from lxml import etree -import h5py as h5 + +try: + from lxml import etree +except ImportError: + try: + # Python 2.5 + import xml.etree.cElementTree as etree + except ImportError: + try: + # Python 2.5 + import xml.etree.ElementTree as etree + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree + except ImportError: + print("Failed to import ElementTree from any known place") + import csv #EREST_ACT = -70e-3 @@ -495,7 +514,7 @@ class rdesigneur: return (), "" kf = knownFields[field] # Find the field to decide type. - if ( kf[0] == 'CaConcBase' or kf[0] == 'ChanBase' ): + if ( kf[0] == 'CaConcBase' or kf[0] == 'ChanBase' or kf[0] == 'NMDAChan' ): objList = self._collapseElistToPathAndClass( comptList, plotSpec[2], kf[0] ) # print ("objList: ", len(objList), kf[1]) return objList, kf[1] @@ -540,6 +559,7 @@ class rdesigneur: 'Gbar':('ChanBase', 'getGbar', 1e9, 'chan max conductance (nS)' ), 'Gk':('ChanBase', 'getGk', 1e9, 'chan conductance (nS)' ), 'Ik':('ChanBase', 'getIk', 1e9, 'chan current (nA)' ), + 'ICa':('NMDAChan', 'getICa', 1e9, 'Ca current (nA)' ), 'Ca':('CaConcBase', 'getCa', 1e3, 'Ca conc (uM)' ), 'n':('PoolBase', 'getN', 1, '# of molecules'), 'conc':('PoolBase', 'getConc', 1000, 'Concentration (uM)' ) @@ -575,14 +595,15 @@ class rdesigneur: def _buildMoogli( self ): knownFields = { 'Vm':('CompartmentBase', 'getVm', 1000, 'Memb. Potential (mV)', -80.0, 40.0 ), - 'Im':('CompartmentBase', 'getIm', 1e9, 'Memb. current (nA)', -10, 10 ), - 'inject':('CompartmentBase', 'getInject', 1e9, 'inject current (nA)', -10, 10 ), - 'Gbar':('ChanBase', 'getGbar', 1e9, 'chan max conductance (nS)', 0, 1 ), - 'Gk':('ChanBase', 'getGk', 1e9, 'chan conductance (nS)', 0, 1 ), - 'Ik':('ChanBase', 'getIk', 1e9, 'chan current (nA)', -10, 10 ), - 'Ca':('CaConcBase', 'getCa', 1e3, 'Ca conc (uM)', 0, 10 ), - 'n':('PoolBase', 'getN', 1, '# of molecules', 0, 200 ), - 'conc':('PoolBase', 'getConc', 1000, 'Concentration (uM)', 0, 2 ) + 'Im':('CompartmentBase', 'getIm', 1e9, 'Memb. current (nA)', -10.0, 10.0 ), + 'inject':('CompartmentBase', 'getInject', 1e9, 'inject current (nA)', -10.0, 10.0 ), + 'Gbar':('ChanBase', 'getGbar', 1e9, 'chan max conductance (nS)', 0.0, 1.0 ), + 'Gk':('ChanBase', 'getGk', 1e9, 'chan conductance (nS)', 0.0, 1.0 ), + 'Ik':('ChanBase', 'getIk', 1e9, 'chan current (nA)', -10.0, 10.0 ), + 'ICa':('NMDAChan', 'getICa', 1e9, 'Ca current (nA)', -10.0, 10.0 ), + 'Ca':('CaConcBase', 'getCa', 1e3, 'Ca conc (uM)', 0.0, 10.0 ), + 'n':('PoolBase', 'getN', 1, '# of molecules', 0.0, 200.0 ), + 'conc':('PoolBase', 'getConc', 1000, 'Concentration (uM)', 0.0, 2.0 ) } moogliBase = moose.Neutral( self.modelPath + '/moogli' ) k = 0 @@ -646,6 +667,7 @@ class rdesigneur: 'Gbar':('ChanBase', 'getGbar', 1e9, 'chan max conductance (nS)' ), 'Gk':('ChanBase', 'getGk', 1e9, 'chan conductance (nS)' ), 'Ik':('ChanBase', 'getIk', 1e9, 'chan current (nA)' ), + 'ICa':('NMDAChan', 'getICa', 1e9, 'Ca current (nA)' ), 'Ca':('CaConcBase', 'getCa', 1e3, 'Ca conc (uM)' ), 'n':('PoolBase', 'getN', 1, '# of molecules'), 'conc':('PoolBase', 'getConc', 1000, 'Concentration (uM)' ) @@ -696,6 +718,7 @@ class rdesigneur: 'Gbar':('ChanBase', 'getGbar', 1e9, 'chan max conductance (nS)' ), 'Gk':('ChanBase', 'getGk', 1e9, 'chan conductance (nS)' ), 'Ik':('ChanBase', 'getIk', 1e9, 'chan current (nA)' ), + 'ICa':('NMDAChan', 'getICa', 1e9, 'Ca current (nA)' ), 'Ca':('CaConcBase', 'getCa', 1e3, 'Ca conc (uM)' ), 'n':('PoolBase', 'getN', 1, '# of molecules'), 'conc':('PoolBase', 'getConc', 1000, 'Concentration (uM)' ) diff --git a/python/rdesigneur/rdesigneurProtos.py b/python/rdesigneur/rdesigneurProtos.py index a0c3f956585ce4b14bf681926b8ea838faeeaa99..48c7f904b1f2674ae6b96f83d031fb8f90eb82d7 100644 --- a/python/rdesigneur/rdesigneurProtos.py +++ b/python/rdesigneur/rdesigneurProtos.py @@ -105,6 +105,40 @@ def make_HH_K(name = 'HH_K', parent='/library', vmin=-120e-3, vmax=40e-3, vdivs= k.tick = -1 return k +#======================================================================== +# SynChan: Glu receptor +#======================================================================== + +def make_glu( name ): + if moose.exists( '/library/' + name ): + return + glu = moose.SynChan( '/library/' + name ) + glu.Ek = 0.0 + glu.tau1 = 2.0e-3 + glu.tau2 = 9.0e-3 + sh = moose.SimpleSynHandler( glu.path + '/sh' ) + moose.connect( sh, 'activationOut', glu, 'activation' ) + sh.numSynapses = 1 + sh.synapse[0].weight = 1 + return glu + +#======================================================================== +# SynChan: GABA receptor +#======================================================================== + +def make_GABA( name ): + if moose.exists( '/library/' + name ): + return + GABA = moose.SynChan( '/library/' + name ) + GABA.Ek = EK + 10.0e-3 + GABA.tau1 = 4.0e-3 + GABA.tau2 = 9.0e-3 + sh = moose.SimpleSynHandler( GABA.path + '/sh' ) + moose.connect( sh, 'activationOut', GABA, 'activation' ) + sh.numSynapses = 1 + sh.synapse[0].weight = 1 + + def makeChemOscillator( name = 'osc', parent = '/library' ): model = moose.Neutral( parent + '/' + name ) compt = moose.CubeMesh( model.path + '/kinetics' ) @@ -208,14 +242,20 @@ def transformNMDAR( path ): moose.connect( caconc[0], 'concOut', nmdar, 'assignIntCa' ) ################################################################ # Utility function for building a compartment, used for spines. -def buildCompt( pa, name, length, dia, xoffset, RM, RA, CM ): + # Builds a compartment object downstream (further away from soma) + # of the specfied previous compartment 'pa'. If 'pa' is not a + # compartment, it builds it on 'pa'. It places the compartment + # on the end of 'prev', and at 0,0,0 otherwise. + +def buildCompt( pa, name, RM = 1.0, RA = 1.0, CM = 0.01, dia = 1.0e-6, x = 0.0, y = 0.0, z = 0.0, dx = 10e-6, dy = 0.0, dz = 0.0 ): + length = np.sqrt( dx * dx + dy * dy + dz * dz ) compt = moose.Compartment( pa.path + '/' + name ) - compt.x0 = xoffset - compt.y0 = 0 - compt.z0 = 0 - compt.x = length + xoffset - compt.y = 0 - compt.z = 0 + compt.x0 = x + compt.y0 = y + compt.z0 = z + compt.x = dx + x + compt.y = dy + y + compt.z = dz + z compt.diameter = dia compt.length = length xa = dia * dia * PI / 4.0 @@ -225,6 +265,9 @@ def buildCompt( pa, name, length, dia, xoffset, RM, RA, CM ): compt.Cm = CM * sa return compt +def buildComptWrapper( pa, name, length, dia, xoffset, RM, RA, CM ): + return buildCompt( pa, name, RM, RA, CM, dia = dia, x = xoffset, dx = length ) + ################################################################ # Utility function for building a synapse, used for spines. def buildSyn( name, compt, Ek, tau1, tau2, Gbar, CM ): @@ -302,10 +345,10 @@ def addSpineProto( name = 'spine', chanList = (), caTau = 0.0 ): - assert moose.exists( parent ), "%s must exists" % parent + assert( moose.exists( parent ) ), "%s must exist" % parent spine = moose.Neutral( parent + '/' + name ) - shaft = buildCompt( spine, 'shaft', shaftLen, shaftDia, 0.0, RM, RA, CM ) - head = buildCompt( spine, 'head', headLen, headDia, shaftLen, RM, RA, CM ) + shaft = buildComptWrapper( spine, 'shaft', shaftLen, shaftDia, 0.0, RM, RA, CM ) + head = buildComptWrapper( spine, 'head', headLen, headDia, shaftLen, RM, RA, CM ) moose.connect( shaft, 'axial', head, 'raxial' ) if caTau > 0.0: @@ -349,7 +392,7 @@ def makePassiveHHsoma(name = 'passiveHHsoma', parent='/library'): if not moose.exists( elecpath ): elecid = moose.Neuron( elecpath ) dia = 500e-6 - soma = buildCompt( elecid, 'soma', dia, dia, 0.0, + soma = buildComptWrapper( elecid, 'soma', dia, dia, 0.0, 0.33333333, 3000, 0.01 ) soma.initVm = -65e-3 # Resting of -65, from HH soma.Em = -54.4e-3 # 10.6 mV above resting of -65, from HH diff --git a/python/rdesigneur/rmoogli.py b/python/rdesigneur/rmoogli.py index 9a527ed83aab3693520a06837961463ff34feda2..7f8fa883b372bea23ec50fc754653e93c3f5995c 100644 --- a/python/rdesigneur/rmoogli.py +++ b/python/rdesigneur/rmoogli.py @@ -12,15 +12,30 @@ import math import matplotlib import sys import moose +import os + +# Check if DISPLAY environment variable is properly set. If not, warn the user +# and continue. +hasDisplay = True +display = os.environ.get('DISPLAY', '' ) +if not display: + hasDisplay = False + print( "Warning: Environment variable DISPLAY is not set." + " Did you forget to pass -X or -Y switch to ssh command?\n" + "Anyway, MOOSE will continue without graphics.\n" + ) + hasMoogli = True -try: - from PyQt4 import QtGui - import moogli - import moogli.extensions.moose - app = QtGui.QApplication(sys.argv) -except Exception as e: - print( 'Warning: Moogli not found. All moogli calls will use dummy functions' ) - hasMoogli = False + +if hasDisplay: + try: + from PyQt4 import QtGui + import moogli + import moogli.extensions.moose + app = QtGui.QApplication(sys.argv) + except Exception as e: + print( 'Warning: Moogli not found. All moogli calls will use dummy functions' ) + hasMoogli = False runtime = 0.0 @@ -40,15 +55,13 @@ def getComptParent( obj ): def prelude( view ): view.home() view.pitch( math.pi / 2.0 ) - view.zoom( 0.3 ) + view.zoom( 0.05 ) #network.groups["soma"].set( "color", moogli.colors.RED ) # This func is used for the first viewer, it has to handle advancing time. def interlude( view ): moose.start( moogliDt ) val = [ moose.getField( i, view.mooField, "double" ) * view.mooScale for i in view.mooObj ] - #print "LEN = ", len( val ), "field = ", view.mooField - view.mooGroup.set("color", val, view.mapper) view.yaw( rotation ) #print moogliDt, len( val ), runtime @@ -132,6 +145,7 @@ def makeMoogli( rd, mooObj, moogliEntry, fieldInfo ): scalar_range=moogli.geometry.Vec2f( moogliEntry[5], moogliEntry[6])) + cb.set_num_labels(3) view.attach_color_bar(cb) view.rd = rd view.mooObj = displayObj diff --git a/sbml/CMakeLists.txt b/sbml/CMakeLists.txt deleted file mode 100644 index f08adef7d07ded0e0e852eacc48ea47cf750406f..0000000000000000000000000000000000000000 --- a/sbml/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -file(GLOB files_SRC "*.cpp") - -IF(LIBSBML_FOUND) - add_definitions(-DUSE_SBML) -ENDIF(LIBSBML_FOUND) - -include_directories(../msg) -include_directories(../basecode) -add_library(moose_sbml ${files_SRC}) diff --git a/sbml/Makefile b/sbml/Makefile deleted file mode 100644 index 445c35826bca9397e4702f3860c37d4a3db38773..0000000000000000000000000000000000000000 --- a/sbml/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#/********************************************************************** -#** This program is part of 'MOOSE', the -#** Messaging Object Oriented Simulation Environment, -#** also known as GENESIS 3 base code. -#** copyright (C) 2004 Upinder S. Bhalla. and NCBS -#** It is made available under the terms of the -#** GNU Lesser General Public License version 2.1 -#** See the file COPYING.LIB for the full notice. -#**********************************************************************/ - -TARGET = _sbml.o - -OBJ = \ - MooseSbmlWriter.o \ - MooseSbmlReader.o \ - -HEADERS = \ - ../basecode/header.h - -default: $(TARGET) - -$(OBJ) : $(HEADERS) -MooseSbmlWriter.o: MooseSbmlWriter.h -MooseSbmlReader.o: MooseSbmlReader.h -.cpp.o: - $(CXX) $(CXXFLAGS) -I. -I../basecode -I../msg $< -c - -$(TARGET): $(OBJ) $(HEADERS) - $(LD) -r -o $(TARGET) $(OBJ) -clean: - rm -f *.o $(TARGET) core core.* diff --git a/sbml/MooseSbmlReader.cpp b/sbml/MooseSbmlReader.cpp deleted file mode 100644 index 8edc3523264546a1b3997244ee969b816ec58554..0000000000000000000000000000000000000000 --- a/sbml/MooseSbmlReader.cpp +++ /dev/null @@ -1,1468 +0,0 @@ -/******************************************************************* - * File: MooseSbmlReader.cpp - * Description: - * Author: HarshaRani - * E-mail: hrani@ncbs.res.in - ********************************************************************/ -/********************************************************************** -** This program is part of 'MOOSE', the -** Messaging Object Oriented Simulation Environment, -** also known as GENESIS 3 base code. -** copyright (C) 2003-2016 Upinder S. Bhalla. and NCBS -** It is made available under the terms of the -** GNU Lesser General Public License version 2.1 -** See the file COPYING.LIB for the full notice. -**********************************************************************/ -/**************************** -* Change log: - -* Originally created by Siji for l2v4 for 'trunk ' branch -* Modified / adapted Harsharani for both l2v4 and l3v1 - -hasOnlySubstanceUnit : false means if the compartment size is changed then it is assumed that its the concentration that must be updated -to account for the size change. - -When importing SBML Level 2 models species for which the -A. initial value is given as initialAmount and hasOnlySubstanceUnits is set to true -(or compartment dimension is zero) are treated as amounts. - -B. If hasOnlySubstanceUnits is set to false -but the initial value is given as amount the corresponding species are not converted to concentration, rather I substitue amount -as moose can take nInit. - -C. Species for which the initial value is given as initialConcentration are treated as concentrations by converted to milli - -It is then assumed that the value of species appearing in the kinetic rate laws have either amount or concentration units. - -All rules are evaluated as given by the SBML model. -According to the SBML standard rate laws of reactions are assumed to deliver a rate in amount/time. -In the case a species value is defined as concentration the rate law is converted to concentration/time. - -In models that have only compartments of a constant size of 1 the distinction between amounts and concentrations is not necessary. -***************/ - - -#ifdef USE_SBML - -#include <cmath> -#include <stdexcept> -#include <sbml/SBMLTypes.h> -#include <sbml/UnitDefinition.h> -#include <sbml/units/UnitFormulaFormatter.h> -#include <sbml/units/FormulaUnitsData.h> -#include <string> -#include <stdlib.h> -#include "header.h" -#include "../shell/Shell.h" -#include "../shell/Wildcard.h" -//#include "../manager/SimManager.h" -#include "MooseSbmlReader.h" -//#include "../kinetics/FuncPool.h" - -using namespace std; -map< string,double > parmValueMap; -map< string,double> :: iterator pvm_iter; -bool unitsDefined = true; -/* Harsha : TODO in - -Compartment - --Need to add group - --Need to deal with compartment outside - -Molecule - -- Need to add group (done commited to 6964) - -- Func pool and its math calculation need to be added. - -Loading Model from SBML - --Tested 1-30 testcase example model provided by l3v1 and l2v4 std. - ---These are the models that worked (sbml testcase)1-6,10,14-15,17-21,23-25,34,35,58 - ---Need to check - ----what to do when boundarycondition is true i.e., - differential equation derived from the reaction definitions - should not be calculated for the species(7-9,11-13,16) - ----kineticsLaw, Math fun has fraction,ceiling,reminder,power 28etc. - ----Events to be added 26 - ----initial Assisgment for compartment 27 - ----when stoichiometry is rational number 22 - ---- For Michaelis¡VMenten kinetics km is not defined which is most of the case - need to calculate -*/ - -/** - * @brief Reads a given SBML file and loads it into MOOSE. - * - * @param filename Name of file, std::string. - * @param location - * @param solverClass - * - * @return Id on success. Some expcetion on failure. - */ -Id moose::SbmlReader::read( string filename, string location, string solverClass) -{ stringstream global_warning; - FILE * fp = fopen( filename.c_str(), "r" ); - if ( fp == NULL) { - stringstream ss; - ss << "File " << filename << " does not exist." << endl; - throw runtime_error(ss.str()); - } - - document_ = readSBML( filename.c_str() ); - unsigned num_errors = document_->getNumErrors(); - if ( num_errors > 0 ) { - cerr << "Errors encountered while reading" << endl; - document_->printErrors( cerr ); - errorFlag_ = true; - return baseId; - } - model_= document_->getModel(); - if ( model_ == 0 ) { - cout << "SBML: Error: No model present." << endl; - errorFlag_ = true; - return baseId; - } - if ( !errorFlag_ ) - getGlobalParameter(); - - if ( !errorFlag_ ) { - - string modelName; - Id parentId; - findModelParent ( Id(), location, parentId, modelName ) ; - Shell* s = reinterpret_cast< Shell* >( Id().eref().data() ); - Id baseId_ = s->doCreate( "Neutral", parentId, modelName, 1, MooseGlobal); - Id base_ =s->doCreate("Neutral",baseId_,"model",1,MooseGlobal); - assert( base_ != Id() ); - //Map Compartment's SBML id to Moose ID - map< string,Id > comptSidMIdMap; - // Map between Molecule's SBML id to which it belongs compartment Moose Id - map< string, Id > molSidcmptMIdMap; - - if ( !errorFlag_ ){ - unitsDefined = true; - comptSidMIdMap = createCompartment(location, parentId, modelName, base_); - //comptUnitDefined is set true is checked if warning is set or not, only once its set. - if (unitsDefined == false) - global_warning << "The default volume unit has not been set in the model. "<< - "Assuming liter as the default volume unit, MOOSE will convert to cubicMeter which is the default units for volume in MOOSE. \n"; - } - if ( !errorFlag_ ){ - unitsDefined = true; - molSidcmptMIdMap = createMolecule( comptSidMIdMap); - if (unitsDefined == false) - //SpeciesUnitDefined is set true is checked if warning is set or not, only once its set. - global_warning << "The default substance unit has not been set in the model. "<< - "Assuming mole as the default substance unit, MOOSE will convert to milliMolar which is the default units for Substabce in MOOSE \n"; - } - if ( !errorFlag_ ) - getRules(); - - if ( !errorFlag_ ) - createReaction( molSidcmptMIdMap ); - // or we get - //createReaction (result); - - if ( errorFlag_ ) - return baseId; - else { - // SimManager* sm = reinterpret_cast< SimManager* >(baseId.eref().data()); - //Shell* s = reinterpret_cast< Shell* >(baseId.eref().data()); - XMLNode * annotationNode = model_->getAnnotation(); - if( annotationNode != NULL ) { - unsigned int num_children = annotationNode->getNumChildren(); - for( unsigned int child_no = 0; child_no < num_children; child_no++ ) { - XMLNode childNode = annotationNode->getChild( child_no ); - if ( childNode.getPrefix() == "moose" && childNode.getName() == "ModelAnnotation" ) { - unsigned int num_gchildren = childNode.getNumChildren(); - for( unsigned int gchild_no = 0; gchild_no < num_gchildren; gchild_no++ ) { - XMLNode &grandChildNode = childNode.getChild( gchild_no ); - string nodeName = grandChildNode.getName(); - if (grandChildNode.getNumChildren() == 1 ) { - string plotValue; - //double nodeValue; - if(nodeName == "plots") { - Id graphs; - // Carrying on with the policy that all graphs will be created under /modelName - string datapath = baseId_.path() +"/data"; - Id graphpath(datapath); - graphs = datapath; - graphs = s->doCreate("Neutral",baseId_,"data",1); - assert(graphs != Id()); - Id graph; - string datagrph = graphs.path()+"/graph_1"; - Id graph1(datagrph); - graph = s->doCreate("Neutral",graphs,"graph_0",1); - assert(graph != Id()); - /* - // if plots exist then will be placing at "/data" - Id graphs; - //Id dataId; - Id dataIdTest; - if (parentId2 == Id()) - graphs = s->doCreate( "Neutral", parentId2, "data", 1); - else - // need to check how to put / while coming from gui as the path is /model/modelName??? 27 jun 2014 - findModelParent ( Id(), modelName, dataIdTest, modelName ) ; - string test = "/data"; - Id tgraphs(test); - graphs=tgraphs; - //graphs = s->doCreate("Neutral",parentId,"data",1); - //Id dataId; - //if (dataId == Id()) - // cout << "Id " << dataId; - // graphs = s->doCreate( "Neutral",dataId, "data", 1); - assert( graphs != Id() ); - */ - plotValue = (grandChildNode.getChild(0).toXMLString()).c_str(); - istringstream pltVal(plotValue); - string pltClean; - while (getline(pltVal,pltClean, ';')) { - pltClean.erase( remove( pltClean.begin(), pltClean.end(), ' ' ), pltClean.end() ); - //string plotPath = location+pltClean; - string plotPath = base_.path()+pltClean; - Id plotSId(plotPath); - size_t pos = pltClean.find('/'); - if (pos != std::string::npos) - pltClean = pltClean.substr(pos+1,pltClean.length()); - /* - #Harsha:To create a tableName, e.g:'/compartmentName/groupName/ObjectName' - # I have changed '/' to '@' and To keep the index of the ObjectName - # I have changed '[' to '<' and ']' to '>'. - # The same is follwed in the GUI - */ - replace(pltClean.begin(),pltClean.end(),'/','@'); - replace(pltClean.begin(),pltClean.end(),'[','<'); - replace(pltClean.begin(),pltClean.end(),']','>'); - // size_t Iindex = 0; - // while(true) - // { size_t sindex = pltClean.find('[',Iindex); - // size_t eindex = pltClean.find(']',Iindex); - // if (sindex == std::string::npos) break; - // pltClean.erase(sindex,eindex-sindex+1); - // Iindex = eindex; - // } //while true - string plotName = pltClean + ".conc"; - Id pltPath(graph.path()); - Id tab = s->doCreate( "Table2", pltPath, plotName, 1 ); - if (tab != Id()) - s->doAddMsg("Single",tab,"requestOut",plotSId,"getConc"); - }//while - /* passing /model and /data to clocks */ - //commented due to automatic scheduling - - /* - string comptPath =base_.path()+"/##"; - s->doUseClock(comptPath,"process",4); - - string tablePath = graphs.path()+"/##[TYPE=Table]"; - s->doUseClock( tablePath, "process",8 ); - */ - }//plots - /*else - nodeValue = atof ((grandChildNode.getChild(0).toXMLString()).c_str()); - - if (nodeName == "runTime") - sm->setRunTime(nodeValue); - else if (nodeName == "simdt") - sm->setSimDt(nodeValue); - else if(nodeName == "plotdt") - sm->setPlotDt(nodeValue); - */ - - } //grandChild - else - cout << "Warning: expected exactly ONE child of " << nodeName << " but none found "<<endl; - } //gchild - } //moose and modelAnnotation - } - }//annotation Node - else { - //4 for simdt and 8 for plotdt - //Harsha:Since scheduling is automatically done commeting this - - //s->doUseClock(base_.path()+"/##","process",4); - //s->doUseClock(+"/data/##[TYPE=Table]","process",8); - //s->doSetClock(4,0.1); - //s->doSetClock(8,0.1); - /* - s->doUseClock( "/data/##[TYPE=Table]", "proc", 16 ); - double simdt = 0.1; - double plotdt = 1; - s->doSetClock( 11, simdt ); - s->doSetClock( 12, simdt ); - s->doSetClock( 13, simdt ); - s->doSetClock( 14, simdt ); - s->doSetClock( 16, plotdt ); - s->doSetClock( 17, plotdt ); - s->doSetClock( 18, plotdt ); - */ - } - vector< ObjId > compts; - string comptpath = base_.path()+"/##[ISA=ChemCompt]"; - wildcardFind( comptpath, compts ); - vector< ObjId >::iterator i = compts.begin(); - string comptName = nameString(Field<string> :: get(ObjId(*i),"name")); - string simpath = base_.path() + "/##"; - //s->doUseClock( simpath, "process", 4 ); - - //wildcardFind( plotpath, plots ); - //Id pathexist(base_.path()+"/kinetics"); - /* - if (solverClass.empty()) - { - if( pathexist != Id()) - sm->build(base_.eref(),&q,"rk5"); - else - sm->buildForSBML(base_.eref(),&q,"rk5"); - } - else - { if(pathexist != Id()) - sm->build(base_.eref(),&q,solverClass); - else - sm->buildForSBML(base_.eref(),&q,solverClass); - } - */ - //cout << "base_ " <<base_.path() << "baseId_ " << baseId_.path(); - return baseId_; - } - - } else - return baseId; -} - -/** - * @brief Map SBML compartments to MOOSE. - * - * @param location - * @param parentId string. Name of parent compartment. - * @param modelName string. Name of model. - * @param base_ Id, Id of parent. - * - * @return std::map<string, Id>. - */ -map< string,Id > moose::SbmlReader::createCompartment(string location, Id parentId, string modelName, Id base_) -{ - /* In compartment: pending to add - -- the group - -- outside - -- units of volume - */ - Shell* s = reinterpret_cast< Shell* >( Id().eref().data() ); - map< string,Id > comptSidMIdMap; - map< string,string > outsideMap; - map< string,string > ::iterator iter; - double msize = 0.0, size = 0.0; - - ::Compartment* compt; - unsigned int num_compts = model_->getNumCompartments(); - - if (num_compts == 0) { - errorFlag_ = true; - stringstream ss; - return comptSidMIdMap; - } - - baseId = base_; - for ( unsigned int i = 0; i < num_compts; i++ ) { - compt = model_->getCompartment(i); - std::string id = ""; - if ( compt->isSetId() ) { - id = compt->getId(); - } - - std::string name = ""; - if ( compt->isSetName() ) { - name = compt->getName(); - name = nameString(name); - } - - std::string outside = ""; - if ( compt->isSetOutside() ) { - outside = compt->getOutside (); - } - if ( compt->isSetSize() ) { - msize = compt->getSize(); - } - - UnitDefinition * ud = compt->getDerivedUnitDefinition(); - size = transformUnits( msize,ud , "compartment",0); - unsigned int dimension = compt->getSpatialDimensions(); - - if (dimension < 3) - cout << "\n ###### Spatial Dimension is " << dimension <<" volume should not be converted from liter to cubicmeter which is happening as default check \n"; - - if(name.empty() && id.empty()) - cout << "Compartment name and id are empty" << endl; - - if (name.empty()) { - if(! id.empty() ) - name = id; - } - - Id compt = s->doCreate( "CubeMesh", base_, name, 1); - comptSidMIdMap[id] = compt; - if (size != 0.0) - Field< double >::set( compt, "volume", size ); - if (dimension != 0) - continue; - //Field < int > :: set(compt, "numDimensions", dimension); - } - return comptSidMIdMap; -} - -/* create MOLECULE */ -const moose::SbmlReader::sbmlStr_mooseId moose::SbmlReader::createMolecule( map< string,Id > &comptSidMIdMap) { - Shell* shell = reinterpret_cast< Shell* >( Id().eref().data() ); - map< string, Id >molSidcmptMIdMap; - double transvalue = 0.0; - int num_species = model_->getNumSpecies(); - if (num_species == 0) { - baseId = Id(); - errorFlag_ = true; - return molSidcmptMIdMap; - } - - for ( int sindex = 0; sindex < num_species; sindex++ ) { - Species* spe = model_->getSpecies(sindex); - - if (!spe) { - continue; - } - std::string compt = ""; - if ( spe->isSetCompartment() ) { - compt = spe->getCompartment(); - } - if (compt.length()< 1) { - //cout << "compt is empty for species "<< sindex << endl; - continue; - } - string id = spe->getId(); - if (id.length() < 1) { - continue; - } - std::string name = ""; - if ( spe->isSetName() ) { - name = spe->getName(); - name = nameString(name); - } - if (name.empty()) - name = id; - string speciesNotes = ""; - if (spe->isSetNotes()) - { - XMLNode* xnode = spe->getNotes(); - string testnotes = spe->getNotesString(); - XMLNode nodec = xnode->getChild(0); - XMLNode tnodec = nodec.getChild(0); - speciesNotes = tnodec.getCharacters(); - } - - Id comptEl = comptSidMIdMap[compt]; - Id meshEntry = Neutral::child( comptEl.eref(), "mesh" ); - string comptPath = Field<string> :: get(comptEl,"path"); - - // Get groupName if exist in annotation (in case of Genesis) - XMLNode * annotationSpe = spe->getAnnotation(); - pair<string,pair<string, string> > group = getAnnotation_Spe_Reac(annotationSpe); - string groupName = group.first; - string xCord = group.second.first; - string yCord = group.second.second; - string groupString = comptPath+'/'+groupName; - - Id groupId; - if (!groupName.empty()) - { groupId = Id( comptPath + "/"+groupName ); - if ( groupId == Id() ) - groupId = shell->doCreate( "Neutral", comptEl, groupName, 1 ); - assert( groupId != Id() ); - - } - bool constant = spe->getConstant(); - bool boundaryCondition = spe->getBoundaryCondition(); - // if (boundaryCondition == true) - // cout << name << " species having BoundaryCondition true " <<endl; - Id pool; - //If constant or boundary condition is true then its equivalent to BuffPool in moose - if (boundaryCondition == true) - //if( (boundaryCondition == true) && (constant==false)) - if (groupId == Id()) - pool = shell->doCreate("BufPool",comptEl,name,1); - else - pool = shell->doCreate("BufPool",groupId,name,1); - - else - if (groupId == Id()) - pool = shell->doCreate("Pool", comptEl, name ,1); - - else - pool = shell->doCreate("Pool", groupId, name ,1); - - molSidcmptMIdMap[id] = comptEl; - if(pool != Id()) - { - //Map to Molecule SBML id to Moose Id - molSidMIdMap_[id] = pool; - - //shell->doAddMsg( "OneToOne",pool, "mesh", meshEntry, "mesh" ); - bool bcondition = spe->getBoundaryCondition(); - if ( constant == true && bcondition == false) - cout <<"The species "<< name << " should not appear in reactant or product as per sbml Rules"<< endl; - - unsigned int spatialDimen =Field< unsigned int >::get( comptEl, "numDimensions"); - - UnitDefinition * ud = spe->getDerivedUnitDefinition(); - assert(ud != NULL); - double initvalue = 0.0; - bool hasonlySubUnit = spe->getHasOnlySubstanceUnits(); - transvalue = transformUnits(1,ud,"substance",hasonlySubUnit); - - if ( spe->isSetInitialConcentration() ) { - initvalue = spe->getInitialConcentration(); - //transValue will take care of multiplying any units are defined - // pow(1e3) will make sure the concentration Unit are converted from mole to milliMolar (Molar = mole/size) - initvalue = initvalue * transvalue * pow(1e+3,1); - Field <double> :: set(pool, "concInit",initvalue); - } - else if ( spe->isSetInitialAmount() ) { - initvalue = spe->getInitialAmount(); - //If Amount is set then moose is capable of populating number nInit - // hasonlySubstanceUnit is not checked, if we populate nInit then - //moose automatically calculate the concInit. - //transValue will take care of multiplying any units are defined - // pow(NA) the avogadro's number to convert to number # - initvalue = initvalue * transvalue * pow(NA,1); - Field < double> :: set( pool, "nInit", initvalue); - } - else { - unsigned int nr = model_->getNumRules(); - bool found = false; - for ( unsigned int r = 0; r < nr; r++ ) { - Rule * rule = model_->getRule(r); - bool assignRule = rule->isAssignment(); - if ( assignRule ) { - string rule_variable = rule->getVariable(); - if (rule_variable.compare(id) == 0) { - found = true; - break; - } - } - } - if (found == false) { - cout << "Invalid SBML: Either initialConcentration or initialAmount must be set or it should be found in assignmentRule but non happening for " << spe->getName() <<endl; - return molSidcmptMIdMap; - } - } - - if (!xCord.empty() and !yCord.empty()) { - Id poolInfo; - string poolPath = Field<string> :: get(pool,"path"); - poolInfo = Id( poolPath + "/info"); - if ( poolInfo == Id() ) - poolInfo = shell->doCreate( "Annotator", pool, "info", 1 ); - assert( poolInfo != Id() ); - double x = atof( xCord.c_str() ); - double y = atof( yCord.c_str() ); - Field< double >::set( poolInfo, "x", x ); - Field< double >::set( poolInfo, "y", y ); - } - if (!speciesNotes.empty()){ - Id poolInfo; - string poolPath = Field<string> :: get(pool,"path"); - poolInfo = Id( poolPath + "/info"); - if ( poolInfo == Id() ) - poolInfo = shell->doCreate( "Annotator", pool, "info", 1 ); - assert( poolInfo != Id() ); - speciesNotes.erase(std::remove(speciesNotes.begin(), speciesNotes.end(), '\n'), speciesNotes.end()); - speciesNotes.erase(std::remove(speciesNotes.begin(), speciesNotes.end(), '\t'), speciesNotes.end()); - Field< string >::set( poolInfo, "notes", speciesNotes ); - } - }//Pool_ != Id() - } - return molSidcmptMIdMap; -} - -/* Assignment Rule */ - -void moose::SbmlReader::getRules() { - unsigned int nr = model_->getNumRules(); - //if (nr > 0) - // cout << "\n ##### Need to populate funcpool and sumtotal which is pending due to equations \n"; - Shell* shell = reinterpret_cast< Shell* >( Id().eref().data() ); - for ( unsigned int r = 0; r < nr; r++ ) { - Rule * rule = model_->getRule(r); - bool assignRule = rule->isAssignment(); - if ( assignRule ) { - string rule_variable = rule->getVariable(); - map< string,Id >::iterator v_iter; - map< string,Id >::iterator m_iter; - v_iter = molSidMIdMap_.find( rule_variable ); - if (v_iter != molSidMIdMap_.end()) { - Id rVariable = molSidMIdMap_.find(rule_variable)->second; - //string rstring =molSidMIdMap_.find(rule_variable)->first; - //Id sumId = shell->doCreate( "SumFunc", rVariable, "func", 1 ); - Id sumId = shell->doCreate( "Function", rVariable, "func", 1 ); - //rVariable.element()->zombieSwap( FuncPool::initCinfo() ); - //ObjId ret = shell->doAddMsg( "single", - // ObjId( sumId, 0 ), "output", - // ObjId( rVariable, 0 ), "input" ); - ObjId ret = shell->doAddMsg( "single", - ObjId( sumId, 0 ), "valueOut", - ObjId( rVariable, 0 ), "setN" ); - assert( ret != ObjId() ); - const ASTNode * ast = rule->getMath(); - vector< string > ruleMembers; - ruleMembers.clear(); - printMembers( ast,ruleMembers ); - string rulePar = ""; - string comma = ""; - for ( unsigned int rm = 0; rm < ruleMembers.size(); rm++ ) { - m_iter = molSidMIdMap_.find( ruleMembers[rm] ); - if ( m_iter != molSidMIdMap_.end() ) { - Id rMember = molSidMIdMap_.find(ruleMembers[rm])->second; - string rMember_str = molSidMIdMap_.find(ruleMembers[rm])->first; - unsigned int numVars = Field< unsigned int >::get( sumId, "numVars" ); - ObjId xi( sumId.value() + 1, 0, numVars ); - Field< unsigned int >::set( sumId, "numVars", numVars + 1 ); - // ObjId ret = shell_->doAddMsg( "single", ObjId( srcId, 0 ), "nOut", xi, "input" ); - ObjId ret = shell->doAddMsg( "single", - ObjId( rMember, 0 ), "nOut", - xi, "input" ); - - // ObjId ret = shell->doAddMsg( "single", - // ObjId( rMember, 0 ), "nOut", - // ObjId( sumId, 0 ), "input" ); - string test = molSidMIdMap_.find(ruleMembers[rm])->first; - stringstream ss; - for ( unsigned int i = 0; i < numVars; ++i ) - { - ss << "x" << i << "+"; - } - ss << "x" << numVars; - Field< string >::set( sumId, "expr", ss.str() ); - } - else { - - rulePar += comma; - rulePar += ruleMembers[rm]; - comma = ','; - // In assignment rule there are constants instead of molecule which is yet to deal in moose. - errorFlag_ = true; - } - } - if (!rulePar.empty()) - { string t = "moose::SbmlReader::getRules: Assignment rule \""; - t += rule_variable; - t += "\" variable member \""; - t += rulePar; - t += "\" is not a species not handle in moose"; - cerr << t<< endl; - } - - } - } - bool rateRule = rule->isRate(); - if ( rateRule ) { - string rule_variable1 = rule->getVariable(); - cout << "Warning : For now this \"" << rule_variable1 << "\" rate Rule is not handled in moose " << endl; - errorFlag_ = true; - } - bool algebRule = rule->isAlgebraic(); - if ( algebRule ) { - string rule_variable1 = rule->getVariable(); - cout << "Warning: For now this " << rule_variable1 <<" Algebraic Rule is not handled in moose" << endl; - errorFlag_ = true; - } - } -} - -//REACTION - -void moose::SbmlReader::createReaction(const map< string, Id > &molSidcmptMIdMap ) { - Reaction* reac; - - map< string,double > rctMap; - map< string,double >::iterator rctMap_iter; - map< string,double >prdMap; - map< string,double >::iterator prdMap_iter; - map< string,EnzymeInfo >enzInfoMap; - - for ( unsigned int r = 0; r < model_->getNumReactions(); r++ ) { - Id reaction_; - reac = model_->getReaction( r ); - noOfsub_ = 0; - noOfprd_ = 0; - std:: string id; //=reac->getId(); - if ( reac->isSetId() ) - id = reac->getId(); - - std::string name; - if ( reac->isSetName() ) { - name = reac->getName(); - name = nameString(name); - } - if (name.empty()) { - if (id.empty()) - assert("Reaction id and name is empty"); - else - name = id; - } - string grpname = getAnnotation( reac,enzInfoMap ); - string reactionNotes = ""; - if (reac->isSetNotes()) - { - XMLNode* xnode = reac->getNotes(); - string testnotes = reac->getNotesString(); - XMLNode nodec = xnode->getChild(0); - XMLNode tnodec = nodec.getChild(0); - reactionNotes = tnodec.getCharacters(); - } - - if ( (grpname != "") && (enzInfoMap[grpname].stage == 3) ) - setupEnzymaticReaction( enzInfoMap[grpname],grpname ,molSidcmptMIdMap,name, reactionNotes); - - // if (grpname != "") - // { - // cout << "\n enz matic reaction " << enzInfoMap[grpname].stage; - // setupEnzymaticReaction( enzInfoMap[grpname],grpname ,molSidcmptMIdMap,name); - // } - - else if ( grpname == "" ) { - if (reac->getNumModifiers() > 0) - setupMMEnzymeReaction( reac,id,name ,molSidcmptMIdMap); - else { - bool rev=reac->getReversible(); - bool fast=reac->getFast(); - if ( fast ) { - cout<<"warning: for now fast attribute is not handled"<<endl; - errorFlag_ = true; - } - // Get groupName if exist in annotation (in case of Genesis) - XMLNode * annotationRea = reac->getAnnotation(); - //string groupName = getAnnotation_Spe_Reac(annotationRea); - pair<string, pair<string,string> > group = getAnnotation_Spe_Reac(annotationRea); - string groupName = group.first; - string xCord = group.second.first; - string yCord = group.second.second; - - int numRcts = reac->getNumReactants(); - int numPdts = reac->getNumProducts(); - if (numRcts != 0 ) - { // In moose, reactions compartment are decided from first Substrate compartment info - // substrate is missing then I get compartment from Reaction itself. - // Ideally that reaction should not be created but at this point I am putting a warning that substrate is missing - const SpeciesReference* rect=reac->getReactant(0); - std::string sp=rect->getSpecies(); - Id comptRef = molSidcmptMIdMap.find(sp)->second; //gives compartment of sp - Id meshEntry = Neutral::child( comptRef.eref(), "mesh" ); - Shell* shell = reinterpret_cast< Shell* >( Id().eref().data() ); - string comptPath = Field<string> :: get(comptRef,"path"); - string groupString = comptPath+'/'+groupName; - Id groupId; - if (!groupName.empty()) - { groupId = Id( comptPath + "/"+groupName ); - if ( groupId == Id() ) - groupId = shell->doCreate( "Neutral", comptRef, groupName, 1 ); - assert( groupId != Id() ); - } - if (groupId == Id()) - reaction_ = shell->doCreate("Reac", comptRef, name, 1); - else - reaction_ = shell->doCreate("Reac", groupId, name, 1); - - //shell->doAddMsg( "Single", meshEntry, "remeshReacs", reaction_, "remesh"); - //Get Substrate - if (numRcts != 0) - addSubPrd(reac,reaction_,"sub"); - //Get Product - if (numPdts != 0) - addSubPrd(reac,reaction_,"prd"); - - if (!xCord.empty() and !yCord.empty()) - { Id reacInfo; - string reacPath = Field<string> :: get(reaction_,"path"); - reacInfo = Id( reacPath + "/info"); - if ( reacInfo == Id() ) - reacInfo = shell->doCreate( "Annotator", reaction_, "info", 1 ); - assert( reacInfo != Id() ); - double x = atof( xCord.c_str() ); - double y = atof( yCord.c_str() ); - Field< double >::set( reacInfo, "x", x ); - Field< double >::set( reacInfo, "y", y ); - } - if (!reactionNotes.empty()) - { Id reacInfo; - string reacPath = Field<string> :: get(reaction_,"path"); - reacInfo = Id( reacPath + "/info"); - if ( reacInfo == Id() ) - reacInfo = shell->doCreate( "Annotator", reaction_, "info", 1 ); - assert( reacInfo != Id() ); - reactionNotes.erase(std::remove(reactionNotes.begin(), reactionNotes.end(), '\n'), reactionNotes.end()); - reactionNotes.erase(std::remove(reactionNotes.begin(), reactionNotes.end(), '\t'), reactionNotes.end()); - Field< string >::set( reacInfo, "notes", reactionNotes ); - } - if ( reac->isSetKineticLaw() ) { - KineticLaw * klaw=reac->getKineticLaw(); - //vector< double > rate = getKLaw( klaw,rev ); - vector< double > rate; - rate.clear(); - string amt_Conc; - getKLaw( klaw,rev,rate,amt_Conc ); - if ( errorFlag_ ) - return; - else if ( !errorFlag_ ) { - if (amt_Conc == "amount") - { Field < double > :: set( reaction_, "numKf", rate[0] ); - Field < double > :: set( reaction_, "numKb", rate[1] ); - } - else if (amt_Conc == "concentration") - { Field < double > :: set( reaction_, "Kf", rate[0] ); - Field < double > :: set( reaction_, "Kb", rate[1] ); - } - /*if (numRcts > 1) - rate[0] = rate[0]*pow(1e3,1.0); - Field < double > :: set( reaction_, "Kf", rate[0] ); - Field < double > :: set( reaction_, "Kb", rate[1] ); - */ - } - } //issetKineticLaw - } - else - cout << " Warning:Reaction \" " << name << "\" doesnot have substrate, this is not read into moose"<<endl; - } //else - } // else grpname == "" - }//for unsigned -} //reaction - -/* Enzymatic Reaction */ -void moose::SbmlReader::setupEnzymaticReaction( const EnzymeInfo & einfo,string enzname, const map< string, Id > &molSidcmptMIdMap,string name1,string enzNotes) { - string enzPool = einfo.enzyme; - Id comptRef = molSidcmptMIdMap.find(enzPool)->second; //gives compartment of sp - Id meshEntry = Neutral::child( comptRef.eref(), "mesh" ); - Shell* shell = reinterpret_cast< Shell* >( Id().eref().data() ); - string xCord = einfo.xcord; - string yCord = einfo.ycord; - //Creating enz pool to enzyme site - Id enzPoolId = molSidMIdMap_.find(enzPool)->second; - - string enzparentpath = Field<string> :: get(enzPoolId,"path"); - Id enzId = Id( enzparentpath + "/"+name1 ); - - Id enzyme_ = shell->doCreate("Enz", enzPoolId, name1, 1); - //shell->doAddMsg( "Single", meshEntry, "remeshReacs", enzyme_, "remesh"); - - if (enzyme_ != Id()) - { - Id complex = einfo.complex; - string clxpath = Field<string> :: get(complex,"path"); - //Moving enzyme site under enzyme - shell->doMove(complex,enzyme_); - shell->doAddMsg("OneToAll",enzyme_,"cplx",complex,"reac"); - - shell->doAddMsg("OneToOne",enzyme_,"enz",enzPoolId,"reac"); - - vector< Id >::const_iterator sub_itr; - for ( sub_itr = einfo.substrates.begin(); sub_itr != einfo.substrates.end(); sub_itr++ ) { - Id S = (*sub_itr); - Id b = shell->doAddMsg( "OneToOne", enzyme_, "sub" ,S , "reac" ); - } - - vector< Id >::const_iterator prd_itr; - for ( prd_itr = einfo.products.begin(); prd_itr != einfo.products.end(); prd_itr++ ) { - Id P = (*prd_itr); - shell->doAddMsg ("OneToOne",enzyme_,"prd", P,"reac"); - } - // populate k3,k2,k1 in this order only. - Field < double > :: set( enzyme_, "k3", einfo.k3 ); - Field < double > :: set( enzyme_, "k2", einfo.k2 ); - Field < double > :: set( enzyme_, "k1", einfo.k1 ); - if (!xCord.empty() and !yCord.empty()) - { Id enzInfo; - string enzPath = Field<string> :: get(enzyme_,"path"); - enzInfo = Id( enzPath + "/info"); - if ( enzInfo == Id() ) - enzInfo = shell->doCreate( "Annotator", enzyme_, "info", 1 ); - assert( enzInfo != Id() ); - double x = atof( xCord.c_str() ); - double y = atof( yCord.c_str() ); - Field< double >::set( enzInfo, "x", x ); - Field< double >::set( enzInfo, "y", y ); - } //xCord.empty - if (!enzNotes.empty()) - { Id enzInfo; - string enzPath = Field<string> :: get(enzyme_,"path"); - enzInfo = Id( enzPath + "/info"); - if ( enzInfo == Id() ) - enzInfo = shell->doCreate( "Annotator", enzyme_, "info", 1 ); - assert( enzInfo != Id() ); - enzNotes.erase(std::remove(enzNotes.begin(), enzNotes.end(), '\n'), enzNotes.end()); - enzNotes.erase(std::remove(enzNotes.begin(), enzNotes.end(), '\t'), enzNotes.end()); - Field< string >::set( enzInfo, "notes", enzNotes ); - } //xCord.empty - }//enzyme_ -} - -/* get annotation */ -pair<string, pair< string, string> > moose::SbmlReader :: getAnnotation_Spe_Reac(XMLNode * annotationSpe_Rec) -{ string groupName = ""; - string xcord = ""; - string ycord = ""; - //XMLNode * annotationSpe_Rec = spe_rec->getAnnotation(); - if( annotationSpe_Rec != NULL ) { - unsigned int num_children = annotationSpe_Rec->getNumChildren(); - for( unsigned int child_no = 0; child_no < num_children; child_no++ ) { - XMLNode childNode = annotationSpe_Rec->getChild( child_no ); - if ( childNode.getPrefix() == "moose" && childNode.getName() == "ModelAnnotation" ) { - unsigned int num_gchildren = childNode.getNumChildren(); - for( unsigned int gchild_no = 0; gchild_no < num_gchildren; gchild_no++ ) { - XMLNode &grandChildNode = childNode.getChild( gchild_no ); - string nodeName = grandChildNode.getName(); - if (nodeName == "Group") - { groupName = (grandChildNode.getChild(0).toXMLString()).c_str(); - //group = shell->doCreate( "Neutral", mgr, "groups", 1, MooseGlobal ); - // assert( group != Id() ); - } - else if (nodeName == "xCord") - xcord = (grandChildNode.getChild(0).toXMLString()).c_str(); - else if (nodeName == "yCord") - ycord = (grandChildNode.getChild(0).toXMLString()).c_str(); - - } //gchild - } //moose and modelAnnotation - } //child - }//annotation Node - return make_pair(groupName, make_pair(xcord,ycord)); -} -string moose::SbmlReader::getAnnotation( Reaction* reaction,map<string,EnzymeInfo> &enzInfoMap ) { - XMLNode * annotationNode = reaction->getAnnotation(); - EnzymeInfo einfo; - string grpname = "",stage,group; - string xcord,ycord; - - if( annotationNode != NULL ) { - unsigned int num_children = annotationNode->getNumChildren(); - for( unsigned int child_no = 0; child_no < num_children; child_no++ ) { - XMLNode childNode = annotationNode->getChild( child_no ); - if ( childNode.getPrefix() == "moose" && childNode.getName() == "EnzymaticReaction" ) { - unsigned int num_gchildren = childNode.getNumChildren(); - for( unsigned int gchild_no = 0; gchild_no < num_gchildren; gchild_no++ ) { - XMLNode &grandChildNode = childNode.getChild( gchild_no ); - string nodeName = grandChildNode.getName(); - string nodeValue; - if (grandChildNode.getNumChildren() == 1 ) { - nodeValue = grandChildNode.getChild(0).toXMLString(); - - } else { - cout << "Error: expected exactly ONE child of " << nodeName << endl; - } - if ( nodeName == "enzyme" ) - einfo.enzyme = molSidMIdMap_.find(nodeValue)->first; - - else if ( nodeName == "complex" ) - einfo.complex=molSidMIdMap_.find(nodeValue)->second; - - else if ( nodeName == "substrates") { - Id elem = molSidMIdMap_.find(nodeValue)->second; - einfo.substrates.push_back(elem); - } - else if ( nodeName == "product" ) { - Id elem = molSidMIdMap_.find(nodeValue)->second; - einfo.products.push_back(elem); - } - else if ( nodeName == "groupName" ) - grpname = nodeValue; - - else if ( nodeName == "stage" ) - stage = nodeValue; - - else if ( nodeName == "Group" ) - einfo.group = nodeValue; - - else if ( nodeName == "xCord" ) - einfo.xcord = nodeValue; - - else if ( nodeName == "yCord" ) - einfo.ycord = nodeValue; - } - if ( stage == "1" ) { - enzInfoMap[grpname].substrates = einfo.substrates; - enzInfoMap[grpname].enzyme = einfo.enzyme; - einfo.stage = 1; - enzInfoMap[grpname].stage = einfo.stage; - enzInfoMap[grpname].group = einfo.group; - enzInfoMap[grpname].xcord = einfo.xcord; - enzInfoMap[grpname].ycord = einfo.ycord; - KineticLaw * klaw=reaction->getKineticLaw(); - vector< double > rate ; - rate.clear(); - string amt_Conc; - getKLaw( klaw,true,rate,amt_Conc ); - if ( errorFlag_ ) - exit(0); - else if ( !errorFlag_ ) { - enzInfoMap[grpname].k1 = rate[0]; - enzInfoMap[grpname].k2 = rate[1]; - } - } - //Stage =='2' means ES* -> E+P; - else if ( stage == "2" ) { - enzInfoMap[grpname].complex = einfo.complex; - enzInfoMap[grpname].products = einfo.products; - einfo.stage = 2; - enzInfoMap[grpname].stage += einfo.stage; - KineticLaw * klaw=reaction->getKineticLaw(); - vector< double > rate; - rate.clear(); - string amt_Conc; - getKLaw( klaw,false,rate,amt_Conc); - if ( errorFlag_ ) - exit(0); - else if ( !errorFlag_ ) - enzInfoMap[grpname].k3 = rate[0]; - } - } - } - } - return grpname; -} - -/* set up Michalies Menten reaction */ -void moose::SbmlReader::setupMMEnzymeReaction( Reaction * reac,string rid,string rname,const map< string, Id > &molSidcmptMIdMap ) { - string::size_type loc = rid.find( "_MM_Reaction_" ); - if( loc != string::npos ) { - int strlen = rid.length(); - rid.erase( loc,strlen-loc ); - } - unsigned int num_modifr = reac->getNumModifiers(); - // Get groupName if exist in annotation (in case of Genesis) - XMLNode * annotationRea = reac->getAnnotation(); - //string groupName = getAnnotation_Spe_Reac(annotationRea); - pair<string, pair<string,string> > group = getAnnotation_Spe_Reac(annotationRea); - string groupName = group.first; - string xCord = group.second.first; - string yCord = group.second.second; - string MMEnznotes = " "; - if (reac->isSetNotes()) - { - XMLNode* xnode = reac->getNotes(); - string testnotes = reac->getNotesString(); - XMLNode nodec = xnode->getChild(0); - XMLNode tnodec = nodec.getChild(0); - MMEnznotes = tnodec.getCharacters(); - } - - for ( unsigned int m = 0; m < num_modifr; m++ ) { - const ModifierSpeciesReference* modifr=reac->getModifier( m ); - std::string sp = modifr->getSpecies(); - Id enzyme_; - Id E = molSidMIdMap_.find(sp)->second; - string Epath = Field<string> :: get(E,"path"); - //cout << " \n \n epath" << Epath; - Id comptRef = molSidcmptMIdMap.find(sp)->second; //gives compartment of sp - Id meshEntry = Neutral::child( comptRef.eref(), "mesh" ); - Shell* shell = reinterpret_cast< Shell* >( Id().eref().data() ); - enzyme_ = shell->doCreate("MMenz",E,rname,1); - if (enzyme_ != Id()) - { //shell->doAddMsg( "Single", meshEntry, "remeshReacs", enzyme_, "remesh"); - if (E != Id()) - shell->doAddMsg("Single",E,"nOut",enzyme_,"enzDest"); - if (!xCord.empty() and !yCord.empty()) - { Id enzInfo; - string enzPath = Field<string> :: get(enzyme_,"path"); - enzInfo = Id( enzPath + "/info"); - if ( enzInfo == Id() ) - enzInfo = shell->doCreate( "Annotator", enzyme_, "info", 1 ); - assert( enzInfo != Id() ); - double x = atof( xCord.c_str() ); - double y = atof( yCord.c_str() ); - Field< double >::set( enzInfo, "x", x ); - Field< double >::set( enzInfo, "y", y ); - } - if(!MMEnznotes.empty()) - { - Id enzInfo; - string enzPath = Field<string> :: get(enzyme_,"path"); - enzInfo = Id( enzPath + "/info"); - if ( enzInfo == Id() ) - enzInfo = shell->doCreate( "Annotator", enzyme_, "info", 1 ); - assert( enzInfo != Id() ); - MMEnznotes.erase(std::remove(MMEnznotes.begin(), MMEnznotes.end(), '\n'), MMEnznotes.end()); - MMEnznotes.erase(std::remove(MMEnznotes.begin(), MMEnznotes.end(), '\t'), MMEnznotes.end()); - Field< string >::set( enzInfo, "notes", MMEnznotes ); - } - - KineticLaw * klaw=reac->getKineticLaw(); - vector< double > rate; - rate.clear(); - string amt_Conc; - getKLaw( klaw,true,rate,amt_Conc); - if ( errorFlag_ ) - return; - else if ( !errorFlag_ ) { - for ( unsigned int rt = 0; rt < reac->getNumReactants(); rt++ ) { - const SpeciesReference* rct = reac->getReactant( rt ); - sp=rct->getSpecies(); - Id S = molSidMIdMap_.find(sp)->second; - if (S != Id()) - shell->doAddMsg( "OneToOne", enzyme_, "sub" ,S , "reac" ); - } - for ( unsigned int pt = 0; pt < reac->getNumProducts(); pt++ ) { - const SpeciesReference* pdt = reac->getProduct(pt); - sp = pdt->getSpecies(); - Id P = molSidMIdMap_.find(sp)->second; - if (P != Id()) - shell->doAddMsg( "OneToOne", enzyme_, "prd" ,P, "reac" ); - } - Field < double > :: set( enzyme_, "kcat", rate[0] ); - Field < double > :: set( enzyme_, "numKm", rate[1] ); - } - } //if Enzyme_ - } -} - -/* get Parameters from Kinetic Law */ -void moose::SbmlReader::getParameters( const ASTNode* node,vector <string> & parameters ) { - assert( parameters.empty() ); - //cout << " parameter type " <<node->getType(); - - if ( node->getType() == AST_MINUS ) { - const ASTNode* lchild = node->getLeftChild(); - pushParmstoVector( lchild,parameters ); - - if ( parameters.size() == 1 ) { - const ASTNode* rchild = node->getRightChild(); - pushParmstoVector( rchild,parameters ); - } - } else if ( node->getType() == AST_DIVIDE ) { - const ASTNode* lchild = node->getLeftChild(); - pushParmstoVector( lchild,parameters ); - if (( parameters.size() == 1 ) || ( parameters.size() == 0 )) { - const ASTNode* rchild = node->getRightChild(); - pushParmstoVector( rchild,parameters ); - } - } else if ( node->getType() == AST_TIMES ) { - //cout << " time " <<endl; - pushParmstoVector( node,parameters ); - } else if ( node->getType() == AST_PLUS ) - pushParmstoVector( node,parameters ); - else if ( node->getType() == AST_NAME ) - pushParmstoVector( node,parameters ); - if ( parameters.size() > 2 ) { - cout<<"Sorry! for now MOOSE cannot handle more than 2 parameters ."<<endl; - errorFlag_ = true; - } - -} - -/* push the Parameters used in Kinetic law to a vector */ - -void moose::SbmlReader::pushParmstoVector(const ASTNode* p,vector <string> & parameters) { - string parm = ""; - //cout << "\n there " << p->getType(); - //cout << "_NAME" << " = " <<p->getName(); - if ( p->getType() == AST_NAME ) { - pvm_iter = parmValueMap.find( std::string(p->getName()) ); - if ( pvm_iter != parmValueMap.end() ) { - parm = pvm_iter->first; - parameters.push_back( parm ); - } - } - int num = p->getNumChildren(); - for( int i = 0; i < num; ++i ) { - const ASTNode* child = p->getChild(i); - pushParmstoVector( child,parameters ); - } -} - -/* get Kinetic Law */ -void moose::SbmlReader::getKLaw( KineticLaw * klaw,bool rev,vector< double > & rate,string &amt_Conc) { - std::string id; - amt_Conc = "amount"; - double value = 0.0; - UnitDefinition * kfud; - UnitDefinition * kbud; - int np = klaw->getNumParameters(); - bool flag = true; - for ( int pi = 0; pi < np; pi++ ) { - Parameter * p = klaw->getParameter(pi); - - if ( p->isSetId() ) - id = p->getId(); - if ( p->isSetValue() ) - value = p->getValue(); - parmValueMap[id] = value; - flag = false; - } - double kf = 0.0,kb = 0.0,kfvalue,kbvalue; - string kfparm,kbparm; - vector< string > parameters; - parameters.clear(); - const ASTNode* astnode=klaw->getMath(); - //cout << "\nkinetic law is :" << SBML_formulaToString(astnode) << endl; - getParameters( astnode,parameters ); - //cout << "getKLaw " << errorFlag_; - if ( errorFlag_ ) - return; - else if ( !errorFlag_ ) { - if ( parameters.size() == 1 ) { - kfparm = parameters[0]; - kbparm = parameters[0]; - } else if ( parameters.size() == 2 ) { - kfparm = parameters[0]; - kbparm = parameters[1]; - } - //cout << "\n parameter "<< parameters.size(); - //cout << "$$ "<< parmValueMap[kfparm]; - //cout << " \t \t " << parmValueMap[kbparm]; - - kfvalue = parmValueMap[kfparm]; - kbvalue = parmValueMap[kbparm]; - Parameter* kfp; - Parameter* kbp; - if ( flag ) { - kfp = model_->getParameter( kfparm ); - kbp = model_->getParameter( kbparm ); - } else { - kfp = klaw->getParameter( kfparm ); - kbp = klaw->getParameter( kbparm ); - } - //cout << "\t \n \n" << kfp << " " <<kbp; - - if ( kfp->isSetUnits() ) { - kfud = kfp->getDerivedUnitDefinition(); - //cout << "parameter unit :" << UnitDefinition::printUnits(kfp->getDerivedUnitDefinition())<< endl; - //cout << " rate law "; - double transkf = transformUnits( 1,kfud ,"substance",true); - //cout << " transkf " << transkf<<endl; - kf = kfvalue * transkf; - kb = 0.0; - } - else { - double lvalue =1.0; - /* If rate units are not defined then trying to get substanceUnit*/ - if (model_->getNumUnitDefinitions() > 0) - lvalue = unitsforRates(); - //cout << "Substrate units are specified " << lvalue <<endl; - /* If neither RateUnits nor substanceUnit is defined, then assuming SubstanceUnit are in mole, - so converting mole to millimole - */ - amt_Conc = "concentration"; - //cout << " rate law "; - if (noOfsub_ >1) - lvalue /= pow(1e+3,(noOfsub_-1)); - kf = kfvalue*lvalue; - - }// !kfp is notset - if ( ( kbp->isSetUnits() ) && ( rev ) ) { - kbud = kbp->getDerivedUnitDefinition(); - double transkb = transformUnits( 1,kbud,"substance",true ); - kb = kbvalue * transkb; - } - if ( (! kbp->isSetUnits() ) && ( rev ) ) { - double lvalue =1.0; - /* If rate units are not defined then,trying to get substanceUnit*/ - if (model_->getNumUnitDefinitions() > 0) - lvalue = unitsforRates(); - /* If neither RateUnits nor substanceUnit is defined, then assuming SubstanceUnit are in mole (concentration) - and hasOnlySubstanceUnit =false so converting mole to millimole - */ - if (noOfprd_ >1) - lvalue /= pow(1e+3,(noOfprd_-1)); - kf = kfvalue*lvalue; - - } - rate.push_back( kf ); - rate.push_back( kb ); - } -} -double moose::SbmlReader::unitsforRates() { - double lvalue =1; - for (unsigned int n=0; n < model_->getNumUnitDefinitions(); n++) { - UnitDefinition * ud = model_->getUnitDefinition(n); - for (unsigned int ut=0; ut <ud->getNumUnits(); ut++) { - Unit * unit = ud->getUnit(ut); - if (ud->getId() == "substance") { - if ( unit->isMole() ) { - double exponent = unit->getExponent(); - double multiplier = unit->getMultiplier(); - int scale = unit->getScale(); - double offset = unit->getOffset(); - lvalue *= pow( multiplier * pow(10.0,scale), exponent ) + offset; - return lvalue; - } - } - } - } - return lvalue; -}//unitforRates -void moose::SbmlReader::addSubPrd(Reaction * reac,Id reaction_,string type) { - if (reaction_ != Id()) - { - map< string,double > rctMap; - map< string,double >::iterator rctMap_iter; - double rctcount=0.0; - Shell * shell = reinterpret_cast< Shell* >( Id().eref().data() ); - rctMap.clear(); - unsigned int nosubprd; - const SpeciesReference* rct; - if (type == "sub") { - nosubprd = reac->getNumReactants(); - } else - nosubprd = reac->getNumProducts(); - for ( unsigned int rt=0; rt<nosubprd; rt++ ) { - if (type == "sub") - rct = reac->getReactant(rt); - else - rct = reac->getProduct(rt); - std:: string sp = rct->getSpecies(); - rctMap_iter = rctMap.find(sp); - if ( rctMap_iter != rctMap.end() ) - rctcount = rctMap_iter->second; - else - rctcount = 0.0; - rctcount += rct->getStoichiometry(); - rctMap[sp] = rctcount; - if (type =="sub") - noOfsub_ +=rctcount; - for ( int i=0; (int)i<rct->getStoichiometry(); i++ ) - shell->doAddMsg( "OneToOne", reaction_, type ,molSidMIdMap_[sp] , "reac" ); - } - } -} -/* Transform units from SBML to MOOSE - MOOSE units for - volume -- cubic meter -*/ - -double moose::SbmlReader::transformUnits( double mvalue,UnitDefinition * ud,string type, bool hasonlySubUnit ) { - assert (ud); - double lvalue = mvalue; - if (type == "compartment") - { if(ud->getNumUnits() == 0) - unitsDefined = false; - else - { for ( unsigned int ut = 0; ut < ud->getNumUnits(); ut++ ) { - Unit * unit = ud->getUnit(ut); - if ( unit->isLitre() ) { - double exponent = unit->getExponent(); - double multiplier = unit->getMultiplier(); - int scale = unit->getScale(); - double offset = unit->getOffset(); - lvalue *= pow( multiplier * pow(10.0,scale), exponent ) + offset; - // Need to check if spatial dimension is less than 3 then, - // then volume conversion e-3 to convert cubicmeter shd not be done. - lvalue *= pow(1e-3,exponent); - } - } - } - } - else if(type == "substance") - { double exponent = 1.0; - if(ud->getNumUnits() == 0) - unitsDefined = false; - else { - for ( unsigned int ut = 0; ut < ud->getNumUnits(); ut++ ) { - Unit * unit = ud->getUnit(ut); - if ( unit->isMole() ) { - exponent = unit->getExponent(); - double multiplier = unit->getMultiplier(); - int scale = unit->getScale(); - double offset = unit->getOffset(); - lvalue *= pow( multiplier * pow(10.0,scale), exponent ) + offset; - }//if unit is Mole - else if (unit->isItem()){ - exponent = unit->getExponent(); - double multiplier = unit->getMultiplier(); - int scale = unit->getScale(); - double offset = unit->getOffset(); - lvalue *= pow( multiplier * pow(10.0,scale), exponent ) + offset; - } - }//for - } //else - } // type="substance" -return lvalue; -}//transformUnits -void moose::SbmlReader::printMembers( const ASTNode* p,vector <string> & ruleMembers ) { - if ( p->getType() == AST_NAME ) { - //cout << "_NAME" << " = " << p->getName() << endl; - ruleMembers.push_back( p->getName() ); - } - int num = p->getNumChildren(); - for( int i = 0; i < num; ++i ) { - const ASTNode* child = p->getChild(i); - printMembers( child,ruleMembers ); - } -} - -void moose::SbmlReader ::findModelParent( Id cwe, const string& path, Id& parentId, string& modelName ) { - //Taken from LoadModels.cpp - //If path exist example /model when come from GUI it creates model under /model/filename - // i.e. because by default we creat genesis,sbml models under '/model', which is created before and path exist - // at the time it comes to MooseSbmlReader.cpp - //When run directly (command line readSBML() )it ignores the path and creates under '/' and filename takes as "SBMLtoMoose" - //modelName = "test"; - string fullPath = path; - if ( path.length() == 0 ) - parentId = cwe; - - if ( path == "/" ) - parentId = Id(); - - if ( path[0] != '/' ) { - string temp = cwe.path(); - if ( temp[temp.length() - 1] == '/' ) - fullPath = temp + path; - else - fullPath = temp + "/" + path; - } - Id paId( fullPath ); - if ( paId == Id() ) { // Path includes new model name - string::size_type pos = fullPath.find_last_of( "/" ); - assert( pos != string::npos ); - string head = fullPath.substr( 0, pos ); - Id ret( head ); - // When head = "" it means paId should be root. - if ( ret == Id() && head != "" && head != "/root" ) - ;//return 0; - parentId = ret; - modelName = fullPath.substr( pos + 1 ); - } - - else { // Path is an existing element. - parentId = paId; - - } -} - -/** - * @brief Populate parmValueMap; a member variable with keeps all the globals - * parameters of SBML model. - */ -void moose::SbmlReader::getGlobalParameter() { - for ( unsigned int pm = 0; pm < model_->getNumParameters(); pm++ ) { - Parameter* prm = model_->getParameter( pm ); - std::string id,unit; - if ( prm->isSetId() ) { - id = prm->getId(); - } - double value = 0.0; - if ( prm->isSetValue() ) { - value=prm->getValue(); - } - parmValueMap[id] = value; - } -} - -string moose::SbmlReader::nameString( string str ) { - string str1; - - int len = str.length(); - int i= 0; - do { - switch( str.at(i) ) { - case ' ': - str1 = "_space_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - } - i++; - } while ( i < len ); - return str; -} -#endif // USE_SBML diff --git a/sbml/MooseSbmlReader.h b/sbml/MooseSbmlReader.h deleted file mode 100644 index bf97f1ecdae8b042b053058b1bc4f6a6b8994290..0000000000000000000000000000000000000000 --- a/sbml/MooseSbmlReader.h +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************* - * File: moose::SbmlReader.h - * Description: - * Author: HarshaRani G.V - * E-mail: hrani@ncbs.res.in - ********************************************************************/ -/********************************************************************** -** This program is part of 'MOOSE', the -** Messaging Object Oriented Simulation Environment, -** also known as GENESIS 3 base code. -** copyright (C) 2003-2015 Upinder S. Bhalla. and NCBS -** It is made available under the terms of the -** GNU Lesser General Public License version 2.1 -** See the file COPYING.LIB for the full notice. -**********************************************************************/ - -#ifndef _MOOSESBMLREADER_H -#define _MOOSESBMLREADER_H -#ifdef USE_SBML - -#include <sbml/SBMLTypes.h> - -#include "../basecode/Id.h" -//class Id; -typedef struct { - string enzyme; - Id complex; - vector<Id> substrates; - vector<Id> products; - double k1; - double k2; - double k3; - int stage; - string group; - string xcord; - string ycord; -} EnzymeInfo; - -namespace moose{ -class SbmlReader { -public: - SbmlReader() { - errorFlag_ = false; - } - ~SbmlReader() { - ; - } - Id read(string filename,string location,string solverClass); - map< string, Id> createCompartment(string location,Id parentId,string modelName,Id base_); - typedef map<string, Id> sbmlStr_mooseId; - //typedef map< string - // , tuple<string,double,bool> - // > sbmlId_convUnit; - const sbmlStr_mooseId createMolecule(map<string,Id> &); - void createReaction(const sbmlStr_mooseId &); - -private: - bool errorFlag_; - //sbmlId_convUnit poolMap_; - Model* model_; - SBMLDocument* document_; - /* SBMLReader reader_; */ - map< string, Id >molSidMIdMap_; - int noOfsub_; - int noOfprd_; - Id baseId; - double transformUnits( double msize,UnitDefinition * ud,string type,bool hasonlySubUnit ); - double unitsforRates(); - void getRules(); - string nameString( string str ); - void printMembers( const ASTNode* p,vector <string> & ruleMembers ); - void addSubPrd(Reaction * reac,Id reaction_,string type); - void getKLaw( KineticLaw * klaw,bool rev,vector< double > & rate ,string & amt_Conc); - void pushParmstoVector( const ASTNode* p,vector <string> & parameters ); - void getParameters( const ASTNode* node,vector <string> & parameters ); - void setupMMEnzymeReaction( Reaction * reac,string id ,string name,const map<string, Id> &); - pair<string, pair<string, string> > getAnnotation_Spe_Reac( XMLNode * annotationSpe_Rec ); - string getAnnotation( Reaction* reaction,map<string,EnzymeInfo> & ); - void setupEnzymaticReaction( const EnzymeInfo & einfo,string name,const map< string, Id > & ,string name1,string notes); - void findModelParent( Id cwe, const string& path,Id& parentId, string& modelName ); - void getGlobalParameter(); -}; -} // namespace moose -#endif //USE_SBML -#endif // _MOOSESBMLREADER_H - diff --git a/sbml/MooseSbmlWriter.cpp b/sbml/MooseSbmlWriter.cpp deleted file mode 100644 index 0fca788b47098a4d583c62d8da1d03048cf23c7e..0000000000000000000000000000000000000000 --- a/sbml/MooseSbmlWriter.cpp +++ /dev/null @@ -1,1137 +0,0 @@ -/******************************************************************* - * File: MooseSbmlWriter.cpp - * Description: - * Author: HarshaRani - * E-mail: hrani@ncbs.res.in - ********************************************************************/ -/********************************************************************** -** This program is part of 'MOOSE', the -** Messaging Object Oriented Simulation Environment, -** also known as GENESIS 3 base code. -** copyright (C) 2003-2015 Upinder S. Bhalla. and NCBS -** It is made available under the terms of the -** GNU Lesser General Public License version 2.1 -** See the file COPYING.LIB for the full notice. -**********************************************************************/ -#ifdef USE_SBML - -#include "header.h" -#ifdef USE_SBML -#include <sbml/SBMLTypes.h> -#endif -#include "MooseSbmlWriter.h" -#include "../shell/Wildcard.h" -#include "../shell/Neutral.h" -#include <set> -#include <sstream> -#include "../shell/Shell.h" -#include "../kinetics/lookupVolumeFromMesh.h" -//#include "../manager/SimManager.h" -/** -* write a Model after validation -*/ -/* ToDo: Tables should be implemented - Assignment rule is assumed to be addition since genesis file has just sumtotal - But now "Function" function class exist so any arbitarary function can be read and written - */ - -using namespace std; - -int moose::SbmlWriter::write( string target , string filepath) -{ - //cout << "Sbml Writer: " << filepath << " ---- " << target << endl; -#ifdef USE_SBML - string::size_type loc; - while ( ( loc = filepath.find( "\\" ) ) != string::npos ) - { - filepath.replace( loc, 1, "/" ); - } - if ( filepath[0]== '~' ) - { - cerr << "Error : Replace ~ with absolute path " << endl; - } - string filename = filepath; - string::size_type last_slashpos = filename.find_last_of("/"); - filename.erase( 0,last_slashpos + 1 ); - - //* Check: I have to comeback to this and check what to do with file like text.xml2 cases and also shd keep an eye on special char **/ - vector< string > fileextensions; - fileextensions.push_back( ".xml" ); - fileextensions.push_back( ".zip" ); - fileextensions.push_back( ".bz2" ); - fileextensions.push_back( ".gz" ); - vector< string >::iterator i; - for( i = fileextensions.begin(); i != fileextensions.end(); i++ ) - { - string::size_type loc = filename.find( *i ); - if ( loc != string::npos ) - { - int strlen = filename.length(); - filename.erase( loc,strlen-loc ); - break; - } - } - if ( i == fileextensions.end() && filename.find( "." ) != string::npos ) - { - string::size_type loc; - while ( ( loc = filename.find( "." ) ) != string::npos ) - { - filename.replace( loc, 1, "_" ); - } - } - - if ( i == fileextensions.end() ) - filepath += ".xml"; - //std::pair<int, std::string > infoValue(); - SBMLDocument sbmlDoc; - bool SBMLok = false; - createModel( filename,sbmlDoc,target ); - //cout << " sbmlDoc " <<sbmlDoc.toSBML()<<endl; - SBMLok = validateModel( &sbmlDoc ); - if ( SBMLok ) - { - return writeModel( &sbmlDoc, filepath ); - } - //delete sbmlDoc; - if ( !SBMLok ) { - cerr << "Errors encountered " << endl; - return -1; - } - -#endif - return -2; -} - -/* -1 - Write successful -0 - Write failed --1 - Validation failed --2 - No libsbml support -*/ -#ifdef USE_SBML - -//* Check : first will put a model in according to l3v1 with libsbml5.9.0 **/ - -//* Create an SBML model in the SBML Level 3 version 1 specification **/ -void moose::SbmlWriter::createModel(string filename,SBMLDocument& sbmlDoc,string path) -{ - XMLNamespaces xmlns; - xmlns.add("http://www.sbml.org/sbml/level3/version1"); - xmlns.add("http://www.moose.ncbs.res.in","moose"); - xmlns.add("http://www.w3.org/1999/xhtml","xhtml"); - sbmlDoc.setNamespaces(&xmlns); - cremodel_ = sbmlDoc.createModel(); - cremodel_->setId(filename); - cremodel_->setTimeUnits("second"); - cremodel_->setExtentUnits("substance"); - cremodel_->setSubstanceUnits("substance"); - - Id baseId(path); - vector< ObjId > graphs; - string plots; - wildcardFind(path+"/##[TYPE=Table2]",graphs); - - for ( vector< ObjId >::iterator itrgrp = graphs.begin(); itrgrp != graphs.end();itrgrp++) - { - vector< ObjId > msgMgrs = - Field< vector< ObjId > >::get( *itrgrp, "msgOut" ); - for (unsigned int i = 0; i < msgMgrs.size();++i) - { - Id msgId = Field< Id >::get( msgMgrs[i], "e2" ); - string msgpath = Field <string> :: get(msgId,"path"); - string msgname = Field <string> :: get(msgId,"name"); - string Clean_msgname = nameString(msgname); - ObjId compartment(msgpath); - //starting with compartment Level - while( Field<string>::get(compartment,"className") != "CubeMesh" - && Field<string>::get(compartment,"className") != "CylMesh" - ) - compartment = Field<ObjId> :: get(compartment, "parent"); - string cmpt = Field < string > :: get(compartment,"name"); - std::size_t found = msgpath.find(cmpt); - string path = msgpath.substr(found-1,msgpath.length()); - std::size_t found1 = path.rfind(msgname); - //Replacing the clean_name like "." is replace _dot_ etc - string plotpath = path.replace(found1,path.length(),Clean_msgname); - plots += plotpath+";"; - - } - } - - ostringstream modelAnno; - modelAnno << "<moose:ModelAnnotation>\n"; - /*modelAnno << "<moose:runTime> " << runtime << " </moose:runTime>\n"; - modelAnno << "<moose:simdt> " << simdt << " </moose:simdt>\n"; - modelAnno << "<moose:plotdt> " << plotdt << " </moose:plotdt>\n"; - */ - //cout << " runtime " << runtime << " " << simdt << " "<<plotdt; - modelAnno << "<moose:plots> "<< plots<< "</moose:plots>\n"; - modelAnno << "</moose:ModelAnnotation>"; - XMLNode* xnode =XMLNode::convertStringToXMLNode( modelAnno.str() ,&xmlns); - cremodel_->setAnnotation( xnode ); - - UnitDefinition *ud1 = cremodel_->createUnitDefinition(); - ud1->setId("volume"); - Unit * u = ud1->createUnit(); - u->setKind(UNIT_KIND_LITRE); - u->setMultiplier(1.0); - u->setExponent(1.0); - u->setScale(0); - - UnitDefinition * unitdef; - Unit* unit; - unitdef = cremodel_->createUnitDefinition(); - unitdef->setId("substance"); - unit = unitdef->createUnit(); - unit->setKind( UNIT_KIND_ITEM ); - unit->setMultiplier(1); - unit->setExponent(1.0); - unit->setScale(0); - - //Getting Compartment from moose - vector< ObjId > chemCompt; - wildcardFind(path+"/##[ISA=ChemCompt]",chemCompt); - for ( vector< ObjId >::iterator itr = chemCompt.begin(); itr != chemCompt.end();itr++) - { - //TODO: CHECK need to check how do I get ObjectDimensions - vector < unsigned int>dims; - unsigned int dims_size; - - /*vector <unsigned int>dims = Field <vector <unsigned int> > :: get(ObjId(*itr),"objectDimensions"); - - if (dims.size() == 0){ - dims_size = 1; - } - if (dims.size()>0){ - dims_size= dims.size(); - } - */ - dims_size = 1; - - for (unsigned index = 0; index < dims_size; ++index) - { - string comptName = Field<string>::get(*itr,"name"); - string comptPath = Field<string>::get(*itr,"path"); - ostringstream cid; - cid << *itr << "_" << index; - comptName = nameString(comptName); - string comptname_id = comptName + "_" + cid.str() + "_"; - //changeName(comptname,cid.str()); - string clean_comptname = idBeginWith(comptname_id); - double size = Field<double>::get(ObjId(*itr,index),"Volume"); - unsigned int ndim = Field<unsigned int>::get(ObjId(*itr,index),"NumDimensions"); - - ::Compartment* compt = cremodel_->createCompartment(); - compt->setId(clean_comptname); - compt->setName(comptName); - compt->setSpatialDimensions(ndim); - compt->setUnits("volume"); - compt->setConstant(true); - if(ndim == 3) - // Unit for Compartment in moose is cubic meter - // Unit for Compartment in SBML is lts - // so multiple by 1000 - compt->setSize(size*1e3); - else - compt->setSize(size); - - // All the pools are taken here - vector< ObjId > Compt_spe; - wildcardFind(comptPath+"/##[ISA=PoolBase]",Compt_spe); - - //vector< Id > Compt_spe = LookupField< string, vector< Id > >::get(*itr, "neighbors", "remesh" ); - int species_size = 1; - string objname; - for (vector <ObjId> :: iterator itrp = Compt_spe.begin();itrp != Compt_spe.end();itrp++) - { string objclass = Field<string> :: get(*itrp,"className"); - string clean_poolname = cleanNameId(*itrp,index); - double initAmt = Field<double> :: get(*itrp,"nInit"); - Species *sp = cremodel_->createSpecies(); - sp->setId( clean_poolname ); - string poolname = Field<string> :: get(*itrp,"name"); - std::size_t found = poolname.find("cplx"); - //If Species name has cplx then assuming its cplx molecule, since genesis there can be same cplx - // name in number place, as its build under site, but in SBML this is not possible - // so adding enzsite_enzname_cplxname - if (found!=std::string::npos) - { vector < Id > rct = LookupField <string,vector < Id> >::get(*itrp, "neighbors","reacDest"); - std::set < Id > rctprd; - rctprd.insert(rct.begin(),rct.end()); - for (std::set < Id> :: iterator rRctPrd = rctprd.begin();rRctPrd!=rctprd.end();rRctPrd++) - { - string enz = Field<string> :: get(*rRctPrd,"name"); - ObjId meshParent = Neutral::parent( rRctPrd->eref() ); - string enzPoolsite = Field<string>::get(ObjId(meshParent),"name") ; - objname = nameString(enzPoolsite)+"_"+nameString(enz)+"_"+nameString(poolname); - } - } - else - objname = nameString(poolname); - - sp->setName( objname); - sp->setCompartment( clean_comptname ); - // AS of 12-6-2013 - // Units in moose for pool : is milli molar, In sbml for pool: default unit is mole. - // so 'conc' shd be converted to from milli molar to mole - // molar (M) = moles/ltrs - // mole = Molar*1e-3*Vol*1000*Avogadro constant (1e-3 milli, 1000 is for converting cubicmeter to lts) - // As of 2-7-2013 - // At this point I am using item which is # number so directly using nInit - // - sp->setInitialAmount( initAmt ); - - string groupName = getGroupinfo(*itrp); - string path = Field<string> :: get(*itrp,"path"); - ostringstream speciAnno,speciGpname,specixyCord; - bool speciannoexist = false; - double x,y; - Id annotaIdS( path+"/info"); - - if (annotaIdS != Id()) - { string noteClass = Field<string> :: get(annotaIdS,"className"); - x = Field <double> :: get(annotaIdS,"x"); - y = Field <double> :: get(annotaIdS,"y"); - // specixyCord << "<moose:xCord>" << x << "</moose:xCord>\n"; - // specixyCord << "<moose:yCord>" << y << "</moose:yCord>\n"; - // speciannoexist = true; - - string notes; - if (noteClass =="Annotator") - { string notes = Field <string> :: get(annotaIdS,"notes"); - if (notes != "") - { string cleanNotes = nameString1(notes); - string notesString = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ - cleanNotes + "\n\t </body>"; - sp->setNotes(notesString); - } - } - } - sp->setUnits("substance"); - species_size = species_size+1; - // true if species is amount, false: if species is concentration - sp->setHasOnlySubstanceUnits( true ); - if (!groupName.empty()) - { speciGpname << "<moose:Group>"<< groupName << "</moose:Group>\n"; - speciannoexist = true; - } - if (speciannoexist) - { ostringstream speciAnno; - speciAnno << "<moose:ModelAnnotation>\n"; - if (!speciGpname.str().empty()) - speciAnno << speciGpname.str(); - if (!specixyCord.str().empty()) - speciAnno <<specixyCord.str(); - speciAnno << "</moose:ModelAnnotation>"; - XMLNode* xnode =XMLNode::convertStringToXMLNode( speciAnno.str() ,&xmlns); - sp->setAnnotation( xnode ); - } - - // Setting BoundaryCondition and constant as per this rule for BufPool - // -constanst -boundaryCondition -has assignment/rate Rule -can be part of sub/prd - // false true yes yes - // true true no yes - if ( (objclass == "BufPool") || (objclass == "ZombieBufPool")) - { //BoundaryCondition is made for buff pool - sp->setBoundaryCondition(true); - string Funcpoolname = Field<string> :: get(*itrp,"path"); - vector< Id > children = Field< vector< Id > >::get( *itrp, "children" ); - - if (children.size() == 0) - sp->setConstant( true ); - - for ( vector< Id >::iterator i = children.begin(); i != children.end(); ++i ) - { string funcpath = Field <string> :: get(*i,"path"); - string clsname = Field <string> :: get(*i,"className"); - if (clsname == "Function" or clsname == "ZombieFunction") - { Id funcIdx(funcpath+"/x"); - string f1x = Field <string> :: get(funcIdx,"path"); - vector < Id > inputPool = LookupField <string,vector <Id> > :: get(funcIdx,"neighbors","input"); - int sumtot_count = inputPool.size(); - if (sumtot_count > 0) - { sp->setConstant(false); - ostringstream sumtotal_formula; - for(vector< Id >::iterator itrsumfunc = inputPool.begin();itrsumfunc != inputPool.end(); itrsumfunc++) - { - string sumpool = Field<string> :: get(*itrsumfunc,"name"); - sumtot_count -= 1; - string clean_sumFuncname = cleanNameId(*itrsumfunc,index); - if ( sumtot_count == 0 ) - sumtotal_formula << clean_sumFuncname; - else - sumtotal_formula << clean_sumFuncname << "+"; - } - Rule * rule = cremodel_->createAssignmentRule(); - rule->setVariable( clean_poolname ); - rule->setFormula( sumtotal_formula.str() ); - } - else - cout << "assignment rule is not found for \" "<< poolname << " \" but function might have constant as variable"<<endl; - } - //If assignment rule is not found then constant is made true - else - sp->setConstant(true); - - } //for vector - }//zbufpool - else - { //if not bufpool then Pool, then - sp->setBoundaryCondition(false); - sp->setConstant(false); - } - } //itrp - - vector< ObjId > Compt_Reac; - wildcardFind(comptPath+"/##[ISA=ReacBase]",Compt_Reac); - //vector< Id > Compt_Reac = LookupField< string, vector< Id > >::get(*itr, "neighbors", "remeshReacs" ); - for (vector <ObjId> :: iterator itrR= Compt_Reac.begin();itrR != Compt_Reac.end();itrR++) - { - Reaction* reaction; - reaction = cremodel_->createReaction(); - string cleanReacname = cleanNameId(*itrR,index); - string recClass = Field<string> :: get(*itrR,"className"); - string pathR = Field<string> :: get(*itrR,"path"); - ostringstream reactAnno,reactGpname,reactxyCord; - bool reactannoexist = false; - string noteClassR; - double x,y; - Id annotaIdR(pathR+"/info"); - if (annotaIdR != Id()) - { - noteClassR = Field<string> :: get(annotaIdR,"className"); - x = Field <double> :: get(annotaIdR,"x"); - y = Field <double> :: get(annotaIdR,"y"); - // reactxyCord << "<moose:xCord>" << x << "</moose:xCord>\n"; - // reactxyCord << "<moose:yCord>" << y << "</moose:yCord>\n"; - // reactannoexist = true; - string notesR; - if (noteClassR =="Annotator") - { - notesR = Field <string> :: get(annotaIdR,"notes"); - if (notesR != "") - { string cleanNotesR = nameString1(notesR); - string notesStringR = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ - cleanNotesR + "\n\t </body>"; - reaction->setNotes(notesStringR); - } - } - } - - string groupName = getGroupinfo(*itrR); - if (!groupName.empty()) - { reactGpname << "<moose:Group>"<< groupName << "</moose:Group>\n"; - reactannoexist = true; - } - if (reactannoexist) - { ostringstream reactAnno; - reactAnno << "<moose:ModelAnnotation>\n"; - if (!reactGpname.str().empty()) - reactAnno << reactGpname.str(); - if (!reactxyCord.str().empty()) - reactAnno <<reactxyCord.str(); - reactAnno << "</moose:ModelAnnotation>"; - XMLNode* xnode =XMLNode::convertStringToXMLNode( reactAnno.str() ,&xmlns); - reaction->setAnnotation( xnode ); - } - - string objname = Field<string> :: get(*itrR,"name"); - objname = nameString(objname); - - KineticLaw* kl; - // Reaction - reaction->setId( cleanReacname); - reaction->setName( objname); - double Kf = Field<double>::get(*itrR,"numKf"); - double Kb = Field<double>::get(*itrR,"numKb"); - - if (Kb == 0.0) - reaction->setReversible( false ); - else - reaction->setReversible( true ); - reaction->setFast( false ); - // Reaction's Reactant are Written - ostringstream rate_law,kfparm,kbparm; - double rct_order = 0.0; - kfparm << cleanReacname << "_" << "Kf"; - rate_law << kfparm.str(); - - // This function print out reactants and update rate_law string - getSubPrd(reaction,"sub","",*itrR,index,rate_law,rct_order,true,recClass); - double prd_order =0.0; - kbparm << cleanReacname << "_" << "Kb"; - - // This function print out product and update rate_law string if kb != 0 - if ( Kb != 0.0 ){ - rate_law << "-" << kbparm.str(); - getSubPrd(reaction,"prd","",*itrR,index,rate_law,prd_order,true,recClass); - } - else - getSubPrd(reaction,"prd","",*itrR,index,rate_law,prd_order,false,recClass); - - kl = reaction->createKineticLaw(); - kl->setFormula( rate_law.str() ); - double rvalue,pvalue; - rvalue = Kf; - string unit=parmUnit( rct_order-1 ); - printParameters( kl,kfparm.str(),rvalue,unit ); - if ( Kb != 0.0 ){ - pvalue = Kb; - string unit=parmUnit( prd_order-1 ); - printParameters( kl,kbparm.str(),pvalue,unit ); - } - }//itrR - // Reaction End - - // Enzyme start - vector< ObjId > Compt_Enz; - wildcardFind(comptPath+"/##[ISA=EnzBase]",Compt_Enz); - for (vector <ObjId> :: iterator itrE=Compt_Enz.begin();itrE != Compt_Enz.end();itrE++) - { string enzClass = Field<string>::get(*itrE,"className"); - string cleanEnzname = cleanNameId(*itrE,index); - string pathE = Field < string > :: get(*itrE,"Path"); - Reaction* reaction; - reaction = cremodel_->createReaction(); - ostringstream enzAnno,enzGpname,enzxyCord; - string noteClassE; - string notesE; - double x,y; - bool enzAnnoexist = false; - Id annotaIdE(pathE+"/info"); - if (annotaIdE != Id()) - { - noteClassE = Field<string> :: get(annotaIdE,"className"); - x = Field <double> :: get(annotaIdE,"x"); - y = Field <double> :: get(annotaIdE,"y"); - // enzxyCord << "<moose:xCord>" << x << "</moose:xCord>\n"; - // enzxyCord << "<moose:yCord>" << y << "</moose:yCord>\n"; - // enzAnnoexist = true; - if (noteClassE =="Annotator") - { - notesE = Field <string> :: get(annotaIdE,"notes"); - if (notesE != "") - { string cleanNotesE = nameString1(notesE); - string notesStringE = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ - cleanNotesE + "\n\t </body>"; - reaction->setNotes(notesStringE); - } - } - } - - string groupName = getGroupinfo(*itrE); - if (!groupName.empty()) - { enzGpname << "<moose:Group>"<< groupName << "</moose:Group>\n"; - enzAnnoexist = true; - } - string objname = Field < string> :: get(*itrE,"name"); - objname = nameString(objname); - KineticLaw* kl; - if ( (enzClass == "Enz") || (enzClass == "ZombieEnz")) - {// Complex Formation S+E -> SE*; - reaction->setId( cleanEnzname); - reaction->setName( objname); - reaction->setFast ( false ); - reaction->setReversible( true); - string enzname = Field<string> :: get(*itrE,"name"); - ostringstream enzid; - enzid << (*itrE) <<"_"<<index; - enzname = nameString(enzname); - string enzNameAnno = enzname; - ostringstream Objid; - Objid << (*itrE) <<"_"<<index <<"_"; - string enzName = enzname + "_" + Objid.str(); - enzName = idBeginWith( enzName ); - ostringstream enzAnno; - enzAnno <<"<moose:EnzymaticReaction>"; - string groupName = getGroupinfo(*itrE); - // if (!groupName.empty()) - // enzAnno << "<moose:Group>"<<groupName<<"</moose:Group>"; - double k1 = Field<double>::get(*itrE,"k1"); - double k2 = Field<double>::get(*itrE,"k2"); - ostringstream rate_law; - double rct_order = 0.0,prd_order=0.0; - rate_law << "k1"; - getSubPrd(reaction,"enzOut","sub",*itrE,index,rate_law,rct_order,true,enzClass); - for(unsigned int i =0;i<nameList_.size();i++) - enzAnno << "<moose:enzyme>"<<nameList_[i]<<"</moose:enzyme>\n"; - getSubPrd(reaction,"sub","",*itrE,index,rate_law,rct_order,true,enzClass); - for (unsigned int i =0;i<nameList_.size();i++) - enzAnno << "<moose:substrates>"<<nameList_[i]<<"</moose:substrates>\n"; - // product - rate_law << "-" << "k2"; - getSubPrd(reaction,"cplxDest","prd",*itrE,index,rate_law,prd_order,true,enzClass); - for(unsigned int i =0;i<nameList_.size();i++) - enzAnno << "<moose:product>"<<nameList_[i]<<"</moose:product>\n"; - - enzAnno <<"<moose:groupName>"<<enzName<<"</moose:groupName>\n"; - enzAnno << "<moose:stage>1</moose:stage> \n"; - // if (!enzGpname.str().empty()) - // enzAnno << enzGpname.str(); - if (!enzxyCord.str().empty()) - enzAnno <<enzxyCord.str(); - enzAnno << "</moose:EnzymaticReaction>"; - - XMLNode* xnode =XMLNode::convertStringToXMLNode( enzAnno.str() ,&xmlns); - reaction->setAnnotation( xnode ); - kl = reaction->createKineticLaw(); - kl->setFormula( rate_law.str() ); - string unit=parmUnit( rct_order-1 ); - printParameters( kl,"k1",k1,unit ); - string punit=parmUnit( prd_order-1 ); - printParameters( kl,"k2",k2,punit ); - // 2 Stage SE* -> E+P - - Objid << "Product_formation"; - string enzName1 = enzname + "_" + Objid.str() + "_"; - enzName1 = idBeginWith( enzName1 ); - //Reaction* reaction; - reaction = cremodel_->createReaction(); - reaction->setId( enzName1 ); - reaction->setName( objname); - reaction->setFast( false ); - reaction->setReversible( false ); - if (notesE != ""){ - string cleanNotesE = nameString1(notesE); - string notesStringE = "<body xmlns=\"http://www.w3.org/1999/xhtml\">\n \t \t"+ - cleanNotesE + "\n\t </body>"; - reaction->setNotes(notesStringE); - } - double k3 = Field<double>::get(*itrE,"k3"); - double erct_order = 0.0,eprd_order = 0.0; - ostringstream enzrate_law; - enzrate_law << "k3"; - string enzAnno2 = "<moose:EnzymaticReaction>"; - - getSubPrd(reaction,"cplxDest","sub",*itrE,index,enzrate_law,erct_order,true,enzClass); - for(unsigned int i =0;i<nameList_.size();i++) - enzAnno2 += "<moose:complex>"+nameList_[i]+"</moose:complex>\n"; - - getSubPrd(reaction,"enzOut","prd",*itrE,index,enzrate_law,eprd_order,false,enzClass); - for(unsigned int i =0;i<nameList_.size();i++) - enzAnno2 += "<moose:enzyme>"+nameList_[i]+"</moose:enzyme>\n"; - - getSubPrd(reaction,"prd","",*itrE,index,enzrate_law,eprd_order,false,enzClass); - for(unsigned int i =0;i<nameList_.size();i++) - enzAnno2 += "<moose:product>"+nameList_[i]+"</moose:product>\n"; - - enzAnno2 += "<moose:groupName>"+enzName+"</moose:groupName>\n"; - enzAnno2 += "<moose:stage>2</moose:stage> \n"; - enzAnno2 += "</moose:EnzymaticReaction>"; - XMLNode* xnode2 =XMLNode::convertStringToXMLNode( enzAnno2 ,&xmlns); - reaction->setAnnotation( xnode2 ); - kl = reaction->createKineticLaw(); - kl->setFormula( enzrate_law.str() ); - printParameters( kl,"k3",k3,"per_second" ); - } //enzclass = Enz - else if ( (enzClass == "MMenz") || (enzClass == "ZombieMMenz")) - { - reaction->setId( cleanEnzname); - reaction->setName( objname); - string groupName = getGroupinfo(*itrE); - /* - if (enzAnnoexist) - { ostringstream MMenzAnno; - MMenzAnno << "<moose:ModelAnnotation>\n"; - // if (!enzGpname.str().empty()) - // MMenzAnno << enzGpname.str(); - if (!enzxyCord.str().empty()) - MMenzAnno <<enzxyCord.str(); - MMenzAnno << "</moose:ModelAnnotation>"; - XMLNode* xnode =XMLNode::convertStringToXMLNode( MMenzAnno.str() ,&xmlns); - reaction->setAnnotation( xnode ); - } - */ - double Km = Field<double>::get(*itrE,"numKm"); - double kcat = Field<double>::get(*itrE,"kcat"); - reaction->setReversible( false ); - reaction->setFast( false ); - // Substrate - ostringstream rate_law,sRate_law,fRate_law; - double rct_order = 0.0,prd_order=0.0; - getSubPrd(reaction,"sub","",*itrE,index,rate_law,rct_order,true,enzClass); - sRate_law << rate_law.str(); - // Modifier - getSubPrd(reaction,"enzDest","",*itrE,index,rate_law,rct_order,true,enzClass); - // product - getSubPrd(reaction,"prd","",*itrE,index,rate_law,prd_order,false,enzClass); - kl = reaction->createKineticLaw(); - string s = sRate_law.str(); - if(!s.empty()) { - s = s.substr(1); - } - fRate_law << "kcat" << rate_law.str() << "/" << "(" << "Km" << " +" << s << ")"<<endl; - kl->setFormula( fRate_law.str() ); - kl->setNotes("<body xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t" + fRate_law.str() + "\n\t </body>"); - printParameters( kl,"Km",Km,"substance" ); - string kcatUnit = parmUnit( 0 ); - printParameters( kl,"kcat",kcat,kcatUnit ); - } //enzClass == "MMenz" - - } //itrE - // Enzyme End - }//index - }//itr - //return sbmlDoc; - -}//createModel -#endif - -/** Writes the given SBMLDocument to the given file. **/ - -string moose::SbmlWriter :: getGroupinfo(Id itr) -{ //#Harsha: Note: At this time I am assuming that if group exist - // 1. for 'pool' its between compartment and pool, /modelpath/Compartment/Group/pool - // 2. for 'enzComplx' in case of ExpilcityEnz its would be, /modelpath/Compartment/Group/Pool/Enz/Pool_cplx - // For these cases I have check, but there may be a subgroup may exist then this bit of code need to cleanup - // further down - - ObjId pa = Field< ObjId >::get( itr, "parent" ); - string parentclass = Field<string> :: get (pa,"className"); - string groupName; - if (parentclass == "CubeMesh" or parentclass == "CyclMesh") - return (groupName); - else if (parentclass == "Neutral") - groupName = Field<string> :: get(pa,"name"); - else if ((parentclass == "Enz") or (parentclass == "ZombieEnz")) - { - ObjId ppa = Field< ObjId >::get( pa, "parent" ); - string parentParentclass = Field<string> :: get (ppa,"className"); - if (parentParentclass == "Neutral") - groupName = Field<string> :: get(ppa,"name"); - - else if ( parentParentclass == "Pool" or parentParentclass == "ZombiePool" or - parentParentclass == "BufPool" or parentParentclass == "ZombieBufPool") - { - ObjId poolpa = Field< ObjId >::get( ppa, "parent" ); - string pathtt = Field < string > :: get(poolpa,"path"); - parentParentclass = Field<string> :: get (poolpa,"className"); - if (parentParentclass == "Neutral") - groupName = Field<string> :: get(poolpa,"name"); - - } - }//else if - else - { ObjId ppa = Field< ObjId >::get( pa, "parent" ); - string parentclass = Field<string> :: get (ppa,"className"); - if (parentclass =="Neutral") - groupName = Field<string> :: get(ppa,"name"); - } //else - return( groupName); -} -bool moose::SbmlWriter::writeModel( const SBMLDocument* sbmlDoc, const string& filename ) -{ - SBMLWriter sbmlWriter; - // cout << "sbml writer" << filename << sbmlDoc << endl; - bool result = sbmlWriter.writeSBML( sbmlDoc, filename.c_str() ); - if ( result ) - { - cout << "Wrote file \"" << filename << "\"" << endl; - return true; - } - else - { - cerr << "Failed to write \"" << filename << "\"" << " check for path and write permission" << endl; - return false; - } -} -//string moose::SbmlWriter::cleanNameId(vector < Id > const &itr,int index) - -string moose::SbmlWriter::cleanNameId(Id itrid,int index) -{ string objname = Field<string> :: get(itrid,"name"); - string objclass = Field<string> :: get(itrid,"className"); - ostringstream Objid; - Objid << (itrid) <<"_"<<index; - objname = nameString(objname); - string objname_id = objname + "_" + Objid.str() + "_"; - //changeName(objname,Objid.str()); - if (objclass == "MMenz") - { string objname_id_n = objname_id + "_MM_Reaction_"; - //changeName(objname_id,"MM_Reaction" ); - objname_id = objname_id_n; - } - else if (objclass == "Enz") - { string objname_id_n = objname_id + "Complex_formation_"; - //changeName(objname_id,"Complex_formation" ); - objname_id = objname_id_n; - } - string clean_nameid = idBeginWith(objname_id); - return clean_nameid ; -} -void moose::SbmlWriter::getSubPrd(Reaction* rec,string type,string enztype,Id itrRE, int index,ostringstream& rate_law,double &rct_order,bool w,string re_enClass) -{ - nameList_.clear(); - SpeciesReference* spr; - ModifierSpeciesReference * mspr; - vector < Id > rct = LookupField <string,vector < Id> >::get(itrRE, "neighbors",type); - std::set < Id > rctprdUniq; - rctprdUniq.insert(rct.begin(),rct.end()); - for (std::set < Id> :: iterator rRctPrd = rctprdUniq.begin();rRctPrd!=rctprdUniq.end();rRctPrd++) - { double stoch = count( rct.begin(),rct.end(),*rRctPrd ); - string objname = Field<string> :: get(*rRctPrd,"name"); - string cleanObjname = nameString(objname); - string clean_name = cleanNameId(*rRctPrd,index); - string objClass = Field<string> :: get(*rRctPrd,"className"); - - if (type == "sub" or (type == "enzOut" and enztype == "sub" ) or (type == "cplxDest" and enztype == "sub")) - { spr = rec->createReactant(); - spr->setSpecies(clean_name); - spr->setStoichiometry( stoch ); - - if (objClass == "BufPool") - spr->setConstant( true ); - else - spr->setConstant( false); - - } - else if(type == "prd" or (type == "enzOut" and enztype == "prd" ) or (type == "cplxDest" and enztype == "prd")) - { - spr = rec->createProduct(); - spr->setSpecies( clean_name ); - spr->setStoichiometry( stoch ); - if (objClass == "BufPool") - spr->setConstant( true ); - else - spr->setConstant( false); - } - else if(type == "enzDest") - { - mspr = rec->createModifier(); - mspr->setSpecies(clean_name); - } - /* Updating list of object for annotation for Enzymatic reaction */ - if (re_enClass =="Enz" or re_enClass == "ZombieEnz") - nameList_.push_back (clean_name); - - /* Rate law is also updated in rate_law string */ - //std::size_t found = clean_name.find("cplx"); - //cout << " stoch" << stoch << " c name " << clean_name; - if (w) - { - rct_order += stoch; - if ( stoch == 1 ) - rate_law << "*" << clean_name; - else - rate_law << "*" <<clean_name << "^" << stoch; - } - } //rRct - //return rctprdUniq ; -} - -void moose::SbmlWriter::getModifier(ModifierSpeciesReference* mspr,vector < Id> mod, int index,ostringstream& rate_law,double &rct_order,bool w) -{ - std::set < Id > modifierUniq; - modifierUniq.insert(mod.begin(),mod.end()); - for (std::set < Id> :: iterator rmod = modifierUniq.begin();rmod!=modifierUniq.end();rmod++) - { double stoch = count( mod.begin(),mod.end(),*rmod ); - string clean_name = cleanNameId(*rmod,index); - mspr->setSpecies( clean_name ); - /* Rate law is also updated in rate_law string */ - if (w) - { - rct_order += stoch; - if ( stoch == 1 ) - rate_law << "*" << clean_name; - else - rate_law << "*" <<clean_name << "^" << stoch; - } - } //rRct - //return modUniq ; -} -/* * removes special characters **/ - -string moose::SbmlWriter::nameString1( string str ) -{ string str1; - int len = str.length(); - int i= 0; - do - { - switch( str.at(i) ) - { - case '&': - str1 = "_and_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '<': - str1 = "_lessthan_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '>': - str1 = "_greaterthan_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '': - str1 = "°"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - } - i++; - }while ( i < len ); - return str; - -} -string moose::SbmlWriter::nameString( string str ) -{ string str1; - - int len = str.length(); - int i= 0; - do - { - switch( str.at(i) ) - { - case '-': - str1 = "_dash_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '\'': - str1 = "_prime_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - - case '+': - str1 = "_plus_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '&': - str1 = "_and_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '*': - str1 = "_star_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '/': - str1 = "_slash_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '(': - str1 = "_bo_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case ')': - str1 = "_bc_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '[': - str1 = "_sbo_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case ']': - str1 = "_sbc_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case '.': - str1 = "_dot_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - case ' ': - str1 = "_"; - str.replace( i,1,str1 ); - len += str1.length()-1; - break; - }//end switch - i++; - }while ( i < len ); - return str; -} -/* id preceeded with its parent Name */ -string moose::SbmlWriter::changeName( string parent, string child ) -{string newName = parent + "_" + child + "_"; - return newName; -} -/* * change id if it starts with a numeric */ -string moose::SbmlWriter::idBeginWith( string name ) -{ - string changedName = name; - if ( isdigit(name.at(0)) ) - changedName = "_" + name; - return changedName; -} -string moose::SbmlWriter::parmUnit( double rct_order ) -{ - ostringstream unit_stream; - int order = ( int) rct_order; - switch( order ) - { - case 0: - unit_stream<<"per_second"; - break; - case 1: - unit_stream<<"per_item_per_second"; - break; - case 2: - unit_stream<<"per_item_sq_per_second"; - break; - default: - unit_stream<<"per_item_"<<rct_order<<"_per_second"; - break; - } - ListOfUnitDefinitions * lud =cremodel_->getListOfUnitDefinitions(); - bool flag = false; - for ( unsigned int i=0;i<lud->size();i++ ) - { - UnitDefinition * ud = lud->get(i); - if ( ud->getId() == unit_stream.str() ){ - flag = true; - break; - } - } - if ( !flag ){ - UnitDefinition* unitdef; - Unit* unit; - //cout << "order:" << order << endl; - unitdef = cremodel_->createUnitDefinition(); - unitdef->setId( unit_stream.str() ); - - // Create individual unit objects that will be put inside the UnitDefinition . - if (order != 0) - { //cout << "order is != 0: " << order << endl; - unit = unitdef->createUnit(); - unit->setKind( UNIT_KIND_ITEM ); - unit->setExponent( -order ); - unit->setMultiplier(1); - unit->setScale( 0 ); - } - - unit = unitdef->createUnit(); - unit->setKind( UNIT_KIND_SECOND ); - unit->setExponent( -1 ); - unit->setMultiplier( 1 ); - unit->setScale ( 0 ); - } - return unit_stream.str(); -} -void moose::SbmlWriter::printParameters( KineticLaw* kl,string k,double kvalue,string unit ) -{ - Parameter* para = kl->createParameter(); - para->setId( k ); - para->setValue( kvalue ); - para->setUnits( unit ); -} - -string moose::SbmlWriter::findNotes(Id itr) -{ string path = Field<string> :: get(itr,"path"); - Id annotaId( path+"/info"); - string noteClass = Field<string> :: get(annotaId,"className"); - string notes; - if (noteClass =="Annotator") - string notes = Field <string> :: get(annotaId,"notes"); - - return notes; -} - -/* * validate a model before writing */ - -bool moose::SbmlWriter::validateModel( SBMLDocument* sbmlDoc ) -{ - if ( !sbmlDoc ) - {cerr << "validateModel: given a null SBML Document" << endl; - return false; - } - - string consistencyMessages; - string validationMessages; - bool noProblems = true; - unsigned int numCheckFailures = 0; - unsigned int numConsistencyErrors = 0; - unsigned int numConsistencyWarnings = 0; - unsigned int numValidationErrors = 0; - unsigned int numValidationWarnings = 0; - // Once the whole model is done and before it gets written out, - // it's important to check that the whole model is in fact complete, consistent and valid. - numCheckFailures = sbmlDoc->checkInternalConsistency(); - if ( numCheckFailures > 0 ) - { - noProblems = false; - for ( unsigned int i = 0; i < numCheckFailures; i++ ) - { - const SBMLError* sbmlErr = sbmlDoc->getError(i); - if ( sbmlErr->isFatal() || sbmlErr->isError() ) - { - ++numConsistencyErrors; - } - else - { - ++numConsistencyWarnings; - } - } - ostringstream oss; - sbmlDoc->printErrors(oss); - consistencyMessages = oss.str(); - } - // If the internal checks fail, it makes little sense to attempt - // further validation, because the model may be too compromised to - // be properly interpreted. - if ( numConsistencyErrors > 0 ) - { - consistencyMessages += "Further validation aborted."; - } - else - { - numCheckFailures = sbmlDoc->checkConsistency(); - if ( numCheckFailures > 0 ) - { - noProblems = false; - for ( unsigned int i = 0; i < numCheckFailures; i++ ) - { - const SBMLError* sbmlErr = sbmlDoc->getError(i); - if ( sbmlErr->isFatal() || sbmlErr->isError() ) - { - ++numValidationErrors; - } - else - { - ++numValidationWarnings; - } - } - ostringstream oss; - sbmlDoc->printErrors( oss ); - validationMessages = oss.str(); - } - } - if ( noProblems ) - return true; - else - { - if ( numConsistencyErrors > 0 ) - { - cout << "ERROR: encountered " << numConsistencyErrors - << " consistency error" << ( numConsistencyErrors == 1 ? "" : "s" ) - << " in model '" << sbmlDoc->getModel()->getId() << "'." << endl; - } - if ( numConsistencyWarnings > 0 ) - { - cout << "Notice: encountered " << numConsistencyWarnings - << " consistency warning" << ( numConsistencyWarnings == 1 ? "" : "s" ) - << " in model '" << sbmlDoc->getModel()->getId() << "'." << endl; - } - cout << endl << consistencyMessages; - if ( numValidationErrors > 0 ) - { - cout << "ERROR: encountered " << numValidationErrors - << " validation error" << ( numValidationErrors == 1 ? "" : "s" ) - << " in model '" << sbmlDoc->getModel()->getId() << "'." << endl; - } - if ( numValidationWarnings > 0 ) - { - cout << "Notice: encountered " << numValidationWarnings - << " validation warning" << ( numValidationWarnings == 1 ? "" : "s" ) - << " in model '" << sbmlDoc->getModel()->getId() << "'." << endl; - } - cout << endl << validationMessages; - return ( numConsistencyErrors == 0 && numValidationErrors == 0 ); - } -} -#endif // USE_SBML diff --git a/sbml/MooseSbmlWriter.h b/sbml/MooseSbmlWriter.h deleted file mode 100644 index 779726ac9468a59ec5b06d0cdcf09b108d36cb9d..0000000000000000000000000000000000000000 --- a/sbml/MooseSbmlWriter.h +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************* - * File: MooseSbmlWriter.h - * Description: - * Author: HarsnaRani - * E-mail: hrani@ncbs.res.in - ********************************************************************/ -/********************************************************************** -** This program is part of 'MOOSE', the -** Messaging Object Oriented Simulation Environment, -** also known as GENESIS 3 base code. -** copyright (C) 2003-2015 Upinder S. Bhalla. and NCBS -** It is made available under the terms of the -** GNU Lesser General Public License version 2.1 -** See the file COPYING.LIB for the full notice. -**********************************************************************/ - -#ifndef _SBMLWRITER_H -#define _SBMLWRITER_H -#ifdef USE_SBML -#include <sbml/SBMLTypes.h> -namespace moose{ -class SbmlWriter -{ - - public: - SbmlWriter() {;} - ~SbmlWriter() {;} - int write( string location, string filename ); -#ifdef USE_SBML - void createModel( string filename, SBMLDocument& doc ,string target); - bool validateModel(SBMLDocument* sbmlDoc ); - bool writeModel( const SBMLDocument* sbmlDoc, const string& filename ); - - private: - vector < string >nameList_; - Model* cremodel_; - string nameString( string str ); - string nameString1( string str ); - string changeName( string parent,string child ); - string idBeginWith(string name ); - string cleanNameId( Id itrid,int index); - string parmUnit( double rct_order ); - void getSubPrd(Reaction* rec,string type,string enztype,Id itrRE, int index,ostringstream& rate_law,double &rct_order,bool w, string re_enClass); - void getModifier(ModifierSpeciesReference* mspr,vector < Id> mod, int index,ostringstream& rate_law,double &rct_order,bool w); - void printParameters( KineticLaw* kl,string k,double kvalue,string unit ); - string findNotes(Id itr); - string getGroupinfo(Id itr); -#endif -}; -} // namespace moose -//extern const Cinfo* initCinfo(); -#endif //USE_SBML -#endif // _SBMLWRITER_H diff --git a/scheduling/Clock.cpp b/scheduling/Clock.cpp index a90cb7c9dbb10d558bb5f9425cc4819886f54caf..433e52e05f3bf690861c4377991c03266f8bbe6c 100644 --- a/scheduling/Clock.cpp +++ b/scheduling/Clock.cpp @@ -354,6 +354,7 @@ const Cinfo* Clock::initCinfo() " SimpleSynHandler 1 50e-6\n" " STDPSynHandler 1 50e-6\n" " GraupnerBrunel2012CaPlasticitySynHandler 1 50e-6\n" + " SeqSynHandler 1 50e-6\n" " CaConc 1 50e-6\n" " CaConcBase 1 50e-6\n" " DifShell 1 50e-6\n" @@ -714,7 +715,7 @@ void Clock::handleStep( const Eref& e, unsigned long numSteps ) assert( activeTicks_.size() == activeTicksMap_.size() ); nSteps_ += numSteps; runTime_ = nSteps_ * dt_; - for ( isRunning_ = true; + for ( isRunning_ = (activeTicks_.size() > 0 ); isRunning_ && currentStep_ < nSteps_; currentStep_ += stride_ ) { // Curr time is end of current step. @@ -752,11 +753,12 @@ void Clock::handleStep( const Eref& e, unsigned long numSteps ) } } } + if ( activeTicks_.size() == 0 ) + currentTime_ = runTime_; info_.dt = dt_; isRunning_ = false; finished()->send( e ); - } /** @@ -837,6 +839,7 @@ void Clock::buildDefaultTick() defaultTick_["SimpleSynHandler"] = 1; defaultTick_["STDPSynHandler"] = 1; defaultTick_["GraupnerBrunel2012CaPlasticitySynHandler"] = 1; + defaultTick_["SeqSynHandler"] = 1; defaultTick_["CaConc"] = 1; defaultTick_["CaConcBase"] = 1; defaultTick_["DifShell"] = 1; diff --git a/shell/Makefile b/shell/Makefile index e39d221baf76d926c4bf3a348e455d047f590f20..543301438d3e165da180a7ee2109b498a1bd4023 100644 --- a/shell/Makefile +++ b/shell/Makefile @@ -26,7 +26,8 @@ HEADERS = \ default: $(TARGET) $(OBJ) : $(HEADERS) -Shell.o: Shell.h Neutral.h ../scheduling/Clock.h ../sbml/MooseSbmlWriter.h ../sbml/MooseSbmlReader.h +#Shell.o: Shell.h Neutral.h ../scheduling/Clock.h ../sbml/MooseSbmlWriter.h ../sbml/MooseSbmlReader.h +Shell.o: Shell.h Neutral.h ../scheduling/Clock.h ShellCopy.o: Shell.h Neutral.h ../scheduling/Clock.h ShellSetGet.o: Shell.h ShellThreads.o: Shell.h Neutral.h ../scheduling/Clock.h diff --git a/shell/Shell.cpp b/shell/Shell.cpp index 85aca3e4442e2fdc9744da48e78832ee524a86dd..8ba30eb5c5cdb564ad86a55bcf920cbb8fd76526 100644 --- a/shell/Shell.cpp +++ b/shell/Shell.cpp @@ -28,11 +28,11 @@ using namespace std; // Want to separate out this search path into the Makefile options #include "../scheduling/Clock.h" -#ifdef USE_SBML +/*#ifdef USE_SBML #include "../sbml/MooseSbmlWriter.h" #include "../sbml/MooseSbmlReader.h" #endif - +*/ const unsigned int Shell::OkStatus = ~0; const unsigned int Shell::ErrorStatus = ~1; @@ -419,6 +419,7 @@ void Shell::doUseClock( string path, string field, unsigned int tick ) /** * Write given model to SBML file. Returns success value. */ + /* int Shell::doWriteSBML( const string& fname, const string& modelpath ) { #ifdef USE_SBML @@ -431,10 +432,11 @@ int Shell::doWriteSBML( const string& fname, const string& modelpath ) return -2; #endif } +*/ /** * read given SBML model to moose. Returns success value. */ - +/* Id Shell::doReadSBML( const string& fname, const string& modelpath, const string& solverclass ) { #ifdef USE_SBML @@ -445,7 +447,7 @@ Id Shell::doReadSBML( const string& fname, const string& modelpath, const string return Id(); #endif } - +*/ //////////////////////////////////////////////////////////////////////// diff --git a/shell/Shell.h b/shell/Shell.h index 4f7ae9f9c986507fd0afe07d89dfcce8449a5eda..f3410f2f94d9d02d2ea584ca160d3176603ffa40 100644 --- a/shell/Shell.h +++ b/shell/Shell.h @@ -246,9 +246,9 @@ class Shell /** * Write given model to SBML file. Returns success value. */ - int doWriteSBML( const string& fname, const string& modelpath ); - Id doReadSBML( const string& fname, const string& modelpath, const string& solverclass="" - ); + //int doWriteSBML( const string& fname, const string& modelpath ); + //Id doReadSBML( const string& fname, const string& modelpath, const string& solverclass="" + //); /** * This function synchronizes fieldDimension on the DataHandler diff --git a/synapse/CMakeLists.txt b/synapse/CMakeLists.txt index 76d1e101c6bc197e5b158189bdc8bab65b777c84..0a91167008b7b27e5510c27d6f6cf6c00b7807d4 100644 --- a/synapse/CMakeLists.txt +++ b/synapse/CMakeLists.txt @@ -1,11 +1,14 @@ cmake_minimum_required(VERSION 2.6) include_directories(../basecode ../utility ../kinetics) +include_directories( ../external/muparser/include/ ) add_library(synapse - SimpleSynHandler.cpp SynHandlerBase.cpp + SimpleSynHandler.cpp STDPSynHandler.cpp GraupnerBrunel2012CaPlasticitySynHandler.cpp Synapse.cpp STDPSynapse.cpp + RollingMatrix.cpp + SeqSynHandler.cpp testSynapse.cpp ) diff --git a/synapse/GraupnerBrunel2012CaPlasticitySynHandler.cpp b/synapse/GraupnerBrunel2012CaPlasticitySynHandler.cpp index c4d3e2a22c5c551e811bd7f7aab86fb4a5f5ead5..29e340a57a2e5267c2e49f25842fd7c552f43efe 100644 --- a/synapse/GraupnerBrunel2012CaPlasticitySynHandler.cpp +++ b/synapse/GraupnerBrunel2012CaPlasticitySynHandler.cpp @@ -10,8 +10,8 @@ #include <queue> #include "header.h" #include "Synapse.h" +#include "SynEvent.h" // only using the SynEvent class from this #include "SynHandlerBase.h" -#include "SimpleSynHandler.h" // only using the SynEvent class from this #include "../randnum/Normal.h" // generate normal randum numbers for noisy weight update #include "GraupnerBrunel2012CaPlasticitySynHandler.h" diff --git a/synapse/GraupnerBrunel2012CaPlasticitySynHandler.h b/synapse/GraupnerBrunel2012CaPlasticitySynHandler.h index c0be336b93d4d5dbf201b21a3c3e950595ebf906..8ea9af065b1b6810c22685d2b928f44dcb8a2b11 100644 --- a/synapse/GraupnerBrunel2012CaPlasticitySynHandler.h +++ b/synapse/GraupnerBrunel2012CaPlasticitySynHandler.h @@ -10,6 +10,7 @@ #ifndef _GRAUPNER_BRUNEL_2012_CA_PLASTICITY_SYN_HANDLER_H #define _GRAUPNER_BRUNEL_2012_CA_PLASTICITY_SYN_HANDLER_H +/* class PreSynEvent: public SynEvent { public: @@ -50,6 +51,7 @@ struct ComparePostSynEvent return lhs.time > rhs.time; } }; +*/ // see pg 13 of Higgins et al | October 2014 | Volume 10 | Issue 10 | e1003834 | PLOS Comp Biol // tP and tD are times spent above potentiation and depression thresholds diff --git a/synapse/Makefile b/synapse/Makefile index dc1860fec68b17c054840f44a8f7ca247c7beccd..bbf82b990c89bb574aab8b2fd4ff27857a97a6d1 100644 --- a/synapse/Makefile +++ b/synapse/Makefile @@ -16,6 +16,8 @@ OBJ = \ GraupnerBrunel2012CaPlasticitySynHandler.o \ Synapse.o \ STDPSynapse.o \ + RollingMatrix.o \ + SeqSynHandler.o \ testSynapse.o \ # GSL_LIBS = -L/usr/lib -lgsl @@ -29,15 +31,17 @@ default: $(TARGET) $(OBJ) : $(HEADERS) SynHandlerBase.o: SynHandlerBase.h Synapse.h -SimpleSynHandler.o: SynHandlerBase.h Synapse.h SimpleSynHandler.h -STDPSynHandler.o: SynHandlerBase.h STDPSynapse.h STDPSynHandler.h -GraupnerBrunel2012CaPlasticitySynHandler.o: SynHandlerBase.h Synapse.h GraupnerBrunel2012CaPlasticitySynHandler.h +SimpleSynHandler.o: SynHandlerBase.h Synapse.h SimpleSynHandler.h SynEvent.h +STDPSynHandler.o: SynHandlerBase.h STDPSynapse.h STDPSynHandler.h SynEvent.h +GraupnerBrunel2012CaPlasticitySynHandler.o: SynHandlerBase.h Synapse.h GraupnerBrunel2012CaPlasticitySynHandler.h SynEvent.h Synapse.o: Synapse.h SynHandlerBase.h STDPSynapse.o: STDPSynapse.h SynHandlerBase.h -testSynapse.o: SynHandlerBase.h Synapse.h SimpleSynHandler.h +RollingMatrix.o: RollingMatrix.h +SeqSynHandler.o: SynHandlerBase.h Synapse.h SimpleSynHandler.h SeqSynHandler.h RollingMatrix.h SynEvent.h +testSynapse.o: SynHandlerBase.h Synapse.h SimpleSynHandler.h SeqSynHandler.h RollingMatrix.h SynEvent.h .cpp.o: - $(CXX) $(CXXFLAGS) $(SMOLDYN_FLAGS) -I. -I../basecode -I../msg $< -c + $(CXX) $(CXXFLAGS) $(SMOLDYN_FLAGS) -I. -I../basecode -I../msg -I .. -I../external/muparser/include $< -c $(TARGET): $(OBJ) $(SMOLDYN_OBJ) $(HEADERS) $(LD) -r -o $(TARGET) $(OBJ) $(SMOLDYN_OBJ) $(SMOLDYN_LIB_PATH) $(SMOLDYN_LIBS) $(GSL_LIBS) diff --git a/synapse/RollingMatrix.cpp b/synapse/RollingMatrix.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5fd84a9bfe83c4ab42a239731bc2d96a827759de --- /dev/null +++ b/synapse/RollingMatrix.cpp @@ -0,0 +1,109 @@ +/********************************************************************** +** This program is part of 'MOOSE', the +** Messaging Object Oriented Simulation Environment. +** Copyright (C) 2016 Upinder S. Bhalla. and NCBS +** It is made available under the terms of the +** GNU Lesser General Public License version 2.1 +** See the file COPYING.LIB for the full notice. +**********************************************************************/ + +#include <vector> +using namespace std; +#include "RollingMatrix.h" +#include <cassert> + +RollingMatrix::RollingMatrix() + : nrows_(0), ncolumns_(0), currentStartRow_(0) +{;} + + +RollingMatrix::~RollingMatrix() +{;} + +RollingMatrix& RollingMatrix::operator=( const RollingMatrix& other ) +{ + nrows_ = other.nrows_; + ncolumns_ = other.ncolumns_; + currentStartRow_ = other.currentStartRow_; + rows_ = other.rows_; + return *this; +} + + +void RollingMatrix::resize( unsigned int nrows, unsigned int ncolumns ) +{ + rows_.resize( nrows ); + nrows_ = nrows; + ncolumns_ = ncolumns; + for ( unsigned int i = 0; i < nrows; ++i ) { + rows_[i].resize( ncolumns, 0.0 ); + } + currentStartRow_ = 0; +} + +double RollingMatrix::get( unsigned int row, unsigned int column ) const +{ + unsigned int index = (row + currentStartRow_ ) % nrows_; + return rows_[index][column]; +} + +void RollingMatrix::sumIntoEntry( double input, unsigned int row, unsigned int column ) +{ + unsigned int index = (row + currentStartRow_ ) % nrows_; + SparseVector& sv = rows_[index]; + sv[column] += input; +} + +void RollingMatrix::sumIntoRow( const vector< double >& input, unsigned int row ) +{ + unsigned int index = (row + currentStartRow_) % nrows_; + SparseVector& sv = rows_[index]; + + for (unsigned int i = 0; i < input.size(); ++i ) + sv[i] += input[i]; +} + + +double RollingMatrix::dotProduct( const vector< double >& input, + unsigned int row, unsigned int startColumn ) const +{ + unsigned int index = (row + currentStartRow_) % nrows_; + const SparseVector& sv = rows_[index]; + + double ret = 0; + if ( input.size() + startColumn <= sv.size() ) { + for (unsigned int i = 0; i < input.size(); ++i ) + ret += sv[i + startColumn] * input[i]; + } else if ( sv.size() > startColumn ) { + unsigned int end = sv.size() - startColumn; + for (unsigned int i = 0; i < end; ++i ) + ret += sv[i + startColumn] * input[i]; + } + return ret; +} + +void RollingMatrix::correl( vector< double >& ret, + const vector< double >& input, unsigned int row) const + +{ + if ( ret.size() < ncolumns_ ) + ret.resize( ncolumns_, 0.0 ); + for ( unsigned int i = 0; i < ncolumns_; ++i ) { + ret[i] += dotProduct( input, row, i ); + } +} + +void RollingMatrix::zeroOutRow( unsigned int row ) +{ + unsigned int index = (row + currentStartRow_) % nrows_; + rows_[index].assign( rows_[index].size(), 0.0 ); +} + +void RollingMatrix::rollToNextRow() +{ + if ( currentStartRow_ == 0 ) + currentStartRow_ = nrows_ - 1; + else + currentStartRow_--; + zeroOutRow( 0 ); +} diff --git a/synapse/RollingMatrix.h b/synapse/RollingMatrix.h new file mode 100644 index 0000000000000000000000000000000000000000..104636a80937df4a84189d4c138a0a330467f2c7 --- /dev/null +++ b/synapse/RollingMatrix.h @@ -0,0 +1,61 @@ +/********************************************************************** +** This program is part of 'MOOSE', the +** Messaging Object Oriented Simulation Environment. +** Copyright (C) 2016 Upinder S. Bhalla. and NCBS +** It is made available under the terms of the +** GNU Lesser General Public License version 2.1 +** See the file COPYING.LIB for the full notice. +**********************************************************************/ + +#ifndef _ROLLING_MATRIX_H +#define _ROLLING_MATRIX_H + +// Temporary, just to get going. +typedef vector< double > SparseVector; + +class RollingMatrix { + public: + // Specify empty matrix. + RollingMatrix(); + ~RollingMatrix(); + RollingMatrix& operator=( const RollingMatrix& other ); + + // Specify size of matrix. Allocations may happen later. + void resize( unsigned int numRows, unsigned int numColumns ); + + // Return specified entry. + double get( unsigned int row, unsigned int column ) const; + + // Sum contents of input into entry at specfied row, column. + // Row index is relative to current zero. + void sumIntoEntry( double input, unsigned int row, unsigned int column ); + + // Sum contents of input into vector at specfied row. + // Row index is relative to current zero. + void sumIntoRow( const vector< double >& input, unsigned int row ); + + // Return dot product of input with internal vector at specified + // row, starting at specified column. + double dotProduct( const vector< double >& input, unsigned int row, + unsigned int startColumn ) const; + + // Return correlation found by summing dotProduct across all columns + void correl( vector< double >& ret, const vector< double >& input, + unsigned int row ) const; + + // Zero out contents of row. + void zeroOutRow( unsigned int row ); + + // Roll the matrix by one row. What was row 0 becomes row 1, etc. + // Last row vanishes. + void rollToNextRow(); // + + private: + unsigned int nrows_; + unsigned int ncolumns_; + unsigned int currentStartRow_; + + vector< SparseVector > rows_; +}; + +#endif // _ROLLING_MATRIX diff --git a/synapse/STDPSynHandler.cpp b/synapse/STDPSynHandler.cpp index e3e20c1748e8a5e7e6b10609ce3b7382fcf412be..568a89de799e9eb4c28dcb39ce678bc6e690fb30 100644 --- a/synapse/STDPSynHandler.cpp +++ b/synapse/STDPSynHandler.cpp @@ -10,9 +10,9 @@ #include <queue> #include "header.h" #include "Synapse.h" +#include "SynEvent.h" // only using the SynEvent class from this #include "SynHandlerBase.h" #include "STDPSynapse.h" -#include "SimpleSynHandler.h" // only using the SynEvent class from this #include "STDPSynHandler.h" const Cinfo* STDPSynHandler::initCinfo() diff --git a/synapse/STDPSynHandler.h b/synapse/STDPSynHandler.h index 704b0b9f2af7ca609990b64d5386dff1b8298141..e5fc9f456dff9b186e91807ed4b9da4d339ffa71 100644 --- a/synapse/STDPSynHandler.h +++ b/synapse/STDPSynHandler.h @@ -10,6 +10,7 @@ #ifndef _STDP_SYN_HANDLER_H #define _STDP_SYN_HANDLER_H +/* class PreSynEvent: public SynEvent { public: @@ -50,6 +51,7 @@ struct ComparePostSynEvent return lhs.time > rhs.time; } }; +*/ /** * This handles simple synapses without plasticity. It uses a priority diff --git a/synapse/SeqSynHandler.cpp b/synapse/SeqSynHandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..833b340221fb080dcb957d0889e9468c376c82a0 --- /dev/null +++ b/synapse/SeqSynHandler.cpp @@ -0,0 +1,437 @@ +/********************************************************************** +** This program is part of 'MOOSE', the +** Messaging Object Oriented Simulation Environment. +** Copyright (C) 2016 Upinder S. Bhalla. and NCBS +** It is made available under the terms of the +** GNU Lesser General Public License version 2.1 +** See the file COPYING.LIB for the full notice. +**********************************************************************/ + +#include <queue> +#include "header.h" +#include "Synapse.h" +#include "SynEvent.h" +#include "SynHandlerBase.h" +#include "RollingMatrix.h" +#include "SeqSynHandler.h" +#include "muParser.h" + +const Cinfo* SeqSynHandler::initCinfo() +{ + static string doc[] = + { + "Name", "SeqSynHandler", + "Author", "Upi Bhalla", + "Description", + "The SeqSynHandler handles synapses that recognize sequentially " + "ordered input, where the ordering is both in space and time. " + "It assumes that the N input synapses are ordered and " + "equally spaced along a single linear vector.\n " + "To do this it maintains a record of recent synaptic input, " + "for a duration of *historyTime*, at a time interval *seqDt*. " + "*SeqDt* is typically longer than the simulation " + "timestep *dt* for the synapse, and cannot be shorter. " + "*SeqDt* should represent the characteristic time of advance " + "of the sequence. \n" + "The SeqSynHandler uses a 2-D kernel to define how to recognize" + " a sequence, with dependence both on space and history. " + "This kernel is defined by the *kernelEquation* as a " + "mathematical expression in x (synapse number) and t (time)." + "It computes a vector with the local *response* term for each " + "point along all inputs, by taking a 2-d convolution of the " + "kernel with the history[time][synapse#] matrix." + "\nThe local response can affect the synapse in three ways: " + "1. It can sum the entire response vector, scale by the " + "*responseScale* term, and send to the synapse as a steady " + "activation. Consider this a cell-wide immediate response to " + "a sequence that it likes.\n" + "2. It do an instantaneous scaling of the weight of each " + "individual synapse by the corresponding entry in the response " + "vector. It uses the *weightScale* term to do this. Consider " + "this a short-term plasticity effect on specific synapses. \n" + "3. It can do long-term plasticity of each individual synapse " + "using the matched local entries in the response vector and " + "individual synapse history as inputs to the learning rule. " + "This is not yet implemented.\n" + }; + + static FieldElementFinfo< SynHandlerBase, Synapse > synFinfo( + "synapse", + "Sets up field Elements for synapse", + Synapse::initCinfo(), + &SynHandlerBase::getSynapse, + &SynHandlerBase::setNumSynapses, + &SynHandlerBase::getNumSynapses + ); + + static ValueFinfo< SeqSynHandler, string > kernelEquation( + "kernelEquation", + "Equation in x and t to define kernel for sequence recognition", + &SeqSynHandler::setKernelEquation, + &SeqSynHandler::getKernelEquation + ); + static ValueFinfo< SeqSynHandler, unsigned int > kernelWidth( + "kernelWidth", + "Width of kernel, i.e., number of synapses taking part in seq.", + &SeqSynHandler::setKernelWidth, + &SeqSynHandler::getKernelWidth + ); + static ValueFinfo< SeqSynHandler, double > seqDt( + "seqDt", + "Characteristic time for advancing the sequence.", + &SeqSynHandler::setSeqDt, + &SeqSynHandler::getSeqDt + ); + static ValueFinfo< SeqSynHandler, double > historyTime( + "historyTime", + "Duration to keep track of history of inputs to all synapses.", + &SeqSynHandler::setHistoryTime, + &SeqSynHandler::getHistoryTime + ); + static ValueFinfo< SeqSynHandler, double > responseScale( + "responseScale", + "Scaling factor for sustained activation of synapse by seq", + &SeqSynHandler::setResponseScale, + &SeqSynHandler::getResponseScale + ); + static ReadOnlyValueFinfo< SeqSynHandler, double > seqActivation( + "seqActivation", + "Reports summed activation of synaptic channel by sequence", + &SeqSynHandler::getSeqActivation + ); + static ValueFinfo< SeqSynHandler, double > weightScale( + "weightScale", + "Scaling factor for weight of each synapse by response vector", + &SeqSynHandler::setWeightScale, + &SeqSynHandler::getWeightScale + ); + static ReadOnlyValueFinfo< SeqSynHandler, vector< double > > + weightScaleVec( + "weightScaleVec", + "Vector of weight scaling for each synapse", + &SeqSynHandler::getWeightScaleVec + ); + static ReadOnlyValueFinfo< SeqSynHandler, vector< double > > kernel( + "kernel", + "All entries of kernel, as a linear vector", + &SeqSynHandler::getKernel + ); + static ReadOnlyValueFinfo< SeqSynHandler, vector< double > > history( + "history", + "All entries of history, as a linear vector", + &SeqSynHandler::getHistory + ); + + static Finfo* seqSynHandlerFinfos[] = { + &synFinfo, // FieldElement + &kernelEquation, // Field + &kernelWidth, // Field + &seqDt, // Field + &historyTime, // Field + &responseScale, // Field + &seqActivation, // Field + &weightScale, // Field + &weightScaleVec, // Field + &kernel, // ReadOnlyField + &history // ReadOnlyField + }; + + static Dinfo< SeqSynHandler > dinfo; + static Cinfo seqSynHandlerCinfo ( + "SeqSynHandler", + SynHandlerBase::initCinfo(), + seqSynHandlerFinfos, + sizeof( seqSynHandlerFinfos ) / sizeof ( Finfo* ), + &dinfo, + doc, + sizeof( doc ) / sizeof( string ) + ); + + return &seqSynHandlerCinfo; +} + +static const Cinfo* seqSynHandlerCinfo = SeqSynHandler::initCinfo(); + +////////////////////////////////////////////////////////////////////// + +SeqSynHandler::SeqSynHandler() + : + kernelEquation_( "" ), + kernelWidth_( 5 ), + historyTime_( 2.0 ), + seqDt_ ( 1.0 ), + responseScale_( 1.0 ), + weightScale_( 0.0 ), + seqActivation_( 0.0 ) +{ + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + history_.resize( numHistory, 0 ); +} + +SeqSynHandler::~SeqSynHandler() +{ ; } + +////////////////////////////////////////////////////////////////////// +SeqSynHandler& SeqSynHandler::operator=( const SeqSynHandler& ssh) +{ + synapses_ = ssh.synapses_; + for ( vector< Synapse >::iterator + i = synapses_.begin(); i != synapses_.end(); ++i ) + i->setHandler( this ); + + // For no apparent reason, priority queues don't have a clear operation. + while( !events_.empty() ) + events_.pop(); + + return *this; +} + +void SeqSynHandler::vSetNumSynapses( const unsigned int v ) +{ + unsigned int prevSize = synapses_.size(); + synapses_.resize( v ); + for ( unsigned int i = prevSize; i < v; ++i ) + synapses_[i].setHandler( this ); + + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + history_.resize( numHistory, v ); + latestSpikes_.resize( v, 0.0 ); + weightScaleVec_.resize( v, 0.0 ); + updateKernel(); +} + +unsigned int SeqSynHandler::vGetNumSynapses() const +{ + return synapses_.size(); +} + +Synapse* SeqSynHandler::vGetSynapse( unsigned int i ) +{ + static Synapse dummy; + if ( i < synapses_.size() ) + return &synapses_[i]; + cout << "Warning: SeqSynHandler::getSynapse: index: " << i << + " is out of range: " << synapses_.size() << endl; + return &dummy; +} + +////////////////////////////////////////////////////////////////////// +void SeqSynHandler::updateKernel() +{ + if ( kernelEquation_ == "" || seqDt_ < 1e-9 || historyTime_ < 1e-9 ) + return; + double x = 0; + double t = 0; + mu::Parser p; + p.DefineVar("x", &x); + p.DefineVar("t", &t); + p.DefineConst(_T("pi"), (mu::value_type)M_PI); + p.DefineConst(_T("e"), (mu::value_type)M_E); + p.SetExpr( kernelEquation_ ); + kernel_.clear(); + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + kernel_.resize( numHistory ); + for ( int i = 0; i < numHistory; ++i ) { + kernel_[i].resize( kernelWidth_ ); + t = i * seqDt_; + for ( unsigned int j = 0; j < kernelWidth_; ++j ) { + x = j; + kernel_[i][j] = p.Eval(); + } + } +} + +////////////////////////////////////////////////////////////////////// +void SeqSynHandler::setKernelEquation( string eq ) +{ + kernelEquation_ = eq; + updateKernel(); +} + +string SeqSynHandler::getKernelEquation() const +{ + return kernelEquation_; +} + +void SeqSynHandler::setKernelWidth( unsigned int v ) +{ + kernelWidth_ = v; + updateKernel(); +} + +unsigned int SeqSynHandler::getKernelWidth() const +{ + return kernelWidth_; +} + +void SeqSynHandler::setSeqDt( double v ) +{ + seqDt_ = v; + updateKernel(); + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + history_.resize( numHistory, vGetNumSynapses() ); +} + +double SeqSynHandler::getSeqDt() const +{ + return seqDt_; +} + +void SeqSynHandler::setHistoryTime( double v ) +{ + historyTime_ = v; + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + history_.resize( numHistory, vGetNumSynapses() ); + updateKernel(); +} + +double SeqSynHandler::getHistoryTime() const +{ + return historyTime_; +} + +void SeqSynHandler::setResponseScale( double v ) +{ + responseScale_ = v; +} + +double SeqSynHandler::getResponseScale() const +{ + return responseScale_; +} + +double SeqSynHandler::getSeqActivation() const +{ + return seqActivation_; +} + +double SeqSynHandler::getWeightScale() const +{ + return weightScale_; +} + +vector< double >SeqSynHandler::getWeightScaleVec() const +{ + return weightScaleVec_; +} + +void SeqSynHandler::setWeightScale( double v ) +{ + weightScale_ = v; +} + +vector< double > SeqSynHandler::getKernel() const +{ + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + vector< double > ret; + for ( int i = 0; i < numHistory; ++i ) { + ret.insert( ret.end(), kernel_[i].begin(), kernel_[i].end() ); + } + return ret; +} + +vector< double > SeqSynHandler::getHistory() const +{ + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + int numX = vGetNumSynapses(); + vector< double > ret( numX * numHistory, 0.0 ); + vector< double >::iterator k = ret.begin(); + for ( int i = 0; i < numHistory; ++i ) { + for ( int j = 0; j < numX; ++j ) + *k++ = history_.get( i, j ); + } + return ret; +} + +///////////////////////////////////////////////////////////////////// + +void SeqSynHandler::addSpike(unsigned int index, double time, double weight) +{ + assert( index < synapses_.size() ); + events_.push( PreSynEvent( index, time, weight ) ); + // Strictly speaking this isn't right. If we have a long time lag + // then the correct placement of the spike may be in another time + // slice. For now, to get it going for LIF neurons, this will do. + // Even in the general case we will probably have a very wide window + // for the latestSpikes slice. + latestSpikes_[index] += weight; +} + +unsigned int SeqSynHandler::addSynapse() +{ + unsigned int newSynIndex = synapses_.size(); + synapses_.resize( newSynIndex + 1 ); + synapses_[newSynIndex].setHandler( this ); + return newSynIndex; +} + +void SeqSynHandler::dropSynapse( unsigned int msgLookup ) +{ + assert( msgLookup < synapses_.size() ); + synapses_[msgLookup].setWeight( -1.0 ); +} + +///////////////////////////////////////////////////////////////////// +void SeqSynHandler::vProcess( const Eref& e, ProcPtr p ) +{ + // Here we look at the correlations and do something with them. + int numHistory = static_cast< int >( 1.0 + floor( historyTime_ * (1.0 - 1e-6 ) / seqDt_ ) ); + + // Check if we need to do correlations at all. + if ( numHistory > 0 && kernel_.size() > 0 ) { + // Check if timestep rolls over a seqDt boundary + if ( static_cast< int >( p->currTime / seqDt_ ) > + static_cast< int >( (p->currTime - p->dt) / seqDt_ ) ) { + history_.rollToNextRow(); + history_.sumIntoRow( latestSpikes_, 0 ); + latestSpikes_.assign( vGetNumSynapses(), 0.0 ); + + // Build up the sum of correlations over time + vector< double > correlVec( vGetNumSynapses(), 0.0 ); + for ( int i = 0; i < numHistory; ++i ) + history_.correl( correlVec, kernel_[i], i ); + if ( responseScale_ > 0.0 ) { // Sum all responses, send to chan + seqActivation_ = 0.0; + for ( vector< double >::iterator y = correlVec.begin(); + y != correlVec.end(); ++y ) + seqActivation_ += *y; + + // We'll use the seqActivation_ to send a special msg. + seqActivation_ *= responseScale_; + } + if ( weightScale_ > 0.0 ) { // Short term changes in individual wts + weightScaleVec_ = correlVec; + for ( vector< double >::iterator y=weightScaleVec_.begin(); + y != weightScaleVec_.end(); ++y ) + *y *= weightScale_; + } + } + } + + // Here we go through the regular synapse activation calculations. + // We can't leave it to the base class vProcess, because we need + // to scale the weights individually in some cases. + double activation = seqActivation_; // Start with seq activation + if ( weightScale_ > 0.0 ) { + while( !events_.empty() && events_.top().time <= p->currTime ) { + activation += events_.top().weight * + weightScaleVec_[ events_.top().synIndex ] / p->dt; + events_.pop(); + } + } else { + while( !events_.empty() && events_.top().time <= p->currTime ) { + activation += events_.top().weight / p->dt; + events_.pop(); + } + } + if ( activation != 0.0 ) + SynHandlerBase::activationOut()->send( e, activation ); +} + +void SeqSynHandler::vReinit( const Eref& e, ProcPtr p ) +{ + // For no apparent reason, priority queues don't have a clear operation. + while( !events_.empty() ) + events_.pop(); +} + diff --git a/synapse/SeqSynHandler.h b/synapse/SeqSynHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..55fd01181bcf868b610c0192456fc04f5c05b71d --- /dev/null +++ b/synapse/SeqSynHandler.h @@ -0,0 +1,117 @@ +/********************************************************************** +** This program is part of 'MOOSE', the +** Messaging Object Oriented Simulation Environment. +** Copyright (C) 2016 Upinder S. Bhalla. and NCBS +** It is made available under the terms of the +** GNU Lesser General Public License version 2.1 +** See the file COPYING.LIB for the full notice. +**********************************************************************/ + +#ifndef _SEQ_SYN_HANDLER_H +#define _SEQ_SYN_HANDLER_H + +/** + * This handles synapses organized sequentially. The parent class + * SimpleSynHandler deals with the mechanics of data arrival. + * Here the algorithm is + * 0. Assume all synaptic input comes on a linear dendrite. + * 1. Maintain a history of depth D for synaptic activity. May be simplest + * to do as event list (sparse matrix) rather than full matrix. + * 2. Maintain a kernel of how to weight time and space + * 3. Here we have various options + * 3.1 At each spike event, decide how to weight it based on history. + * 3.2 At each timestep, compute an effective Gk and send to activation. + * This will be moderately nasty to compute + */ +class SeqSynHandler: public SynHandlerBase +{ + public: + SeqSynHandler(); + ~SeqSynHandler(); + SeqSynHandler& operator=( const SeqSynHandler& other ); + + //////////////////////////////////////////////////////////////// + // Over-ridden virtual functions + //////////////////////////////////////////////////////////////// + void vSetNumSynapses( unsigned int num ); + unsigned int vGetNumSynapses() const; + Synapse* vGetSynapse( unsigned int i ); + void vProcess( const Eref& e, ProcPtr p ); + void vReinit( const Eref& e, ProcPtr p ); + + //////////////////////////////////////////////////////////////// + /// Adds a new synapse, returns its index. + unsigned int addSynapse(); + void dropSynapse( unsigned int droppedSynNumber ); + void addSpike( unsigned int index, double time, double weight ); + //////////////////////////////////////////////////////////////// + // New fields. + //////////////////////////////////////////////////////////////// + void setKernelEquation( string eq ); + string getKernelEquation() const; + void setKernelWidth( unsigned int v ); + unsigned int getKernelWidth() const; + void setSeqDt( double v ); + double getSeqDt() const; + void setHistoryTime( double v ); + double getHistoryTime() const; + void setResponseScale( double v ); + double getResponseScale() const; + double getSeqActivation() const; // summed activation of syn chan + void setWeightScale( double v ); + double getWeightScale() const; + vector< double > getWeightScaleVec() const; + vector< double > getKernel() const; + vector< double > getHistory() const; + + //////////////////////////////////////////////////////////////// + static const Cinfo* initCinfo(); + private: + void updateKernel(); + /* + * Here I would like to put in a sparse matrix. + * Each timestep is a row + * Each column is a neuron + * Each value is the weight, though I could also look this up. + * I need to make it a circular buffer. + * The 'addRow' function inserts the non-zero entries representing + * neurons that are active on this timestep. As a circular buffer + * this needs to do some allocation juggling. + * Need a new function similar to computeRowRate, basically a + * dot product of input vector with specified row. + * Then run through all available places. + */ + string kernelEquation_; + unsigned int kernelWidth_; // Width in terms of number of synapses + + // Time to store history. KernelDt defines num of rows + double historyTime_; + double seqDt_; // Time step for successive entries in kernel + // Scaling factor for sustained activation of synapse from response + double responseScale_; + // Scaling factor for weight changes in each synapse from response + double weightScale_; + + /////////////////////////////////////////// + // Some readonly fields + double seqActivation_; // global activation if sequence recognized + + // Weight scaling based on individual synapse sequence tuning. + vector< double > weightScaleVec_; + + /////////////////////////////////////////// + // Tracks the spikes that came in recently, as input to correlation + // analysis for sequence recognition. + vector< double > latestSpikes_; + + /////////////////////////////////////////// + vector< vector< double > > kernel_; //Kernel for seq selectivity + RollingMatrix history_; // Rows = time; cols = synInputs + + vector< Synapse > synapses_; + priority_queue< PreSynEvent, vector< PreSynEvent >, CompareSynEvent > events_; + + +}; + +#endif // _SEQ_SYN_HANDLER_H diff --git a/synapse/SimpleSynHandler.cpp b/synapse/SimpleSynHandler.cpp index 5581b9daf5cb4712673b550a43b7991652ed4c68..360769e2e363c3be2ef2004864005ef399d317f4 100644 --- a/synapse/SimpleSynHandler.cpp +++ b/synapse/SimpleSynHandler.cpp @@ -10,6 +10,7 @@ #include <queue> #include "header.h" #include "Synapse.h" +#include "SynEvent.h" #include "SynHandlerBase.h" #include "SimpleSynHandler.h" diff --git a/synapse/SimpleSynHandler.h b/synapse/SimpleSynHandler.h index 14c9426282261a95bf67e843e97d7ce084446f92..4029332b9621e6abc68d74e2b7b62c49e10bd207 100644 --- a/synapse/SimpleSynHandler.h +++ b/synapse/SimpleSynHandler.h @@ -10,6 +10,7 @@ #ifndef _SIMPLE_SYN_HANDLER_H #define _SIMPLE_SYN_HANDLER_H +/* class SynEvent { public: @@ -34,6 +35,7 @@ struct CompareSynEvent return lhs.time > rhs.time; } }; +*/ /** * This handles simple synapses without plasticity. It uses a priority diff --git a/synapse/SynEvent.h b/synapse/SynEvent.h new file mode 100644 index 0000000000000000000000000000000000000000..20e517f44ce59905bfc3d0243cc38a532ec7ed7f --- /dev/null +++ b/synapse/SynEvent.h @@ -0,0 +1,79 @@ +/********************************************************************** +** This program is part of 'MOOSE', the +** Messaging Object Oriented Simulation Environment. +** Copyright (C) 2013 Upinder S. Bhalla. and NCBS +** It is made available under the terms of the +** GNU Lesser General Public License version 2.1 +** See the file COPYING.LIB for the full notice. +**********************************************************************/ + +#ifndef _SYN_EVENT_H +#define _SYN_EVENT_H + +class SynEvent +{ + public: + SynEvent() + : time( 0.0 ), weight( 0.0 ) + {;} + + SynEvent( double t, double w ) + : time( t ), weight( w ) + {;} + + double time; + double weight; +}; + +struct CompareSynEvent +{ + bool operator()(const SynEvent& lhs, const SynEvent& rhs) const + { + // Note that this is backwards. We want the smallest timestamp + // on the top of the events priority_queue. + return lhs.time > rhs.time; + } +}; + +class PreSynEvent: public SynEvent +{ + public: + PreSynEvent() + : SynEvent(), // call the parent constructor with default args + // by default calls without args, so no need really + synIndex( 0 ) + {} + + PreSynEvent( unsigned int i, double t, double w ) + : SynEvent(t,w),// call the parent constructor with given args + synIndex( i ) + {;} + + unsigned int synIndex; +}; + +class PostSynEvent +{ + public: + PostSynEvent() + : time( 0.0 ) + {;} + + PostSynEvent( double t ) + : time( t ) + {;} + + double time; +}; + +struct ComparePostSynEvent +{ + bool operator()(const PostSynEvent& lhs, const PostSynEvent& rhs) const + { + // Note that this is backwards. We want the smallest timestamp + // on the top of the events priority_queue. + return lhs.time > rhs.time; + } +}; + +#endif // _SYN_EVENT_H diff --git a/synapse/testSynapse.cpp b/synapse/testSynapse.cpp index b46e2f99cc41a1ac34e825f7390e697849565f73..2edd4165c1c5866effe687f2e08e5bc943e792fe 100644 --- a/synapse/testSynapse.cpp +++ b/synapse/testSynapse.cpp @@ -12,15 +12,146 @@ #include <queue> #include "header.h" #include "Synapse.h" +#include "SynEvent.h" #include "SynHandlerBase.h" #include "SimpleSynHandler.h" +#include "RollingMatrix.h" +#include "SeqSynHandler.h" #include "../shell/Shell.h" #include "../randnum/randnum.h" +void testRollingMatrix() +{ + int nr = 5; + int ncol = 10; + RollingMatrix rm; + rm.resize( 5, 10 ); + + for ( int i = 0; i < nr; ++i ) { + rm.sumIntoEntry( i + 1, i, i ); + } + for ( int i = 0; i < nr; ++i ) { + for ( int j = 0; j < ncol; ++j ) { + assert( rm.get( i, j ) == ( i == j ) * (i+1) ); + } + } + cout << "." << flush; + + // Old row0 becomes row1 and so on. Old row4 (now 0) should be cleared. + rm.rollToNextRow(); + for ( int i = 0; i < nr; ++i ) { + for ( int j = 0; j < ncol; ++j ) { + // cout << rm.get( i, j ); + assert( rm.get( i, j ) == ( i == j+1 ) * i ); + } + // Here are the entries in the rm.rows_ matrix + // 000000000 + // 100000000 + // 020000000 + // 003000000 + // 000400000 + } + cout << "." << flush; + + vector< double > input( 10, 0.0 ); + for ( int i = 0; i < nr; ++i ) + input[i] = i + 1; + + assert( doubleEq( rm.dotProduct( input, 0, 0 ), 0.0 ) ); + assert( doubleEq( rm.dotProduct( input, 1, 0 ), 1.0 ) ); + assert( doubleEq( rm.dotProduct( input, 2, 0 ), 4.0 ) ); + assert( doubleEq( rm.dotProduct( input, 3, 0 ), 9.0 ) ); + assert( doubleEq( rm.dotProduct( input, 4, 0 ), 16.0 ) ); + assert( doubleEq( rm.dotProduct( input, 4, 1 ), 12.0 ) ); + assert( doubleEq( rm.dotProduct( input, 4, 2 ), 8.0 ) ); + assert( doubleEq( rm.dotProduct( input, 4, 3 ), 4.0 ) ); + assert( doubleEq( rm.dotProduct( input, 4, 4 ), 0.0 ) ); + + rm.sumIntoRow( input, 0 ); // input == [1234500000] + vector< double > corr; + rm.correl( corr, input, 4 ); // rm[4] == [00040000] + assert( doubleEq( corr[0], 16.0 ) ); + assert( doubleEq( corr[1], 12.0 ) ); + assert( doubleEq( corr[2], 8.0 ) ); + assert( doubleEq( corr[3], 4.0 ) ); + assert( doubleEq( corr[4], 0.0 ) ); + + corr.assign( corr.size(), 0 ); + rm.correl( corr, input, 0 ); // rm[0] == [1234500000] + assert( doubleEq( corr[0], 55.0 ) ); + assert( doubleEq( corr[1], 40.0 ) ); + assert( doubleEq( corr[2], 26.0 ) ); + assert( doubleEq( corr[3], 14.0 ) ); + assert( doubleEq( corr[4], 5.0 ) ); + + cout << "." << flush; +} + +void testSeqSynapse() +{ + int numSyn = 10; + int kernelWidth = 5; + SeqSynHandler ssh; + ssh.vSetNumSynapses( numSyn ); + // for ( int i = 0; i < numSyn; ++i ) + // ssh.addSynapse(); + assert( static_cast< int >( ssh.vGetNumSynapses() ) == numSyn ); + ssh.setSeqDt( 1.0 ); + ssh.setHistoryTime( 5.0 ); + ssh.setKernelWidth( kernelWidth ); + ssh.setKernelEquation( "(x == t)*5 + ((x+1)==t || (x-1)==t) * 2 - 1" ); + + vector< double > ret = ssh.getKernel(); + assert( ret.size() == static_cast< unsigned int > (5 * kernelWidth ) ); + vector< double >::iterator k = ret.begin(); + for ( int t = 0; t < 5; ++t ) { + for ( int x = 0; x < kernelWidth; ++x ) { + double val = (x == t)*5 + ((x+1)==t || (x-1)==t) * 2 - 1; + assert( doubleEq( *k++, val ) ); + } + } + + cout << "." << flush; + + ssh.setResponseScale( 1.0 ); + for ( int i = 0; i < numSyn; ++i ) { + ssh.addSpike( i, 0.0, 1.0 ); + } + ssh.setWeightScale( 1.0 ); + ProcInfo p; + + Eref sheller( Id().eref() ); + Shell* shell = reinterpret_cast< Shell* >( sheller.data() ); + Id sid = shell->doCreate( "SeqSynHandler", Id(), "sid", 1 ); + assert( sid.element()->getName() == "sid" ); + ssh.vProcess( sid.eref(), &p ); + + // Here we correlate the vector [1,1,1,1,1,1,1,1,1,1,1] with + // the kernel [4,1,-1,-1,-1] + // Other lines are zeros. + // Should really make the kernel mapping symmetrical. + assert( doubleEq( ssh.getSeqActivation(), 28.0 ) ); + vector< double > wts = ssh.getWeightScaleVec(); + for ( int i = 0; i < numSyn-4; ++i ) + assert( doubleEq( wts[i], 2.0 ) ); + assert( doubleEq( wts[6], 3 ) ); // Edge effects. Last -1 vanishes. + assert( doubleEq( wts[7], 4 ) ); // Edge effects. + assert( doubleEq( wts[8], 5 ) ); // Edge effects. + assert( doubleEq( wts[9], 4 ) ); // Edge effects. + + cout << "." << flush; + shell->doDelete( sid ); +} + +#endif // DO_UNIT_TESTS // This tests stuff without using the messaging. void testSynapse() { +#ifdef DO_UNIT_TESTS + testRollingMatrix(); + testSeqSynapse(); +#endif // DO_UNIT_TESTS } // This is applicable to tests that use the messaging and scheduling. @@ -28,4 +159,3 @@ void testSynapseProcess() { } -#endif // DO_UNIT_TESTS diff --git a/tests/python/chem_models/acc27.g b/tests/python/chem_models/acc27.g new file mode 100644 index 0000000000000000000000000000000000000000..04f97d20e8f9c326c1f80cde095a66e298c12ee7 --- /dev/null +++ b/tests/python/chem_models/acc27.g @@ -0,0 +1,347 @@ +// DOQCS : http://doqcs.ncbs.res.in/ +// Accession Name = MAPK_osc +// Accession Number = 27 +// Transcriber = Sridhar Hariharaputran, NCBS +// Developer = Boris N. Kholodenko +// Species = Xenopus +// Tissue = Oocyte extract +// Cell Compartment = Cytosol +// Notes = This MAPK model is based on <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=10712587">Boris N. Kholodenko Eur J Biochem. (2000) 267(6):1583-8</a> for data from Xenopus oocytes extracts. + + //genesis +// kkit Version 11 flat dumpfile + +// Saved on Thu Dec 8 10:58:02 2005 + +include kkit {argv 1} + +FASTDT = 5e-05 +SIMDT = 0.005 +CONTROLDT = 10 +PLOTDT = 5 +MAXTIME = 6000 +TRANSIENT_TIME = 2 +VARIABLE_DT_FLAG = 1 +DEFAULT_VOL = 1.6667e-21 +VERSION = 11.0 +setfield /file/modpath value /home2/bhalla/scripts/modules +kparms + +//genesis + +initdump -version 3 -ignoreorphans 1 +simobjdump doqcsinfo filename accessname accesstype transcriber developer \ + citation species tissue cellcompartment methodology sources \ + model_implementation model_validation x y z +simobjdump table input output alloced step_mode stepsize x y z +simobjdump xtree path script namemode sizescale +simobjdump xcoredraw xmin xmax ymin ymax +simobjdump xtext editable +simobjdump xgraph xmin xmax ymin ymax overlay +simobjdump xplot pixflags script fg ysquish do_slope wy +simobjdump group xtree_fg_req xtree_textfg_req plotfield expanded movealone \ + link savename file version md5sum mod_save_flag x y z +simobjdump geometry size dim shape outside xtree_fg_req xtree_textfg_req x y \ + z +simobjdump kpool DiffConst CoInit Co n nInit mwt nMin vol slave_enable \ + geomname xtree_fg_req xtree_textfg_req x y z +simobjdump kreac kf kb notes xtree_fg_req xtree_textfg_req x y z +simobjdump kenz CoComplexInit CoComplex nComplexInit nComplex vol k1 k2 k3 \ + keepconc usecomplex notes xtree_fg_req xtree_textfg_req link x y z +simobjdump stim level1 width1 delay1 level2 width2 delay2 baselevel trig_time \ + trig_mode notes xtree_fg_req xtree_textfg_req is_running x y z +simobjdump xtab input output alloced step_mode stepsize notes editfunc \ + xtree_fg_req xtree_textfg_req baselevel last_x last_y is_running x y z +simobjdump kchan perm gmax Vm is_active use_nernst notes xtree_fg_req \ + xtree_textfg_req x y z +simobjdump transport input output alloced step_mode stepsize dt delay clock \ + kf xtree_fg_req xtree_textfg_req x y z +simobjdump proto x y z +simundump geometry /kinetics/geometry 0 1.6667e-21 3 sphere "" white black 10 \ + 9 0 +simundump group /kinetics/MAPK 0 yellow black x 0 0 "" MAPK \ + /home2/bhalla/scripts/modules/MAPK_0.g 0 0 0 1 10 0 +simundump kpool /kinetics/MAPK/MAPK 0 0 0.3 0.3 0.3 0.3 0 0 1 0 \ + /kinetics/geometry 35 yellow -8 -7 0 +simundump kpool /kinetics/MAPK/MKKK 0 0 0.1 0.1 0.1 0.1 0 0 1 0 \ + /kinetics/geometry 16 yellow -8 5 0 +simundump kpool /kinetics/MAPK/MKK 0 0 0.3 0.3 0.3 0.3 0 0 1 0 \ + /kinetics/geometry 60 yellow -8 -1 0 +simundump kpool /kinetics/MAPK/int1 0 0 0.001 0.001 0.001 0.001 0 0 1 0 \ + /kinetics/geometry 30 yellow -4 4 0 +simundump kenz /kinetics/MAPK/int1/2 0 0 0 0 0 0.001 156.25 1 0.25 0 1 "" red \ + 30 "" -4 5 0 +simundump kpool /kinetics/MAPK/MKKK-P 0 0 0 0 0 0 0 0 1 0 /kinetics/geometry \ + 51 yellow 0 5 0 +simundump kenz /kinetics/MAPK/MKKK-P/3 0 0 0 0 0 0.001 8.3333 0.1 0.025 0 1 \ + "" red 51 "" -4 2 0 +simundump kenz /kinetics/MAPK/MKKK-P/4 0 0 0 0 0 0.001 8.3333 0.1 0.025 0 1 \ + "" red 51 "" 4 2 0 +simundump kpool /kinetics/MAPK/int3 0 0 0.001 0.001 0.001 0.001 0 0 1 0 \ + /kinetics/geometry blue yellow -4 -2 0 +simundump kenz /kinetics/MAPK/int3/6 0 0 0 0 0 0.001 250 3 0.75 0 1 "" red \ + blue "" -4 -1 0 +simundump kpool /kinetics/MAPK/int5 0 0 0.001 0.001 0.001 0.001 0 0 1 0 \ + /kinetics/geometry 1 yellow -4 -8 0 +simundump kenz /kinetics/MAPK/int5/10 0 0 0 0 0 0.001 166.67 2 0.5 0 1 "" red \ + 1 "" -4 -7 0 +simundump kpool /kinetics/MAPK/MKK-P 0 0 0 0 0 0 0 0 1 0 /kinetics/geometry 5 \ + yellow 0 -1 0 +simundump kpool /kinetics/MAPK/MAPK-P 0 0 0 0 0 0 0 0 1 0 /kinetics/geometry \ + 55 yellow 0 -7 0 +simundump kpool /kinetics/MAPK/int2 0 0 0.001 0.001 0.001 0.001 0 0 1 0 \ + /kinetics/geometry 2 yellow 4 -2 0 +simundump kenz /kinetics/MAPK/int2/5 0 0 0 0 0 0.001 250 3 0.75 0 1 "" red 2 \ + "" 4 -1 0 +simundump kpool /kinetics/MAPK/int4 0 0 0.001 0.001 0.001 0.001 0 0 1 0 \ + /kinetics/geometry 17 yellow 4 -8 0 +simundump kenz /kinetics/MAPK/int4/9 0 0 0 0 0 0.001 166.67 2 0.5 0 1 "" red \ + 17 "" 4 -7 0 +simundump kpool /kinetics/MAPK/Ras-MKKKK 0 0 0.001 0.001 0.001 0.001 0 0 1 0 \ + /kinetics/geometry 47 yellow 6 8 0 +simundump kenz /kinetics/MAPK/Ras-MKKKK/1 0 0 0 0 0 0.001 1250 10 2.5 0 1 "" \ + red 47 "" -4 8 0 +simundump kpool /kinetics/MAPK/inactiveRas-MKKK 0 0 0 0 0 0 0 0 1 0 \ + /kinetics/geometry 30 yellow 11 8 0 +simundump kreac /kinetics/MAPK/Neg_feedback 0 1 0.009 "" white yellow 11 2 0 +simundump kpool /kinetics/MAPK/MKK-PP 0 0 0 0 0 0 0 0 1 0 /kinetics/geometry \ + 60 yellow 8 -1 0 +simundump kenz /kinetics/MAPK/MKK-PP/7 0 0 0 0 0 0.001 8.3333 0.1 0.025 0 1 \ + "" red 60 "" -4 -4 0 +simundump kenz /kinetics/MAPK/MKK-PP/8 0 0 0 0 0 0.001 8.3333 0.1 0.025 0 1 \ + "" red 60 "" 4 -4 0 +simundump kpool /kinetics/MAPK/MAPK-PP 0 0 0 0 0 0 0 0 1 0 /kinetics/geometry \ + 46 yellow 8 -7 0 +simundump doqcsinfo /kinetics/doqcsinfo 0 db27.g MAPK_osc pathway \ + "Sridhar Hariharaputran, NCBS" " Boris N. Kholodenko" "citation here" \ + Xenopus "Oocyte extract" Cytosol Hypothetical \ + "<a href=http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=10712587>Boris N. Kholodenko Eur J Biochem. (2000) 267(6):1583-8</a> ( peer-reviewed publication )" \ + "Mathematically equivalent" "Qualitative predictions" 10 11 0 +simundump xgraph /graphs/conc1 0 0 6000 0 0.3 0 +simundump xgraph /graphs/conc2 0 0 6000 4.5157e-05 0.3 0 +simundump xplot /graphs/conc1/MAPK-PP.Co 3 524288 \ + "delete_plot.w <s> <d>; edit_plot.D <w>" 46 0 0 1 +simundump xplot /graphs/conc1/MAPK.Co 3 524288 \ + "delete_plot.w <s> <d>; edit_plot.D <w>" 35 0 0 1 +simundump xplot /graphs/conc2/Ras-MKKKK.Co 3 524288 \ + "delete_plot.w <s> <d>; edit_plot.D <w>" 47 0 0 1 +simundump xplot /graphs/conc2/MAPK.Co 3 524288 \ + "delete_plot.w <s> <d>; edit_plot.D <w>" 35 0 0 1 +simundump xplot /graphs/conc2/MKKK.Co 3 524288 \ + "delete_plot.w <s> <d>; edit_plot.D <w>" 16 0 0 1 +simundump xplot /graphs/conc2/MKK.Co 3 524288 \ + "delete_plot.w <s> <d>; edit_plot.D <w>" 60 0 0 1 +simundump xgraph /moregraphs/conc3 0 0 6000 0 1 0 +simundump xgraph /moregraphs/conc4 0 0 6000 0 1 0 +simundump xcoredraw /edit/draw 0 -10 13 -10 13 +simundump xtree /edit/draw/tree 0 \ + /kinetics/#[],/kinetics/#[]/#[],/kinetics/#[]/#[]/#[][TYPE!=proto],/kinetics/#[]/#[]/#[][TYPE!=linkinfo]/##[] \ + "edit_elm.D <v>; drag_from_edit.w <d> <S> <x> <y> <z>" auto 0.6 +simundump xtext /file/notes 0 1 +xtextload /file/notes \ +"22 Jan 2002" \ +" " \ +" This model is based on Kholodenko, B.N." \ +" Eur. J. Biochem. 267, 1583-1588(2000)" \ +"" +addmsg /kinetics/MAPK/MKK-PP/7 /kinetics/MAPK/MAPK REAC sA B +addmsg /kinetics/MAPK/int5/10 /kinetics/MAPK/MAPK MM_PRD pA +addmsg /kinetics/MAPK/Ras-MKKKK/1 /kinetics/MAPK/MKKK REAC sA B +addmsg /kinetics/MAPK/int1/2 /kinetics/MAPK/MKKK MM_PRD pA +addmsg /kinetics/MAPK/MKKK-P/3 /kinetics/MAPK/MKK REAC sA B +addmsg /kinetics/MAPK/int3/6 /kinetics/MAPK/MKK MM_PRD pA +addmsg /kinetics/MAPK/int1 /kinetics/MAPK/int1/2 ENZYME n +addmsg /kinetics/MAPK/MKKK-P /kinetics/MAPK/int1/2 SUBSTRATE n +addmsg /kinetics/MAPK/Ras-MKKKK/1 /kinetics/MAPK/MKKK-P MM_PRD pA +addmsg /kinetics/MAPK/int1/2 /kinetics/MAPK/MKKK-P REAC sA B +addmsg /kinetics/MAPK/MKKK-P /kinetics/MAPK/MKKK-P/3 ENZYME n +addmsg /kinetics/MAPK/MKK /kinetics/MAPK/MKKK-P/3 SUBSTRATE n +addmsg /kinetics/MAPK/MKKK-P /kinetics/MAPK/MKKK-P/4 ENZYME n +addmsg /kinetics/MAPK/MKK-P /kinetics/MAPK/MKKK-P/4 SUBSTRATE n +addmsg /kinetics/MAPK/int3 /kinetics/MAPK/int3/6 ENZYME n +addmsg /kinetics/MAPK/MKK-P /kinetics/MAPK/int3/6 SUBSTRATE n +addmsg /kinetics/MAPK/int5 /kinetics/MAPK/int5/10 ENZYME n +addmsg /kinetics/MAPK/MAPK-P /kinetics/MAPK/int5/10 SUBSTRATE n +addmsg /kinetics/MAPK/MKKK-P/4 /kinetics/MAPK/MKK-P REAC sA B +addmsg /kinetics/MAPK/MKKK-P/3 /kinetics/MAPK/MKK-P MM_PRD pA +addmsg /kinetics/MAPK/int3/6 /kinetics/MAPK/MKK-P REAC sA B +addmsg /kinetics/MAPK/int2/5 /kinetics/MAPK/MKK-P MM_PRD pA +addmsg /kinetics/MAPK/MKK-PP/8 /kinetics/MAPK/MAPK-P REAC sA B +addmsg /kinetics/MAPK/MKK-PP/7 /kinetics/MAPK/MAPK-P MM_PRD pA +addmsg /kinetics/MAPK/int5/10 /kinetics/MAPK/MAPK-P REAC sA B +addmsg /kinetics/MAPK/int4/9 /kinetics/MAPK/MAPK-P MM_PRD pA +addmsg /kinetics/MAPK/int2 /kinetics/MAPK/int2/5 ENZYME n +addmsg /kinetics/MAPK/MKK-PP /kinetics/MAPK/int2/5 SUBSTRATE n +addmsg /kinetics/MAPK/int4 /kinetics/MAPK/int4/9 ENZYME n +addmsg /kinetics/MAPK/MAPK-PP /kinetics/MAPK/int4/9 SUBSTRATE n +addmsg /kinetics/MAPK/Neg_feedback /kinetics/MAPK/Ras-MKKKK REAC A B +addmsg /kinetics/MAPK/Ras-MKKKK /kinetics/MAPK/Ras-MKKKK/1 ENZYME n +addmsg /kinetics/MAPK/MKKK /kinetics/MAPK/Ras-MKKKK/1 SUBSTRATE n +addmsg /kinetics/MAPK/Neg_feedback /kinetics/MAPK/inactiveRas-MKKK REAC B A +addmsg /kinetics/MAPK/MAPK-PP /kinetics/MAPK/Neg_feedback SUBSTRATE n +addmsg /kinetics/MAPK/Ras-MKKKK /kinetics/MAPK/Neg_feedback SUBSTRATE n +addmsg /kinetics/MAPK/inactiveRas-MKKK /kinetics/MAPK/Neg_feedback PRODUCT n +addmsg /kinetics/MAPK/MKKK-P/4 /kinetics/MAPK/MKK-PP MM_PRD pA +addmsg /kinetics/MAPK/int2/5 /kinetics/MAPK/MKK-PP REAC sA B +addmsg /kinetics/MAPK/MKK-PP /kinetics/MAPK/MKK-PP/7 ENZYME n +addmsg /kinetics/MAPK/MAPK /kinetics/MAPK/MKK-PP/7 SUBSTRATE n +addmsg /kinetics/MAPK/MKK-PP /kinetics/MAPK/MKK-PP/8 ENZYME n +addmsg /kinetics/MAPK/MAPK-P /kinetics/MAPK/MKK-PP/8 SUBSTRATE n +addmsg /kinetics/MAPK/MKK-PP/8 /kinetics/MAPK/MAPK-PP MM_PRD pA +addmsg /kinetics/MAPK/int4/9 /kinetics/MAPK/MAPK-PP REAC sA B +addmsg /kinetics/MAPK/Neg_feedback /kinetics/MAPK/MAPK-PP REAC A B +addmsg /kinetics/MAPK/MAPK-PP /graphs/conc1/MAPK-PP.Co PLOT Co *MAPK-PP.Co *46 +addmsg /kinetics/MAPK/MAPK /graphs/conc1/MAPK.Co PLOT Co *MAPK.Co *35 +addmsg /kinetics/MAPK/Ras-MKKKK /graphs/conc2/Ras-MKKKK.Co PLOT Co *Ras-MKKKK.Co *47 +addmsg /kinetics/MAPK/MAPK /graphs/conc2/MAPK.Co PLOT Co *MAPK.Co *35 +addmsg /kinetics/MAPK/MKKK /graphs/conc2/MKKK.Co PLOT Co *MKKK.Co *16 +addmsg /kinetics/MAPK/MKK /graphs/conc2/MKK.Co PLOT Co *MKK.Co *60 +enddump +// End of dump + +call /kinetics/MAPK/notes LOAD \ +"This is the oscillatory MAPK model from Kholodenko 2000" \ +"Eur J. Biochem 267:1583-1588" \ +"The original model is formulated in terms of idealized" \ +"Michaelis-Menten enzymes and the enzyme-substrate complex" \ +"concentrations are therefore assumed negligible. The" \ +"current implementation of the model uses explicit enzyme" \ +"reactions involving substrates and is therefore an" \ +"approximation to the Kholodenko model. The approximation is" \ +"greatly improved if the enzyme is flagged as Available" \ +"which is an option in Kinetikit. This flag means that the" \ +"enzyme protein concentration is not reduced even when it" \ +"is involved in a complex. However, the substrate protein" \ +"continues to participate in enzyme-substrate complexes" \ +"and its concentration is therefore affected. Overall," \ +"this model works almost the same as the Kholodenko model" \ +"but the peak MAPK-PP amplitudes are a little reduced and" \ +"the period of oscillations is about 10% longer." \ +"If the enzymes are not flagged as Available then the" \ +"oscillations commence only when the Km for enzyme 1" \ +"is set to 0.1 uM." +call /kinetics/MAPK/MAPK/notes LOAD \ +"The total concn. of MAPK is 300nM " \ +"from" \ +"Kholodenko, 2000." +call /kinetics/MAPK/MKKK/notes LOAD \ +"The total concn. of MKKK is 100nM " \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/MKK/notes LOAD \ +"The total concn. of MKK is 300nM " \ +"from" \ +"Kholodenko,2000" +call /kinetics/MAPK/int1/notes LOAD \ +"This is the intermediate enzyme which catalyses the " \ +"dephosphorylation of MKKK-P to MKKK. The concentration" \ +"is set to 1 nM based on" \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/int1/2/notes LOAD \ +"Km is 8nM and Vmax is 0.25nM.s-1 " \ +"from" \ +"Kholodenko, 2000." +call /kinetics/MAPK/MKKK-P/notes LOAD \ +"This is the phosphorylated form of MKKK which converts MKK" \ +"to MKK-P and then to MKK-PP" \ +"from" \ +"Kholodenko, 2000." +call /kinetics/MAPK/MKKK-P/3/notes LOAD \ +"Km is 15 nM and Vmax is 0.025s-1" \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/MKKK-P/4/notes LOAD \ +"Km is 15nM and Vmax is 0.025s-1" \ +"from " \ +"Kholodenko, 2000." +call /kinetics/MAPK/int3/notes LOAD \ +"This intermediate enzyme catalyses the dephosphorylation of" \ +"MKK-P to MKK. The concentration is 1nM" \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/int3/6/notes LOAD \ +"The Km is 15nM and the Vmax is 0.75nM.s-1" \ +"from" \ +"Kholodenko 2000." +call /kinetics/MAPK/int5/notes LOAD \ +"This catalyses the conversion of MAPK-P to MAPK. The " \ +"concenration is 1nM." \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/int5/10/notes LOAD \ +"The Km is 15nM and Vmax is 0.5nM.s-1" \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/MKK-P/notes LOAD \ +"This is the single phoshorylated form of MKK." \ +"from" \ +"Kholodenko, 2000." +call /kinetics/MAPK/MAPK-P/notes LOAD \ +"This is the single phopshorylated form of MAPK" \ +"from" \ +"Kholodenko, 2000." +call /kinetics/MAPK/int2/notes LOAD \ +"This intermediate enzyme which catalyses the dephosphorylation of" \ +"MKK-PP to MKK-P. The concentration is 1nM." \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/int2/5/notes LOAD \ +"The Km is 15nM and Vmax is 0.75nM.s-1 " \ +"from" \ +"Kholodenko, 2000" \ +"" +call /kinetics/MAPK/int4/notes LOAD \ +"This intermediate enzyme catalyses the dephosphorylation of" \ +"MAPK-PP to MAPK-P. The concentration is 1nM." \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/int4/9/notes LOAD \ +"The Km is 15nM and Vmax is 0.5nM.s-1 " \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/Ras-MKKKK/notes LOAD \ +"The concn. of Ras-MKKKK* is set to 1 nM implicitly" \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/Ras-MKKKK/1/notes LOAD \ +"The Km is 10nM and Vmax is 2.5nM sec^-1. We assume that" \ +"there is 1 nM of the Ras-MKKKK." \ +"From Kholodenko, 2000." \ +"" \ +"If the enzymes are not flagged as Available, then this" \ +"Km should be set to 0.1 to obtain oscillations." +call /kinetics/MAPK/inactiveRas-MKKK/notes LOAD \ +"This is the inactive form of Ras-MKKK. Based on the" \ +"reaction scheme from Kholodenko 2000, this is equivalent" \ +"to a binding of the MAPK-PP to the Ras. The amount of" \ +"Ras in the model is small enough that negligible amounts" \ +"of MAPK are involved in this reaction. So it is a fair" \ +"approximation to the negative feedback mechanism from" \ +"Kholodenko, 2000." +call /kinetics/MAPK/Neg_feedback/notes LOAD \ +"From Kholodenko, 2000 Eur J Biochem 267" \ +"the Kd is 9 nM. We use a rather fast Kf of 1/sec/uM" \ +"so that equilibrium is maintained." \ +"" +call /kinetics/MAPK/MKK-PP/notes LOAD \ +"This is the double phosphorylated and active form of MKK" \ +"from" \ +"Kholodenko, 2000" +call /kinetics/MAPK/MKK-PP/7/notes LOAD \ +"The Km is 15nM which is 0.015uM Vmax is 0.025s-1" \ +"from" \ +"Kholodenko, 2000." \ +"" +call /kinetics/MAPK/MKK-PP/8/notes LOAD \ +"The Km is 15nM which is 0.015uM and Vmax is 0.025s-1" \ +"from" \ +"Kholodenko, 2000" \ +"" +call /kinetics/MAPK/MAPK-PP/notes LOAD \ +"This is the double phosphorylated and active form of MAPK." \ +"from" \ +"Kholodenko, 2000." +call /kinetics/doqcsinfo/notes LOAD \ +"This MAPK model is based on <a href=http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=10712587>Boris N. Kholodenko Eur J Biochem. (2000) 267(6):1583-8</a> for data from Xenopus oocytes extracts." +complete_loading diff --git a/tests/python/test_sbml.py b/tests/python/test_sbml.py index c297f0914eb1c701bfe3b962b40aa0f756d47942..800d1e120de91052330b10554b3395c42c8c62e5 100644 --- a/tests/python/test_sbml.py +++ b/tests/python/test_sbml.py @@ -2,7 +2,7 @@ Test SBML capabilities of PyMOOSE """ -__author__ = "Dilawar Singh" +__author__ = "Dilawar Singh, HarshaRani" __copyright__ = "Copyright 2015, Dilawar Singh and NCBS Bangalore" __credits__ = ["NCBS Bangalore"] __license__ = "GNU GPL" @@ -16,20 +16,20 @@ import os import moose import moose.utils as mu - +from moose.SBML import * # the model lives in the same directory as the test script modeldir = os.path.dirname(__file__) def main(): - modelname = os.path.join(modeldir, 'chem_models/mkp1_feedback_effects_acc4.xml') - model = moose.readSBML(modelname, '/model') - tables = moose.wildcardFind('/##[TYPE=Table2]') + modelname = os.path.join(modeldir, 'chem_models/00001-sbml-l3v1.xml') + model = mooseReadSBML(modelname, '/sbml') + tables = moose.wildcardFind('/sbml/##[TYPE=Table2]') records = {} for t in tables: records[t.path.split('/')[-1]] = t c = moose.Clock('/clock') moose.reinit() moose.start(200) - check(tables) + #check(tables) def check(tables): assert len(tables) > 0, "No moose.Table2 created." diff --git a/tests/python/test_sbml_support.py b/tests/python/test_sbml_support.py index 2ecd4428928229660679624a38fd42a0abcc5421..7d30a9d3b3bcb3a5ad501efcbde1232c20a22979 100644 --- a/tests/python/test_sbml_support.py +++ b/tests/python/test_sbml_support.py @@ -40,13 +40,9 @@ # import moose -import matplotlib -import numpy as np -import matplotlib.pyplot as plt import sys -import pylab import os - +from moose.SBML import * script_dir = os.path.dirname( os.path.realpath( __file__) ) print( "Using moose from: %s" % moose.__file__ ) @@ -59,31 +55,32 @@ def main(): As a general rule we created model under '/path/model' and plots under '/path/graphs'.\n """ - mfile = os.path.join( script_dir, 'chem_models/00001-sbml-l3v1.xml') + mfile = os.path.join( script_dir, 'chem_models/acc27.g') runtime = 20.0 - - # Loading the sbml file into MOOSE, models are loaded in path/model - sbmlId = moose.readSBML(mfile,'sbml') + writefile = os.path.join( script_dir, 'chem_models/acc27.xml') + + #Load model to moose and write to SBML + moose.loadModel(mfile,'/acc27') + writeerror,message,sbmlId = moose.SBML.mooseWriteSBML('/acc27',writefile) + if writeerror == -2: + print ( "Could not save the Model" ) + elif writeerror == -1: + print ( "\n This model is not valid SBML Model, failed in the consistency check ") + elif writeerror == 0: + print ("Could not save the Model ") + elif writeerror == 1: + print ( "Model is loaded using \'loadModel\' function to moose and using \'moose.SBML.mooseWriteSBML\' converted to SBML. \n Ran for 20 Sec" ) + # Reset and Run + moose.reinit() + moose.start(runtime) - - s1 = moose.element('/sbml/model/compartment/S1') - s2= moose.element('/sbml/model/compartment/S2') - - # Creating MOOSE Table, Table2 is for the chemical model - graphs = moose.Neutral( '/sbml/graphs' ) - outputs1 = moose.Table2 ( '/sbml/graphs/concS1') - outputs2 = moose.Table2 ( '/sbml/graphs/concS2') - - # connect up the tables - moose.connect( outputs1,'requestOut', s1, 'getConc' ); - moose.connect( outputs2,'requestOut', s2, 'getConc' ); - - - # Reset and Run - moose.reinit() - moose.start(runtime) def displayPlots(): + import matplotlib + import numpy as np + import matplotlib.pyplot as plt + import pylab + # Display all plots. for x in moose.wildcardFind( '/sbml/graphs/#[TYPE=Table2]' ): t = np.arange( 0, x.vector.size, 1 ) #sec