diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000000..e02b1c4556 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1 @@ +Checks: '-*,modernize-use-nullptr,modernize-use-override,bugprone,modernize-redundant-void-arg' diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions new file mode 100644 index 0000000000..f16f161dde --- /dev/null +++ b/.cppcheck_suppressions @@ -0,0 +1,37 @@ +invalidPrintfArgType_sint:./ +invalidscanf:./ +unknownMacro:./testsuite/cpptests/test_target_fields.h +useStlAlgorithm:./ +variableScope:./ +shadowVariable:./ +shadowFunction:./ +constParameter:./ +postfixOperator:./ +passedByValue:./ +virtualCallInConstructor:./ +uninitMemberVar:./ +noExplicitConstructor:./ +missingOverride:./ +identicalConditionAfterEarlyExit:./ +unreadVariable:./ +clarifyCondition:./ +toomanyconfigs:./ +unusedPrivateFunction:./ +unusedVariable:./ +shadowArgument:./ +useInitializationList:./ +noConstructor:./ +stlcstrReturn:./ +ConfigurationNotChecked:./ +unusedStructMember:./ +unpreciseMathCall:./ +operatorEqVarError:./ +duplicateExpression:./ +// integerOverflow:./ +ignoredReturnValue:./ +unusedFunction:./ +duplicateCondition:./ +nullPointer:./ +missingInclude:./ +uninitvar:./ + diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000..952d5815d0 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +d7c5ae98686622fe0b5298566d35df828be8f841 diff --git a/.github/styles/Vocab/nest-vocab/accept.txt b/.github/styles/Vocab/nest-vocab/accept.txt new file mode 100644 index 0000000000..f3ae6fe399 --- /dev/null +++ b/.github/styles/Vocab/nest-vocab/accept.txt @@ -0,0 +1,24 @@ +NEST +GIDCollection +iaf +aeif +psc +cond +Hodgkin +Huxley +clopath +stdp +stp +mpi +vp +rng +excitatory +inhibitory +HEP +JME +Plesser +Eppler +Hahne +Senk +Jordan +Kunkel diff --git a/.github/styles/Vocab/nest-vocab/reject.txt b/.github/styles/Vocab/nest-vocab/reject.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.github/styles/nest-styles/Abbreviations.yml b/.github/styles/nest-styles/Abbreviations.yml new file mode 100644 index 0000000000..d51e72b572 --- /dev/null +++ b/.github/styles/nest-styles/Abbreviations.yml @@ -0,0 +1,12 @@ +--- +extends: substitution +message: Use '%s' instead of '%s' +ignorecase: false +level: error +nonword: true +swap: + '\beg\b': e.g., + '\bie\b': i.e., + 'e\.g\.(?:[^,]|$)': e.g., + 'i\.e\.(?:[^,]|$)': i.e., + '(?i)\d{1,2} ?[ap]m': a.m. or p.m. diff --git a/.github/styles/nest-styles/Ampersands.yml b/.github/styles/nest-styles/Ampersands.yml new file mode 100644 index 0000000000..0d0d7c6157 --- /dev/null +++ b/.github/styles/nest-styles/Ampersands.yml @@ -0,0 +1,8 @@ +--- +extends: existence +message: "Don't use ampersands unless one is part of a company or brand name." +level: warning +nonword: true +tokens: + - '\w+\s&\s\w+' + diff --git a/.github/styles/nest-styles/Annotations.yml b/.github/styles/nest-styles/Annotations.yml new file mode 100644 index 0000000000..babf75d24b --- /dev/null +++ b/.github/styles/nest-styles/Annotations.yml @@ -0,0 +1,11 @@ +--- +extends: existence +message: "'%s' left in text." +ignorecase: false +level: error +tokens: + - XXX + - FIXME + - TODO + - NOTE + diff --git a/.github/styles/nest-styles/Capitalization.yml b/.github/styles/nest-styles/Capitalization.yml new file mode 100644 index 0000000000..a7bb2f6a26 --- /dev/null +++ b/.github/styles/nest-styles/Capitalization.yml @@ -0,0 +1,7 @@ +--- +extends: capitalization +message: "'%s' should be in sentence case" +level: warning +scope: heading +match: $sentence + diff --git a/.github/styles/nest-styles/CommasPerSentence.yml b/.github/styles/nest-styles/CommasPerSentence.yml new file mode 100644 index 0000000000..1e631577e5 --- /dev/null +++ b/.github/styles/nest-styles/CommasPerSentence.yml @@ -0,0 +1,7 @@ +--- +message: "More than 3 commas!" +extends: occurrence +scope: sentence +max: 3 +token: ',' + diff --git a/.github/styles/nest-styles/ComplexWords.yml b/.github/styles/nest-styles/ComplexWords.yml new file mode 100644 index 0000000000..dabdeb3627 --- /dev/null +++ b/.github/styles/nest-styles/ComplexWords.yml @@ -0,0 +1,121 @@ +--- +extends: substitution +message: Consider using %s instead of '%s' +ignorecase: true +level: warning +swap: + 'approximate(?:ly)?': "'about'" + absent: "'none' or 'not here'" + abundance: "'plenty'" + accelerate: "'speed up'" + accentuate: "'stress'" + accompany: "'go with'" + accomplish: "'carry out' or 'do'" + accorded: "'given'" + accordingly: "'so'" + accrue: "'add'" + accurate: "'right' or 'exact'" + acquiesce: "'agree'" + acquire: "'get' or 'buy'" + additional: "'more' or 'extra'" + address: "'discuss'" + addressees: "'you'" + adjacent to: "'next to'" + adjustment: "'change'" + admissible: "'allowed'" + advantageous: "'helpful'" + advise: "'tell'" + aggregate: "'total'" + aircraft: "'plane'" + alleviate: "'ease'" + allocate: "'assign' or 'divide'" + alternatively: "'or'" + alternatives: "'choices' or 'options'" + ameliorate: "'improve'" + amend: "'change'" + anticipate: "'expect'" + apparent: "'clear' or 'plain'" + ascertain: "'discover' or 'find out'" + assistance: "'help'" + attain: "'meet'" + attempt: "'try'" + authorize: "'allow'" + belated: "'late'" + bestow: "'give'" + cease: "'stop' or 'end'" + collaborate: "'work together'" + commence: "'begin'" + compensate: "'pay'" + component: "'part'" + comprise: "'form' or 'include'" + concept: "'idea'" + concerning: "'about'" + confer: "'give' or 'award'" + consequently: "'so'" + consolidate: "'merge'" + constitutes: "'forms'" + contains: "'has'" + convene: "'meet'" + demonstrate: "'show' or 'prove'" + depart: "'leave'" + designate: "'choose'" + desire: "'want' or 'wish'" + determine: "'decide' or 'find'" + detrimental: "'bad' or 'harmful'" + disclose: "'share' or 'tell'" + discontinue: "'stop'" + disseminate: "'send' or 'give'" + eliminate: "'end'" + elucidate: "'explain'" + employ: "'use'" + enclosed: "inside or 'included'" + encounter: "'meet'" + endeavor: "'try'" + enumerate: "'count'" + equitable: "'fair'" + equivalent: "'equal'" + exclusively: "'only'" + expedite: "'hurry'" + facilitate: "'ease'" + females: "'women'" + finalize: "'complete' or 'finish'" + frequently: "'often'" + identical: "'same'" + incorrect: "'wrong'" + indication: "'sign'" + initiate: "'start' or 'begin'" + itemized: "'listed'" + jeopardize: "'risk'" + liaise: "'work with' or 'partner with'" + maintain: "'keep' or 'support'" + methodology: "'method'" + modify: "'change'" + monitor: "'check' or 'watch'" + multiple: "'many'" + necessitate: "'cause'" + notify: "'tell'" + numerous: "'many'" + objective: "'aim' or 'goal'" + obligate: "'bind' or 'compel'" + optimum: "'best' or 'most'" + permit: "'let'" + portion: "'part'" + possess: "'own'" + previous: "'earlier'" + previously: "'before'" + prioritize: "'rank'" + procure: "'buy'" + provide: "'give' or 'offer'" + purchase: "'buy'" + relocate: "'move'" + request: "'ask'" + solicit: "'request'" + state-of-the-art: "'latest'" + subsequent: "'later' or 'next'" + substantial: "'large'" + sufficient: "'enough'" + terminate: "'end'" + transmit: "'send'" + utilization: "'use'" + utilize: "'use'" + diff --git a/.github/styles/nest-styles/ListCapitalize.yml b/.github/styles/nest-styles/ListCapitalize.yml new file mode 100644 index 0000000000..f99f6c9180 --- /dev/null +++ b/.github/styles/nest-styles/ListCapitalize.yml @@ -0,0 +1,9 @@ +--- +extends: existence +message: "Capitalize the first word in a list." +level: warning +scope: list +nonword: true +tokens: + - '^[a-z].+' + diff --git a/.github/styles/nest-styles/Negative.yml b/.github/styles/nest-styles/Negative.yml new file mode 100644 index 0000000000..f726a6081e --- /dev/null +++ b/.github/styles/nest-styles/Negative.yml @@ -0,0 +1,12 @@ +--- +extends: existence +message: "Use positive language rather than negative language like “%s.”" +link: http://styleguide.mailchimp.com/grammar-and-mechanics/#header-3-write-positively +level: warning +tokens: + - can't + - won't + - don't + - doesn't + - hasn't + diff --git a/.github/styles/nest-styles/NotEasy.yml b/.github/styles/nest-styles/NotEasy.yml new file mode 100644 index 0000000000..c757617331 --- /dev/null +++ b/.github/styles/nest-styles/NotEasy.yml @@ -0,0 +1,11 @@ +--- +extends: existence +message: Consider removing '%s' +ignorecase: true +level: warning +tokens: + - simple + - just + - easily + - simply + diff --git a/.github/styles/nest-styles/OxfordComma.yml b/.github/styles/nest-styles/OxfordComma.yml new file mode 100644 index 0000000000..b9d73c32bc --- /dev/null +++ b/.github/styles/nest-styles/OxfordComma.yml @@ -0,0 +1,8 @@ +--- +extends: existence +message: 'Use the Oxford comma in a list of three or more items.' +link: 'https://contribute.jquery.org/style-guide/prose/#grammar' +scope: sentence +level: warning +tokens: + - '(?:[^,]+,){1,}\s\w+\sand' diff --git a/.github/styles/nest-styles/ParagraphLength.yml b/.github/styles/nest-styles/ParagraphLength.yml new file mode 100644 index 0000000000..84cc73e1ea --- /dev/null +++ b/.github/styles/nest-styles/ParagraphLength.yml @@ -0,0 +1,8 @@ +--- +message: "Paragraphs should be less than 150 words" +extends: occurrence +scope: paragraph.rst +level: suggestion +max: 150 +token: \b(\w+)\b + diff --git a/.github/styles/nest-styles/PassiveVoice.yml b/.github/styles/nest-styles/PassiveVoice.yml new file mode 100644 index 0000000000..6bda38f3e3 --- /dev/null +++ b/.github/styles/nest-styles/PassiveVoice.yml @@ -0,0 +1,185 @@ +--- +extends: existence +message: '"%s" is passive voice; consider changing sentence' +ignorecase: true +level: warning +raw: + - \b(am|are|were|being|is|been|was|be)\b\s* +tokens: + - '[\w]+ed' + - awoken + - beat + - become + - been + - begun + - bent + - beset + - bet + - bid + - bidden + - bitten + - bled + - blown + - born + - bought + - bound + - bred + - broadcast + - broken + - brought + - built + - burnt + - burst + - cast + - caught + - chosen + - clung + - come + - cost + - crept + - cut + - dealt + - dived + - done + - drawn + - dreamt + - driven + - drunk + - dug + - eaten + - fallen + - fed + - felt + - fit + - fled + - flown + - flung + - forbidden + - foregone + - forgiven + - forgotten + - forsaken + - fought + - found + - frozen + - given + - gone + - gotten + - ground + - grown + - heard + - held + - hidden + - hit + - hung + - hurt + - kept + - knelt + - knit + - known + - laid + - lain + - leapt + - learnt + - led + - left + - lent + - let + - lighted + - lost + - made + - meant + - met + - misspelt + - mistaken + - mown + - overcome + - overdone + - overtaken + - overthrown + - paid + - pled + - proven + - put + - quit + - read + - rid + - ridden + - risen + - run + - rung + - said + - sat + - sawn + - seen + - sent + - set + - sewn + - shaken + - shaven + - shed + - shod + - shone + - shorn + - shot + - shown + - shrunk + - shut + - slain + - slept + - slid + - slit + - slung + - smitten + - sold + - sought + - sown + - sped + - spent + - spilt + - spit + - split + - spoken + - spread + - sprung + - spun + - stolen + - stood + - stridden + - striven + - struck + - strung + - stuck + - stung + - stunk + - sung + - sunk + - swept + - swollen + - sworn + - swum + - swung + - taken + - taught + - thought + - thrived + - thrown + - thrust + - told + - torn + - trodden + - understood + - upheld + - upset + - wed + - wept + - withheld + - withstood + - woken + - won + - worn + - wound + - woven + - written + - wrung + diff --git a/.github/styles/nest-styles/Pronouns.yml b/.github/styles/nest-styles/Pronouns.yml new file mode 100644 index 0000000000..9517c00138 --- /dev/null +++ b/.github/styles/nest-styles/Pronouns.yml @@ -0,0 +1,16 @@ +--- +extends: existence +message: Avoid gender-specific language when not necessary. +link: 'https://github.com/Homebrew/brew/blob/master/docs/Prose-Style-Guidelines.md#personal-pronouns' +level: warning +ignorecase: true +tokens: + - him + - her + - she + - he + - his + - hers + - himself + - herself + diff --git a/.github/styles/nest-styles/SentenceLength.yml b/.github/styles/nest-styles/SentenceLength.yml new file mode 100644 index 0000000000..4fdc5c28f8 --- /dev/null +++ b/.github/styles/nest-styles/SentenceLength.yml @@ -0,0 +1,8 @@ +--- +message: "Sentences should be less than 25 words" +extends: occurrence +scope: sentence +level: suggestion +max: 25 +token: \b(\w+)\b + diff --git a/.github/styles/nest-styles/SingleSpace.yml b/.github/styles/nest-styles/SingleSpace.yml new file mode 100644 index 0000000000..ee3c28bce8 --- /dev/null +++ b/.github/styles/nest-styles/SingleSpace.yml @@ -0,0 +1,6 @@ +--- +extends: existence +message: "'%s' should have one space." +level: error +tokens: + - '[.?!] {2,}[A-Z]' diff --git a/.github/styles/nest-styles/Slash.yml b/.github/styles/nest-styles/Slash.yml new file mode 100644 index 0000000000..599be09f6e --- /dev/null +++ b/.github/styles/nest-styles/Slash.yml @@ -0,0 +1,8 @@ +--- +extends: existence +message: "Use either 'or' or 'and' in '%s'" +ignorecase: true +level: error +tokens: + - '\w+/\w+' + diff --git a/.github/styles/nest-styles/Spelling.yml b/.github/styles/nest-styles/Spelling.yml new file mode 100644 index 0000000000..f41481a53c --- /dev/null +++ b/.github/styles/nest-styles/Spelling.yml @@ -0,0 +1,7 @@ +--- +extends: spelling +message: "Did you really mean '%s'?" +level: error +ignore: + - vocab.txt + diff --git a/.github/styles/nest-styles/Terms.yml b/.github/styles/nest-styles/Terms.yml new file mode 100644 index 0000000000..21afd042f0 --- /dev/null +++ b/.github/styles/nest-styles/Terms.yml @@ -0,0 +1,13 @@ +--- +extends: substitution +message: Use '%s' instead of '%s'. +level: error +ignorecase: true +swap: + centOS: CentOS + debian: Debian + fedora: Fedora + gentoo: Gentoo + openSUSE: OpenSUSE + ubuntu: Ubuntu + MacOS: macOS diff --git a/.github/styles/nest-styles/Units.yml b/.github/styles/nest-styles/Units.yml new file mode 100644 index 0000000000..20cde82901 --- /dev/null +++ b/.github/styles/nest-styles/Units.yml @@ -0,0 +1,7 @@ +--- +extends: existence +message: "Add a space between a numeral and a unit of measure." +level: error +tokens: + - '\d+(?:MB|Gbit|GB|kbps|KB|kb)' + diff --git a/.github/styles/nest-styles/Wordiness.yml b/.github/styles/nest-styles/Wordiness.yml new file mode 100644 index 0000000000..c8af6cad5c --- /dev/null +++ b/.github/styles/nest-styles/Wordiness.yml @@ -0,0 +1,121 @@ +--- +extends: substitution +message: Consider using '%s' instead of '%s' +ignorecase: true +level: warning +swap: + (?:give|gave) rise to: lead to + (?:previous|prior) to: before + a (?:large)? majority of: most + a (?:large)? number of: many + a myriad of: myriad + adequate number: enough + adversely impact: hurt + all across: across + all of a sudden: suddenly + all of these: these + all of: all + all-time record: record + almost all: most + almost never: seldom + along the lines of: similar to + an appreciable number of: many + an estimated: about + any and all: all + are in agreement: agree + as a matter of fact: in fact + as a means of: to + as a result of: because of + as of yet: yet + as per: per + at a later date: later + at all times: always + at the present time: now + at this point in time: at this point + based in large part on: based on + based on the fact that: because + basic necessity: necessity + because of the fact that: because + came to a realization: realized + came to an abrupt end: end[ed] abruptly + carry out an evaluation of: evaluate + close down: close + closed down: closed + complete stranger: stranger + completely separate: separate + concerning the matter of: regarding + conduct a review of: review + conduct an investigation: investigate + conduct experiments: experiment + continue on: continue + despite the fact that: although + disappear from sight: disappear + doomed to fail: doomed + due to the fact that: because + during the period of: during + during the time that: while + emergency situation: emergency + except when: unless + excessive number: too many + extend an invitation: invite + fall down: fall + fell down: fell + for the duration of: during + gather together: gather + has the ability: can + has the capacity to: can + has the opportunity to: could + hold a meeting: meet + if this is not the case: if not + in a careful manner: carefully + in a thoughtful manner: thoughtfully + in a timely manner: timely + in an effort to: to + in between: between + in lieu of: instead of + in many cases: often + in most cases: usually + in order to: to + in some cases: sometimes + in spite of the fact that: although + in spite of: despite + in the (?:very)? near future: soon + in the event that: if + in the neighborhood of: roughly + in the vicinity of: close to + it would appear that: apparently + lift up: lift + made reference to: referred to + make reference to: refer to + mix together: mix + none at all: none + not in a position to: unable + not possible: impossible + of major importance: important + perform an assessment of: assess + pertaining to: about + place an order: order + plays a key role in: is essential to + present time: now + readily apparent: apparent + some of the: some + span across: span + subsequent to: after + successfully complete: complete + sufficient number (?:of)?: enough + take action: act + take into account: consider + the question as to whether: whether + there is no doubt but that: doubtless + this day and age: this age + this is a subject that: this subject + time (?:frame|period): time + under the provisions of: under + until such time as: until + used for fuel purposes: used for fuel + whether or not: whether + with reference to: about + with regard to: regarding + with respect to: about or on + with the exception of: except for + diff --git a/.github/styles/vocab.txt b/.github/styles/vocab.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.github/workflows/build_dispatch.yml b/.github/workflows/build_dispatch.yml index 06f870ead7..5c9f6c8908 100644 --- a/.github/workflows/build_dispatch.yml +++ b/.github/workflows/build_dispatch.yml @@ -1,7 +1,11 @@ on: [push] +permissions: + contents: read + jobs: trigger_externals: + if: ${{ github.repository_owner == 'nest' && github.ref_name == 'master' }} name: "Trigger downstream repos" runs-on: ubuntu-latest steps: diff --git a/.github/workflows/ebrains-push.yml b/.github/workflows/ebrains-push.yml index dff1e0745d..e47392926e 100644 --- a/.github/workflows/ebrains-push.yml +++ b/.github/workflows/ebrains-push.yml @@ -10,14 +10,14 @@ jobs: if: ${{ github.repository_owner == 'nest' }} steps: - name: sycnmaster - uses: wei/git-sync@v3 + uses: wei/git-sync@55c6b63b4f21607da0e9877ca9b4d11a29fc6d83 with: source_repo: "nest/nest-simulator" source_branch: "master" destination_repo: "https://ghpusher:${{ secrets.EBRAINS_GITLAB_ACCESS_TOKEN }}@gitlab.ebrains.eu/nest/nest-simulator.git" destination_branch: "master" - name: synctags - uses: wei/git-sync@v3 + uses: wei/git-sync@55c6b63b4f21607da0e9877ca9b4d11a29fc6d83 with: source_repo: "nest/nest-simulator" source_branch: "refs/tags/*" diff --git a/.github/workflows/hifis-push.yml b/.github/workflows/hifis-push.yml new file mode 100644 index 0000000000..8b5899870b --- /dev/null +++ b/.github/workflows/hifis-push.yml @@ -0,0 +1,25 @@ +name: Mirror to Codebase Helmholtz Cloud + +on: + push: + branches: [ master ] + +jobs: + sync_to_jsc: + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'nest' }} + steps: + - name: sycnmaster + uses: wei/git-sync@55c6b63b4f21607da0e9877ca9b4d11a29fc6d83 + with: + source_repo: "nest/nest-simulator" + source_branch: "master" + destination_repo: "https://ghpusher:${{ secrets.HGF_GITLAB_TOKEN }}@codebase.helmholtz.cloud/nest/nest-simulator.git" + destination_branch: "master" + - name: synctags + uses: wei/git-sync@55c6b63b4f21607da0e9877ca9b4d11a29fc6d83 + with: + source_repo: "nest/nest-simulator" + source_branch: "refs/tags/v*" + destination_repo: "https://ghpusher:${{ secrets.HGF_GITLAB_TOKEN }}@codebase.helmholtz.cloud/nest/nest-simulator.git" + destination_branch: "refs/tags/v*" diff --git a/.github/workflows/jsc-push.yml b/.github/workflows/jsc-push.yml new file mode 100644 index 0000000000..6201876d2d --- /dev/null +++ b/.github/workflows/jsc-push.yml @@ -0,0 +1,25 @@ +name: Mirror to JSC + +on: + push: + branches: [ master ] + +jobs: + sync_to_jsc: + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'nest' }} + steps: + - name: sycnmaster + uses: wei/git-sync@55c6b63b4f21607da0e9877ca9b4d11a29fc6d83 + with: + source_repo: "nest/nest-simulator" + source_branch: "master" + destination_repo: "https://ghpusher:${{ secrets.JSC_GITLAB_TOKEN }}@gitlab.jsc.fz-juelich.de/nest/nest-simulator.git" + destination_branch: "master" + - name: synctags + uses: wei/git-sync@55c6b63b4f21607da0e9877ca9b4d11a29fc6d83 + with: + source_repo: "nest/nest-simulator" + source_branch: "refs/tags/v*" + destination_repo: "https://ghpusher:${{ secrets.JSC_GITLAB_TOKEN }}@gitlab.jsc.fz-juelich.de/nest/nest-simulator.git" + destination_branch: "refs/tags/v*" diff --git a/.github/workflows/nestbuildmatrix.yml b/.github/workflows/nestbuildmatrix.yml index a856df577c..56a79017a2 100644 --- a/.github/workflows/nestbuildmatrix.yml +++ b/.github/workflows/nestbuildmatrix.yml @@ -2,133 +2,456 @@ # detailed syntax defined in # https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions # -name: "NEST matrix jobs" -env: - CXX_FLAGS: "-pedantic -Wextra -Woverloaded-virtual -Wno-unknown-pragmas" - PYTHONPATH: ${{ github.workspace }}/build/python -on: [push, pull_request] +name: "NEST CI" +on: [push, pull_request] jobs: - static_checks: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + clang-format: + runs-on: "ubuntu-20.04" env: - xNEST_BUILD_TYPE: "STATIC_CODE_ANALYSIS" + CLANG_REQUIRE_VERSION: 13 + CLANG_FORMAT_FILE: ".clang-format" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Instal dependencies" + run: | + python -m pip install --force-reinstall clang-format==${{ env.CLANG_REQUIRE_VERSION }} + + - name: "Run clang-format..." + run: | + files=$(find . \( -iname "*.h" -o -iname "*.c" -o -iname "*.cc" -o -iname "*.cpp" \) -not -path "./thirdparty/*") + diff -u <(cat ${files}) <(clang-format ${files}) + + cppcheck: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Install Linux system dependencies" + run: | + sudo apt-get update + sudo apt-get install cppcheck + + - name: "Run cppcheck..." + run: | + cppcheck --enable=all --language=c++ --std=c++11 -i sli/ --suppressions-list=.cppcheck_suppressions ./ + + rstcheck: runs-on: "ubuntu-20.04" steps: - name: "Checkout repository content" - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - name: "Set up Python 3.x" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.9 - - name: "Restore apt cache" - uses: actions/cache@v2 - env: - cache-name: "apt-cache" + - name: "Install dependencies" + run: | + pip install rstcheck + + - name: "Run rstcheck..." + run: | + rstcheck -r doc/ + + vale: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 with: - path: | - !/var/cache/apt/archives/lock - !/var/cache/apt/archives/partial - /var/cache/apt - key: ${{ runner.os }}-system-${{ env.cache-name }}-${{ hashFiles('**/environment.yml') }} - restore-keys: | - ${{ runner.os }}-system-${{ env.cache-name }}- - ${{ runner.os }}-system- + fetch-depth: 0 - - name: "Install Linux system dependencies" + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Install dependencies" run: | - sudo apt-get update - #https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md - sudo apt-get install libltdl-dev libreadline6-dev libncurses5-dev libgsl0-dev python3-all-dev jq pycodestyle libpcre3 libpcre3-dev libboost-all-dev - sudo apt-get install openmpi-bin libopenmpi-dev libgsl0-dev tcl8.6 tcl8.6-dev tk8.6-dev - sudo apt-get install libboost-filesystem-dev libboost-regex-dev libboost-wave-dev libboost-python-dev libboost-program-options-dev libboost-test-dev - sudo apt-get install vera++ clang-format-9 - sudo ldconfig - g++ --version + sudo apt update + sudo apt install python3-docutils + wget --progress=dot:mega 'https://github.com/errata-ai/vale/releases/download/v2.26.0/vale_2.26.0_Linux_64-bit.tar.gz' + echo '956577b214ce3db8fb11483f99a183cf65673e3bd47423c6d4ebe37f085cadc7 vale_2.26.0_Linux_64-bit.tar.gz' | sha256sum -c + tar -xzf 'vale_2.26.0_Linux_64-bit.tar.gz' - - name: "Restore pip cache" + - name: "Run vale..." + run: | + ./vale -v + ./vale doc + + copyright_headers: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Install dependencies" + run: | + pip install pydocstyle + + - name: "Check copyright headers..." + run: | + python build_support/check_copyright_headers.py + + unused_names: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Check for unused nest::names..." + run: | + python build_support/check_unused_names.py + + forbidden_types: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Check for forbidden types..." + run: | + ./build_support/check_forbidden_types.sh + + lychee_IGNORED: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Install dependencies" + run: | + wget --progress=dot:mega 'https://github.com/lycheeverse/lychee/releases/download/v0.8.2/lychee-v0.8.2-x86_64-unknown-linux-gnu.tar.gz' + echo '12c27c9b6d551aea9178080d27de75ed26125b130722153399259432f723e606 lychee-v0.8.2-x86_64-unknown-linux-gnu.tar.gz' | sha256sum -c + tar -xzf 'lychee-v0.8.2-x86_64-unknown-linux-gnu.tar.gz' + + - name: "Run lychee..." + continue-on-error: true + run: "pwd; ls -l; ./lychee build_support/ doc/{*.txt,*.md,htmldoc} examples/ lib* models/ nest* pynest/ testsuite/ *.md" + # TODO: doc/auto_examples and doc/models need to be added here, but exists only after a `make html` env: - cache-name: "pip-cache" - uses: actions/cache@v2 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + pydocstyle: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Install dependencies" + run: | + pip install pydocstyle + + - name: "Run pydocstyle..." + run: | + pydocstyle pynest/ + + mypy: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Install dependencies" + run: | + pip install mypy matplotlib numpy scipy data-science-types + + - name: "Run mypy..." + run: | + mypy pynest/ + + # pytest-linux: + # runs-on: "ubuntu-20.04" + # needs: [build_linux] + # env: + # NEST_VPATH: "build" + # NEST_RESULT: "result" + + # strategy: + # fail-fast: true + # matrix: + # os: ["ubuntu-20.04"] + # cpp_compiler: ["gcc"] + + # # available use flags (all default to "OFF"): + # use: + # - "boost, optimize, warning" # formerly "minimal" + # # - "openmp, python, gsl, ltdl, boost, optimize, warning" # formerly "openmp_only" + # # - "mpi, python, gsl, ltdl, boost, optimize, warning" # formerly "mpi_only" + # # - "openmp, mpi, python, gsl, ltdl, boost, sionlib, libneurosim, optimize, warning" # formerly "full" + + # steps: + # - name: "Download binary artifacts" + # uses: actions/download-artifact@v3 + # with: + # name: "build-${{ matrix.os }}-${{ matrix.cpp_compiler }}-${{ matrix.use }}" + + # - name: "Set up Python 3.x" + # uses: actions/setup-python@v4 + # with: + # python-version: 3.9 + + # - name: "Install dependencies" + # run: | + # pip install pytest pytest-cov pytest-doctestplus + + # - name: "Run pytest..." + # run: | + # pwd + # ls -lisa + # cd "$NEST_VPATH" + # pwd + # ls -lisa + # pytest testsuite/pytests/ + + # pytest-mac: + # runs-on: "macos-latest" + # needs: [build_macos] + # steps: + # - name: "Checkout repository content" + # uses: actions/checkout@v3 + # with: + # fetch-depth: 0 + + # - name: "Set up Python 3.x" + # uses: actions/setup-python@v4 + # with: + # python-version: 3.9 + + # - name: "Install dependencies" + # run: | + # pip install pytest pytest-cov pytest-doctestplus + + # - name: "Run pytest..." + # run: | + # pytest pynest/ + + pylint: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Install dependencies" + run: | + pip install pylint + + - name: "Run pylint..." + run: | + pylint --jobs=$(nproc) pynest/ testsuite/pytests/*.py testsuite/regressiontests/*.py + + isort: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 with: + fetch-depth: 0 + + - name: "Run isort..." + uses: isort/isort-action@f14e57e1d457956c45a19c05a89cccdf087846e5 # 1.1.0 + with: + configuration: --profile=black --thirdparty="nest" --check-only --diff + + black: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Run black..." + uses: psf/black@193ee766ca496871f93621d6b58d57a6564ff81b # 23.7.0 + with: + jupyter: true + + flake8: + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: "Install dependencies" + run: | + pip install flake8 + + - name: "Run flake8..." + run: | + flake8 . + + sphinx-rtd: + # as close as possible to the Readthedocs setup (system install cmake, pip install -r doc/requirements.txt) + runs-on: "ubuntu-20.04" + needs: [pydocstyle, rstcheck, vale] + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: "Set up Python 3.x" + uses: actions/setup-python@v4 + with: + # Using 3.8 because Read the docs does not work with higher versions. + # See also: https://github.com/nest/nest-simulator/pull/2744 + python-version: 3.8 + + - name: "Install dependencies" + run: | + sudo apt update + pip install -r doc/requirements.txt + # The pandoc executable, which is required, cannot be installed via pip see: https://stackoverflow.com/a/71585691 + sudo apt install pandoc + + - name: "Test-build documentation" + run: | + mkdir -pv build + cd build + cmake -Dwith-userdoc=ON -DCMAKE_INSTALL_PREFIX=../install .. + make docs |& tee sphinx-output.log + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: "sphinx-rtd output" path: | - /opt/hostedtoolcache/Python/**/site-packages/* - $HOME/.cache/pip - key: ${{ runner.os }}-python-${{ env.cache-name }}-${{ hashFiles('**/requirements.txt') }} - restore-keys: | - ${{ runner.os }}-python-${{ env.cache-name }}- - ${{ runner.os }}-python- + build/sphinx-output.log + build/userdoc/html/ - - name: "Install Python dependencies" + sphinx-conda: + # as close as possible to the suggested user docs build in the documentation + runs-on: "ubuntu-20.04" + if: false + needs: [pydocstyle, rstcheck, vale] + steps: + - name: "Checkout repository content" + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install Conda + uses: conda-incubator/setup-miniconda@3b0f2504dd76ef23b6d31f291f4913fb60ab5ff3 # v2.2.0 + with: + auto-update-conda: true + python-version: "3.7" + + - name: Install conda dependencies + shell: bash -l {0} run: | - python -m pip install --upgrade pip setuptools - python -c "import setuptools; print('package location:', setuptools.__file__)" - python -m pip install --force-reinstall --upgrade scipy 'junitparser>=2' numpy pytest pytest-timeout pytest-xdist mpi4py cython matplotlib terminaltables pandoc - python -c "import pytest; print('package location:', pytest.__file__)" - pip list + conda info + conda env create -p conda - - name: "Find changed files" + - name: "Test-build documentation" + shell: bash -l {0} run: | - echo "CHANGED_FILES<> $GITHUB_ENV - echo "$(git diff --name-only ${{ github.event.before }}..${{ github.event.after }})" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - echo "GITHUB_ENV = $GITHUB_ENV" - cat $GITHUB_ENV + conda activate conda/ + mkdir -pv build + cd build + cmake -DCMAKE_INSTALL_PREFIX=../install .. + make html |& tee sphinx-output.log - - name: "Static Code Analysis" - run: build_support/ci_build.sh - env: - xNEST_BUILD_TYPE: 'STATIC_CODE_ANALYSIS' - CHANGED_FILES: ${{ env.CHANGED_FILES }} + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: | + build/sphinx-output.log + build/userdoc/html/ - test_linux: + build_linux: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ${{ matrix.os }} - needs: [static_checks] + needs: [clang-format, mypy, copyright_headers, unused_names, forbidden_types, pylint, isort, black, flake8] + env: + CXX_FLAGS: "-pedantic -Wextra -Woverloaded-virtual -Wno-unknown-pragmas" + NEST_VPATH: "build" + NEST_RESULT: "result" + strategy: fail-fast: false matrix: os: ["ubuntu-20.04"] - cpp_compiler: ["gcc", "clang"] - xNEST_BUILD_TYPE: ["MINIMAL", "MPI_ONLY", "OPENMP_ONLY", "FULL"] - exclude: - - xNEST_BUILD_TYPE: "MINIMAL" - cpp_compiler: "clang" - os: "ubuntu-20.04" - - xNEST_BUILD_TYPE: "MPI_ONLY" - cpp_compiler: "clang" - os: "ubuntu-20.04" - - xNEST_BUILD_TYPE: "OPENMP_ONLY" - cpp_compiler: "clang" - os: "ubuntu-20.04" - - xNEST_BUILD_TYPE: "FULL" - cpp_compiler: "clang" - os: "ubuntu-20.04" + cpp_compiler: ["gcc"] + + # available use flags (all default to "OFF"): + # openmp, mpi, python, gsl, ltdl, boost, sionlib, libneurosim, optimize, warning, userdoc, music + use: + - "boost, optimize, warning" + - "openmp, python, gsl, ltdl, boost, optimize, warning" + - "mpi, python, gsl, ltdl, boost, optimize, warning" + - "openmp, mpi, python, gsl, ltdl, boost, hdf5, sionlib, libneurosim, optimize, warning" steps: - name: "Checkout repository content" - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - - name: "Find changed files" - run: | - echo "CHANGED_FILES<>$GITHUB_ENV - echo "$(git diff --name-only ${{ github.event.before }}..${{ github.event.after }})" >>$GITHUB_ENV - echo 'EOF' >>$GITHUB_ENV - - name: "Set up Python 3.x" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.9 - name: "Restore apt cache" - uses: actions/cache@v2 + uses: actions/cache@v3 env: cache-name: "apt-cache" with: @@ -144,18 +467,48 @@ jobs: - name: "Install Linux system dependencies" run: | sudo apt-get update - #https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md - sudo apt-get install libltdl-dev libreadline6-dev libncurses5-dev libgsl0-dev python3-all-dev jq pycodestyle libpcre3 libpcre3-dev libboost-all-dev - sudo apt-get install openmpi-bin libopenmpi-dev libgsl0-dev tcl8.6 tcl8.6-dev tk8.6-dev + # https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md + sudo apt-get install ccache + sudo apt-get install libltdl-dev libreadline6-dev libncurses5-dev libgsl0-dev python3-all-dev jq libpcre3 libpcre3-dev + sudo apt-get install tcl8.6 tcl8.6-dev tk8.6-dev + # Install MPI dependencies regardless of whether we compile NEST with or without MPI, so the installation of MPI4Py works + sudo apt-get install openmpi-bin libopenmpi-dev sudo apt-get install libboost-filesystem-dev libboost-regex-dev libboost-wave-dev libboost-python-dev libboost-program-options-dev libboost-test-dev - sudo apt-get install vera++ + sudo apt-get install pkg-config sudo ldconfig - g++ --version + + - name: "Install GSL system dependencies" + if: "${{ contains(matrix.use, 'gsl') }}" + run: | + sudo apt-get install libgsl0-dev + + - name: "Install HDF5 system dependencies" + if: "${{ contains(matrix.use, 'hdf5') }}" + run: | + sudo apt-get install libhdf5-dev + + - name: "Restore ccache" + # Using CCache to re-use compiled objects from prior runs that have the same + # source (hashed), compiler (mtime+size) and compile flags. + env: + cache-name: "ccache" + uses: actions/cache@v3 + with: + path: | + $HOME/.ccache + .ccache + /home/runner/.ccache + key: ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.cpp_compiler }}-${{ matrix.NEST_BUILD_TYPE }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.cpp_compiler }}-${{ matrix.NEST_BUILD_TYPE }} + ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.cpp_compiler }} + ${{ runner.os }}-${{ env.cache-name }} + ${{ runner.os }} - name: "Restore pip cache" env: cache-name: "pip-cache" - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | /opt/hostedtoolcache/Python/**/site-packages/* @@ -169,67 +522,141 @@ jobs: run: | python -m pip install --upgrade pip setuptools python -c "import setuptools; print('package location:', setuptools.__file__)" - python -m pip install --force-reinstall --upgrade scipy 'junitparser>=2' numpy pytest pytest-timeout pytest-xdist mpi4py cython matplotlib terminaltables pandoc + python -m pip install --force-reinstall --upgrade scipy 'junitparser>=2' numpy pytest pytest-timeout pytest-xdist cython matplotlib terminaltables pandoc pandas + # Install mpi4py regardless of whether we compile NEST with or without MPI, so regressiontests/issue-1703.py will run in both cases + python -m pip install --force-reinstall --upgrade mpi4py + test \! -e "=2" # assert junitparser is correctly quoted and '>' is not interpreted as shell redirect python -c "import pytest; print('package location:', pytest.__file__)" pip list - - name: "Build NEST" + - name: "Install h5py" + if: "${{ contains(matrix.use, 'hdf5') }}" + run: | + python -m pip install --force-reinstall --upgrade --no-binary=h5py h5py + + - name: "Install MUSIC" + if: "${{ contains(matrix.use, 'music') }}" run: | - ./build_support/ci_build.sh 2>&1 | tee ci_build.sh.log - python build_support/parse_build_log.py ci_build.sh.log ${{ github.workspace }} + chmod +x build_support/install_music.sh + ./build_support/install_music.sh + + - name: "Install SIONlib" + if: "${{ contains(matrix.use, 'sionlib') }}" + run: | + chmod +x build_support/install_sionlib.sh + ./build_support/install_sionlib.sh + + - name: "Install LibNeurosim – WARNING WARNING NO PROPER PYTHON INSTALL!" + if: "${{ contains(matrix.use, 'libneurosim') }}" + run: | + chmod +x build_support/install_csa-libneurosim.sh + PYLIB_DIR="$(python3 -c "import sysconfig; print(sysconfig.get_path('include'))" | sed 's/include/lib/')" + ./build_support/install_csa-libneurosim.sh $PYLIB_DIR + + - name: "Configure NEST build" env: - xNEST_BUILD_TYPE: ${{ matrix.xNEST_BUILD_TYPE }} - CHANGED_FILES: ${{ env.CHANGED_FILES }} - #get changed files: https://github.com/marketplace/actions/get-changed-files + CMAKE_C_COMPILER_LAUNCHER: ccache + CMAKE_CXX_COMPILER_LAUNCHER: ccache + run: | + mkdir -p "$NEST_VPATH/reports" "$NEST_RESULT" + + if [ "$xNEST_BUILD_COMPILER" = "CLANG" ]; then + export CC=clang-11 + export CXX=clang++-11 + fi + export CXX_FLAGS="-pedantic -Wextra -Wno-unknown-pragmas -D_GLIBCXX_ASSERTIONS" + + cd "$NEST_VPATH" + cmake \ + -DCMAKE_INSTALL_PREFIX="$NEST_RESULT" \ + -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ + -Dwith-optimize=${{ contains(matrix.use, 'optimize') && 'ON' || 'OFF' }} \ + -Dwith-warning=${{ contains(matrix.use, 'warning') && 'ON' || 'OFF' }} \ + -Dwith-boost=${{ contains(matrix.use, 'boost') && 'ON' || 'OFF' }} \ + -Dwith-openmp=${{ contains(matrix.use, 'openmp') && 'ON' || 'OFF' }} \ + -Dwith-mpi=${{ contains(matrix.use, 'mpi') && 'ON' || 'OFF' }} \ + -Dwith-python=${{ contains(matrix.use, 'python') && 'ON' || 'OFF' }} \ + -Dwith-gsl=${{ contains(matrix.use, 'gsl') && 'ON' || 'OFF' }} \ + -Dwith-ltdl=${{ contains(matrix.use, 'ltdl') && 'ON' || 'OFF' }} \ + -Dwith-readline=${{ contains(matrix.use, 'readline') && 'ON' || 'OFF' }} \ + -Dwith-hdf5=${{ contains(matrix.use, 'hdf5') && 'ON' || 'OFF' }} \ + -Dwith-sionlib=${{ contains(matrix.use, 'sionlib') && '$HOME/.cache/sionlib.install' || 'OFF' }} \ + -Dwith-libneurosim=${{ contains(matrix.use, 'libneurosim') && '$HOME/.cache/libneurosim.install' || 'OFF' }} \ + .. + + - name: "Build NEST" + run: | + cd "$NEST_VPATH" + env + make VERBOSE=1 + + - name: "Install NEST" + run: | + cd "$NEST_VPATH" + make install + + - name: "Initialize Matplotlibrc" + run: | + # initialize matplotlib backend + mkdir -p $HOME/.matplotlib + echo "backend : svg" > $HOME/.matplotlib/matplotlibrc + + - name: "Run NEST testsuite" + run: | + pwd + cd "$NEST_VPATH" + chmod -v u+x ${NEST_RESULT}/share/nest/testsuite/do_tests.sh + make VERBOSE=1 installcheck - name: "Upload install and test results" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 if: always() with: - name: "test_linux-${{ matrix.os }}-${{ matrix.cpp_compiler }}-${{ matrix.xNEST_BUILD_TYPE }}-logs" + name: "build-logs-${{ matrix.os }}-${{ matrix.cpp_compiler }}-${{ matrix.use }}" path: | - ci_build.sh.log install_manifest.txt **.log build/reports/** - test_macos: + build_macos: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ${{ matrix.os }} - needs: [static_checks] + needs: [clang-format, mypy, copyright_headers, unused_names, forbidden_types, pylint, isort, black, flake8] + env: + CXX_FLAGS: "-pedantic -Wextra -Woverloaded-virtual -Wno-unknown-pragmas" + NEST_VPATH: "build" + NEST_RESULT: "result" + strategy: fail-fast: false matrix: os: [macos-latest] cpp_compiler: ["clang"] - xNEST_BUILD_TYPE: ["FULL_MACOS"] + + # available use flags (all default to "OFF"): + # openmp, mpi, python, gsl, ltdl, boost, hdf5, sionlib, libneurosim, optimize, warning, userdoc, music + use: + - "openmp, mpi, python, gsl, ltdl, boost, hdf5, optimize, warning" steps: - name: "Checkout repository content" - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - - name: "Find changed files" - run: | - echo "CHANGED_FILES<>$GITHUB_ENV - echo "$(git diff --name-only ${{ github.event.before }}..${{ github.event.after }})" >>$GITHUB_ENV - echo 'EOF' >>$GITHUB_ENV - - name: "Set up Python 3.x" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.9 - name: "Install MacOS system dependencies" run: | - brew install coreutils gsl open-mpi libomp automake autoconf libtool boost - brew info python + brew install coreutils gsl open-mpi libomp automake autoconf libtool boost hdf5 - name: "Restore pip cache" env: cache-name: "pip-cache" - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | /opt/hostedtoolcache/Python/**/site-packages/* @@ -243,26 +670,64 @@ jobs: run: | python -m pip install --upgrade pip setuptools python -c "import setuptools; print('package location:', setuptools.__file__)" - python -m pip install --force-reinstall --upgrade scipy "junitparser>=2" numpy pytest pytest-timeout pytest-xdist mpi4py cython matplotlib terminaltables pandoc + python -m pip install --force-reinstall --upgrade scipy 'junitparser>=2' numpy pytest pytest-timeout pytest-xdist mpi4py h5py cython matplotlib terminaltables pandoc pandas + test \! -e "=2" # assert junitparser is correctly quoted and '>' is not interpreted as shell redirect python -c "import pytest; print('package location:', pytest.__file__)" pip list + - name: "Configure NEST build" + run: | + mkdir -p "$NEST_VPATH/reports" "$NEST_RESULT" + + cd "$NEST_VPATH" + cmake \ + -DCMAKE_INSTALL_PREFIX="$NEST_RESULT" \ + -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ + -Dwith-optimize=${{ contains(matrix.use, 'optimize') && 'ON' || 'OFF' }} \ + -Dwith-warning=${{ contains(matrix.use, 'warning') && 'ON' || 'OFF' }} \ + -Dwith-boost=${{ contains(matrix.use, 'boost') && 'ON' || 'OFF' }} \ + -Dwith-openmp=${{ contains(matrix.use, 'openmp') && 'ON' || 'OFF' }} \ + ${{ contains(matrix.use, 'openmp') && '-DOpenMP_ROOT=$(brew --prefix libomp)' }} \ + -Dwith-mpi=${{ contains(matrix.use, 'mpi') && 'ON' || 'OFF' }} \ + -Dwith-python=${{ contains(matrix.use, 'python') && 'ON' || 'OFF' }} \ + -Dwith-gsl=${{ contains(matrix.use, 'gsl') && 'ON' || 'OFF' }} \ + -Dwith-ltdl=${{ contains(matrix.use, 'ltdl') && 'ON' || 'OFF' }} \ + -Dwith-readline=${{ contains(matrix.use, 'readline') && 'ON' || 'OFF' }} \ + -Dwith-hdf5=${{ contains(matrix.use, 'hdf5') && 'ON' || 'OFF' }} \ + -Dwith-sionlib=${{ contains(matrix.use, 'sionlib') && '$HOME/.cache/sionlib.install' || 'OFF' }} \ + -Dwith-libneurosim=${{ contains(matrix.use, 'libneurosim') && '$HOME/.cache/libneurosim.install' || 'OFF' }} \ + .. + - name: "Build NEST" run: | - ./build_support/ci_build.sh 2>&1 | tee ci_build.sh.log - python build_support/parse_build_log.py ci_build.sh.log ${{ github.workspace }} - env: - xNEST_BUILD_TYPE: ${{ matrix.xNEST_BUILD_TYPE }} - CHANGED_FILES: ${{ env.CHANGED_FILES }} - #get changed files: https://github.com/marketplace/actions/get-changed-files + cd "$NEST_VPATH" + env + make VERBOSE=1 + + - name: "Install NEST" + run: | + cd "$NEST_VPATH" + make install + + - name: "Initialize Matplotlibrc" + run: | + # initialize matplotlib backend + mkdir -p $HOME/.matplotlib + echo "backend : svg" > $HOME/.matplotlib/matplotlibrc + + - name: "Run NEST testsuite" + run: | + pwd + cd "$NEST_VPATH" + chmod -v u+x ${NEST_RESULT}/share/nest/testsuite/do_tests.sh + make VERBOSE=1 installcheck - name: "Upload install and test results" - uses: actions/upload-artifact@v2 - if: always() + uses: actions/upload-artifact@v3 + if: ${{ always() }} with: - name: "test_macos-${{ matrix.os }}-${{ matrix.cpp_compiler }}-${{ matrix.xNEST_BUILD_TYPE }}-logs" + name: "${{ matrix.NEST_BUILD_TYPE }}-build-logs-${{ matrix.os }}-${{ matrix.cpp_compiler }}" path: | - ci_build.sh.log install_manifest.txt **.log build/reports/** diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 39a69f78d4..9757187ebc 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -4,6 +4,9 @@ on: schedule: - cron: '31 8 * * *' +permissions: + contents: read + jobs: stale: diff --git a/.gitignore b/.gitignore index d6aa1cd756..c0009a7b70 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ __pycache__/ build/ +conda/ _build/ install/ reports/ @@ -14,10 +15,6 @@ pynest/pynestkernel.cxx *.o *.pyc -Makefile - -build/ -install/ examples/example_logs/ /libnestutil/config.h @@ -35,8 +32,6 @@ cmake_install.cmake CMakeDoxygenDefaults.cmake # generated files -doc/fulldoc.conf -doc/normaldoc.conf bin/nest-config bin/nest_vars.sh libnestutil/config.h diff --git a/.mypy.ini b/.mypy.ini new file mode 100644 index 0000000000..b04439f171 --- /dev/null +++ b/.mypy.ini @@ -0,0 +1,10 @@ +# For configuation details see +# + +[mypy] +exclude = .git/, .snakemake/, .pytest_cache/, sync-test-env/, conda/, env/ +explicit_package_bases = True + +# Check explanations of error codes +# https://mypy.readthedocs.io/en/stable/error_code_list.html +disable_error_code = attr-defined, index, import, call-arg, misc, dict-item, arg-type, operator, call-overload, assignment, list-item, var-annotated, valid-type diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000..dccd50487f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,22 @@ +repos: + - repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + args: ["--profile", "black", "--thirdparty", "nest", "--diff"] + - repo: https://github.com/psf/black + rev: 23.7.0 + hooks: + - id: black + language_version: python3 + + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: v13.0.0 + hooks: + - id: clang-format + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000000..f346b06044 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,14 @@ +[pylint] + +# suggested by pylint docs for joint usage with other tools +# http://pylint.pycqa.org/en/latest/faq.html?highlight=pylintrc#i-am-using-another-popular-linter-alongside-pylint-which-messages-should-i-disable-to-avoid-duplicates + +options = unneeded-not, line-too-long, unnecessary-semicolon, trailing-whitespace, missing-final-newline, bad-indentation, multiple-statements, bare-except +ignore = CVS .git conda env __pycache__ .pytest_cache .mypy_cache + +disable = no-member, redefined-outer-name, invalid-name, consider-using-f-string, wrong-import-order, missing-function-docstring, missing-method-docstring, missing-class-docstring, attribute-defined-outside-init, no-else-return, cell-var-from-loop, import-error, pointless-string-statement, unused-import, redefined-builtin, superfluous-parens, unused-variable, too-many-locals, consider-using-from-import, consider-using-enumerate, no-name-in-module, too-many-arguments, too-many-instance-attributes, import-outside-toplevel, too-few-public-methods, cyclic-import, missing-module-docstring, unidiomatic-typecheck, dangerous-default-value, unused-argument, use-dict-literal, exec-used, no-self-use, too-many-statements, ungrouped-imports, consider-using-sys-exit, too-many-statements, redundant-u-string-prefix, protected-access, consider-using-dict-comprehension, no-else-raise, too-many-nested-blocks, use-a-generator, reimported, undefined-variable, too-many-branches, raise-missing-from, trailing-comma-tuple, unspecified-encoding, consider-using-with, f-string-without-interpolation, broad-except, unnecessary-pass, global-statement, too-many-lines, consider-merging-isinstance, redefined-argument-from-local, global-variable-undefined, use-implicit-booleaness-not-len, inconsistent-return-statements, consider-using-in, inconsistent-return-statements, keyword-arg-before-vararg, consider-using-dict-items, import-self, fixme, c-extension-no-member, too-many-public-methods, consider-iterating-dictionary, consider-using-max-builtin, super-with-arguments, expression-not-assigned, unnecessary-comprehension, no-self-argument, chained-comparison, undefined-loop-variable, empty-docstring, use-maxsplit-arg, pointless-statement, wrong-import-position, redundant-unittest-assert, eval-used, not-callable, invalid-unary-operand-type, consider-using-generator, R0801, unnecessary-dunder-call, logging-fstring-interpolation, consider-using-get, useless-object-inheritance, unrecognized-option, unknown-option-value, useless-option-value + +const-naming-style = snake_case +method-naming-style = PascalCase + +max-line-length = 120 diff --git a/.readthedocs.yml b/.readthedocs.yml index 8dc98cd523..dd5b39156b 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,13 +1,14 @@ version: 2 +build: + os: ubuntu-22.04 + tools: + python: "3.8" + sphinx: builder: html configuration: doc/htmldoc/conf.py python: - version: 3.8 install: - requirements: doc/requirements.txt - -build: - image: latest diff --git a/.rstcheck.cfg b/.rstcheck.cfg new file mode 100644 index 0000000000..540837ea07 --- /dev/null +++ b/.rstcheck.cfg @@ -0,0 +1,9 @@ +[rstcheck] +# for details about the rstcheck configuration see +# + +# ignore_directives=one,two,three +# ignore_roles=src,RFC +ignore_messages=(Hyperlink target "[^"]+" is not referenced\.$|No role entry for|No directive entry for|v3\.3/index.rst:46.*Block quote ends without a blank line|Unknown directive type|Duplicate explicit target name|No such file|Error in|Figure caption must be a paragraph|Duplicate implicit target name|expected.*before|was not declared in this scope|has initializer but incomplete type|has not been declared|Could not find line for literal|error|ERROR|Enumerated list start value not ordinal|bash|None|cpp|Enumerated list ends without a blank line|ISO C does not allow|) +# report=warning +ignore_roles=grid,ref,doc,py:meth,py:class,py:func,toctree,math:numref,download,numref,eq,green,hxt_ref,darkgreen diff --git a/.vale.ini b/.vale.ini new file mode 100644 index 0000000000..2c5daec528 --- /dev/null +++ b/.vale.ini @@ -0,0 +1,28 @@ +StylesPath = .github/styles +MinAlertLevel = suggestion + +Vocab = nest-vocab + +[*.rst] +BasedOnStyles = nest-styles + +nest-styles.Abbreviations = No +nest-styles.Ampersands = No +nest-styles.Annotations = No +nest-styles.Capitalization = No +nest-styles.CommasPerSentence = No +nest-styles.ComplexWords = No +nest-styles.ListCapitalize = No +nest-styles.Negative = No +nest-styles.NotEasy = No +nest-styles.OxfordComma = No +nest-styles.ParagraphLength = No +nest-styles.PassiveVoice = No +nest-styles.Pronouns = No +nest-styles.SentenceLength = No +nest-styles.SingleSpace = No +nest-styles.Slash = No +nest-styles.Spelling = No +nest-styles.Terms = No +nest-styles.Units = No +nest-styles.Wordiness = No diff --git a/ACKNOWLEDGMENTS.md b/ACKNOWLEDGMENTS.md index e2442aa632..c5ac20ea54 100644 --- a/ACKNOWLEDGMENTS.md +++ b/ACKNOWLEDGMENTS.md @@ -1,10 +1,10 @@ **Acknowledgments** -NEST development has been supported by many organisations, programs, and -individuals since 1993. The following list of support received is therefore +NEST development has been supported by many organisations, programs, and +individuals since 1993. The following list of support received is therefore necessarily incomplete. -This project has received funding from the European Union’s Horizon 2020 +This project has received funding from the European Union's Horizon 2020 Framework Programme for Research and Innovation under Specific Grant Agreement: - No. 945539 (Human Brain Project SGA3), @@ -13,7 +13,7 @@ Framework Programme for Research and Innovation under Specific Grant Agreement: - No. 754304 (DEEP-EST), and - No. 800858 (ICEI). -The NEST developers gratefully acknowledge the support and funding received +The NEST developers gratefully acknowledge the support and funding received from: - Jülich Aachen Research Alliance (JARA), diff --git a/CMakeLists.txt b/CMakeLists.txt index 732426eb8d..a924f3ebff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,9 +17,7 @@ # You should have received a copy of the GNU General Public License # along with NEST. If not, see -# Version range from minimum required (3.12 for macOS OpenMP) -# up to newest version tested, see https://cliutils.gitlab.io/modern-cmake/chapters/basics.html -cmake_minimum_required( VERSION 3.12...3.16 ) +cmake_minimum_required( VERSION 3.19 ) # add cmake modules: for all `include(...)` first look here list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) @@ -27,9 +25,11 @@ list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) project( nest CXX C ) set( NEST_USER_EMAIL "users@nest-simulator.org" ) +include( ColorMessages ) + # check if the given CMAKE_INSTALL_PREFIX is not empty if("${CMAKE_INSTALL_PREFIX}" STREQUAL "") - message(FATAL_ERROR "CMAKE_INSTALL_PREFIX cannot be an empty string") + printError("CMAKE_INSTALL_PREFIX cannot be an empty string") endif() # handle relative installation prefixes @@ -37,7 +37,7 @@ if( NOT IS_ABSOLUTE ${CMAKE_INSTALL_PREFIX}) # convert relative path to absolute path get_filename_component(absPath ${CMAKE_INSTALL_PREFIX} ABSOLUTE BASE_DIR ${CMAKE_BINARY_DIR}) set(CMAKE_INSTALL_PREFIX ${absPath}) - message(STATUS "Relative CMAKE_INSTALL_PREFIX has been set to absolute path ${CMAKE_INSTALL_PREFIX}") + printInfo("Relative CMAKE_INSTALL_PREFIX has been converted to absolute path ${CMAKE_INSTALL_PREFIX}") endif() ################################################################################ @@ -49,7 +49,7 @@ set( with-python ON CACHE STRING "Build PyNEST [default=ON]." ) option( cythonize-pynest "Use Cython to cythonize pynestkernel.pyx [default=ON]. If OFF, PyNEST has to be build from a pre-cythonized pynestkernel.pyx." ON ) # select parallelization scheme -set( with-mpi OFF CACHE STRING "Build with MPI parallelization [default=OFF]. Optionally give directory with MPI installation." ) +set( with-mpi OFF CACHE STRING "Build with MPI parallelization [default=OFF]." ) set( with-openmp ON CACHE BOOL "Build with OpenMP multi-threading [default=ON]. Optionally set OMP compiler flags." ) # external libraries @@ -57,11 +57,14 @@ set( with-libneurosim OFF CACHE STRING "Build with libneurosim [default=OFF]. Op set( with-music OFF CACHE STRING "Build with MUSIC [default=OFF]. Optionally give the directory where MUSIC is installed." ) set( with-sionlib OFF CACHE STRING "Build with SIONlib [default=OFF]. Optionally give the directory where sionlib is installed." ) set( with-boost ON CACHE STRING "Build with Boost [default=ON]. To set a specific Boost installation, give the install path." ) +set( with-hdf5 OFF CACHE STRING "Find a HDF5 library. To set a specific HDF5 installation, set install path. [default=ON]" ) set( with-readline ON CACHE STRING "Build with GNU Readline library [default=ON]. To set a specific library, give the install path." ) set( with-ltdl ON CACHE STRING "Build with ltdl library [default=ON]. To set a specific ltdl, give the install path. NEST uses ltdl for dynamic loading of external user modules." ) set( with-gsl ON CACHE STRING "Build with the GSL library [default=ON]. To set a specific library, give the install path." ) # NEST properties +set( with-modelset "full" CACHE STRING "The modelset to include. Sample configurations are in the modelsets directory. This option is mutually exclusive with -Dwith-models. [default=full]." ) +set( with-models OFF CACHE STRING "The models to include as a semicolon-separated list of model headers (without the .h extension). This option is mutually exclusive with -Dwith-modelset. [default=OFF]." ) set( tics_per_ms "1000.0" CACHE STRING "Specify elementary unit of time [default=1000 tics per ms]." ) set( tics_per_step "100" CACHE STRING "Specify resolution [default=100 tics per step]." ) set( external-modules OFF CACHE STRING "External NEST modules to be linked in, separated by ';', [default=OFF]." ) @@ -70,7 +73,7 @@ set( target-bits-split "standard" CACHE STRING "Split of the 64-bit target neuro # generic build configuration option( static-libraries "Build static executable and libraries [default=OFF]" OFF ) -set( with-optimize ON CACHE STRING "Enable user defined optimizations [default=OFF (uses '-O2')]. When ON, '-O3' is used. Separate multiple flags by ';'." ) +set( with-optimize ON CACHE STRING "Enable user defined optimizations [default=ON (uses '-O2')]. When OFF, no '-O' flag is passed to the compiler. Explicit compiler flags can be given; separate multiple flags by ';'." ) set( with-warning ON CACHE STRING "Enable user defined warnings [default=ON (uses '-Wall')]. Separate multiple flags by ';'." ) set( with-debug OFF CACHE STRING "Enable user defined debug flags [default=OFF]. When ON, '-g' is used. Separate multiple flags by ';'." ) set( with-cpp-std "c++11" CACHE STRING "C++ standard to use for compilation [default='c++11']." ) @@ -78,7 +81,12 @@ set( with-intel-compiler-flags OFF CACHE STRING "User defined flags for the Inte set( with-libraries OFF CACHE STRING "Link additional libraries [default=OFF]. Give full path. Separate multiple libraries by ';'." ) set( with-includes OFF CACHE STRING "Add additional include paths [default=OFF]. Give full path without '-I'. Separate multiple include paths by ';'." ) set( with-defines OFF CACHE STRING "Additional defines, e.g. '-DXYZ=1' [default=OFF]. Separate multiple defines by ';'." ) -set( with-version-suffix "" CACHE STRING "Set a user defined version suffix [default='']." ) + +# documentation build configuration +set( with-userdoc OFF CACHE STRING "Build user documentation [default=OFF]") +set( with-devdoc OFF CACHE STRING "Build developer documentation [default=OFF]") + +set( with-full-logging OFF CACHE STRING "Write debug output to 'dump__.log' file [default=OFF]") ################################################################################ ################## Project Directory variables ################## @@ -94,13 +102,6 @@ set( CMAKE_INSTALL_DATADIR "share/${PROJECT_NAME}" CACHE STRING "Relative direct ################## Find utility programs ################## ################################################################################ -# needed for pynest test suite -if ( ${with-python} STREQUAL "ON" ) - find_program( NOSETESTS NAMES nosetests ) -endif () - -# needed for target doc and fulldoc -find_package( Doxygen ) find_program( SED NAMES sed gsed ) ################################################################################ @@ -129,8 +130,6 @@ get_target_triple( NEST_TARGET_TRIPLE NEST_TARGET_ARCH NEST_TARGET_VENDOR NEST_T nest_process_with_python() include( GNUInstallDirs ) nest_post_process_with_python() -nest_process_with_optimize() -nest_process_with_debug() nest_process_with_std() nest_process_with_intel_compiler_flags() nest_process_with_warning() @@ -152,16 +151,25 @@ nest_process_with_music() nest_process_with_sionlib() nest_process_with_mpi4py() nest_process_with_boost() +nest_process_with_hdf5() nest_process_target_bits_split() -nest_process_version_suffix() +nest_process_userdoc() +nest_process_devdoc() +nest_process_full_logging() + +nest_process_models() + +# These two function calls must come last, as to prevent unwanted interactions of the newly set flags +# with detection/compilation operations carried out in earlier functions. The optimize/debug flags set +# using these functions should only apply to the compilation of NEST, not to that of test programs +# generated by CMake when it tries to detect compiler options or such. +nest_process_with_optimize() +nest_process_with_debug() nest_get_color_flags() set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NEST_C_COLOR_FLAGS}" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NEST_CXX_COLOR_FLAGS}" ) -# requires HAVE_LIBNEUROSIM -nest_default_modules() - nest_write_static_module_header( "${PROJECT_BINARY_DIR}/nest/static_modules.h" ) # check additionals @@ -178,17 +186,10 @@ nest_check_have_std_nan() nest_check_have_std_isnan() nest_check_random123() -################################################################################ -################## Create version string ################## -################################################################################ - include( NestVersionInfo ) get_version_info() -message("-- NEST version: ${NEST_VERSION_STRING}") +printInfo("Done configuring NEST version: ${NEST_VERSION}") -################################################################################ -################## Enable Testing Targets ################## -################################################################################ enable_testing() set( TEST_OPTS "" ) @@ -204,7 +205,6 @@ add_custom_target( installcheck COMMAND ${CMAKE_COMMAND} -E env ${CMAKE_INSTALL_FULL_DATADIR}/testsuite/do_tests.sh --prefix=${CMAKE_INSTALL_PREFIX} - --report-dir="${PROJECT_BINARY_DIR}/reports" ${TEST_OPTS} WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" COMMENT "Executing NEST's testsuite..." @@ -260,7 +260,7 @@ elseif ( ${CMAKE_BUILD_TYPE} STREQUAL "MinSizeRel" ) set( ALL_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_MINSIZEREL}" ) set( ALL_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MINSIZEREL}" ) else () - message( FATAL_ERROR "Unknown build type: '${CMAKE_BUILD_TYPE}'" ) + printError( "Unknown build type: '${CMAKE_BUILD_TYPE}'" ) endif () if ( with-defines ) foreach ( def ${with-defines} ) @@ -274,12 +274,10 @@ foreach ( def ${SIONLIB_DEFINES} ) set( ALL_CXXFLAGS "${ALL_CXXFLAGS} ${def}" ) endforeach () -# all libraries -set( ALL_LIBS - "-lnestutil" +# libraries required to link extension modules +set( MODULE_LINK_LIBS "-lnest" "-lsli" - "-lnestkernel" "${OpenMP_CXX_FLAGS}" "${LTDL_LIBRARIES}" "${READLINE_LIBRARIES}" @@ -291,9 +289,15 @@ set( ALL_LIBS "${BOOST_LIBRARIES}" ) if ( with-libraries ) - set( ALL_LIBS "${ALL_LIBS};${with-libraries}" ) + set( MODULE_LINK_LIBS "${MODULE_LINK_LIBS};${with-libraries}" ) endif () -string( REPLACE ";" " " ALL_LIBS "${ALL_LIBS}" ) +string( REPLACE ";" " " MODULE_LINK_LIBS "${MODULE_LINK_LIBS}" ) + +# libraries requied to link NEST +set( ALL_LIBS + "-lnest" + ${MODULE_LINK_LIBS} ) + # all includes set( ALL_INCLUDES_tmp @@ -337,11 +341,6 @@ configure_file( "${PROJECT_BINARY_DIR}/bin/nest_vars.sh" @ONLY ) -configure_file( - "${PROJECT_SOURCE_DIR}/doc/normaldoc.conf.in" - "${PROJECT_BINARY_DIR}/doc/normaldoc.conf" @ONLY -) - configure_file( "${PROJECT_SOURCE_DIR}/doc/fulldoc.conf.in" "${PROJECT_BINARY_DIR}/doc/fulldoc.conf" @ONLY @@ -361,8 +360,4 @@ install( FILES LICENSE README.md DESTINATION ${CMAKE_INSTALL_DOCDIR} ) -add_custom_target( install-nodoc - COMMAND make NEST_INSTALL_NODOC=true install -) - nest_print_config_summary() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 96d4af0476..8bc4be46d6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,72 +1,18 @@ -# Contributing to NEST +# Contribute to NEST -The NEST simulator is a scientific tool and as such it is never finished and constantly changing to meet the needs of novel neuroscientific endeavors. Here you find the most important information on how you can contribute to NEST. This document is an excerpt from our [Contributing to NEST documentation](https://nest-simulator.readthedocs.io/en/latest/contribute/index.html), which provides more detailed information. +The NEST Simulator is a scientific tool and as such it is never finished and constantly changing to meet the needs of novel neuroscientific endeavors. Here you find the most important information on how you can contribute to NEST. This document is an excerpt from our [Contributing to NEST documentation](https://nest-simulator.readthedocs.io/en/latest/contribute/index.html), which provides more detailed information. -## Getting started * Make sure you have a [GitHub account](https://github.com/signup/free) -* The development workflow is based purely on pull requests. This [article](https://nest-simulator.readthedocs.io/en/latest/contribute/development_workflow.html) gives information on how to work with git and GitHub if you are new to it. -## Reporting bugs and issues -If you come across a bug in NEST, please [file an issue on the GitHub issue tracker](https://github.com/nest/nest-simulator/issues/new). Please use the template below to provide information: +Visit the [contributing to NEST docs](https://nest-simulator.readthedocs.io/en/latest/developer_space/index.html) for details +on -``` -Description of problem: +* development workflow +* reporing bugs and issues +* making changes to the code or documentation +* code review policies +and much more! -Version-Release or Git commit: - - -How reproducible: (Always/Sometimes/Unsure) - - -Steps to Reproduce: -1. -2. -3. - -Actual results: - - -Expected results: - - -Additional info: -``` - -You can also attach files to issues. Data dumps or example code snippets that help to reproduce the issue is most welcome. This information enables developers to debug and fix issues quicker. - -## Making Changes - -* Create a topic branch from NEST master in your fork. Please avoid working directly on the `master` branch. See [issue 31](https://github.com/nest/nest-simulator/issues/31) for more information. -* Make commits of logical units. -* Make sure NEST compiles and has no new warnings. -* Make sure all tests pass (`make installcheck`). -* Make sure your code conforms to our [coding guidelines](https://nest-simulator.readthedocs.io/en/latest/contribute/coding_guidelines_cpp.html) (`./build_support/check_code_style.sh`) - -## Code Review - -We review each pull request according to our [code review guidelines](https://nest-simulator.readthedocs.io/en/latest/contribute/code_review_guidelines.html): - -* In general, the rule is that each pull request needs an OK from the CI platform and at least two reviewers to be merged. -* For changes labeled "not code" or "minor" (e.g. changes in documentation, fixes for typos, etc.), the release manager can waive the need for code review and just accept the OK from Travis in order to merge the request. -* New features like SLI or PyNEST functions, neuron or synapse models need to be accompanied by one or more tests written either in SLI or Python. New features for the NEST kernel need a test written in SLI. -* Each change to the code has to be reflected also in the corresponding examples and documentation. -* All source code has to conform to the Coding Guidelines for [C++](https://nest-simulator.readthedocs.io/en/latest/contribute/coding_guidelines_cpp.html) and [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python in order to pass the continuous integration system checks. -* All commits should be coherent and contain only changes that belong together. - -## Submitting Changes - -* Sign the [Contributor License Agreement](https://raw.githubusercontent.com/nest/nest-simulator/master/doc/htmldoc/contribute/NEST_Contributor_Agreement.pdf). -* Push your changes to a topic branch in your fork of the repository. -* Submit a pull request to the [NEST repository](https://github.com/nest/nest-simulator). -* If your pull request affects documented issues, [mention](https://github.com/blog/957-introducing-issue-mentions) them in the description. If it is solving an issue, you can [state this explicitly](https://help.github.com/articles/closing-issues-via-commit-messages/). -* The core team looks at pull requests on a regular basis and posts feedback. -* After feedback has been given we expect responses within two weeks. After two weeks we may close the pull request if it isn't showing any activity. - -# Additional Resources - -* Documentation on [Contributing to NEST](https://nest-simulator.readthedocs.io/en/latest/contribute/index.html). -* The [NEST Simulator homepage](https://www.nest-simulator.org/). -* The [NEST Initiative homepage](https://www.nest-initiative.org/). diff --git a/README.md b/README.md index c8926c8da8..02d2a2fbc1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Documentation](https://img.shields.io/readthedocs/nest-simulator?logo=readthedocs&logo=Read%20the%20Docs&label=Documentation)](https://nest-simulator.org/documentation) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2218/badge)](https://bestpractices.coreinfrastructure.org/projects/2218) [![License](http://img.shields.io/:license-GPLv2+-green.svg)](http://www.gnu.org/licenses/gpl-2.0.html) -[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5886894.svg)](https://doi.org/10.5281/zenodo.5886894) +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8069926.svg)](https://doi.org/10.5281/zenodo.8069926) [![Latest release](https://img.shields.io/github/release/nest/nest-simulator.svg?color=brightgreen&label=latest%20release)](https://github.com/nest/nest-simulator/releases) [![GitHub contributors](https://img.shields.io/github/contributors/nest/nest-simulator?logo=github)](https://github.com/nest/nest-simulator) @@ -13,8 +13,8 @@ [![Fedora package](https://img.shields.io/fedora/v/nest?logo=fedora)](https://src.fedoraproject.org/rpms/nest) [![Conda version](https://img.shields.io/conda/vn/conda-forge/nest-simulator.svg?logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/nest-simulator) [![Homebrew version](https://img.shields.io/homebrew/v/nest.svg?logo=apple)](https://formulae.brew.sh/formula/nest) -[![Docker Image Version](https://img.shields.io/docker/v/nestsim/nest?label=docker&sort=semver&logo=docker&logoColor=white)](https://hub.docker.com/r/nestsim/nest) -[![Virtual applicance](https://img.shields.io/badge/VM-v3.1-blue?logo=CodeSandbox)](https://nest-simulator.readthedocs.io/en/latest/download.html#download-livemedia) +[![Docker Image Version](https://img.shields.io/docker/v/nest/nest-simulator?color=blue&label=docker&logo=docker&logoColor=white&sort=semver)](https://hub.docker.com/r/nest/nest-simulator) +[![Virtual applicance](https://img.shields.io/badge/VM-v3.4-blue?logo=CodeSandbox)](https://nest-simulator.readthedocs.io/en/latest/installation/livemedia.html#live-media) [![YouTube Video Views](https://img.shields.io/youtube/views/K7KXmIv6ROY?style=social)](https://www.youtube.com/results?search_query=nest-simulator+neurons) [![Twitter Follow](https://img.shields.io/twitter/follow/nestsimulator?style=social)](https://twitter.com/nestsimulator) diff --git a/SECURITY.md b/SECURITY.md index 7ae74f589d..ba0cfbe6a6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,7 +1,7 @@ # Security Policy -The NEST simulator is research oriented software and as such is expected to +The NEST Simulator is research oriented software and as such is expected to run mainly in well protected environments. In case it is found that this software can be used to violate security mechanisms, developers will try to provide patches that mitigate the risk of this misuse. diff --git a/VERSION b/VERSION new file mode 100644 index 0000000000..7a5f20296a --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +3.6.0-post0.dev0 diff --git a/bin/nest-config.in b/bin/nest-config.in index 6b2ee7b3f0..a54ae03521 100755 --- a/bin/nest-config.in +++ b/bin/nest-config.in @@ -12,10 +12,12 @@ Known values for OPTION are: --prefix NEST install prefix for architecture-independent files --exec-prefix NEST install prefix for architecture-dependent files - --libs print library linking information + --libs print library linking information for extension modules --cflags print pre-processor and compiler flags --includes print includes --compiler print the compiler used to compile NEST + --compiler-name Print the compiler name used to compile NEST + --compiler-version Print the compiler version used to compile NEST --python-executable print full path to Python interpreter used --python-version print Python version string for interpreter --static-libraries print "ON" if configured for static libraries, "OFF" otherwise @@ -54,7 +56,7 @@ while test $# -gt 0; do echo $exec_prefix ;; --version) - echo "@NEST_VERSION_STRING@" + echo "@NEST_VERSION@" ;; --help) usage 0 @@ -66,11 +68,17 @@ while test $# -gt 0; do echo "@ALL_CXXFLAGS@" ;; --libs) - echo "-L$prefix/@CMAKE_INSTALL_LIBDIR@/nest @ALL_LIBS@" + echo "-L$prefix/@CMAKE_INSTALL_LIBDIR@/nest @MODULE_LINK_LIBS@" ;; --compiler) echo "@CMAKE_CXX_COMPILER@" ;; + --compiler-name) + echo "@CMAKE_CXX_COMPILER_ID@" + ;; + --compiler-version) + echo "@CMAKE_CXX_COMPILER_VERSION@" + ;; --python-executable) echo "@Python_EXECUTABLE@" ;; diff --git a/bin/nest-server b/bin/nest-server index dd0379d8f5..4c226a37c7 100755 --- a/bin/nest-server +++ b/bin/nest-server @@ -2,7 +2,8 @@ DAEMON="${NEST_SERVER_DAEMON:-0}" HOST="${NEST_SERVER_HOST:-127.0.0.1}" -PORT="${NEST_SERVER_PORT:-5000}" +LOGFILE="${NEST_SERVER_LOGFILE:-/tmp/nest-server.log}" +PORT="${NEST_SERVER_PORT:-52425}" STDOUT="${NEST_SERVER_STDOUT:-0}" usage() { @@ -11,7 +12,7 @@ usage() { echo "Usage: nest-server log|status|start|stop|restart [-d] [-h ] [-o] [-p ]" echo "" echo "Commands:" - echo " log display the server log stored in /tmp/nest-server.log" + echo " log display the server output log" echo " status display the status of all server instances" echo " start start a server instance on :" echo " stop stop a server instance on :" @@ -20,13 +21,13 @@ usage() { echo "Options:" echo " -d daemonize the server process" echo " -h use hostname/IP address for the server [default: 127.0.0.1]" - echo " -o print all outputs to the console" - echo " -p use port for opening the socket [default: 5000]" + echo " -o print NEST outputs to the console" + echo " -p use port for opening the socket [default: 52425]" } log() { - # Follow logs in /tmp/nest-server.log. - tail -f /tmp/nest-server.log + # Follow info logs. + tail -f "${LOGFILE}" } pid() { @@ -40,7 +41,10 @@ set-gunicorn_opts() { if [ "${DAEMON}" -eq 1 ]; then GUNICORN_OPTS="${GUNICORN_OPTS} --daemon" fi - GUNICORN_OPTS="${GUNICORN_OPTS} --log-file /tmp/nest-server.log" + if [ "${STDOUT}" -eq 0 ]; then + GUNICORN_OPTS="${GUNICORN_OPTS} --capture-output" + fi + GUNICORN_OPTS="${GUNICORN_OPTS} --log-file ${LOGFILE}" } start() { @@ -48,26 +52,24 @@ start() { if pid > /dev/null; then echo "NEST Server is already running at http://${HOST}:${PORT}." else - set-gunicorn_opts - gunicorn nest.server:app ${GUNICORN_OPTS} - - if [ "${STDOUT}" -eq 0 ]; then - echo "NEST Server is running at http://${HOST}:${PORT}." - if [ "${DAEMON}" -eq 0 ]; then - read -p "Press any key to stop... " - stop + echo "NEST Server is now running at http://${HOST}:${PORT}." + if [ "${DAEMON}" -eq 0 ]; then + echo "Use CTRL + C to stop this service." + if [ "${STDOUT}" -eq 1 ]; then + echo "-----------------------------------------------------" fi fi + + set-gunicorn_opts + exec gunicorn nest.server:app ${GUNICORN_OPTS} fi } status() { # List all processes of NEST Server. PS_AUX="$(ps aux | grep "[g]unicorn nest.server.app")" - - PS_CMD="$(echo ${PS_AUX} | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }')" - printf "HTTP-SOCKET\t\tUID\n" - echo "${PS_CMD}" | awk '{ for(i=1;i<=NF;i++) {if ( i == 5 || i == 7 ) printf $i"\t\t"}; printf "\n" }' + printf "USER\t\t\tPID\t\tHTTP-SOCKET\n" + echo "${PS_AUX}" | head -n 1 | awk '{ for(i=1;i<=NF;i++) {if ( i == 1 || i == 2 || i == 15 ) printf $i"\t\t"}; printf "\n" }' } stop() { diff --git a/bin/nest-server-mpi b/bin/nest-server-mpi index aabe33fca3..900d15e20b 100755 --- a/bin/nest-server-mpi +++ b/bin/nest-server-mpi @@ -9,56 +9,58 @@ Usage: Options: -h --help display usage information and exit --host HOST use hostname/IP address HOST for server [default: 127.0.0.1] - --port PORT use port PORT for opening the socket [default: 5000] + --port PORT use port PORT for opening the socket [default: 52425] """ from docopt import docopt from mpi4py import MPI -if __name__ == '__main__': +if __name__ == "__main__": opt = docopt(__doc__) -import time +import os import sys +import time import nest import nest.server +HOST = os.getenv("NEST_SERVER_HOST", "127.0.0.1") +PORT = os.getenv("NEST_SERVER_PORT", "52425") comm = MPI.COMM_WORLD.Clone() rank = comm.Get_rank() def log(call_name, msg): - msg = f'==> WORKER {rank}/{time.time():.7f} ({call_name}): {msg}' + msg = f"==> WORKER {rank}/{time.time():.7f} ({call_name}): {msg}" print(msg, flush=True) if rank == 0: print("==> Starting NEST Server Master on rank 0", flush=True) nest.server.set_mpi_comm(comm) - nest.server.run_mpi_app(host=opt['--host'], port=opt['--port']) + nest.server.run_mpi_app(host=opt.get("--host", HOST), port=opt.get("--port", PORT)) else: print(f"==> Starting NEST Server Worker on rank {rank}", flush=True) nest.server.set_mpi_comm(comm) while True: - - log('spinwait', 'waiting for call bcast') + log("spinwait", "waiting for call bcast") call_name = comm.bcast(None, root=0) - log(call_name, 'received call bcast, waiting for data bcast') + log(call_name, "received call bcast, waiting for data bcast") data = comm.bcast(None, root=0) - log(call_name, f'received data bcast, data={data}') + log(call_name, f"received data bcast, data={data}") args, kwargs = data - if call_name == 'exec': + if call_name == "exec": response = nest.server.do_exec(args, kwargs) else: call, args, kwargs = nest.server.nestify(call_name, args, kwargs) - log(call_name, f'local call, args={args}, kwargs={kwargs}') + log(call_name, f"local call, args={args}, kwargs={kwargs}") # The following exception handler is useful if an error # occurs simulataneously on all processes. If only a @@ -70,5 +72,5 @@ else: except Exception: continue - log(call_name, f'sending reponse gather, data={response}') + log(call_name, f"sending reponse gather, data={response}") comm.gather(nest.serializable(response), root=0) diff --git a/build_support/check_code_style.sh b/build_support/check_code_style.sh deleted file mode 100755 index 3d93c2203b..0000000000 --- a/build_support/check_code_style.sh +++ /dev/null @@ -1,318 +0,0 @@ -#!/bin/bash - -# check_code_style.sh -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -# This script performs a static code analysis and can be used to verify -# if a source file fulfills the NEST coding style guidelines. -# Run ./build_support/check_code_style.sh --help for more detailed information. - -# Set default parameters. -unset FILE_TO_BE_CHECKED -GIT_START_SHA=master # If 'file=' is not specified all changed files in the commit range -GIT_END_SHA=HEAD # '..' are processed. - -VERA=vera++ # The names of the static code analysis tools executables. -CPPCHECK=cppcheck # CPPCHECK version 1.69 or later is required ! -CLANG_FORMAT=clang-format-9 # CLANG-FORMAT version 9 is required ! -PEP8=pycodestyle -PYCODESTYLE_IGNORES="E121,E123,E126,E226,E24,E704,W503,W504" - -PERFORM_VERA=true # Perform VERA++ analysis. -PERFORM_CPPCHECK=false # Skip CPPCHECK analysis. -PERFORM_CLANG_FORMAT=true # Perform CLANG-FORMAT analysis. -PERFORM_PEP8=true # Perform PEP8 analysis. - -INCREMENTAL=false # Do not prompt the user before each file analysis. - -# Exit script on 'Unknown option' condition. -# error_unknown_option "option" -error_unknown_option() { - echo "[ERROR] Unknown option: $1" - echo - print_usage - exit 1 -} - -# Exit script on 'No static code analysis specified.' -error_no_analysis() { - echo "[ERROR] No static code analysis specified." - echo - print_usage - exit 1 -} - -# Exit script on error. -# error_exit "error_message" -error_exit() { - echo "[ERROR] $1" - echo - exit 1 -} - -# Print usage and exit script. -usage() { - print_usage - exit 0 -} - -print_usage() { - cat <..'. By default, this is -'master..head'. - -The script expects to be run from the base directory of the NEST sources, -i.e. all executions should start like: - ./build_support/check_code_style.sh ... - -The setup of the tooling is explained here: - https://nest-simulator.readthedocs.io/en/latest/contribute/coding_guidelines_cpp.html - -Options: - - --help This help. - - --[i]ncremental Prompt user before each file analysis. - - --file=/path/to/file Perform the analysis on this file. - - --git-start=Git_SHA_value Hash value (Git SHA) from which Git starts the diff. - Default: --git-start=master - - --git-end=Git_SHA_value Hash value (Git SHA) at which Git ends the diff. - Default: --git-start=HEAD - - --vera++=exe The name of the VERA++ executable. - Default: --vera++=vera++ - - --cppcheck=exe The name of the CPPCHECK executable. - Default: --cppcheck=cppcheck - Note: CPPCHECK version 1.69 or later is required. - This corresponds to the version installed in - the NEST CI build and test environment. - - --clang-format=exe The name of the CLANG-FORMAT executable. - Default: --clang-format=clang-format-9 - Note: CLANG-FORMAT version 9 is required. - - --pep8=exe The name of the PEP8 executable. - Default: --pep8=pycodestyle - - --perform-vera=on/off Turn on/off VERA++ analysis. - Default: --perform-vera=on - - --perform-cppcheck=on/off Turn on/off CPPCHECK analysis. - Default: --perform-cppcheck=off - - --perform-clang-format=on/off Turn on/off CLANG-FORMAT analysis. - Default: --perform-clang-format=on - - --perform-pep8=on/off Turn on/off PEP8 analysis. - Default: --perform-pep8=on -EOF -echo -} - -echo -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "+ NEST STATIC CODE ANALYSIS TOOL +" -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo - -# Process parameters. -while test $# -gt 0 ; do - case "$1" in - --help) - usage - ;; - --i) - INCREMENTAL=true - ;; - --incremental) - INCREMENTAL=true - ;; - --file=*) - FILE_TO_BE_CHECKED="$( echo "$1" | sed 's/^--file=//' )" - if [ ! -f $FILE_TO_BE_CHECKED ]; then - error_exit "The specified file does not exist. File: $FILE_TO_BE_CHECKED" - fi - ;; - --git-start=*) - GIT_START_SHA="$( echo "$1" | sed 's/^--git-start=//' )" - ;; - --git-end=*) - GIT_END_SHA="$( echo "$1" | sed 's/^--git-end=//' )" - ;; - --vera++=*) - VERA="$( echo "$1" | sed 's/^--vera++=//' )" - ;; - --cppcheck=*) - CPPCHECK="$( echo "$1" | sed 's/^--cppcheck=//' )" - ;; - --clang-format=*) - CLANG_FORMAT="$( echo "$1" | sed 's/^--clang-format=//' )" - ;; - --pep8=*) - PEP8="$( echo "$1" | sed 's/^--pep8=//' )" - ;; - --perform-vera=*) - value="$( echo "$1" | sed 's/^--perform-vera=//' )" - case "$value" in - on) - PERFORM_VERA=true - ;; - off) - PERFORM_VERA=false - ;; - *) - error_unknown_option "$1" - ;; - esac - ;; - --perform-cppcheck=*) - value="$( echo "$1" | sed 's/^--perform-cppcheck=//' )" - case "$value" in - on) - PERFORM_CPPCHECK=true - ;; - off) - PERFORM_CPPCHECK=false - ;; - *) - error_unknown_option "$1" - ;; - esac - ;; - --perform-clang-format=*) - value="$( echo "$1" | sed 's/^--perform-clang-format=//' )" - case "$value" in - on) - PERFORM_CLANG_FORMAT=true - ;; - off) - PERFORM_CLANG_FORMAT=false - ;; - *) - error_unknown_option "$1" - ;; - esac - ;; - --perform-pep8=*) - value="$( echo "$1" | sed 's/^--perform-pep8=//' )" - case "$value" in - on) - PERFORM_PEP8=true - ;; - off) - PERFORM_PEP8=false - ;; - *) - error_unknown_option "$1" - ;; - esac - ;; - *) - error_unknown_option "$1" - ;; - esac - shift -done - -if ! $PERFORM_VERA && ! $PERFORM_CPPCHECK && ! $PERFORM_CLANG_FORMAT && ! $PERFORM_PEP8; then - error_no_analysis -fi - -# Evaluate sed extended regex parameter. -# The sed syntax for extended regular expressions differs for the operating systems: BSD: -E other: -r -EXTENDED_REGEX_PARAM=r -/bin/sh -c "echo 'hello' | sed -${EXTENDED_REGEX_PARAM} 's/[aeou]/_/g' " >/dev/null 2>&1 || EXTENDED_REGEX_PARAM=E - -# Verify the VERA++ installation. -if $PERFORM_VERA; then - $VERA ./nest/main.cpp >/dev/null 2>&1 || error_exit "Failed to verify the VERA++ installation. Executable: $VERA" - $VERA --profile nest ./nest/main.cpp >/dev/null 2>&1 || error_exit \ - "Failed to verify the VERA++ installation. The profile 'nest' could not be found. See https://nest-simulator.readthedocs.io/en/latest/contribute/coding_guidelines_cpp.html#vera-profile-nest" -fi - -# Verify the CPPCHECK installation. CPPCHECK version 1.69 or later is required. -# Previous versions of CPPCHECK halted on sli/tokenutils.cc (see https://github.com/nest/nest-simulator/pull/79) -if $PERFORM_CPPCHECK; then - $CPPCHECK --enable=all --inconclusive --std=c++03 ./nest/main.cpp >/dev/null 2>&1 || error_exit "Failed to verify the CPPCHECK installation. Executable: $CPPCHECK" - cppcheck_version=`$CPPCHECK --version | sed 's/^Cppcheck //'` - IFS=\. read -a cppcheck_version_a <<< "$cppcheck_version" - if [[ ${cppcheck_version_a[0]} -lt 1 ]]; then - error_exit "Failed to verify the CPPCHECK installation. Version 1.69 or later is requires. The executable '$CPPCHECK' is of version $cppcheck_version." - elif [[ ${cppcheck_version_a[0]} -eq 1 && ${cppcheck_version_a[1]} -lt 69 ]]; then - error_exit "Failed to verify the CPPCHECK installation. Version 1.69 or later is requires. The executable '$CPPCHECK' is of version $cppcheck_version." - fi -fi - -# Verify the CLANG-FORMAT installation. CLANG-FORMAT version 9 is required. -if $PERFORM_CLANG_FORMAT; then - $CLANG_FORMAT -style=file ./nest/main.cpp >/dev/null 2>&1 || error_exit "Failed to verify the CLANG-FORMAT installation. Executable: $CLANG_FORMAT" - clang_format_version=`$CLANG_FORMAT --version | sed -${EXTENDED_REGEX_PARAM} 's/^.*([0-9]\.[0-9])\..*/\1/'` - if [[ "x$clang_format_version" != "x9.0" ]]; then - error_exit "Failed to verify the CLANG-FORMAT installation. Version 9 is required. The executable '$CLANG_FORMAT' is of version $clang_format_version." - fi -fi - -# Verify the pycodestyle installation. -if $PERFORM_PEP8; then - $PEP8 --ignore=$PYCODESTYLE_IGNORES ./build_support/parse_build_log.py || error_exit "Failed to verify the pycodestyle installation. Executable: $PEP8" -fi - -# Extracting changed files between two commits. -if [[ "x$FILE_TO_BE_CHECKED" != "x" && -f $FILE_TO_BE_CHECKED ]]; then - file_names=$FILE_TO_BE_CHECKED -else - file_names=`git diff --name-only $GIT_START_SHA..$GIT_END_SHA` -fi - -if [ -z "$file_names" ]; then - echo - echo "There are no files to check." - exit 0 -fi - -if [ ! -x ./build_support/static_code_analysis.sh ]; then - sudo chmod +x ./build_support/static_code_analysis.sh -fi - - -RUNS_ON_CI=false - -unset NEST_VPATH # These command line arguments are placeholders and not required here. -IGNORE_MSG_VERA=false # They are needed when running the static code analysis script within -IGNORE_MSG_CPPCHECK=false # the CI build environment. -IGNORE_MSG_CLANG_FORMAT=false -IGNORE_MSG_PYCODESTYLE=false - -./build_support/static_code_analysis.sh "$RUNS_ON_CI" "$INCREMENTAL" "$file_names" "$NEST_VPATH" \ -"$VERA" "$CPPCHECK" "$CLANG_FORMAT" "$PEP8" \ -"$PERFORM_VERA" "$PERFORM_CPPCHECK" "$PERFORM_CLANG_FORMAT" "$PERFORM_PEP8" \ -"$IGNORE_MSG_VERA" "$IGNORE_MSG_CPPCHECK" "$IGNORE_MSG_CLANG_FORMAT" "$IGNORE_MSG_PYCODESTYLE" \ -"$PYCODESTYLE_IGNORES" -if [ $? -gt 0 ]; then - exit $? -fi diff --git a/build_support/check_copyright_headers.py b/build_support/check_copyright_headers.py index 2733dfb39e..b54eaec464 100644 --- a/build_support/check_copyright_headers.py +++ b/build_support/check_copyright_headers.py @@ -27,22 +27,21 @@ "doc/copyright_header.*". It uses the variable NEST_SOURCES to determine the source directory to check. -This script is supposed to be run from static_code_analysis.sh either -during the run of the CI or invocation of check_code_style.sh. +This script is supposed to be run from CI. In order to ease error reporting in this context, this script uses two distinct output channels: messages meant for immediate display are printed to stderr using the helper function eprint(). Messages meant -for the summary at the end of static_code_analysis.sh are printed to +for the summary at the end of the static code analysis are printed to stdout instead so they can be more easily captured and only printed if -errors occured. +errors occurred. """ import os -import sys import re +import sys def eprint(*args, **kwargs): @@ -55,44 +54,47 @@ def eprint(*args, **kwargs): EXIT_NO_SOURCE = 126 try: - source_dir = os.environ['NEST_SOURCE'] + heuristic_folders = "nest nestkernel build_support models .git" + if "NEST_SOURCE" not in os.environ: + if all([name in os.listdir() for name in heuristic_folders.split()]): + os.environ["NEST_SOURCE"] = "." + else: + print("Script does not seem to be called from the NEST repository root.") + source_dir = os.environ["NEST_SOURCE"] except KeyError: - print("Please make NEST_SOURCE environment variable to point to " + - "the source tree you want to check!") + print("Please make NEST_SOURCE environment variable to point to the source tree you want to check!") sys.exit(EXIT_NO_SOURCE) exclude_dirs = [ - 'libltdl', - '.git', - 'CMakeFiles', - 'result', # ignore files in $NEST_RESULT of travis-ci builds - 'thirdparty', + "libltdl", + ".git", + "CMakeFiles", + "result", # ignore files in $NEST_RESULT of CI builds + "thirdparty", ] # match all file names against these regular expressions. if a match # is found the file is excluded from the check -exclude_file_patterns = [r'\.#.*', '#.*', '.*~', '.*.bak'] +exclude_file_patterns = [r"\.#.*", "#.*", ".*~", ".*.bak"] exclude_file_regex = [re.compile(pattern) for pattern in exclude_file_patterns] exclude_files = [ - 'doc/copyright_header.cpp', - 'doc/copyright_header.py', - 'nestrc.sli', - 'nest/static_modules.h', - 'pynest/pynestkernel.cpp', - 'get-pip.py' + "doc/copyright_header.cpp", + "doc/copyright_header.py", + "nest/static_modules.h", + "pynest/pynestkernel.cpp", + "get-pip.py", ] templates = { - ('cc', 'cpp', 'h', 'sli'): 'cpp', - ('py', 'pyx', 'pxd'): 'py', + ("cc", "cpp", "h", "sli"): "cpp", + ("py", "pyx", "pxd"): "py", } template_contents = {} for extensions, template_ext in templates.items(): - template_name = "{0}/doc/copyright_header.{1}".format(source_dir, - template_ext) + template_name = "{0}/doc/copyright_header.{1}".format(source_dir, template_ext) with open(template_name) as template_file: template = template_file.readlines() for ext in extensions: @@ -101,7 +103,6 @@ def eprint(*args, **kwargs): total_files = 0 total_errors = 0 for dirpath, _, fnames in os.walk(source_dir): - if any([exclude_dir in dirpath for exclude_dir in exclude_dirs]): continue @@ -115,34 +116,33 @@ def eprint(*args, **kwargs): tested_file = os.path.join(dirpath, fname) - if any([exclude_file in tested_file - for exclude_file in exclude_files]): + if any([exclude_file in tested_file for exclude_file in exclude_files]): continue - with open(tested_file, encoding='utf-8') as source_file: + with open(tested_file, encoding="utf-8") as source_file: total_files += 1 for template_line in template_contents[extension]: try: line_src = source_file.readline() except UnicodeDecodeError as err: - print("Unable to decode bytes in '{0}': {1}".format( - tested_file, err)) + print("Unable to decode bytes in '{0}': {1}".format(tested_file, err)) total_errors += 1 break - if (extension == 'py' and - line_src.strip() == '#!/usr/bin/env python3'): + if extension == "py" and line_src.strip() == "#!/usr/bin/env python3": line_src = source_file.readline() - line_exp = template_line.replace('{{file_name}}', fname) + line_exp = template_line.replace("{{file_name}}", fname) if line_src != line_exp: fname = os.path.relpath(tested_file) - eprint("[COPY] {0}: expected '{1}', found '{2}'.".format( - fname, line_exp.rstrip('\n'), line_src.rstrip('\n'))) + eprint( + "[COPY] {0}: expected '{1}', found '{2}'.".format( + fname, line_exp.rstrip("\n"), line_src.rstrip("\n") + ) + ) print("... {}\\n".format(fname)) total_errors += 1 break -print("{0} out of {1} files have an erroneous copyright header.".format( - total_errors, total_files)) +print("{0} out of {1} files have an erroneous copyright header.".format(total_errors, total_files)) if total_errors > 0: sys.exit(EXIT_BAD_HEADER) diff --git a/build_support/check_unused_names.py b/build_support/check_unused_names.py index afa902b1f2..2dc2675498 100644 --- a/build_support/check_unused_names.py +++ b/build_support/check_unused_names.py @@ -28,21 +28,20 @@ second if they are actually used somewhere in the code. It uses the variable NEST_SOURCES to determine the source directory to check. -This script is supposed to be run from static_code_analysis.sh either -during the run of the CI or invocation of check_code_style.sh. +This script is supposed to be run from CI. In order to ease error reporting in this context, this script uses two distinct output channels: messages meant for immediate display are printed to stderr using the helper function eprint(). Messages meant -for the summary at the end of static_code_analysis.sh are printed to +for the summary at the end of the static code analysis are printed to stdout instead so they can be more easily captured and only printed if -errors occured. +errors occurred. """ import os -import sys import re +import sys from subprocess import check_output @@ -61,10 +60,15 @@ def eprint(*args, **kwargs): EXIT_NO_SOURCE = 126 try: - source_dir = os.environ['NEST_SOURCE'] + heuristic_folders = "nest nestkernel build_support models .git" + if "NEST_SOURCE" not in os.environ: + if all([name in os.listdir() for name in heuristic_folders.split()]): + os.environ["NEST_SOURCE"] = "." + else: + print("Script does not seem to be called from the NEST repository root.") + source_dir = os.environ["NEST_SOURCE"] except KeyError: - eprint("Please make NEST_SOURCE environment variable to point to " + - "the source tree you want to check!") + eprint("Please make NEST_SOURCE environment variable to point to the source tree you want to check!") sys.exit(EXIT_NO_SOURCE) # Base names of files that contain const Name definitions @@ -95,9 +99,8 @@ def get_names(fname, pattern): for h, s in zip(names_header, names_source): if h != s: - eprint("[NAME] {}: inconsistent declaration: {} != {}".format( - names_file, h, s)) - print("... {}\\n".format(names_file)) + eprint(f"[NAME] {names_file}: inconsistent declaration: {h} != {s}") + print(f"... {names_file}\\n") sys.exit(EXIT_NAME_H_CPP_MISMATCH) else: names_defined.add(h) @@ -123,7 +126,7 @@ def get_names(fname, pattern): if len(names_unused) != 0: msg = "unused Name definition(s): " + ", ".join(names_unused) eprint("[NAME] " + msg) - print("... {}\\n".format(msg)) + print(f"... {msg}\\n") sys.exit(EXIT_UNUSED_NAME) diff --git a/build_support/ci_build.sh b/build_support/ci_build.sh deleted file mode 100755 index 129ac2c855..0000000000 --- a/build_support/ci_build.sh +++ /dev/null @@ -1,352 +0,0 @@ -#!/bin/bash - -# ci_build.sh -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - - -# This shell script is part of the NEST CI build and test environment. -# It is invoked by the top-level Github Actions script '.github/workflows/nestbuildmatrix.yml'. -# -# NOTE: This shell script is tightly coupled to 'build_support/parse_build_log.py'. -# Any changes to message numbers (MSGBLDnnnn) or the variable name -# 'file_names' have effects on the build/test-log parsing process. - - -# Exit shell if any subcommand or pipline returns a non-zero status. -set -ex - -env -if [ "$xNEST_BUILD_COMPILER" = "CLANG" ]; then - export CC=clang-11 - export CXX=clang++-11 -fi - -NEST_VPATH=build -mkdir -p "$NEST_VPATH/reports" - -if [ "$xNEST_BUILD_TYPE" = "STATIC_CODE_ANALYSIS" ]; then - echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" - echo "+ S T A T I C C O D E A N A L Y S I S +" - echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" - - echo "MSGBLD0010: Initializing VERA++ static code analysis." - export PYTHON_EXECUTABLE="$(which python3)" - export PYTHON_INCLUDE_DIR="`python3 -c "import sysconfig; print(sysconfig.get_path('include'))"`" - export PYLIB_BASE="lib`basename $PYTHON_INCLUDE_DIR`" - export PYLIB_DIR="$(dirname `sed 's/include/lib/' <<< $PYTHON_INCLUDE_DIR`)" - export PYTHON_LIBRARY="`find $PYLIB_DIR \( -name $PYLIB_BASE.so -o -name $PYLIB_BASE.dylib \) -print -quit`" - echo "--> Detected PYTHON_LIBRARY=$PYTHON_LIBRARY" - echo "--> Detected PYTHON_INCLUDE_DIR=$PYTHON_INCLUDE_DIR" - CONFIGURE_PYTHON="-DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE -DPYTHON_LIBRARY=$PYTHON_LIBRARY -DPYTHON_INCLUDE_DIR=$PYTHON_INCLUDE_DIR" - # Add the NEST profile to the VERA++ profiles. - sudo cp build_support/vera++.profile /usr/lib/vera++/profiles/nest - echo "MSGBLD0020: VERA++ initialization completed." - if [ ! -f "$HOME/.cache/bin/cppcheck" ]; then - echo "MSGBLD0030: Installing CPPCHECK version 1.69." - # Build cppcheck version 1.69 - git clone https://github.com/danmar/cppcheck.git - cd cppcheck - git checkout tags/1.69 - mkdir -p install - make PREFIX=$HOME/.cache CFGDIR=$HOME/.cache/cfg HAVE_RULES=yes install - cd - - rm -rf cppcheck - echo "MSGBLD0040: CPPCHECK installation completed." - fi - - # Ensure that the cppcheck installation can be found. - export PATH=$HOME/.cache/bin:$PATH - - echo "MSGBLD0070: Retrieving changed files." - file_names=$CHANGED_FILES - echo "MSGBLD0071: $file_names" - - # Note: uncomment the following line to static check *all* files, not just those that have changed. - # Warning: will run for a very long time - - # file_names=`find . -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.py"` - - for single_file_name in $file_names - do - echo "MSGBLD0095: File changed: $single_file_name" - done - echo "MSGBLD0100: Retrieving changed files completed." - echo - - # Set the command line arguments for the static code analysis script and execute it. - - # The names of the static code analysis tools executables. - VERA=vera++ - CPPCHECK=cppcheck - CLANG_FORMAT=clang-format-9 - PEP8=pycodestyle - PYCODESTYLE_IGNORES="E121,E123,E126,E226,E24,E704,W503,W504" - - # Perform or skip a certain analysis. - PERFORM_VERA=true - PERFORM_CPPCHECK=true - PERFORM_CLANG_FORMAT=true - PERFORM_PEP8=true - - # The following command line parameters indicate whether static code analysis error messages - # will cause the CI build to fail or are ignored. - IGNORE_MSG_VERA=false - IGNORE_MSG_CPPCHECK=true - IGNORE_MSG_CLANG_FORMAT=false - IGNORE_MSG_PYCODESTYLE=false - - # The script is called within the CI environment and thus can not be run incremental. - RUNS_ON_CI=true - INCREMENTAL=false - - chmod +x build_support/static_code_analysis.sh - ./build_support/static_code_analysis.sh "$RUNS_ON_CI" "$INCREMENTAL" "$file_names" "$NEST_VPATH" \ - "$VERA" "$CPPCHECK" "$CLANG_FORMAT" "$PEP8" \ - "$PERFORM_VERA" "$PERFORM_CPPCHECK" "$PERFORM_CLANG_FORMAT" "$PERFORM_PEP8" \ - "$IGNORE_MSG_VERA" "$IGNORE_MSG_CPPCHECK" "$IGNORE_MSG_CLANG_FORMAT" "$IGNORE_MSG_PYCODESTYLE" \ - "$PYCODESTYLE_IGNORES" - - exit $? -fi - -echo -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "+ C O N F I G U R E N E S T B U I L D +" -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "MSGBLD0230: Reading build type." - -# This defines the base settings of all build options off. The base -# settings are also used for NEST_BUILD_TYPE=MINIMAL, which is not -# explicitly checked for below. - -xGSL=0 -xLIBBOOST=0 -xLIBNEUROSIM=0 -xLTDL=0 -xMPI=0 -xMUSIC=0 -xOPENMP=0 -xPYTHON=0 -xREADLINE=0 -xSIONLIB=0 - -CXX_FLAGS="-pedantic -Wextra -Wno-unknown-pragmas -D_GLIBCXX_ASSERTIONS" - -if [ "$xNEST_BUILD_TYPE" = "OPENMP_ONLY" ]; then - xGSL=1 - xLIBBOOST=1 - xLTDL=1 - xOPENMP=1 - CXX_FLAGS="-pedantic -Wextra -D_GLIBCXX_ASSERTIONS" -fi - -if [ "$xNEST_BUILD_TYPE" = "MPI_ONLY" ]; then - xGSL=1 - xLIBBOOST=1 - xLTDL=1 - xMPI=1 -fi - -if [ "$xNEST_BUILD_TYPE" = "FULL" ]; then - xGSL=1 - xLIBBOOST=1 - xLIBNEUROSIM=1 - xLTDL=1 - xMPI=1 - xMUSIC=1 - xOPENMP=1 - xPYTHON=1 - xREADLINE=1 - xSIONLIB=1 - CXX_FLAGS="-pedantic -Wextra -D_GLIBCXX_ASSERTIONS" -fi - -if [ "$xNEST_BUILD_TYPE" = "FULL_MACOS" ]; then - xGSL=1 - xLIBBOOST=1 - xLIBNEUROSIM=0 - xLTDL=1 - xMPI=1 - xMUSIC=0 - xOPENMP=1 - xPYTHON=1 - xREADLINE=1 - xSIONLIB=0 - # Do not use -pedantic because it triggers warnings from pynestkernel - # that are difficult to filter automatically when parsing the log. - # See also https://github.com/cython/cython/pull/4687. - CXX_FLAGS="-Wextra -Wno-unknown-pragmas -D_GLIBCXX_ASSERTIONS" -fi - -echo "MSGBLD0232: Setting configuration variables." - -# Set the NEST CMake-build configuration according to the variables -# set above based on the ones set in the build stage matrix in -# '.github/workflows/nestbuildmatrix.yml'. - -if [ "$xOPENMP" = "1" ] ; then - CONFIGURE_OPENMP="-Dwith-openmp=ON" -else - CONFIGURE_OPENMP="-Dwith-openmp=OFF" -fi - -if [ "$xMPI" = "1" ] ; then - CONFIGURE_MPI="-Dwith-mpi=ON" -else - CONFIGURE_MPI="-Dwith-mpi=OFF" -fi - -if [ "$xPYTHON" = "1" ] ; then - export PYTHON_EXECUTABLE="$(which python3)" - export PYTHON_ROOT="$(dirname $PYTHON_EXECUTABLE | sed s%/bin%%)" - export PYTHON_INCLUDE_DIR=`python3 -c "import sysconfig; print(sysconfig.get_path('include'))"` - export PYLIB_BASE=lib`basename $PYTHON_INCLUDE_DIR` - export PYLIB_DIR=$(dirname `sed 's/include/lib/' <<< $PYTHON_INCLUDE_DIR`) - export PYTHON_LIBRARY=`find $PYLIB_DIR \( -name $PYLIB_BASE.so -o -name $PYLIB_BASE.dylib \) -print -quit` - echo "--> Detected PYTHON_ROOT=$PYTHON_ROOT" - echo "--> Detected PYTHON_LIBRARY=$PYTHON_LIBRARY" - echo "--> Detected PYTHON_INCLUDE_DIR=$PYTHON_INCLUDE_DIR" - CONFIGURE_PYTHON="-DPython_ROOT=$PYTHON_ROOT -DPYTHON_LIBRARY=$PYTHON_LIBRARY -DPYTHON_INCLUDE_DIR=$PYTHON_INCLUDE_DIR" - mkdir -p $HOME/.matplotlib - echo "backend : svg" > $HOME/.matplotlib/matplotlibrc -else - CONFIGURE_PYTHON="-Dwith-python=OFF" -fi -if [ "$xMUSIC" = "1" ] ; then - CONFIGURE_MUSIC="-Dwith-music=$HOME/.cache/music.install" - chmod +x build_support/install_music.sh - ./build_support/install_music.sh -else - CONFIGURE_MUSIC="-Dwith-music=OFF" -fi - -if [ "$xGSL" = "1" ] ; then - CONFIGURE_GSL="-Dwith-gsl=ON" -else - CONFIGURE_GSL="-Dwith-gsl=OFF" -fi -if [ "$xLTDL" = "1" ] ; then - CONFIGURE_LTDL="-Dwith-ltdl=ON" -else - CONFIGURE_LTDL="-Dwith-ltdl=OFF" -fi -if [ "$xREADLINE" = "1" ] ; then - CONFIGURE_READLINE="-Dwith-readline=ON" -else - CONFIGURE_READLINE="-Dwith-readline=OFF" -fi -if [ "$xLIBBOOST" = "1" ] ; then - CONFIGURE_BOOST="-Dwith-boost=ON" -else - CONFIGURE_BOOST="-Dwith-boost=OFF" -fi -if [ "$xSIONLIB" = "1" ] ; then - CONFIGURE_SIONLIB="-Dwith-sionlib=$HOME/.cache/sionlib.install" - chmod +x build_support/install_sionlib.sh - ./build_support/install_sionlib.sh -else - CONFIGURE_SIONLIB="-Dwith-sionlib=OFF" -fi -if [ "$xLIBNEUROSIM" = "1" ] ; then - CONFIGURE_LIBNEUROSIM="-Dwith-libneurosim=$HOME/.cache/libneurosim.install" - chmod +x build_support/install_csa-libneurosim.sh - ./build_support/install_csa-libneurosim.sh $PYLIB_DIR - PYMAJOR=`python3 -c 'import sys; print("%i.%i" % sys.version_info[:2])'` - export PYTHONPATH=$HOME/.cache/csa.install/lib/python$PYMAJOR/site-packages${PYTHONPATH:+:$PYTHONPATH} - if [[ $OSTYPE == darwin* ]]; then - export DYLD_LIBRARY_PATH=$HOME/.cache/csa.install/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH} - else - export LD_LIBRARY_PATH=$HOME/.cache/csa.install/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} - fi -else - CONFIGURE_LIBNEUROSIM="-Dwith-libneurosim=OFF" -fi -cp examples/sli/nestrc.sli ~/.nestrc -# Explicitly allow MPI oversubscription. This is required by Open MPI versions > 3.0. -# Not having this in place leads to a "not enough slots available" error. -#if [[ "$OSTYPE" = darwin* ]] ; then - #sed -i -e 's/mpirun -np/mpirun --oversubscribe -np/g' ~/.nestrc -#fi -sed -i -e 's/mpirun -np/mpirun --oversubscribe -np/g' ~/.nestrc -NEST_RESULT=result -if [ "$(uname -s)" = 'Linux' ]; then - NEST_RESULT=$(readlink -f $NEST_RESULT) -else - NEST_RESULT=$(greadlink -f $NEST_RESULT) -fi -mkdir "$NEST_RESULT" -echo "MSGBLD0235: Running CMake." -cd "$NEST_VPATH" -echo "MSGBLD0236: $(pwd)\$ cmake \ - -DCMAKE_INSTALL_PREFIX=\"$NEST_RESULT\" \ - -DCMAKE_CXX_FLAGS=\"$CXX_FLAGS\" \ - -Dwith-optimize=ON \ - -Dwith-warning=ON \ - $CONFIGURE_BOOST \ - $CONFIGURE_OPENMP \ - $CONFIGURE_MPI \ - $CONFIGURE_PYTHON \ - $CONFIGURE_MUSIC \ - $CONFIGURE_GSL \ - $CONFIGURE_LTDL \ - $CONFIGURE_READLINE \ - $CONFIGURE_SIONLIB \ - $CONFIGURE_LIBNEUROSIM \ - .." - -cmake \ - -DCMAKE_INSTALL_PREFIX="$NEST_RESULT" \ - -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ - -Dwith-optimize=ON \ - -Dwith-warning=ON \ - $CONFIGURE_BOOST \ - $CONFIGURE_OPENMP \ - $CONFIGURE_MPI \ - $CONFIGURE_PYTHON \ - $CONFIGURE_MUSIC \ - $CONFIGURE_GSL \ - $CONFIGURE_LTDL \ - $CONFIGURE_READLINE \ - $CONFIGURE_SIONLIB \ - $CONFIGURE_LIBNEUROSIM \ - .. - -echo "MSGBLD0240: CMake configure completed." -echo -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "+ B U I L D N E S T +" -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "MSGBLD0250: Running Make." -make VERBOSE=1 -echo "MSGBLD0260: Make completed." -echo -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "+ I N S T A L L N E S T +" -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "MSGBLD0270: Running make install." -make install -echo "MSGBLD0280: Make install completed." -echo -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "+ R U N N E S T T E S T S U I T E +" -echo "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" -echo "MSGBLD0290: Running make installcheck." -make VERBOSE=1 installcheck -echo "MSGBLD0300: Make installcheck completed." -echo "MSGBLD0340: Build completed." diff --git a/build_support/format_all_c_c++_files.sh b/build_support/format_all_c_c++_files.sh index b3cb7c1e1d..b25942a653 100755 --- a/build_support/format_all_c_c++_files.sh +++ b/build_support/format_all_c_c++_files.sh @@ -2,11 +2,16 @@ # With this script you can easily format all C/C++ files contained in # any (sub)directory of NEST. Internally it uses clang-format to do -# the actual formatting. You can give a different clang-format command, -# e.g. by executing `CLANG_FORMAT=clang-format-10 ./format_all_c_c++_files.sh`. +# the actual formatting. +# +# NEST C/C++ code should be formatted according to clang-format version 13.0.0. +# If you would like to see how the code will be formatted with a different +# clang-format version, execute e.g. `CLANG_FORMAT=clang-format-14 ./format_all_c_c++_files.sh`. +# # By default the script starts at the current working directory ($PWD), but # supply a different starting directory as the first argument to the command. -CLANG_FORMAT=${CLANG_FORMAT:-clang-format-9} + +CLANG_FORMAT=${CLANG_FORMAT:-clang-format} CLANG_FORMAT_FILE=${CLANG_FORMAT_FILE:-.clang-format} # Drop files that should not be checked @@ -55,8 +60,8 @@ function process_dir { } function help_output { - echo "The $CLANG_FORMAT_FILE requires clang-format version 9 or later." - echo "Use like: [CLANG_FORMAT=] ./build_support/`basename $0` [start folder, defaults to '$PWD']" + echo "The $CLANG_FORMAT_FILE requires clang-format version 13 or later." + echo "Use like: [CLANG_FORMAT=] ./build_support/`basename $0` [start folder, defaults to '$PWD']" exit 0 } diff --git a/build_support/generate_modelsmodule.py b/build_support/generate_modelsmodule.py new file mode 100644 index 0000000000..7540499a29 --- /dev/null +++ b/build_support/generate_modelsmodule.py @@ -0,0 +1,339 @@ +# -*- coding: utf-8 -*- +# +# generate_modelsmodule.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see . + +"""Script to generate the modelsmodule implementation file. + +This script is called during the run of CMake and generates the file +models/modelsmodule.cpp as well as the list of source files to be +compiled by CMake. +""" + +import argparse +import os +import sys +from pathlib import Path +from textwrap import dedent + + +def parse_commandline(): + """Parse the commandline arguments and put them into variables. + + There are three arguments to this script that can be given either as + positional arguments or by their name. + + 1. srcdir: the path to the top-level NEST source directory + 2. blddir: the path to the NEST build directory (-DCMAKE_INSTALL_PREFIX) + 3. models: the semicolon-separated list of models to be built in + + This function does not return anything, but instead it checks the + commandline arguments and makes them available as global variables + of the script. ``srcdir`` and ``blddir`` are set as they were + given. The model list is split and commented models (i.e. ones + that start with '#') are filtered out. The list is then made + available under the name model_names. + """ + + global srcdir, blddir, model_names + + description = "Generate the implementation and header files for modelsmodule." + parser = argparse.ArgumentParser(description=description) + parser.add_argument("srcdir", type=str, help="the source directory of NEST") + parser.add_argument("blddir", type=str, help="the build directory of NEST") + parser.add_argument("models", type=str, help="the models to build into NEST") + args = parser.parse_args() + + srcdir = args.srcdir + blddir = args.blddir + + model_names = [model_file.strip() for model_file in args.models.split(";")] + model_names = [model for model in model_names if model and not model.startswith("#")] + + +def get_models_from_file(model_file): + """Extract model information from a given model file. + + This function applies a series of simple heuristics to find the + preprocessor guards and the list of models in the file. Guards are + expected to be in the form "#ifdef HAVE_" with one guard per + line. For the models, a list of unique pattern is used to infer + the correct model type from the line in the file. + + The majority of neuron, device, and connection models are classes + derived from a specific base class (like Node, ArchivingNode, or + Connection) or from another model. The latter can only be detected + if the base model has the same name as the file. + + The rate and binary neurons are typedefs for specialized template + classes and multiple of such typedefs may be present in a file. + + Parameters + ---------- + model_file: str + The base file name (i.e. without extension) of the model file + to get the information from. + + Returns + ------- + tuple with two components: + 0: HAVE_* preprocessor guards required for the models in the file + 1: a zip of model types and model names found in the file and + that need registering + + """ + + model_patterns = { + "neuron": "public ArchivingNode", + "stimulator": "public StimulationDevice", + "recorder": "public RecordingDevice", + "devicelike": "public DeviceNode", + "connection": "public Connection", + "node": "public Node", + "clopath": "public ClopathArchivingNode", + "urbanczik": "public UrbanczikArchivingNode", + "binary": "typedef binary_neuron", + "rate": "typedef rate_", + } + + fname = Path(srcdir) / "models" / f"{model_file}.h" + if not os.path.exists(fname): + print(f"ERROR: Model with name {model_file}.h does not exist", file=sys.stderr) + sys.exit(128) + + guards = [] + names = [] + types = [] + with open(fname, "r") as file: + for line in file: + if line.startswith("#ifdef HAVE_"): + guards.append(line.strip().split()[1]) + if line.startswith(f"class {model_file} : "): + for mtype, pattern in model_patterns.items(): + if pattern in line: + names.append(model_file) + types.append(mtype) + if line.startswith("class") and line.strip().endswith(f" : public {model_file}"): + names.append(line.split(" ", 2)[1]) + # try to infer the type of the derived model from the base model, + # assuming that that was defined earlier in the file + try: + types.append(types[names.index(model_file)]) + except (ValueError, KeyError) as e: + types.append("node") + if line.startswith("typedef "): + for mtype, pattern in model_patterns.items(): + if pattern in line: + names.append(line.rsplit(" ", 1)[-1].strip()[:-1]) + types.append(mtype) + + return tuple(guards), zip(types, names) + + +def get_include_and_model_data(): + """Create data dictionaries for include files and models. + + This function creates two nested dictionaries. + + The first (`includes`) contains the a mapping from model_type -> + guards -> model_includes and is used in the code generation + function to print all include lines. This basically corresponds to + the list handed to the script as the `models` command line + argument, but is enriched by model type information and the + preprocessor guards needed for the individual include files. + + The second (`models`) is a mapping from model_type -> guards -> + model_names and is used to generate the actual model registration + lines. model_names here is a list of models that is potentially + larger than the ones coming in throught the `models` command line + argument, as each file could contain multiple model definitions. + + This function does not return anything, but instead sets the + global variables `includes` and `models` to be used by the code + generation function. + + """ + + global includes, models + + includes = {} + models = {} + + for model_file in model_names: + guards, model_types_names = get_models_from_file(model_file) + for tp, nm in model_types_names: + # Assemble a nested dictionary for the includes: + fname = model_file + ".h" + if tp in includes: + if guards in includes[tp]: + includes[tp][guards].add(fname) + else: + includes[tp][guards] = set([fname]) + else: + includes[tp] = {guards: set([fname])} + + if (Path(srcdir) / "models" / f"{model_file}_impl.h").is_file(): + includes[tp][guards].add(f"{model_file}_impl.h") + + # Assemble a nested dictionary for the models: + if tp in models: + if guards in models[tp]: + models[tp][guards].append(nm) + else: + models[tp][guards] = [nm] + else: + models[tp] = {guards: [nm]} + + +def start_guard(guards): + """Print an #ifdef line with preprocessor guards if needed.""" + + if guards: + guard_str = " && ".join([f"defined( {guard} )" for guard in guards]) + return f"#if {guard_str}\n" + else: + return "" + + +def end_guard(guards): + """Print an #endif line for the preprocessor guards if needed.""" + return "#endif\n" if guards else "" + + +def generate_modelsmodule(): + """Write the modelsmodule implementation out to file. + + This is a very straightforward function that prints several blocks + of C++ code to the file modelsmodule.cpp in the `blddir` handed as + a commandline argument to the script. The blocks in particular are + + 1. the copyright header. + 2. a list of generic NEST includes + 3. the list of includes for the models to build into NEST + 4. some boilerplate function implementations needed to fulfill the + Module interface + 5. the list of model registration lines for the models to build + into NEST + + The code is enriched by structured C++ comments as to make + debugging of the code generation process easier in case of errors. + + """ + + fname = Path(srcdir) / "doc" / "copyright_header.cpp" + with open(fname, "r") as file: + copyright_header = file.read() + + fname = "modelsmodule.cpp" + modeldir = Path(blddir) / "models" + modeldir.mkdir(parents=True, exist_ok=True) + with open(modeldir / fname, "w") as file: + file.write(copyright_header.replace("{{file_name}}", fname)) + file.write( + dedent( + """ + #include "modelsmodule.h" + + // Generated includes + #include "config.h" + + // Includes from nestkernel + #include "common_synapse_properties.h" + #include "connector_model_impl.h" + #include "genericmodel.h" + #include "genericmodel_impl.h" + #include "kernel_manager.h" + #include "model_manager_impl.h" + #include "target_identifier.h" + """ + ) + ) + + for model_type, guards_fnames in includes.items(): + file.write(f"\n// {model_type.capitalize()} models\n") + for guards, fnames in guards_fnames.items(): + file.write(start_guard(guards)) + for fname in fnames: + file.write(f'#include "{fname}"\n') + file.write(end_guard(guards)) + + file.write( + dedent( + """ + nest::ModelsModule::ModelsModule() + { + } + + nest::ModelsModule::~ModelsModule() + { + } + + const std::string + nest::ModelsModule::name() const + { + return std::string( "NEST standard models module" ); + } + + void + nest::ModelsModule::init( SLIInterpreter* ) + {""" + ) + ) + + conn_reg = ' register_connection_model< {model} >( "{model}" );\n' + node_reg = ' kernel().model_manager.register_node_model< {model} >( "{model}" );\n' + + for model_type, guards_mnames in models.items(): + file.write(f"\n // {model_type.capitalize()} models\n") + for guards, mnames in guards_mnames.items(): + file.write(start_guard(guards)) + for mname in mnames: + if model_type == "connection": + file.write(conn_reg.format(model=mname)) + else: + file.write(node_reg.format(model=mname)) + file.write(end_guard(guards)) + + file.write("}") + + +def print_model_sources(): + """Hand back the list of model source files to CMake. + + In addition to the header file names handed to the script in the + form of the `models` commandline argument, this function searches + for corresponding implementation files with the extensions `.cpp` + and `_impl.h`. The list of models is printed as a CMake list, + i.e. as a semicolon separated string. + + """ + + model_sources = [] + source_files = os.listdir(Path(srcdir) / "models") + for model_name in model_names: + source_candidates = [model_name + suffix for suffix in (".cpp", ".h", "_impl.h")] + model_sources.extend([f for f in source_files if f in source_candidates]) + print(";".join(model_sources), end="") + + +if __name__ == "__main__": + parse_commandline() + get_include_and_model_data() + generate_modelsmodule() + print_model_sources() diff --git a/build_support/include_checker.py b/build_support/include_checker.py deleted file mode 100644 index 6cb996f7a8..0000000000 --- a/build_support/include_checker.py +++ /dev/null @@ -1,260 +0,0 @@ -# -*- coding: utf-8 -*- -# -# include_checker.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -import os -import re -import sys - -""" -This script suggest C/CPP include orders that conform to the NEST coding style -guidelines. Call the script like (from NEST sources): - -For one file: - python3 build_support/include_checker.py -nest $PWD -f nest/main.cpp - -For one directory: - python3 build_support/include_checker.py -nest $PWD -d nest - -If everything is OK, or only few includes are in the wrong order, it will print -something like: - - Includes for main.cpp are OK! Includes in wrong order: 0 - -If something is wrong, it will print the suggestion: - - Includes for neststartup.h are WRONG! Includes in wrong order: 5 - - ############################## - Suggested includes for neststartup.h: - ############################## - - - // C includes: - #include - - // C++ includes: - #include - - // Generated includes: - #include "config.h" - - // Includes from sli: - #include "datum.h" -""" - -# We would like to have files that are not actually provided by -# the NEST Initiative, e.g. implementing the Google Sparsetable, -# to be exactly like they come from the upstream source. -excludes_files = [] - - -class IncludeInfo(): - filename = "" - name = "" - spiky = False - origin = "a_unknown" - - def __init__(self, filename, name, spiky, all_headers): - self.filename = filename - self.name = name - self.spiky = spiky - self.set_origin(all_headers) - - def is_header_include(self): - return (self.name.split('.')[0] == self.filename.split('.')[0] or - self.name.split('.')[0] == self.filename.split('_impl.')[0]) - - def is_cpp_include(self): - return (not self.name.endswith('.h') and - not self.name.endswith('.hpp') and self.spiky) - - def is_c_include(self): - return self.name.endswith('.h') and self.spiky - - def is_project_include(self): - return (not self.spiky and - (self.name.endswith('.h') or self.name.endswith('.hpp'))) - - def set_origin(self, includes): - for k, v in includes.iteritems(): - if self.name in v: - self.origin = k - break - - def cmp_value(self): - v = 8 if self.is_header_include() else 0 - v += 4 if self.is_c_include() else 0 - v += 2 if self.is_cpp_include() else 0 - v += 1 if self.is_project_include() else 0 - return v - - def __cmp__(self, other): - s = self.cmp_value() - o = other.cmp_value() - val = o - s - if val == 0: - val = cmp(self.origin, other.origin) - if val == 0: - return cmp(self.name, other.name) - else: - return val - else: - return val - - def to_string(self): - l_guard = '<' if self.spiky else '"' - r_guard = '>' if self.spiky else '"' - return '#include ' + l_guard + self.name + r_guard - - -def all_includes(path): - result = {} - dirs = [d for d in next(os.walk(path))[1] if d[0] != '.'] - for d in dirs: - for root, dirs, files in os.walk(os.path.join(path, d)): - tmp = [f for f in files if f.endswith(".h") or f.endswith(".hpp")] - if len(tmp) > 0: - result[d] = tmp - - return result - - -def create_include_info(line, filename, all_headers): - match = re.search('^#include ([<"])(.*)([>"])', line) - name = match.group(2) - spiky = match.group(1) == '<' - return IncludeInfo(filename, name, spiky, all_headers) - - -def get_includes_from(file, all_headers): - includes = [] - with open(file, 'r') as f: - for line in f: - if line.startswith('#include'): - includes += [create_include_info(line, - os.path.basename(file), - all_headers)] - return includes - - -def is_include_order_ok(includes): - s_incs = sorted(includes) - return len(includes) - len([i for i, s in zip(includes, s_incs) - if i.name == s.name]) - - -def print_includes(includes): - s_incs = sorted(includes) - - is_c = False - is_cpp = False - origin = "" - - for i in s_incs: - if not i.is_header_include(): - if not is_c and i.is_c_include(): - is_c = True - is_cpp = False - origin = "" - print("\n// C includes:") - - if not is_cpp and i.is_cpp_include(): - is_c = False - is_cpp = True - origin = "" - print("\n// C++ includes:") - - if i.is_project_include() and origin != i.origin: - is_c = False - is_cpp = False - origin = i.origin - if i.origin == "a_unknown": - print("\n// Generated includes:") - else: - print("\n// Includes from " + i.origin + ":") - - print(i.to_string()) - - -def process_source(path, f, all_headers, print_suggestion): - if f in excludes_files: - print("Not checking file " + f + " as it is in the exclude list. " + - "Please do not change the order of includes.") - return 0 - includes = get_includes_from(os.path.join(path, f), all_headers) - order_ok = is_include_order_ok(includes) - if order_ok <= 2: - print("Includes for " + f + " are OK! Includes in wrong order: " + - str(order_ok)) - if order_ok > 2: - print("Includes for " + f + " are WRONG! Includes in wrong order: " + - str(order_ok)) - if print_suggestion: - print("\n##############################") - print("Suggested includes for " + f + ":") - print("##############################\n") - print_includes(includes) - print("\n##############################") - - return order_ok - - -def process_all_sources(path, all_headers, print_suggestion): - count = 0 - for root, dirs, files in os.walk(path): - for f in files: - if re.search(r"\.h$|\.hpp$|\.c$|\.cc|\.cpp$", f): - # valid source file - count += process_source(root, f, all_headers, print_suggestion) - for d in dirs: - count += process_all_sources(os.path.join(root, d), all_headers, - print_suggestion) - return count - - -def usage(exitcode): - print("Use like:") - print(" " + sys.argv[0] + " -nest " + - " (-f | -d )") - sys.exit(exitcode) - - -if __name__ == '__main__': - print_suggestion = True - if len(sys.argv) != 5: - usage(1) - - if sys.argv[1] == '-nest' and os.path.isdir(sys.argv[2]): - all_headers = all_includes(sys.argv[2]) - else: - usage(2) - - if sys.argv[3] == '-f' and os.path.isfile(sys.argv[4]): - path = os.path.dirname(sys.argv[4]) - file = os.path.basename(sys.argv[4]) - process_source(path, file, all_headers, print_suggestion) - - elif sys.argv[3] == '-d' and os.path.isdir(sys.argv[4]): - dir = sys.argv[4] - process_all_sources(dir, all_headers, print_suggestion) - - else: - usage(3) diff --git a/build_support/parse_build_log.py b/build_support/parse_build_log.py deleted file mode 100755 index 068bc228c1..0000000000 --- a/build_support/parse_build_log.py +++ /dev/null @@ -1,1099 +0,0 @@ -# -*- coding: utf-8 -*- -# -# parse_build_log.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -""" -This Python script is part of the NEST GitHub Actions CI build and test environment. -It parses the GitHub Actions build log file 'ci_build.sh.log' (The name is -hard-wired in '.nestbuildmatrix.yml'.) and creates the 'NEST GitHub Actions Build Summary'. - -NOTE: Please note that the parsing process is coupled to shell script - 'ci_build.sh' and relies on the message numbers "MSGBLDnnnn'. - It does not rely on the messages texts itself except for file names. -""" - - -def is_message_pair_in_logfile(log_filename, msg_start_of_section, - msg_end_of_section): - """Read the NEST GitHub Actions build log file and return 'True' in case both - messages are found in correct order. Return 'False' if only the first - message was found. Return 'None' in case the first or both messages - are not contained in the file. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_start_of_section: Message number string, e.g. "MSGBLD1234". - msg_end_of_section: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - True, False or None. - """ - - pair_found = None - with open(log_filename) as fh: - for line in fh: - if pair_found is None and is_message(line, msg_start_of_section): - pair_found = False - if not pair_found and is_message(line, msg_end_of_section): - pair_found = True - - return pair_found - - -def is_message_in_logfile(log_filename, msg_number): - """Read the NEST GitHub Actions build log file. Return 'True' if the message is - contained in the log file. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_number: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - True or False. - """ - - with open(log_filename) as fh: - for line in fh: - if is_message(line, msg_number): - return True - - return False - - -def is_message(line, msg_number): - """Return 'True' if 'line' contains the message identified by 'msg_number'. - - Parameters - ---------- - line: A single line from the NEST CI build log file. - msg_number: Message number string. - - Returns - ------- - True or False - """ - - if msg_number in line: - return True - - return False - - -def list_of_changed_files(log_filename, msg_changed_files_section_start, - msg_changed_files_section_end, msg_changed_files): - """Read the NEST GitHub Actions build log file, find the 'changed files' section - and return a list of the changed files or an empty list, respectively. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_changed_files_section_start: Message number string, e.g. "MSGBLD1234". - msg_changed_files_section_end: Message number string, e.g. "MSGBLD1234". - msg_changed_files: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - List of changed files. - """ - - changed_files = [] - if not is_message_pair_in_logfile(log_filename, - msg_changed_files_section_start, - msg_changed_files_section_end): - return changed_files - - in_changed_files_section = False - with open(log_filename) as fh: - for line in fh: - if not in_changed_files_section and \ - is_message(line, msg_changed_files_section_start): - in_changed_files_section = True - continue - - if in_changed_files_section: - if is_message(line, msg_changed_files): - changed_files.append(line.split(' ')[-1].strip()) - continue - - if is_message(line, msg_changed_files_section_end): - # The log file contains only one 'changed-files-section'. - # Stop reading the log file. - return changed_files - - return changed_files - - -def msg_summary_vera(log_filename, msg_vera_section_start, - msg_vera_section_end, msg_vera): - """Read the NEST GitHub Actions build log file, find the VERA++ sections, - extract the VERA messages per file and return a dictionary containing an - overall summary of the VERA++ code analysis. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_vera_section_start: Message number string, e.g. "MSGBLD1234". - msg_vera_section_end: Message number string, e.g. "MSGBLD1234". - msg_vera: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - None or a dictionary of dictionaries of VERA++ messages per file. - """ - - vera_msgs = None - in_a_vera_section = False - with open(log_filename) as fh: - for line in fh: - if not in_a_vera_section and is_message(line, - msg_vera_section_start): - in_a_vera_section = True - source_filename = line.split(' ')[-1].strip() - single_file_vera_msgs = {} - if vera_msgs is None: - vera_msgs = {} - vera_msgs.update({source_filename: single_file_vera_msgs}) - continue - - if in_a_vera_section: - if is_message(line, msg_vera): - message = line.split(":")[-1].strip() - if message not in single_file_vera_msgs: - single_file_vera_msgs[message] = 0 - single_file_vera_msgs[message] += 1 - continue - - if is_message(line, msg_vera_section_end): - in_a_vera_section = False - - return vera_msgs - - -def msg_summary_cppcheck(log_filename, msg_cppcheck_section_start, - msg_cppcheck_section_end, msg_cppcheck): - """Read the NEST GitHub Actions build log file, find the cppcheck sections, - extract the cppcheck messages per file and return a dictionary containing - an overall summary of the cppcheck code analysis. - - Parameters - --------- - log_filename: NEST GitHub Actions build log file name. - msg_cppcheck_section_start: Message number string, e.g. "MSGBLD1234". - msg_cppcheck_section_end: Message number string, e.g. "MSGBLD1234". - msg_cppcheck: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - None or a dictionary of dictionaries of cppcheck messages per file. - """ - - cppcheck_msgs = None - in_a_cppcheck_section = False - with open(log_filename) as fh: - for line in fh: - if not in_a_cppcheck_section and \ - is_message(line, msg_cppcheck_section_start): - in_a_cppcheck_section = True - source_filename = line.split(' ')[-1].strip() - single_file_cppcheck_msgs = {} - if cppcheck_msgs is None: - cppcheck_msgs = {} - cppcheck_msgs.update({source_filename: - single_file_cppcheck_msgs}) - continue - - if in_a_cppcheck_section: - if is_message(line, msg_cppcheck): - if 'Checking' in line: - continue - message = line[line.find('('):].strip() - if 'is never used' in message: - continue - if '(information)' in message: - continue - if message not in single_file_cppcheck_msgs: - single_file_cppcheck_msgs[message] = 0 - single_file_cppcheck_msgs[message] += 1 - continue - - if is_message(line, msg_cppcheck_section_end): - in_a_cppcheck_section = False - - return cppcheck_msgs - - -def msg_summary_format(log_filename, msg_format_section_start, - msg_format_section_end, msg_format): - """Read the NEST GitHub Actions build log file, find the clang-format sections, - extract the 'diff-messages' per file and return a dictionary containing an - overall summary of the clang-format code analysis. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_format_section_start: Message number string, e.g. "MSGBLD1234". - msg_format_section_end: Message number string, e.g. "MSGBLD1234". - msg_format: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - None or a dictionary of dictionaries of clang-format diff-messages per - file. - """ - - format_msgs = None - in_a_format_section = False - with open(log_filename) as fh: - for line in fh: - if not in_a_format_section and is_message(line, msg_format_section_start): # noqa - in_a_format_section = True - source_filename = line.split(' ')[-1].strip() - single_file_format_msgs = {} - if format_msgs is None: - format_msgs = {} - format_msgs.update({source_filename: single_file_format_msgs}) # noqa - continue - - if in_a_format_section: - if is_message(line, msg_format): - diffline = line.split(":")[-1].strip() - if diffline not in single_file_format_msgs: - single_file_format_msgs[diffline] = 0 - single_file_format_msgs[diffline] += 1 - continue - - if is_message(line, msg_format_section_end): - in_a_format_section = False - - return format_msgs - - -def msg_summary_pep8(log_filename, msg_pep8_section_start, - msg_pep8_section_end, msg_pep8): - """Read the NEST GitHub Actions build log file, find the PEP8 sections, extract - the PEP8 messages per file and return a dictionary containing an overall - summary. - - Parameters: - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_pep8_section_start: Message number string, e.g. "MSGBLD1234". - msg_pep8_section_end: Message number string, e.g. "MSGBLD1234". - msg_pep8: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - None or a dictionary of dictionaries of PEP8 messages per file. - """ - - pep8_msgs = None - in_a_pep8_section = False - with open(log_filename) as fh: - for line in fh: - if not in_a_pep8_section and is_message(line, msg_pep8_section_start): # noqa - in_a_pep8_section = True - source_filename = line.split(' ')[-1].strip() - single_file_pep8_msgs = {} - if pep8_msgs is None: - pep8_msgs = {} - pep8_msgs.update({source_filename: single_file_pep8_msgs}) - continue - - if in_a_pep8_section: - if is_message(line, msg_pep8): - message = line.split(":")[-1].strip() - if message not in single_file_pep8_msgs: - single_file_pep8_msgs[message] = 0 - single_file_pep8_msgs[message] += 1 - continue - - if is_message(line, msg_pep8_section_end): - in_a_pep8_section = False - - return pep8_msgs - - -def makebuild_summary(log_filename, msg_make_section_start, - msg_make_section_end): - """Read the NEST GitHub Actions build log file and return the number of build - error and warning messages as well as dictionaries summarizing their - occurrences. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_make_section_start: Message number string, e.g. "MSGBLD1234". - msg_make_section_end: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - True or False depending on the number of error messages. - Number of error messages. - Dictionary of file names and the number of errors within these files. - Number of warning messages. - Number of expected warning messages. - Dictionary of file names and the number of warnings within these file. - """ - - error_summary = None - warning_summary = None - number_of_error_msgs = 0 - number_of_warning_msgs = 0 - in_make_section = False - - expected_warnings = 0 - - # If a certain build_type (e.g. 'MINIMAL' or 'FULL') only builds - # with some warnings, this would be a good point to re-set the - # expected_warnings variable conditionally for that build_type. - - nest_warning_re = re.compile(f'.*({build_dir}.*: warning:.*)') - known_warnings = [ - f'{build_dir}/sli/scanner.cc:638:13: warning: this statement may fall through [-Wimplicit-fallthrough=]', - f'{build_dir}/sli/scanner.cc:668:19: warning: this statement may fall through [-Wimplicit-fallthrough=]', - f'{build_dir}/sli/scanner.cc:710:13: warning: this statement may fall through [-Wimplicit-fallthrough=]', - f'{build_dir}/sli/scanner.cc:738:24: warning: this statement may fall through [-Wimplicit-fallthrough=]', - (f'{build_dir}/thirdparty/Random123/conventional/Engine.hpp:140:15: warning: implicitly-declared' - ' ‘r123::Engine >& r123::Engine >::operator=' - '(const r123::Engine >&)’ is deprecated [-Wdeprecated-copy]'), - (f'{build_dir}/thirdparty/Random123/conventional/Engine.hpp:140:15: warning: implicitly-declared' - ' ‘r123::Engine >& r123::Engine >::operator=' - '(const r123::Engine >&)’ is deprecated [-Wdeprecated-copy]'), - (f'{build_dir}/thirdparty/Random123/conventional/Engine.hpp:140:15: warning: implicitly-declared' - ' ‘r123::Engine >& r123::Engine >::operator=' - '(const r123::Engine >&)’ is deprecated [-Wdeprecated-copy]'), - (f'{build_dir}/thirdparty/Random123/conventional/Engine.hpp:140:15: warning: implicitly-declared' - ' ‘r123::Engine >& r123::Engine >::operator=' - '(const r123::Engine >&)’ is deprecated [-Wdeprecated-copy]'), - (f'{build_dir}/nestkernel/connection_creator_impl.h:121:37: warning: ISO C++ requires the name' - ' after \'::~\' to be found in the same scope as the name before \'::~\' [-Wdtor-name]'), - ] - - with open(log_filename) as fh: - for line in fh: - if is_message(line, msg_make_section_start): - in_make_section = True - error_summary = {} - warning_summary = {} - - if in_make_section: - if ': error:' in line: - file_name = line.split(':')[0] - if file_name not in error_summary: - error_summary[file_name] = 0 - error_summary[file_name] += 1 - number_of_error_msgs += 1 - - # Only count warnings originating in NEST source files - warning_match = nest_warning_re.match(line) - if warning_match is not None: - warning = warning_match.group(1) - if warning not in known_warnings: - file_name = warning.split(':')[0] - if file_name not in warning_summary: - warning_summary[file_name] = 0 - warning_summary[file_name] += 1 - number_of_warning_msgs += 1 - - if is_message(line, msg_make_section_end): - # The log file contains only one 'make' section, return. - if number_of_error_msgs == 0 and number_of_warning_msgs == expected_warnings: - return(True, number_of_error_msgs, error_summary, - number_of_warning_msgs, expected_warnings, warning_summary) - else: - return(False, number_of_error_msgs, error_summary, - number_of_warning_msgs, expected_warnings, warning_summary) - - if in_make_section: - # 'make' was not completed. - # See the docstring for explanation on the return values. - return False, None, None, None, None, None - else: - # There is no 'make' section at all. - # See the docstring for explanation on the return values. - return None, None, None, None, None, None - - -def testsuite_results(log_filename, msg_testsuite_section_start, - msg_testsuite_end_message): - """Read the NEST GitHub Actions build log file, find the 'make-installcheck' - section which runs the NEST test suite. Extract the total number of tests - and the number of tests failed. Return True if all tests passed - successfully and False in case one or more tests failed. Additionally the - total number of tests performed and the number of tests failed are - returned. - - Parameters - ---------- - log_filename: NEST GitHub Actions build log file name. - msg_testsuite_section_start: Message number string, e.g. "MSGBLD1234". - msg_testsuite_end_message: Message number string, e.g. "MSGBLD1234". - - Returns - ------- - True or False. - Total number of tests. - Number of tests failed. - Number of tests skipped. - List of failed tests. - Time used to run tests. - """ - - in_installcheck_section = False - in_results_section = False - total_number_of_tests = None - number_of_tests_failed = None - number_of_tests_skipped = None - failed_tests = [] - status_tests = None - test_time = 0.0 - with open(log_filename) as fh: - for line in fh: - if is_message(line, msg_testsuite_section_start): - in_installcheck_section = True - - if in_installcheck_section: - if line.strip() == "NEST Testsuite Results": - in_results_section = True - - if in_results_section: - if line.startswith("Total"): - parts = line.split() - total_number_of_tests = int(parts[1]) - number_of_tests_skipped = int(parts[2]) - num_failures = int(parts[3]) - num_errors = int(parts[4]) - test_time = float(parts[5]) - number_of_tests_failed = num_failures + num_errors - - if line.strip().startswith('|'): - failed_tests.append(line.strip()[2:]) - - if is_message(line, msg_testsuite_end_message): - if number_of_tests_failed == 0: - status_tests = True - else: - status_tests = False - # The log file contains only one 'make-installcheck' - # section. Stop reading the log file. - break - - return (status_tests, total_number_of_tests, number_of_tests_failed, - number_of_tests_skipped, failed_tests, test_time) - - -def convert_bool_value_to_status_string(value): - """Convert a boolean value, e.g. the value returned by - is_message_pair_in_logfile(), into a meaningful string representation. - - Parameters - ---------- - value: Boolean value: True, None or False - - Returns - ------- - String "Passed Successfully", "Skipped" or "Failed" (default). - """ - if value: - return "Passed successfully" - if value is None: - return "Skipped" - - return "Failed" - - -def convert_bool_value_to_yes_no_string(value): - """Convert a boolean value into a 'Yes' or 'No' string representation. - - Parameters - ---------- - value: Boolean value. - - - Returns - ------- - String "YES", "NO" (default). - """ - - if value: - return "Yes" - - return "No" - - -def convert_summary_to_status_string(summary, ignore): - """Determine the status of any performed static code analysis and - return a string representation of that status. By setting the ignore - flag, "Ignored" instead of "Failed" is returned. - - Parameters - ---------- - summary: A dictionary containing per file dictionaries of static code - analysis messages. - ignore: Boolean value, True or False - - Returns - ------- - String "Passed Successfully", "Skipped", "Failed" or "Ignored". - """ - - if summary is None: - value = None - else: - num_msgs = get_num_msgs(summary) - if num_msgs == 0: - value = True - else: - value = False - - if ignore and value is False: # 'not value' doesn't work here. - return "Ignored" # value can also be None. - - return convert_bool_value_to_status_string(value) - - -def get_num_msgs(summary): - """Return the number of messages of any static code analysis. - - Parameters - ---------- - summary: A dictionary containing per file dictionaries of static code - analysis messages. - - Returns - ------- - The total number of messages contained in the dictionary. - """ - - num_msgs = 0 - if summary is not None: - for file_name in summary.keys(): - num_msgs += \ - get_num_msgs_for_file(file_name, summary) - - return num_msgs - - -def get_num_msgs_for_file(file_name, summary): - """Return the number of messages of any static code analysis for a - particular source file. - - Parameters - ---------- - file_name: Source file name. - summary: A dictionary containing per file dictionaries of static code - analysis messages. - - Returns - ------- - The number of messages for the source file contained in the dictionary. - """ - - num_msgs = 0 - if summary is not None: - for message, occurrences in summary[file_name].items(): - num_msgs += occurrences - - return num_msgs - - -def code_analysis_per_file_tables(summary_vera, summary_cppcheck, - summary_format, summary_pep8): - """Create formatted per-file-tables of VERA++, Cppcheck, clang-format and - PEP8 messages. Concatenate and return them. - - Parameters - ---------- - summary_vera: Dictionary of dictionaries of VERA++ messages per file. - summary_cppcheck: Dictionary of dictionaries of cppcheck messages per file. - summary_format: Dictionary of dictionaries of clang-format messages per - file. - summary_pep8: Dictionary of dictionaries of PEP8 messages per file. - - Returns - ------- - Formatted tables string. - """ - - all_tables = '' - - # VERA++, cppcheck, clang-format - if summary_vera is not None and summary_cppcheck is not None and \ - summary_format is not None: - - # Keys, i.e. file names, are identical in these dictionaries. - # If this assertion raises an exception, please check ci_build.sh - # which runs the GitHub Actions build. - assert (summary_format.keys() == summary_cppcheck.keys()) - assert (summary_format.keys() == summary_vera.keys()) - - # Again: Identical keys for clang-format, cppcheck and VERA++. - for file in summary_format.keys(): - file_table = '' - - num_msgs_vera = get_num_msgs_for_file(file, summary_vera) - num_msgs_cppcheck = get_num_msgs_for_file(file, summary_cppcheck) - num_msgs_format = get_num_msgs_for_file(file, summary_format) - - if num_msgs_vera > 0 or \ - num_msgs_cppcheck > 0 or \ - num_msgs_format > 0: - - file_table = [['+ + + ' + file + ' + + +', '']] - - if num_msgs_vera > 0: - file_table.append(['VERA++ (MSGBLD0135):', 'Count']) - for message, count in summary_vera[file].items(): - file_table.append([str(message), str(count)]) - - if num_msgs_cppcheck > 0: - file_table.append(['Cppcheck (MSGBLD0155):', 'Count']) - for message, count in summary_cppcheck[file].items(): - file_table.append([str(message), str(count)]) - - if num_msgs_format > 0: - file_table.append(['clang-format (MSGBLD0175):', 'Count']) - for message, count in summary_format[file].items(): - file_table.append([str(message), str(count)]) - - table = AsciiTable(file_table) - table.inner_row_border = True - file_table = table.table + '\n' - - all_tables += file_table - - # PEP8 - if summary_pep8 is not None: - for file in summary_pep8.keys(): - file_table = '' - - if get_num_msgs_for_file(file, summary_pep8) > 0: - - file_table = [['+ + + ' + file + ' + + +', '']] - - file_table.append(['PEP8 (MSGBLD0195):', 'Count']) - for message, count in summary_pep8[file].items(): - file_table.append([str(message), str(count)]) - - table = AsciiTable(file_table) - table.inner_row_border = True - file_table = table.table + '\n' - - all_tables += file_table - - return all_tables - - -def warnings_table(summary): - """Create a formatted table of source file names and the number of build - warnings reported for that file. - - Parameters - ---------- - summary: Dictionary of source file names and number of build warnings. - - Returns - ------- - Formatted table string. - """ - - file_table = [['Warnings in file:', 'Count']] - - for file in summary.keys(): - file_table.append([file, summary[file]]) - - table = AsciiTable(file_table) - table.inner_row_border = True - - return table.table + '\n' - - -def errors_table(summary): - """Create a formatted table of source file names and the number of build - errors reported for that file. - - Parameters - ---------- - summary: Dictionary of source file names and number of build errors. - - Returns - ------- - Formatted table string. - """ - - file_table = [['Errors in file:', 'Count']] - - for file in summary.keys(): - file_table.append([file, summary[file]]) - - table = AsciiTable(file_table) - table.inner_row_border = True - - return table.table + '\n' - - -def report_failed_tests(failed_tests): - """Create a table of tests that have failed. - - Parameters - ---------- - List of failed tests. - - Returns - ------- - Formatted string, empty if no tests failed. - """ - - if failed_tests: - return ('\n\nFailed tests:' + - ''.join('\n ' + ft for ft in failed_tests)) - else: - return '' - - -def printable_summary(list_of_changed_files, - status_cmake_configure, - status_make, - status_make_install, - status_amazon_s3_upload, - status_tests, - summary_vera, - summary_cppcheck, - summary_format, - summary_pep8, - summary_errors, - summary_warnings, - number_of_errors, - number_of_warnings, - expected_warnings, - number_of_tests_total, - number_of_tests_failed, - number_of_tests_skipped, - failed_tests, - test_time, - ignore_vera, - ignore_cppcheck, - ignore_format, - ignore_pep8, - exit_code): - """Create an overall build summary in a printable format. - - Parameters - ---------- - list_of_changed_files: List of changed source files. - status_cmake_configure: Status of the 'CMake configure': True, False or - None - status_make: Status of the 'make': True, False or None - status_make_install: Status of the 'make install': True, False or None - status_amazon_s3_upload: Status of the Amazon S3 upload: True, False - status_tests: Status of the test suite run: True, False or None - summary_vera: Dictionary of dictionaries of VERA++ messages per - file. - summary_cppcheck: Dictionary of dictionaries of cppcheck messages - per file. - summary_format: Dictionary of dictionaries of clang-format - messages per file. - summary_pep8: Dictionary of dictionaries of PEP8 messages per - file. - summary_errors: Dictionary of build error messages. - summary_warnings: Dictionary of build warning messages. - number_of_errors: Number of errors. - number_of_warnings: Number of warnings. - expected_warnings: Number of warnings expected. - number_of_tests_total: Number of tests total. - number_of_tests_failed: Number of tests failed. - number_of_tests_skipped: Number of tests skipped. - failed_tests: List of failed tests. - test_time: Time required to run testsuite. - exit_code: Build exit code: 0 or 1. - - Returns - ------- - Formatted build summary string. - """ - - header = """ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + N E S T G i t H u b A c t i o n s B u i l d S u m m a r y + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \n\n""" - - build_summary = header - - if get_num_msgs(summary_vera) > 0 or \ - get_num_msgs(summary_cppcheck) > 0 or \ - get_num_msgs(summary_format) > 0 or \ - get_num_msgs(summary_pep8) > 0: - - build_summary += ' S T A T I C C O D E A N A L Y S I S\n' - - # Create formatted per-file-tables of VERA++, Cppcheck, clang-format - # and PEP8 messages. - build_summary += code_analysis_per_file_tables(summary_vera, - summary_cppcheck, - summary_format, - summary_pep8) - - if number_of_warnings is not None and number_of_warnings > 0: - build_summary += '\n W A R N I N G S\n' - build_summary += warnings_table(summary_warnings) - - if number_of_errors is not None and number_of_errors > 0: - build_summary += '\n E R R O R S\n' - build_summary += errors_table(summary_errors) - - build_summary += '\n\n B U I L D R E P O R T\n' - - summary_table = [ - ['Changed Files :', ''], - ['', 'No files have been changed.'], - ['Static Code Analysis :', ''], - ['VERA++', - convert_summary_to_status_string(summary_vera, ignore_vera) + - '\n' + '\nNumber of messages (MSGBLD0135): ' + - str(get_num_msgs(summary_vera))], - ['Cppcheck', - convert_summary_to_status_string(summary_cppcheck, ignore_cppcheck) + - '\n' + '\nNumber of messages (MSGBLD0155): ' + - str(get_num_msgs(summary_cppcheck))], - ['clang-format', - convert_summary_to_status_string(summary_format, ignore_format) + - '\n' + '\nNumber of messages (MSGBLD0175): ' + - str(get_num_msgs(summary_format))], - ['PEP8', - convert_summary_to_status_string(summary_pep8, ignore_pep8) + - '\n' + '\nNumber of messages (MSGBLD0195): ' + - str(get_num_msgs(summary_pep8))], - ['NEST Build :', ''], - ['CMake configure', - convert_bool_value_to_status_string(status_cmake_configure)], - ['Make', convert_bool_value_to_status_string(status_make) + '\n' + - '\nErrors : ' + str(number_of_errors) + - '\nWarnings: ' + str(number_of_warnings)], - ['Make install', - convert_bool_value_to_status_string(status_make_install)], - ['Make installcheck', - convert_bool_value_to_status_string(status_tests) + '\n' + - '\nTestsuite runtime : {:.2f}s'.format(test_time) + - '\nTotal number of tests : ' + str(number_of_tests_total) + - '\nNumber of tests skipped: ' + str(number_of_tests_skipped) + - '\nNumber of tests failed : ' + str(number_of_tests_failed) + - report_failed_tests(failed_tests) - ], - ['Artifacts :', ''], - ['Amazon S3 upload', - convert_bool_value_to_yes_no_string(status_amazon_s3_upload)] - ] - table = AsciiTable(summary_table) - table.inner_row_border = True - max_width = table.column_max_width(1) - - # Bypass Travis issue: ValueError: invalid width -29 (must be > 0) - # (in the wrap() below max_width must be > 0) - # The calculation of column_max_width is based on the returned terminal - # width which sometimes seems to be zero resulting in a negative value. - if max_width < 0: - max_width = 70 - - table.table_data[1][1] = '\n'.join(wrap(', '.join(list_of_changed_files), - max_width)) - - build_summary += table.table + '\n' - - if exit_code == 0: - build_summary += '\nBUILD TERMINATED SUCCESSFULLY' - else: - build_summary += '\nBUILD FAILED' - - return build_summary - - -def build_return_code(status_cmake_configure, - status_make, - status_make_install, - status_tests, - summary_vera, - summary_cppcheck, - summary_format, - summary_pep8, - ignore_vera, - ignore_cppcheck, - ignore_format, - ignore_pep8, - skip_code_analysis, - skip_installcheck): - """Depending in the build results, create a return code. - - Parameters - ---------- - status_cmake_configure: Status of the 'CMake configure': True, False - or None - status_make: Status of the 'make': True, False or None - status_make_install: Status of the 'make install': True, False or None - status_tests: Status of the test suite run: True, False or None - summary_vera: Dictionary of dictionaries of VERA++ messages per - file. - summary_cppcheck: Dictionary of dictionaries of cppcheck messages per - file. - summary_format: Dictionary of dictionaries of clang-format messages - per file. - summary_pep8: Dictionary of dictionaries of PEP8 messages per - file. - ignore_vera: VERA++ messages will not cause the build to - fail: True, False - ignore_cppcheck: CPPCHECK messages will not cause the build to - fail: True, False - ignore_format: CLANG-FORMAT messages will not cause the build to - fail: True, False - ignore_pep8: PEP8 messages will not cause the build to - fail: True, False - skip_code_analysis: build ran w/o static code analysis: True, False - skip_installcheck: build ran w/o executing the test suite: True, False - - Returns - ------- - 0 (success) or 1. - """ - if ((status_cmake_configure) and # noqa - (status_make) and # noqa - (status_make_install) and # noqa - (skip_installcheck or status_tests) and # noqa - (skip_code_analysis or ((ignore_vera or get_num_msgs(summary_vera) == 0) and # noqa - (ignore_cppcheck or get_num_msgs(summary_cppcheck) == 0) and # noqa - (ignore_format or get_num_msgs(summary_format) == 0) and # noqa - (ignore_pep8 or get_num_msgs(summary_pep8) == 0)) # noqa - ) # noqa - ): # noqa - - return 0 - else: - return 1 - - -if __name__ == '__main__': - import re - from sys import argv, exit - from terminaltables import AsciiTable - from textwrap import wrap - - this_script_filename, log_filename, build_dir = argv - - changed_files = \ - list_of_changed_files(log_filename, "MSGBLD0070", - "MSGBLD0100", "MSGBLD0095") - - skip_code_analysis = is_message_in_logfile(log_filename, "MSGBLD0225") - skip_installcheck = is_message_in_logfile(log_filename, "MSGBLD0305") - - # The NEST GitHub Actions build consists of several steps and sections. - # Each section is enclosed in a start- and an end-message. - # By checking these message-pairs it can be verified whether a section - # passed through successfully, failed or was skipped. - status_cmake_configure = \ - is_message_pair_in_logfile(log_filename, "MSGBLD0230", "MSGBLD0240") - - status_make_install = \ - is_message_pair_in_logfile(log_filename, "MSGBLD0270", "MSGBLD0280") - - ignore_vera = is_message_in_logfile(log_filename, "MSGBLD1010") - ignore_cppcheck = is_message_in_logfile(log_filename, "MSGBLD1020") - ignore_format = is_message_in_logfile(log_filename, "MSGBLD1030") - ignore_pep8 = is_message_in_logfile(log_filename, "MSGBLD1040") - - # Summarize the per file results from the static code analysis. - summary_vera = msg_summary_vera(log_filename, "MSGBLD0130", - "MSGBLD0140", "MSGBLD0135") - - summary_cppcheck = msg_summary_cppcheck(log_filename, "MSGBLD0150", - "MSGBLD0160", "MSGBLD0155") - - summary_format = msg_summary_format(log_filename, "MSGBLD0170", - "MSGBLD0180", "MSGBLD0175") - - summary_pep8 = msg_summary_pep8(log_filename, "MSGBLD0190", - "MSGBLD0200", "MSGBLD0195") - - # Summarize the per file build error messages and warnings. - status_make, number_of_errors, summary_errors, number_of_warnings, expected_warnings, \ - summary_warnings = makebuild_summary(log_filename, "MSGBLD0250", - "MSGBLD0260") - - # Summarize the NEST test suite results. - (status_tests, number_of_tests_total, number_of_tests_failed, - number_of_tests_skipped, failed_tests, test_time) = \ - testsuite_results(log_filename, "MSGBLD0290", "MSGBLD0300") - - # Determine the build result to tell GitHub Actions whether the build was - # successful or not. - exit_code = build_return_code(status_cmake_configure, - status_make, - status_make_install, - status_tests, - summary_vera, - summary_cppcheck, - summary_format, - summary_pep8, - ignore_vera, - ignore_cppcheck, - ignore_format, - ignore_pep8, - skip_code_analysis, - skip_installcheck) - - # Only after a successful build, GitHub Actions will upload the build artifacts - # to Amazon S3. - status_amazon_s3_upload = \ - (not is_message_in_logfile(log_filename, "MSGBLD0330") and - is_message_in_logfile(log_filename, "MSGBLD0340") and - exit_code == 0) - - print(printable_summary(changed_files, - status_cmake_configure, - status_make, - status_make_install, - status_amazon_s3_upload, - status_tests, - summary_vera, - summary_cppcheck, - summary_format, - summary_pep8, - summary_errors, - summary_warnings, - number_of_errors, - number_of_warnings, - expected_warnings, - number_of_tests_total, - number_of_tests_failed, - number_of_tests_skipped, - failed_tests, - test_time, - ignore_vera, - ignore_cppcheck, - ignore_format, - ignore_pep8, - exit_code)) - - exit(exit_code) diff --git a/build_support/static_code_analysis.sh b/build_support/static_code_analysis.sh deleted file mode 100755 index cfa0457528..0000000000 --- a/build_support/static_code_analysis.sh +++ /dev/null @@ -1,356 +0,0 @@ -#!/bin/bash - -# static_code_analysis.sh -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - - -# This shell script is part of the NEST CI build and test environment. -# It performs the static code analysis and is invoked by 'ci_build.sh'. -# The script is also executed when running 'check_code_style.sh' for -# a local static code analysis. -# -# NOTE: This shell script is tightly coupled to Python script -# 'build_support/parse_build_log.py'. -# Any changes to message numbers (MSGBLDnnnn) have effects on -# the build/test-log parsing process. -# - -# Command line parameters. -RUNS_ON_CI=${1} # true or false, indicating whether the script is executed on the CI or not. -INCREMENTAL=${2} # true or false, user needs to confirm before checking a source file. -FILE_NAMES=${3} # The list of files or a single file to be checked. -NEST_VPATH=${4} # The high level NEST build path. -VERA=${5} # Name of the VERA++ executable. -CPPCHECK=${6} # Name of the CPPCHECK executable. -CLANG_FORMAT=${7} # Name of the CLANG-FORMAT executable. -PEP8=${8} # Name of the PEP8 executable. -PERFORM_VERA=${9} # true or false, indicating whether VERA++ analysis is performed or not. -PERFORM_CPPCHECK=${10} # true or false, indicating whether CPPCHECK analysis is performed or not. -PERFORM_CLANG_FORMAT=${11} # true or false, indicating whether CLANG-FORMAT analysis is performed or not. -PERFORM_PEP8=${12} # true or false, indicating whether PEP8 analysis is performed or not. -IGNORE_MSG_VERA=${13} # true or false, indicating whether VERA++ messages should accout for the build result. -IGNORE_MSG_CPPCHECK=${14} # true or false, indicating whether CPPCHECK messages should accout for the build result. -IGNORE_MSG_CLANG_FORMAT=${15} # true or false, indicating whether CLANG-FORMAT messages should accout for the build result. -IGNORE_MSG_PYCODESTYLE=${16} # true or false, indicating whether pycodestyle messages should accout for the build result. -PYCODESTYLE_IGNORES=${17} # The list of pycodestyle error and warning codes to ignore. - -# PYCODESTYLE rules to ignore. -PYCODESTYLE_IGNORES_EXAMPLES="${PYCODESTYLE_IGNORES},E402" -PYCODESTYLE_IGNORES_USER_MANUAL="${PYCODESTYLE_IGNORES_EXAMPLES},E265" - -# PYCODESTYLE rules. -PYCODESTYLE_MAX_LINE_LENGTH=120 - -# Constants -typeset -i MAX_CPPCHECK_MSG_COUNT=10 - -# Find directories that should not be checked. List root dirs in space-separated list. -ROOT_DIRS_TO_IGNORE="thirdparty" -DIRS_TO_IGNORE=$(for dir in ${ROOT_DIRS_TO_IGNORE}; do find ${dir} -type d; done) - -# Print a message. -# The format of the message depends on whether the script is executed on CI or not. -# print_msg "string1" "string2" -print_msg() { - if $RUNS_ON_CI; then - echo "$1$2" - else - echo "$2" - fi -} - -# Print version information. -print_msg "MSGBLD0105: " "Following tools are in use:" -print_msg "MSGBLD0105: " "---------------------------" -if $PERFORM_VERA; then - if ! command -v $VERA; then - print_msg "MSGBLD0105:" "Could not find $VERA!" - exit 1 - fi - VERA_VERS=`$VERA --version` - print_msg "MSGBLD0105: " "VERA++ : $VERA_VERS" -fi -if $PERFORM_CPPCHECK; then - if ! command -v $CPPCHECK; then - print_msg "MSGBLD0105:" "Could not find $CPPCHECK!" - exit 1 - fi - CPPCHECK_VERS=`$CPPCHECK --version | sed 's/^Cppcheck //'` - print_msg "MSGBLD0105: " "CPPCHECK : $CPPCHECK_VERS" -fi -if $PERFORM_CLANG_FORMAT; then - if ! command -v $CLANG_FORMAT; then - print_msg "MSGBLD0105:" "Could not find $CLANG_FORMAT!" - exit 1 - fi - CLANG_FORMAT_VERS=`$CLANG_FORMAT --version` - print_msg "MSGBLD0105: " "CLANG-FORMAT : $CLANG_FORMAT_VERS" -fi -if $PERFORM_PEP8; then - if ! command -v $PEP8; then - print_msg "MSGBLD0105:" "Could not find $PEP8!" - exit 1 - fi - PYCODESTYLE_VERS=`$PEP8 --version` - print_msg "MSGBLD0105: " "PEP8 : $PYCODESTYLE_VERS" - print_msg "MSGBLD0105: " "PEP8 ignores : $PYCODESTYLE_IGNORES" -fi -print_msg "" "" - -# The following messages report on the command line arguments IGNORE_MSG_xxx which indicate whether -# static code analysis error messages will cause the CI build to fail or are ignored. -if $RUNS_ON_CI; then - if $IGNORE_MSG_VERA; then - print_msg "MSGBLD1010: " "IGNORE_MSG_VERA is set. VERA++ messages will not cause the build to fail." - fi - if $IGNORE_MSG_CPPCHECK; then - print_msg "MSGBLD1020: " "IGNORE_MSG_CPPCHECK is set. CPPCHECK messages will not cause the build to fail." - fi - if $IGNORE_MSG_CLANG_FORMAT; then - print_msg "MSGBLD1030: " "IGNORE_MSG_CLANG_FORMAT is set. CLANG_FORMAT messages will not cause the build to fail." - fi - if $RUNS_ON_CI && $IGNORE_MSG_PYCODESTYLE; then - print_msg "MSGBLD1040: " "IGNORE_MSG_PYCODESTYLE is set. PYCODESTYLE messages will not cause the build to fail." - fi -fi - - -export NEST_SOURCE=$PWD -print_msg "MSGBLD1050: " "Running check for copyright headers" -copyright_check_errors=`python3 build_support/check_copyright_headers.py` -print_msg "MSGBLD1060: " "Running sanity check for Name definition and usage" -unused_names_errors=`python3 build_support/check_unused_names.py` -print_msg "MSGBLD1070: " "Running check for forbidden type usage" -forbidden_types_errors=`bash build_support/check_forbidden_types.sh` - - -# Perform static code analysis. -c_files_with_errors="" -python_files_with_errors="" -for f in $FILE_NAMES; do - - # Have to add spaces to make space-separation work - if [[ " $DIRS_TO_IGNORE " =~ .*[[:space:]]${f%/*}[[:space:]].* ]]; then - print_msg "MSGBLD0110: " "$f is in a directory that is explicitly ignored." - continue - fi - if [ ! -f "$f" ]; then - print_msg "MSGBLD0110: " "$f is not a file or does not exist anymore." - continue - fi - if ! $RUNS_ON_CI && $INCREMENTAL; then - print_msg "" "" - print_msg "" "Press [Enter] to continue. (Static code analysis for file $f.)" - read continue - fi - if $RUNS_ON_CI; then - print_msg "MSGBLD0120: " "Perform static code analysis for file $f." - fi - - case $f in - *.h | *.c | *.cc | *.hpp | *.cpp ) - vera_failed=false - cppcheck_failed=false - clang_format_failed=false - - if $RUNS_ON_CI; then - f_base=$NEST_VPATH/reports/`basename $f` - else - f_base=`basename $f` - fi - - # VERA++ - if $PERFORM_VERA; then - print_msg "MSGBLD0130: " "Running VERA++ .....: $f" - $VERA --profile nest $f > ${f_base}_vera.txt 2>&1 - if [ -s "${f_base}_vera.txt" ]; then - vera_failed=true - cat ${f_base}_vera.txt | while read line - do - print_msg "MSGBLD0135: " "[VERA] $line" - done - fi - rm ${f_base}_vera.txt - if $RUNS_ON_CI; then - print_msg "MSGBLD0140: " "VERA++ for file $f completed." - fi - fi - - # CPPCHECK - if $PERFORM_CPPCHECK; then - print_msg "MSGBLD0150: " "Running CPPCHECK ...: $f" - $CPPCHECK --enable=all --language=c++ --std=c++11 --suppress=missingIncludeSystem $f > ${f_base}_cppcheck.txt 2>&1 - # Remove the header, the first line. - tail -n +2 "${f_base}_cppcheck.txt" > "${f_base}_cppcheck.tmp" && mv "${f_base}_cppcheck.tmp" "${f_base}_cppcheck.txt" - if [ -s "${f_base}_cppcheck.txt" ]; then - cppcheck_failed=true - typeset -i msg_count=0 - cat ${f_base}_cppcheck.txt | while read line - do - print_msg "MSGBLD0155: " "[CPPC] $line" - if $RUNS_ON_CI; then - msg_count+=1 - if [ ${msg_count} -ge ${MAX_CPPCHECK_MSG_COUNT} ]; then - print_msg "MSGBLD0156: " "[CPPC] MAX_CPPCHECK_MSG_COUNT (${MAX_CPPCHECK_MSG_COUNT}) reached for file: $f" - break - fi - fi - done - fi - rm ${f_base}_cppcheck.txt - if $RUNS_ON_CI; then - print_msg "MSGBLD0160: " "CPPCHECK for file $f completed." - fi - fi - - # CLANG-FORMAT - if $PERFORM_CLANG_FORMAT; then - print_msg "MSGBLD0170: " "Running CLANG-FORMAT: $f" - # Create a clang-format formatted temporary file and perform a diff with its origin. - file_formatted="${f_base}_formatted.txt" - file_diff="${f_base}_diff.txt" - $CLANG_FORMAT $f > $file_formatted - diff $f $file_formatted > $file_diff 2>&1 - if [ -s "$file_diff" ]; then - clang_format_failed=true - cat $file_diff | while read line - do - print_msg "MSGBLD0175: " "[DIFF] $line" - done - fi - rm $file_formatted - rm $file_diff - if $RUNS_ON_CI; then - print_msg "MSGBLD0180: " "CLANG-FORMAT for file $f completed." - fi - fi - - # Add the file to the list of files with format errors. - if (! $IGNORE_MSG_VERA && $vera_failed) || (! $IGNORE_MSG_CPPCHECK && $cppcheck_failed) || (! $IGNORE_MSG_CLANG_FORMAT && $clang_format_failed); then - c_files_with_errors="$c_files_with_errors $f" - fi - ;; - - *clopath_synapse_spike_pairing.py ) - # Skip checking files which cannot be handled correctly by pycodestyle - # See https://github.com/nest/nest-simulator/issues/2175 - # This should be removed as soon as we have moved to flake8. - print_msg "MSGBLD0211: " "Skipping ...........: $f (not handled correctly by pycodestyle)" - continue - ;; - - *.py ) - # PYCODESTYLE - if $PERFORM_PEP8; then - print_msg "MSGBLD0190: " "Running PEP8 .......: $f" - case $f in - *spatially_structured_networks\/scripts*) - IGNORES=$PYCODESTYLE_IGNORES_USER_MANUAL - ;; - *examples*) - IGNORES=$PYCODESTYLE_IGNORES_EXAMPLES - ;; - *) - IGNORES=$PYCODESTYLE_IGNORES - ;; - esac - if ! pycodestyle_result=`$PEP8 --max-line-length=$PYCODESTYLE_MAX_LINE_LENGTH --ignore=$IGNORES $f` ; then - printf '%s\n' "$pycodestyle_result" | while IFS= read -r line - do - print_msg "MSGBLD0195: " "[PEP8] $line" - done - # Add the file to the list of files with format errors. - python_files_with_errors="$python_files_with_errors $f" - fi - if $RUNS_ON_CI; then - print_msg "MSGBLD0200: " "PEP8 check for file $f completed." - fi - fi - ;; - - *) - print_msg "MSGBLD0210: " "Skipping ...........: $f (not a C/C++/Python file)" - continue - esac -done - -nlines_copyright_check=`echo -e $copyright_check_errors | sed -e 's/^ *//' | wc -l` -if [ $nlines_copyright_check \> 1 ] || \ - [ "x$unused_names_errors" != "x" ] || \ - [ -n "$forbidden_types_errors" ] || \ - [ "x$c_files_with_errors" != "x" ] || \ - [ "x$python_files_with_errors" != "x" ]; then - - print_msg "" "" - print_msg "MSGBLD0220: " "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" - print_msg "MSGBLD0220: " "+ STATIC CODE ANALYSIS DETECTED PROBLEMS ! +" - print_msg "MSGBLD0220: " "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" - print_msg "" "" - if [ "x$c_files_with_errors" != "x" ]; then - print_msg "MSGBLD0220: " "C/C++ files with formatting errors:" - for f in $c_files_with_errors; do - print_msg "MSGBLD0220: " "... $f" - done - if ! $RUNS_ON_CI; then - print_msg "" "Run $CLANG_FORMAT -i for autocorrection." - print_msg "" "" - fi - fi - - if [ $nlines_copyright_check \> 1 ]; then - print_msg "MSGBLD0220: " "Files with erroneous copyright headers:" - echo -e $copyright_check_errors | sed -e 's/^ *//' - print_msg "" "" - fi - - if [ "x$unused_names_errors" != "x" ]; then - print_msg "MSGBLD0220: " "Files with unused/ill-defined Name objects:" - echo -e $unused_names_errors | sed -e 's/^ *//' - print_msg "" "" - fi - - if [ -n "$forbidden_types_errors" ]; then - print_msg "MSGBLD0220: " "Files with forbidden types (hint: use types without _t suffix):" - echo -e $forbidden_types_errors | sed -e 's/^ *//' - print_msg "" "" - fi - - if [ "x$python_files_with_errors" != "x" ]; then - print_msg "MSGBLD0220: " "Python files with formatting errors:" - for f in $python_files_with_errors; do - print_msg "MSGBLD0220: " "... $f" - done - if ! $RUNS_ON_CI; then - print_msg "" "Run pep8ify -w for autocorrection." - print_msg "" "" - fi - fi - - if ! $RUNS_ON_CI; then - print_msg "" "For detailed problem descriptions, consult the tagged messages above." - print_msg "" "Tags may be [VERA], [CPPC], [DIFF], [COPY], [NAME] and [PEP8]." - fi - exit 1 -else - print_msg "" "" - print_msg "MSGBLD0220: " "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" - print_msg "MSGBLD0220: " "+ STATIC CODE ANALYSIS TERMINATED SUCCESSFULLY ! +" - print_msg "MSGBLD0220: " "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" - print_msg "" "" -fi diff --git a/build_support/vera++.profile b/build_support/vera++.profile deleted file mode 100644 index 04f6a70725..0000000000 --- a/build_support/vera++.profile +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/tclsh -# This profile includes all the rules for checking NEST -# -# Do not apply T011 (curly braces), since that can get confused -# by conditional code inclusion. -# -# Do not apply F002 (file name length limits), since some benign model file -# names then become illegal; Vera++ 1.2.1 does not support parameters in -# profile files, so we cannot extend file name length limits here. -# -# Do not apply L006 (limit on file length), since some legacy sli code -# is too long; see also F002. - -set rules { - F001 - L001 - L002 - L003 - L005 - T001 - T004 - T005 - T006 - T007 - T010 - T012 - T013 - T017 - T018 - T019 -} diff --git a/build_support/version_info.sh b/build_support/version_info.sh new file mode 100644 index 0000000000..864fd48e77 --- /dev/null +++ b/build_support/version_info.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# version_info.sh +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see . + +# This script extracts version control information to be used in +# cmake/NestVersionInfo.cmake + +# If we can't run git at all, set everything to "unknown" +if ! command -v git > /dev/null 2>&1; then + echo unknown\;unknown\;unknown + exit 0 +fi + +HASH=$(git rev-parse HEAD) + +# Might fail if not on a branch, or no remote tracking branch is set +BRANCH_REMOTE=$(git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>&1) +if [ $? -eq 0 ]; then + REMOTE=$(echo ${BRANCH_REMOTE} | cut -d\/ -f1) +else + REMOTE="unknown" +fi + +# Might fail if we are not on a branch (i.e. in 'detached HEAD' mode) +BRANCH=$(git rev-parse --abbrev-ref HEAD) +if [ ! $? -eq 0 ] || [ ${BRANCH} = "HEAD" ]; then + BRANCH="unknown" +fi + +# Printing with semicolons as separators, as this will be interpreted as +# a list by cmake +echo ${HASH}\;${BRANCH}\;${REMOTE} diff --git a/cmake/CheckExtraCompilerFeatures.cmake b/cmake/CheckExtraCompilerFeatures.cmake index 79d437a632..079a6ea133 100644 --- a/cmake/CheckExtraCompilerFeatures.cmake +++ b/cmake/CheckExtraCompilerFeatures.cmake @@ -27,7 +27,7 @@ ####### NEST_EXITCODE_ABORT ######## function( NEST_CHECK_EXITCODE_ABORT ) - message( STATUS "Check the abort exitcode." ) + printInfo( "Check the abort exitcode." ) set( ABORT_ERR "" ) try_compile( COMPILE_VAR ${CMAKE_BINARY_DIR} @@ -49,13 +49,13 @@ function( NEST_CHECK_EXITCODE_ABORT ) file( REMOVE "${CMAKE_BINARY_DIR}/assert_value" ) endif () endif () - message( STATUS "Check the abort exitcode. ${ABORT_ERR}" ) + printInfo( "Check the abort exitcode. ${ABORT_ERR}" ) set( NEST_EXITCODE_ABORT ${ABORT_ERR} PARENT_SCOPE ) endfunction() ####### NEST_EXITCODE_SEGFAULT ######## function( NEST_CHECK_EXITCODE_SEGFAULT ) - message( STATUS "Check the segmentation fault exitcode." ) + printInfo( "Check the segmentation fault exitcode." ) set( SEG_ERR "" ) try_compile( COMPILE_VAR ${CMAKE_BINARY_DIR} @@ -77,13 +77,13 @@ function( NEST_CHECK_EXITCODE_SEGFAULT ) file( REMOVE "${CMAKE_BINARY_DIR}/segfault_value" ) endif () endif () - message( STATUS "Check the segmentation fault exitcode. ${SEG_ERR}" ) + printInfo( "Check the segmentation fault exitcode. ${SEG_ERR}" ) set( NEST_EXITCODE_SEGFAULT ${SEG_ERR} PARENT_SCOPE ) endfunction() ####### HAVE_CMATH_MAKROS_IGNORED ######## function( NEST_CHECK_HAVE_CMATH_MAKROS_IGNORED ) - message( STATUS "Check whether the compiler ignores cmath makros." ) + printInfo( "Check whether the compiler ignores cmath makros." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/CMathMacros.cxx @@ -94,13 +94,13 @@ function( NEST_CHECK_HAVE_CMATH_MAKROS_IGNORED ) else () set( HAVE_CMATH_MAKROS_IGNORED ON ) endif () - message( STATUS "Check whether the compiler ignores cmath makros. ${HAVE_CMATH_MAKROS_IGNORED}" ) + printInfo( "Check whether the compiler ignores cmath makros. ${HAVE_CMATH_MAKROS_IGNORED}" ) set( HAVE_CMATH_MAKROS_IGNORED ${HAVE_CMATH_MAKROS_IGNORED} PARENT_SCOPE) endfunction() ####### HAVE_ALPHA_CXX_STD_BUG ######## function( NEST_CHECK_HAVE_ALPHA_CXX_STD_BUG ) - message( STATUS "Check whether the compiler does NOT include <*.h> headers ISO conformant." ) + printInfo( "Check whether the compiler does NOT include <*.h> headers ISO conformant." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/AlphaCXXBug.cxx @@ -112,12 +112,12 @@ function( NEST_CHECK_HAVE_ALPHA_CXX_STD_BUG ) set( HAVE_ALPHA_CXX_STD_BUG ON ) endif () set( HAVE_ALPHA_CXX_STD_BUG ${HAVE_ALPHA_CXX_STD_BUG} PARENT_SCOPE ) - message( STATUS "Check whether the compiler does NOT include <*.h> headers ISO conformant. ${HAVE_ALPHA_CXX_STD_BUG}" ) + printInfo( "Check whether the compiler does NOT include <*.h> headers ISO conformant. ${HAVE_ALPHA_CXX_STD_BUG}" ) endfunction() ####### HAVE_SIGUSR_IGNORED ######## function( NEST_CHECK_HAVE_SIGUSR_IGNORED ) - message( STATUS "Check whether the compiler respects symbolic signal names in signal.h." ) + printInfo( "Check whether the compiler respects symbolic signal names in signal.h." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/SigUsrIgnored.cxx @@ -129,12 +129,12 @@ function( NEST_CHECK_HAVE_SIGUSR_IGNORED ) set( HAVE_SIGUSR_IGNORED ON ) endif () set( HAVE_SIGUSR_IGNORED ${HAVE_SIGUSR_IGNORED} PARENT_SCOPE ) - message( STATUS "Check whether the compiler respects symbolic signal names in signal.h. ${HAVE_SIGUSR_IGNORED}" ) + printInfo( "Check whether the compiler respects symbolic signal names in signal.h. ${HAVE_SIGUSR_IGNORED}" ) endfunction() ####### HAVE_STATIC_TEMPLATE_DECLARATION_FAIL ######## function( NEST_CHECK_HAVE_STATIC_TEMPLATE_DECLARATION_FAIL ) - message( STATUS "Check static template member declaration." ) + printInfo( "Check static template member declaration." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/StaticTemplateDeclaration.cxx @@ -146,12 +146,12 @@ function( NEST_CHECK_HAVE_STATIC_TEMPLATE_DECLARATION_FAIL ) set( HAVE_STATIC_TEMPLATE_DECLARATION_FAIL ON ) endif () set( HAVE_STATIC_TEMPLATE_DECLARATION_FAIL ${HAVE_STATIC_TEMPLATE_DECLARATION_FAIL} PARENT_SCOPE ) - message( STATUS "Check static template member declaration. ${HAVE_STATIC_TEMPLATE_DECLARATION_FAIL}" ) + printInfo( "Check static template member declaration. ${HAVE_STATIC_TEMPLATE_DECLARATION_FAIL}" ) endfunction() ####### HAVE_STL_VECTOR_CAPACITY_BASE_UNITY ######## function( NEST_CHECK_HAVE_STL_VECTOR_CAPACITY_BASE_UNITY ) - message( STATUS "Check for STL vector capacity base unity." ) + printInfo( "Check for STL vector capacity base unity." ) set( RUN_RESULT 0 ) set( RUN_RESULT__TRYRUN_OUTPUT "" ) try_run( RUN_RESULT COMPILE_RESULT @@ -166,12 +166,12 @@ function( NEST_CHECK_HAVE_STL_VECTOR_CAPACITY_BASE_UNITY ) set( HAVE_STL_VECTOR_CAPACITY_BASE_UNITY OFF ) endif () set( HAVE_STL_VECTOR_CAPACITY_BASE_UNITY ${HAVE_STL_VECTOR_CAPACITY_BASE_UNITY} PARENT_SCOPE ) - message( STATUS "Check for STL vector capacity base unity. ${HAVE_STL_VECTOR_CAPACITY_BASE_UNITY}" ) + printInfo( "Check for STL vector capacity base unity. ${HAVE_STL_VECTOR_CAPACITY_BASE_UNITY}" ) endfunction() ####### HAVE_STL_VECTOR_CAPACITY_DOUBLING ######## function( NEST_CHECK_HAVE_STL_VECTOR_CAPACITY_DOUBLING ) - message( STATUS "Check for STL vector capacity doubling strategy." ) + printInfo( "Check for STL vector capacity doubling strategy." ) set( RUN_RESULT 0 ) set( RUN_RESULT__TRYRUN_OUTPUT "" ) try_run( RUN_RESULT COMPILE_RESULT @@ -186,7 +186,7 @@ function( NEST_CHECK_HAVE_STL_VECTOR_CAPACITY_DOUBLING ) set( HAVE_STL_VECTOR_CAPACITY_DOUBLING OFF ) endif () set( HAVE_STL_VECTOR_CAPACITY_DOUBLING ${HAVE_STL_VECTOR_CAPACITY_DOUBLING} PARENT_SCOPE ) - message( STATUS "Check for STL vector capacity doubling strategy. ${HAVE_STL_VECTOR_CAPACITY_DOUBLING}" ) + printInfo( "Check for STL vector capacity doubling strategy. ${HAVE_STL_VECTOR_CAPACITY_DOUBLING}" ) endfunction() function( NEST_CHECK_HAVE_XLC_ICE_ON_USING ) @@ -196,7 +196,7 @@ function( NEST_CHECK_HAVE_XLC_ICE_ON_USING ) # # @author Hans E. Plesser - message( STATUS "Check whether the compiler fails with ICE." ) + printInfo( "Check whether the compiler fails with ICE." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/ICE.cxx @@ -208,12 +208,12 @@ function( NEST_CHECK_HAVE_XLC_ICE_ON_USING ) set( HAVE_XLC_ICE_ON_USING ON ) endif () set( HAVE_XLC_ICE_ON_USING ${HAVE_XLC_ICE_ON_USING} PARENT_SCOPE ) - message( STATUS "Check whether the compiler fails with ICE. ${HAVE_XLC_ICE_ON_USING}" ) + printInfo( "Check whether the compiler fails with ICE. ${HAVE_XLC_ICE_ON_USING}" ) endfunction() ####### Test if ::nan(...) is defined ####### function( NEST_CHECK_HAVE_STD_NAN ) - message( STATUS "Check if ::nan is available from cmath." ) + printInfo( "Check if ::nan is available from cmath." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/std_nan.cxx @@ -225,12 +225,12 @@ function( NEST_CHECK_HAVE_STD_NAN ) set( HAVE_STD_NAN OFF ) endif () set( HAVE_STD_NAN ${HAVE_STD_NAN} PARENT_SCOPE ) - message( STATUS "Check if ::nan is available from cmath. ${HAVE_STD_NAN}" ) + printInfo( "Check if ::nan is available from cmath. ${HAVE_STD_NAN}" ) endfunction() ####### Test if ::isnan(...) is defined ####### function( NEST_CHECK_HAVE_STD_ISNAN ) - message( STATUS "Check if ::isnan is available from cmath." ) + printInfo( "Check if ::isnan is available from cmath." ) try_compile( COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CheckFiles/std_isnan.cxx @@ -242,12 +242,12 @@ function( NEST_CHECK_HAVE_STD_ISNAN ) set( HAVE_STD_ISNAN OFF ) endif () set( HAVE_STD_ISNAN ${HAVE_STD_ISNAN} PARENT_SCOPE ) - message( STATUS "Check if ::isnan is available from cmath. ${HAVE_STD_ISNAN}" ) + printInfo( "Check if ::isnan is available from cmath. ${HAVE_STD_ISNAN}" ) endfunction() ####### Test if Random123 generators work ####### function( NEST_CHECK_RANDOM123 ) - message( STATUS "Check if Random123 generators work." ) + printInfo( "Check if Random123 generators work." ) try_run( RUN_RESULT COMPILE_RESULT ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Random123/tests/kat_cpp.cpp @@ -257,14 +257,14 @@ function( NEST_CHECK_RANDOM123 ) ARGS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Random123/tests/kat_vectors ) if ( NOT ${COMPILE_RESULT} ) - message("Compilation of Random123 tests failed") + printInfo("Compilation of Random123 tests failed") set( HAVE_RANDOM123 OFF ) elseif ( NOT "${RUN_RESULT}" EQUAL 0 ) - message( ${RUN_OUTPUT} ) + printInfo( ${RUN_OUTPUT} ) set( HAVE_RANDOM123 OFF ) else () set( HAVE_RANDOM123 ON ) endif () set( HAVE_RANDOM123 ${HAVE_RANDOM123} PARENT_SCOPE ) - message( STATUS "Check if Random123 generators work. ${HAVE_RANDOM123}" ) + printInfo( "Check if Random123 generators work. ${HAVE_RANDOM123}" ) endfunction() diff --git a/cmake/CheckIncludesSymbols.cmake b/cmake/CheckIncludesSymbols.cmake index adb7301d28..c3e5291714 100644 --- a/cmake/CheckIncludesSymbols.cmake +++ b/cmake/CheckIncludesSymbols.cmake @@ -71,7 +71,7 @@ if( CMAKE_SIZEOF_VOID_P EQUAL 4 ) set( CMAKE_EXTRA_INCLUDE_FILES "stdint.h" ) check_type_size( "long" LONG_SIZE ) if( NOT LONG_SIZE EQUAL 4 ) - message( FATAL_ERROR "Platform not supported: None-ILP32 data model for 32 bit architecture." ) + printError( "Platform not supported: None-ILP32 data model for 32 bit architecture." ) else () set( HAVE_32BIT_ARCH ON ) endif() diff --git a/cmake/ColorMessages.cmake b/cmake/ColorMessages.cmake new file mode 100644 index 0000000000..9173cf788e --- /dev/null +++ b/cmake/ColorMessages.cmake @@ -0,0 +1,69 @@ +# ColorMessages.cmake +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see . + +# This module defines functions to print warnings, errors and status with colors + + +string(ASCII 27 Esc) +set(Reset "${Esc}[m") +set(Bold "${Esc}[1m") +set(Red "${Esc}[31m") +set(Green "${Esc}[32m") +set(Blue "${Esc}[34m") +set(Cya "${Esc}[36m") +set(Magenta "${Esc}[35m") +set(Yellow "${Esc}[33m") +set(White "${Esc}[37m") +set(BoldRed "${Esc}[1;31m") +set(BoldGreen "${Esc}[1;32m") +set(BoldBlue "${Esc}[1;34m") +set(BoldCyan "${Esc}[1;36m") +set(BoldMagenta "${Esc}[1;35m") +set(BoldYellow "${Esc}[1;33m") +set(BoldWhite "${Esc}[1;37m") + +function(print) + set(option HAS_COLOR) + set(singleValued COLOR MODE TEXT) + cmake_parse_arguments(MSG "${option}" "${singleValued}" "" ${ARGN}) + if (${MSG_HAS_COLOR}) + if ("${MSG_MODE}" STREQUAL "FATAL") + message(FATAL_ERROR "${MSG_COLOR} ${MSG_TEXT} ${Reset}") + elseif ("${MSG_MODE}" STREQUAL "WARNING") + message(WARNING "${MSG_COLOR} ${MSG_TEXT}${Reset}") + else() + message(STATUS "${MSG_COLOR}${MSG_TEXT} ${Reset}") + endif() + else() + message(STATUS "${MSG_TEXT}") + endif() +endfunction() + + +function(printWarning TEXT) + print(HAS_COLOR MODE "WARNING" TEXT "Warning: ${TEXT}" COLOR ${Yellow}) +endfunction() + +function(printError TEXT) + print(HAS_COLOR MODE "FATAL" TEXT "Error: ${TEXT}" COLOR ${Red}) +endfunction() + +function(printInfo TEXT) + print(HAS_COLOR TEXT "Info: ${TEXT}" COLOR ${BoldGreen} ) +endfunction() diff --git a/cmake/ConfigureSummary.cmake b/cmake/ConfigureSummary.cmake index 133558fd3a..5e1c8a14bf 100644 --- a/cmake/ConfigureSummary.cmake +++ b/cmake/ConfigureSummary.cmake @@ -18,12 +18,16 @@ # along with NEST. If not, see . function( NEST_PRINT_CONFIG_SUMMARY ) - message( "" ) + # set summary color: here please choose appropriate color! + message( "${BoldCyan}" ) message( "--------------------------------------------------------------------------------" ) message( "NEST Configuration Summary" ) message( "--------------------------------------------------------------------------------" ) + message( "" ) - message( "Build type : ${CMAKE_BUILD_TYPE}" ) + if ( CMAKE_BUILD_TYPE ) + message( "Build type : ${CMAKE_BUILD_TYPE}" ) + endif () message( "Target System : ${CMAKE_SYSTEM_NAME}" ) message( "Cross Compiling : ${CMAKE_CROSSCOMPILING}" ) message( "C compiler : ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION} (${CMAKE_C_COMPILER})" ) @@ -31,69 +35,98 @@ function( NEST_PRINT_CONFIG_SUMMARY ) message( "C++ compiler : ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} (${CMAKE_CXX_COMPILER})" ) message( "C++ compiler flags : ${ALL_CXXFLAGS}" ) message( "Build dynamic : ${BUILD_SHARED_LIBS}" ) + + message( "" ) + if ( with-models ) + message( "Built-in models : ${BUILTIN_MODELS}" ) + else () + message( "Built-in modelset : ${with-modelset}" ) + endif () + message( "" ) - message( "Built-in modules : ${SLI_MODULES}" ) if ( external-modules ) message( "User modules : ${external-modules}" ) foreach ( mod ${external-modules} ) message( " ${mod}:" ) message( " Header : ${${mod}_EXT_MOD_INCLUDE}" ) message( " Library : ${${mod}_EXT_MOD_LIBRARY}" ) - message( "" ) endforeach () else () message( "User modules : None" ) endif () + message( "" ) if ( HAVE_PYTHON ) message( "Python bindings : Yes (Python ${Python_VERSION}: ${PYTHON})" ) - message( " Includes : ${Python_INCLUDE_DIRS}" ) - message( " Libraries : ${Python_LIBRARIES}" ) - message( "" ) + message( " Includes : ${Python_INCLUDE_DIRS}" ) + message( " Libraries : ${Python_LIBRARIES}" ) if ( CYTHON_FOUND ) - message( "Cython bindings : Yes (Cython ${CYTHON_VERSION}: ${CYTHON_EXECUTABLE})" ) + message( " Cython : Yes (Cython ${CYTHON_VERSION}: ${CYTHON_EXECUTABLE})" ) else () - message( "Cython bindings : No. Make sure to cythonize `pynestkernel.pyx` before." ) + message( " Cython : No. Make sure to cythonize `pynestkernel.pyx` manually." ) endif () - if ( HAVE_MPI4PY ) - message( "MPI4PY header : Yes (${PY_MPI4PY}/include)" ) + message( " MPI4Py : Yes (${PY_MPI4PY}/include)" ) else() - message( "MPI4PY header : NO " ) + message( " MPI4Py : No " ) endif () else () message( "Python bindings : No" ) endif () + message( "" ) + if ( BUILD_DOCS ) + message( "Documentation : Yes" ) + if ( BUILD_SLI_DOCS) + message( " SLI doc build : Yes" ) + else() + message( " SLI doc build : No" ) + endif() + if ( BUILD_SPHINX_DOCS ) + message( " Sphinx doc build : Yes (${SPHINX_EXECUTABLE})" ) + else() + message( " Sphinx doc build : No" ) + endif() + if ( BUILD_DOXYGEN_DOCS ) + message( " Doxygen doc build : Yes (${DOXYGEN_EXECUTABLE})" ) + message( " Graphviz : Yes (${DOXYGEN_DOT_EXECUTABLE})" ) + else() + message( " Doxygen doc build : No" ) + endif() + else () + message( "Documentation : No" ) + endif () + + message( "" ) if ( OPENMP_FOUND ) message( "Use threading : Yes (OpenMP: ${OpenMP_CXX_FLAGS})" ) else () message( "Use threading : No" ) endif () + message( "" ) if ( HAVE_GSL ) message( "Use GSL : Yes (GSL ${GSL_VERSION})" ) message( " Includes : ${GSL_INCLUDE_DIRS}" ) message( " Libraries : ${GSL_LIBRARIES}" ) - message( "" ) else () message( "Use GSL : No" ) endif () + message( "" ) if ( HAVE_READLINE ) message( "Use Readline : Yes (GNU Readline ${READLINE_VERSION})" ) message( " Includes : ${READLINE_INCLUDE_DIRS}" ) message( " Libraries : ${READLINE_LIBRARIES}" ) - message( "" ) else () message( "Use Readline : No" ) endif () + message( "" ) if ( HAVE_LIBLTDL ) message( "Use libltdl : Yes (LTDL ${LTDL_VERSION})" ) message( " Includes : ${LTDL_INCLUDE_DIRS}" ) message( " Libraries : ${LTDL_LIBRARIES}" ) - message( "" ) else () message( "Use libltdl : No" ) if ( APPLE AND with-ltdl AND NOT static-libraries ) @@ -103,94 +136,105 @@ function( NEST_PRINT_CONFIG_SUMMARY ) endif () endif () - if ( DOXYGEN_FOUND ) - message( "Use doxygen : Yes (${DOXYGEN_EXECUTABLE})" ) - message( " : target `doc` available" ) - if ( DOXYGEN_DOT_FOUND ) - message( " `dot` available : Yes (${DOXYGEN_DOT_EXECUTABLE})" ) - message( " : target `fulldoc` available" ) - endif () - else () - message( "Use doxygen : No" ) - endif () - + message( "" ) if ( HAVE_MPI ) message( "Use MPI : Yes (MPI: ${MPI_CXX_COMPILER})" ) - message( " FLAGS : ${MPI_CXX_COMPILE_FLAGS}" ) message( " Includes : ${MPI_CXX_INCLUDE_PATH}" ) - message( " Link Flags : ${MPI_CXX_LINK_FLAGS}" ) message( " Libraries : ${MPI_CXX_LIBRARIES}" ) - message( "" ) + if ( MPI_CXX_COMPILE_FLAGS ) + message( " Compile Flags : ${MPI_CXX_COMPILE_FLAGS}" ) + endif () + if ( MPI_CXX_LINK_FLAGS ) + message( " Link Flags : ${MPI_CXX_LINK_FLAGS}" ) + endif () + set( MPI_LAUNCHER "${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_PREFLAGS} ${MPIEXEC_POSTFLAGS} " ) + string(REPLACE " " " " MPI_LAUNCHER ${MPI_LAUNCHER}) + message( " Launcher : ${MPI_LAUNCHER}") else () message( "Use MPI : No" ) endif () + message( "" ) if ( TIMER_DETAILED ) message( "Detailed timers : Yes" ) - message( "" ) else () message( "Detailed timers : No" ) - message( "" ) endif () + message( "" ) if ( HAVE_MUSIC ) message( "Use MUSIC : Yes (MUSIC ${MUSIC_VERSION})" ) message( " Includes : ${MUSIC_INCLUDE_DIRS}" ) message( " Libraries : ${MUSIC_LIBRARIES}" ) - message( "" ) else () message( "Use MUSIC : No" ) endif () + message( "" ) if ( HAVE_LIBNEUROSIM ) message( "Use libneurosim : Yes (LibNeurosim ${LIBNEUROSIM_VERSION})" ) message( " Includes : ${LIBNEUROSIM_INCLUDE_DIRS}" ) message( " Libraries : ${LIBNEUROSIM_LIBRARIES}" ) - message( "" ) else () message( "Use libneurosim : No" ) endif () + message( "" ) if ( HAVE_BOOST ) message( "Use Boost : Yes (Boost ${BOOST_VERSION})" ) message( " Includes : ${BOOST_INCLUDE_DIR}" ) message( " Libraries : ${BOOST_LIBRARIES}" ) - message( "" ) else () message( "Use Boost : No" ) endif () - if ( with-libraries ) - message( "Additional libraries:" ) - foreach ( lib ${with-libraries} ) - message( " ${lib}" ) - endforeach () - endif () - + message( "" ) if ( HAVE_SIONLIB ) message( "Use SIONlib : Yes (SIONlib ${SION_EXECUTABLE})") message( " Includes : ${SIONLIB_INCLUDE}" ) message( " Libraries : ${SIONLIB_LIBRARIES}" ) - message( "" ) else () message( "Use SIONlib : No") endif () + message( "" ) + if ( HAVE_HDF5 ) + message( "Use HDF5 : Yes (HDF5 ${HDF5_VERSION})" ) + message( " Includes : ${HDF5_INCLUDE_DIR}" ) + message( " Libraries : ${HDF5_LIBRARIES}" ) + else() + message( "Use HDF5 : No" ) + endif() + + if ( with-libraries ) + message( "" ) + message( "Additional libraries:" ) + foreach ( lib ${with-libraries} ) + message( " ${lib}" ) + endforeach () + endif () + if ( with-includes ) + message( "" ) message( "Additional includes:" ) foreach ( inc ${with-includes} ) message( " -I${inc}" ) endforeach () endif () - message( "" ) - if ( with-intel-compiler-flags AND NOT ("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") ) + message( "" ) message( "You have specified flags for the Intel compiler (-Dwith-intel-compiler-flags)," ) message( "but the Intel compiler is not used. These flags are therefore ignored." ) + endif () + + if ( HAVE_MPI ) message( "" ) + message( "For details on setting specific flags for your MPI launcher command, see the" ) + message( "CMake documentation at https://cmake.org/cmake/help/latest/module/FindMPI.html") endif () + message( "" ) message( "--------------------------------------------------------------------------------" ) message( "" ) message( "The NEST executable will be installed to:" ) @@ -199,9 +243,11 @@ function( NEST_PRINT_CONFIG_SUMMARY ) message( "NEST dynamic libraries and user modules will be installed to:" ) message( " ${CMAKE_INSTALL_FULL_LIBDIR}/nest/" ) message( "" ) - message( "Documentation and examples will be installed to:" ) - message( " ${CMAKE_INSTALL_FULL_DOCDIR}/" ) - message( "" ) + if ( BUILD_DOCS ) + message( "Documentation and examples will be installed to:" ) + message( " ${CMAKE_INSTALL_FULL_DOCDIR}/" ) + message( "" ) + endif() if ( HAVE_PYTHON ) message( "PyNEST will be installed to:" ) message( " ${CMAKE_INSTALL_PREFIX}/${PYEXECDIR}" ) @@ -232,18 +278,11 @@ function( NEST_PRINT_CONFIG_SUMMARY ) message( " make installcheck" ) message( "" ) - if ( HAVE_MPI ) - message( "You have configured NEST with support for distributed computing." ) - message( "After running make install, please tell NEST how to start a" ) - message( "distributed job on your system before running make installcheck." ) - message( "You can do this by modifying the template for command /mpirun in" ) - message( "~/.nestrc, which is created by the first start of NEST." ) - message( "" ) - endif () - message( "If you experience problems with the installation or the use of NEST," ) message( "please see https://www.nest-simulator.org/frequently_asked_questions" ) message( "or go to https://www.nest-simulator.org/community to find out how to" ) message( "join the user mailing list." ) - message( "" ) + + # reset output color + message( "${Reset}" ) endfunction() diff --git a/cmake/FindCython.cmake b/cmake/FindCython.cmake index c41f68fe9a..682e443eb1 100644 --- a/cmake/FindCython.cmake +++ b/cmake/FindCython.cmake @@ -54,7 +54,7 @@ if ( NOT CYTHON_EXECUTABLE STREQUAL "CYTHON_EXECUTABLE-NOTFOUND" ) string( REGEX REPLACE ".* ([0-9]+\\.[0-9]+(\\.[0-9]+)?).*" "\\1" CYTHON_VERSION "${CYTHON_VAR_OUTPUT}" ) else () - message( FATAL_ERROR "Cython error: ${CYTHON_ERR_OUTPUT}\nat ${CYTHON_EXECUTABLE}") + printError( "Cython error: ${CYTHON_ERR_OUTPUT}\nat ${CYTHON_EXECUTABLE}") endif () endif () diff --git a/examples/NESTServerClient/examples/__init__.py b/cmake/FindPandoc.cmake similarity index 74% rename from examples/NESTServerClient/examples/__init__.py rename to cmake/FindPandoc.cmake index 1a2f534c46..dcb302723b 100644 --- a/examples/NESTServerClient/examples/__init__.py +++ b/cmake/FindPandoc.cmake @@ -1,23 +1,24 @@ -# -*- coding: utf-8 -*- -# -# __init__.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - - -from .NESTServerClient import * +# cmake/FindPandoc.cmake +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see . + +include(FindPackageHandleStandardArgs) +find_program(PANDOC_EXECUTABLE pandoc) +mark_as_advanced(PANDOC_EXECUTABLE) + +find_package_handle_standard_args(Pandoc DEFAULT_MSG PANDOC_EXECUTABLE) \ No newline at end of file diff --git a/cmake/FindSIONlib.cmake b/cmake/FindSIONlib.cmake index cde4015835..6bc0fa3415 100644 --- a/cmake/FindSIONlib.cmake +++ b/cmake/FindSIONlib.cmake @@ -119,7 +119,7 @@ if ( NOT SIONLIB_CONFIG STREQUAL "SIONLIB_CONFIG-NOTFOUND" ) if ( NOT FULL_${lib_name} STREQUAL "FULL_${lib_name}-NOTFOUND" ) set( SIONLIB_LIBRARIES ${SIONLIB_LIBRARIES} ${FULL_${lib_name}} CACHE INTERNAL "sionlib" ) else () - message( WARNING "Cannot find SIONlib library '${lib_name}'." ) + printWarning( "Cannot find SIONlib library '${lib_name}'." ) unset( SIONLIB_LIBRARIES CACHE ) break() endif () diff --git a/cmake/FindSphinx.cmake b/cmake/FindSphinx.cmake new file mode 100644 index 0000000000..b294f4ae87 --- /dev/null +++ b/cmake/FindSphinx.cmake @@ -0,0 +1,31 @@ +# Based on information found on https://www.vortech.nl/en/integrating-sphinx-in-cmake + +include(FindPackageHandleStandardArgs) +find_package(Python3 COMPONENTS Interpreter REQUIRED) +if( Python_FOUND ) + get_filename_component(_PYTHON_DIR "${Python_EXECUTABLE}" DIRECTORY) + set( + _PYTHON_PATHS + "${_PYTHON_DIR}" + "${_PYTHON_DIR}/bin" + "${_PYTHON_DIR}/Scripts" + ) +endif() + +function(check_sphinx validator_result_var item) + execute_process(COMMAND "${item}" "--version" ERROR_VARIABLE _err) + if(_err) + set(${validator_result_var} FALSE PARENT_SCOPE) + endif() +endfunction() + +find_program( + SPHINX_EXECUTABLE + NAMES sphinx-build sphinx-build.exe + HINTS ${_PYTHON_PATHS} + VALIDATOR check_sphinx + ) + +mark_as_advanced(SPHINX_EXECUTABLE) + +find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE) diff --git a/cmake/GetTriple.cmake b/cmake/GetTriple.cmake index 18f3387777..686ea2e79a 100644 --- a/cmake/GetTriple.cmake +++ b/cmake/GetTriple.cmake @@ -51,7 +51,7 @@ function( get_host_triple out out_arch out_vendor out_os ) set( ${out_vendor} ${vendor} PARENT_SCOPE ) set( ${out_os} ${os} PARENT_SCOPE ) - message( STATUS "Host triple: ${triple}" ) + printInfo( "Host triple: ${triple}" ) endfunction () @@ -88,5 +88,5 @@ function( get_target_triple out out_arch out_vendor out_os ) set( ${out_vendor} ${vendor} PARENT_SCOPE ) set( ${out_os} ${os} PARENT_SCOPE ) - message(STATUS "Target triple: ${triple}") + printInfo( "Target triple: ${triple}") endfunction() diff --git a/cmake/NestVersionInfo.cmake b/cmake/NestVersionInfo.cmake index 158cd49cf3..90df0f9c1a 100644 --- a/cmake/NestVersionInfo.cmake +++ b/cmake/NestVersionInfo.cmake @@ -17,59 +17,31 @@ # You should have received a copy of the GNU General Public License # along with NEST. If not, see . -# Determine NEST version based on git branch +# Put NEST version number and version control information into CMake variables # # This module defines -# NEST_VERSION_BRANCH, the current git branch (nest-3.0) -# NEST_VERSION_SUFFIX, set using -Dwith-version-suffix=. ("-pre") -# NEST_VERSION, the numeric version number plus the suffix ("3.0-pre") -# NEST_VERSION_GITHASH, the current git revision hash (empty for tarballs) ("dd47c39ce") -# NEST_VERSION_STRING, the full NEST version string ("nest-3.0-pre@dd47c39ce") +# NEST_VERSION, the numeric version number including a suffix +# NEST_VERSION_GIT, a boolean indicating if source is managed by git +# NEST_VERSION_GIT_HASH, the current git revision hash (unset for tarballs) +# NEST_VERSION_GIT_BRANCH, the current git branch (unset for tarballs) +# NEST_VERSION_GIT_REMOTE, the upstream remote (if any) of the tracked branch (unset for tarballs) # -# In release branches, the string "UNKNOWN" below has to be replaced -# with the proper version (e.g. "nest-2.20") in order to get the -# correct version number if building from tarballs. - macro(get_version_info) - if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") - execute_process( - COMMAND "git" "rev-parse" "--short" "HEAD" - OUTPUT_VARIABLE NEST_VERSION_GITHASH - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - ) - - execute_process( - COMMAND "git" "rev-parse" "--abbrev-ref" "HEAD" - OUTPUT_VARIABLE NEST_VERSION_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - ) - - if (NEST_VERSION_SUFFIX) - set(versionsuffix "-${NEST_VERSION_SUFFIX}") - endif() - - if (NEST_VERSION_GITHASH) - set(githash "@${NEST_VERSION_GITHASH}") - endif() - endif() - - if (NOT NEST_VERSION_BRANCH) - set(NEST_VERSION_BRANCH "UNKNOWN") - endif() - - string(SUBSTRING "${NEST_VERSION_BRANCH}" 0 5 isRelease) - if (isRelease STREQUAL "nest-") - string(SUBSTRING "${NEST_VERSION_BRANCH}${versionsuffix}" 5 99999 NEST_VERSION) - else() - set(NEST_VERSION "${NEST_VERSION_BRANCH}${versionsuffix}") - endif() - - set(NEST_VERSION_STRING "${NEST_VERSION_BRANCH}${versionsuffix}${githash}") - unset(branchname) - unset(versionsuffix) + file (STRINGS "${CMAKE_SOURCE_DIR}/VERSION" NEST_VERSION ) + + if (EXISTS "${CMAKE_SOURCE_DIR}/.git") + set( NEST_VERSION_GIT 1 ) + execute_process( + COMMAND "bash" "${PROJECT_SOURCE_DIR}/build_support/version_info.sh" + OUTPUT_VARIABLE NEST_VERSION_INFO + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + ) + list( GET NEST_VERSION_INFO 0 NEST_VERSION_GIT_HASH ) + list( GET NEST_VERSION_INFO 1 NEST_VERSION_GIT_BRANCH ) + list( GET NEST_VERSION_INFO 2 NEST_VERSION_GIT_REMOTE ) + endif() endmacro() diff --git a/cmake/ProcessOptions.cmake b/cmake/ProcessOptions.cmake index fc4bd449da..e20c3086df 100644 --- a/cmake/ProcessOptions.cmake +++ b/cmake/ProcessOptions.cmake @@ -22,21 +22,14 @@ # add custom warnings and optimizations function( NEST_PROCESS_WITH_OPTIMIZE ) if ( with-optimize ) - if ( with-optimize STREQUAL "ON" ) + string(TOUPPER "${with-optimize}" WITHOPTIMIZE) + if ( WITHOPTIMIZE STREQUAL "ON" ) set( with-optimize "-O2" ) endif () - foreach ( flag ${with-optimize} ) - set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE ) - endforeach () - endif () -endfunction() - -function( NEST_PROCESS_VERSION_SUFFIX ) - if ( with-version-suffix ) - foreach ( flag ${with-version-suffix} ) - set( NEST_VERSION_SUFFIX "${flag}" PARENT_SCOPE ) - endforeach () + set(OPTIMIZATION_FLAGS "") + string(JOIN " " OPTIMIZATION_FLAGS ${with-optimize} ) + set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPTIMIZATION_FLAGS}" PARENT_SCOPE ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPTIMIZATION_FLAGS}" PARENT_SCOPE ) endif () endfunction() @@ -87,13 +80,13 @@ endfunction() function( NEST_PROCESS_WITH_LIBRARIES ) if ( with-libraries ) if ( with-libraries STREQUAL "ON" ) - message( FATAL_ERROR "-Dwith-libraries requires full library paths." ) + printError( "-Dwith-libraries requires full library paths." ) endif () foreach ( lib ${with-libraries} ) if ( EXISTS "${lib}" ) link_libraries( "${lib}" ) else () - message( FATAL_ERROR "Library '${lib}' does not exist!" ) + printError( "Library '${lib}' does not exist!" ) endif () endforeach () endif () @@ -102,13 +95,13 @@ endfunction() function( NEST_PROCESS_WITH_INCLUDES ) if ( with-includes ) if ( with-includes STREQUAL "ON" ) - message( FATAL_ERROR "-Dwith-includes requires full paths." ) + printError( "-Dwith-includes requires full paths." ) endif () foreach ( inc ${with-includes} ) if ( IS_DIRECTORY "${inc}" ) include_directories( "${inc}" ) else () - message( FATAL_ERROR "Include path '${inc}' does not exist!" ) + printError( "Include path '${inc}' does not exist!" ) endif () endforeach () endif () @@ -117,13 +110,13 @@ endfunction() function( NEST_PROCESS_WITH_DEFINES ) if ( with-defines ) if ( with-defines STREQUAL "ON" ) - message( FATAL_ERROR "-Dwith-defines requires compiler defines -DXYZ=... ." ) + printError( "-Dwith-defines requires compiler defines -DXYZ=... ." ) endif () foreach ( def ${with-defines} ) if ( "${def}" MATCHES "^-D.*" ) add_definitions( "${def}" ) else () - message( FATAL_ERROR "Define '${def}' does not match '-D.*' !" ) + printError( "Define '${def}' does not match '-D.*' !" ) endif () endforeach () endif () @@ -151,7 +144,7 @@ function( NEST_PROCESS_STATIC_LIBRARIES ) if ( static-libraries ) if ( with-readline ) - message( FATAL_ERROR "-Dstatic-libraries=ON requires -Dwith-readline=OFF" ) + printError( "-Dstatic-libraries=ON requires -Dwith-readline=OFF" ) endif () set( BUILD_SHARED_LIBS OFF PARENT_SCOPE ) @@ -212,7 +205,8 @@ function( NEST_PROCESS_STATIC_LIBRARIES ) "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}/nest" # for libraries (except pynestkernel) "\$ORIGIN/../../${CMAKE_INSTALL_LIBDIR}/nest" - # for pynestkernel: origin at /lib/python3.x/site-packages/nest + # for pynestkernel: origin at /lib(64)/python3.x/site-packages/nest + # while libs are at the root of that at /lib(64)/nest "\$ORIGIN/../../../nest" PARENT_SCOPE ) endif () @@ -244,7 +238,7 @@ function( NEST_PROCESS_EXTERNAL_MODULES ) HINTS "${CMAKE_INSTALL_FULL_INCLUDEDIR}/${mod}module" ) if ( ${mod}_EXT_MOD_INCLUDE STREQUAL "${mod}_EXT_MOD_INCLUDE-NOTFOUND" ) - message( FATAL_ERROR "Cannot find header for external module '${mod}'. " + printError( "Cannot find header for external module '${mod}'. " "Should be '${CMAKE_INSTALL_FULL_INCLUDEDIR}/${mod}module/${mod}module.h' ." ) endif () list( APPEND EXTERNAL_MODULE_INCLUDES ${${mod}_EXT_MOD_INCLUDE} ) @@ -255,7 +249,7 @@ function( NEST_PROCESS_EXTERNAL_MODULES ) HINTS "${CMAKE_INSTALL_FULL_LIBDIR}/nest" ) if ( ${mod}_EXT_MOD_LIBRARY STREQUAL "${mod}_EXT_MOD_LIBRARY-NOTFOUND" ) - message( FATAL_ERROR "Cannot find library for external module '${mod}'." ) + printError( "Cannot find library for external module '${mod}'." ) endif () list( APPEND EXTERNAL_MODULE_LIBRARIES "${${mod}_EXT_MOD_LIBRARY}" ) endforeach () @@ -358,7 +352,7 @@ endfunction() function( NEST_PROCESS_WITH_PYTHON ) # Find Python set( HAVE_PYTHON OFF PARENT_SCOPE ) - + if ( ${with-python} STREQUAL "ON" ) # Localize the Python interpreter and ABI @@ -370,7 +364,7 @@ function( NEST_PROCESS_WITH_PYTHON ) " Please clear your CMake cache and build folder and verify that CMake" " is up-to-date (3.18+)." ) - message( WARNING "${PYABI_WARN}") + printWarning("${PYABI_WARN}") else() find_package( Python 3.8 REQUIRED Interpreter Development.Module ) endif() @@ -382,7 +376,7 @@ function( NEST_PROCESS_WITH_PYTHON ) OUTPUT_VARIABLE Python_InVirtualEnv OUTPUT_STRIP_TRAILING_WHITESPACE ) if ( NOT Python_InVirtualEnv AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) - message( FATAL_ERROR "No virtual Python environment found and no installation prefix specified. " + printError( "No virtual Python environment found and no installation prefix specified. " "Please either build and install NEST in a virtual Python environment or specify CMake option -DCMAKE_INSTALL_PREFIX=.") endif() @@ -415,7 +409,7 @@ function( NEST_PROCESS_WITH_PYTHON ) endif () elseif ( ${with-python} STREQUAL "OFF" ) else () - message( FATAL_ERROR "Invalid option: -Dwith-python=" ${with-python} ) + printError( "Invalid value -Dwith-python=${with-python}, please use 'ON' or 'OFF'" ) endif () endfunction() @@ -429,7 +423,7 @@ function( NEST_PROCESS_WITH_OPENMP ) # Find OPENMP if ( with-openmp ) if ( NOT "${with-openmp}" STREQUAL "ON" ) - message( STATUS "Set OpenMP argument: ${with-openmp}") + printInfo( "Set OpenMP argument: ${with-openmp}") # set variables in this scope set( OPENMP_FOUND ON ) set( OpenMP_C_FLAGS "${with-openmp}" ) @@ -446,7 +440,7 @@ function( NEST_PROCESS_WITH_OPENMP ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" PARENT_SCOPE ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" PARENT_SCOPE ) else() - message( FATAL_ERROR "CMake can not find OpenMP." ) + printError( "CMake can not find OpenMP." ) endif () endif () @@ -462,7 +456,7 @@ function( NEST_PROCESS_WITH_MPI ) # Find MPI set( HAVE_MPI OFF PARENT_SCOPE ) if ( with-mpi ) - find_package( MPI ) + find_package( MPI REQUIRED ) if ( MPI_CXX_FOUND ) set( HAVE_MPI ON PARENT_SCOPE ) @@ -535,7 +529,7 @@ function( NEST_PROCESS_WITH_MUSIC ) endif () if ( NOT HAVE_MPI ) - message( FATAL_ERROR "MUSIC requires -Dwith-mpi=ON." ) + printError( "MUSIC requires -Dwith-mpi=ON." ) endif () find_package( Music ) @@ -561,7 +555,7 @@ function( NEST_PROCESS_WITH_SIONLIB ) endif() if ( NOT HAVE_MPI ) - message( FATAL_ERROR "SIONlib requires -Dwith-mpi=ON." ) + printError( "SIONlib requires -Dwith-mpi=ON." ) endif () find_package( SIONlib ) @@ -602,6 +596,31 @@ function( NEST_PROCESS_WITH_BOOST ) endif () endfunction() +function( NEST_PROCESS_WITH_HDF5 ) + + set( HAVE_HDF5 OFF PARENT_SCOPE ) + if ( with-hdf5 ) + if ( NOT ${with-hdf5} STREQUAL "ON" ) + # a path is set + set( HDF5_ROOT "${with-hdf5}" ) + endif () + + find_package( HDF5 REQUIRED COMPONENTS C CXX ) + if ( HDF5_FOUND ) + # export found variables to parent scope + set( HAVE_HDF5 ON PARENT_SCOPE ) + set( HDF5_FOUND "${HDF5_FOUND}" PARENT_SCOPE ) + set( HDF5_LIBRARIES "${HDF5_LIBRARIES}" PARENT_SCOPE ) + set( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" PARENT_SCOPE ) + set( HDF5_VERSION "${HDF5_VERSION}" PARENT_SCOPE ) + set( HDF5_HL_LIBRARIES "${HDF5_HL_LIBRARIES}" PARENT_SCOPE ) + set( HDF5_DEFINITIONS "${HDF5_DEFINITIONS}" PARENT_SCOPE ) + include_directories( ${HDF5_INCLUDE_DIRS} ) + + endif () + endif () +endfunction() + function( NEST_PROCESS_TARGET_BITS_SPLIT ) if ( target-bits-split ) # set to value according to defines in config.h @@ -610,22 +629,46 @@ function( NEST_PROCESS_TARGET_BITS_SPLIT ) elseif ( ${target-bits-split} STREQUAL "hpc" ) set( TARGET_BITS_SPLIT 1 PARENT_SCOPE ) else() - message( FATAL_ERROR "Invalid target-bits-split selected." ) + printError( "Invalid target-bits-split selected." ) endif() endif() endfunction() -function( NEST_DEFAULT_MODULES ) - # requires HAVE_LIBNEUROSIM set - # Static modules - set( SLI_MODULES models ) - set( SLI_MODULES ${SLI_MODULES} PARENT_SCOPE ) +function( NEST_PROCESS_MODELS ) + # check mutual exclusivity of -Dwith-models and -Dwith-modelset + if ( ( NOT with-modelset STREQUAL "full" ) AND with-models ) + printError( "Only one of -Dwith-modelset or -Dwith-models can be specified." ) + endif () - set( SLI_MODULE_INCLUDE_DIRS ) - foreach ( mod ${SLI_MODULES} ) - list( APPEND SLI_MODULE_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/${mod}" ) - endforeach () - set( SLI_MODULE_INCLUDE_DIRS ${SLI_MODULE_INCLUDE_DIRS} PARENT_SCOPE ) + # get the list of models to be built in either from the commandline + # argument directly or by reading the provided modelset file + if ( with-models ) + set( BUILTIN_MODELS ${with-models} ) + else() + if ( NOT EXISTS "${PROJECT_SOURCE_DIR}/modelsets/${with-modelset}" ) + printError( "Cannot find modelset configuration 'modelsets/${with-modelset}'" ) + endif () + file(STRINGS "${PROJECT_SOURCE_DIR}/modelsets/${with-modelset}" BUILTIN_MODELS) + endif() + + # We use python3 here directly, as some of the CI jobs don't seem to have PYTHON + # or Python_EXECUTABLE set properly. + execute_process( + COMMAND "python3" "${PROJECT_SOURCE_DIR}/build_support/generate_modelsmodule.py" + "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}" "${BUILTIN_MODELS}" + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE MODELS_SOURCES + ERROR_VARIABLE MODELS_SOURCES_ERROR + # Uncomment for debugging: ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE COMMAND_ECHO STDOUT + COMMAND_ERROR_IS_FATAL ANY + ) + + if ( MODELS_SOURCES_ERROR ) + printError( ${MODELS_SOURCES_ERROR} ) + endif() + + set( BUILTIN_MODELS ${BUILTIN_MODELS} PARENT_SCOPE ) + set( MODELS_SOURCES_GENERATED ${MODELS_SOURCES} PARENT_SCOPE ) endfunction() function( NEST_PROCESS_WITH_MPI4PY ) @@ -639,3 +682,30 @@ function( NEST_PROCESS_WITH_MPI4PY ) endif () endfunction () + +function( NEST_PROCESS_USERDOC ) + if ( with-userdoc ) + message( STATUS "Configuring user documentation" ) + find_package( Sphinx REQUIRED) + find_package( Pandoc REQUIRED) + set( BUILD_SLI_DOCS ON PARENT_SCOPE ) + set( BUILD_SPHINX_DOCS ON PARENT_SCOPE ) + set( BUILD_DOCS ON PARENT_SCOPE ) + endif () +endfunction () + +function( NEST_PROCESS_DEVDOC ) + if ( with-devdoc ) + message( STATUS "Configuring developer documentation" ) + find_package( Doxygen REQUIRED dot ) + set( BUILD_DOXYGEN_DOCS ON PARENT_SCOPE ) + set( BUILD_DOCS ON PARENT_SCOPE ) + endif () +endfunction () + +function( NEST_PROCESS_FULL_LOGGING ) + if ( with-full-logging ) + message( STATUS "Configuring full logging" ) + set( ENABLE_FULL_LOGGING ON PARENT_SCOPE ) + endif () +endfunction () diff --git a/cmake/UseCython.cmake b/cmake/UseCython.cmake index 2c4f90e4e5..e29d447ea7 100644 --- a/cmake/UseCython.cmake +++ b/cmake/UseCython.cmake @@ -316,7 +316,7 @@ function( cython_add_standalone_executable _name ) set( main_module ${cython_arguments_MAIN_MODULE} ) endif () if ( NOT main_module ) - message( FATAL_ERROR "main module not found." ) + printError( "main module not found." ) endif () get_filename_component( main_module_we "${main_module}" NAME_WE ) set( CYTHON_FLAGS ${CYTHON_FLAGS} --embed ) diff --git a/cmake/WriteStaticModules_h.cmake b/cmake/WriteStaticModules_h.cmake index b73a2c7c6c..eb6681f438 100644 --- a/cmake/WriteStaticModules_h.cmake +++ b/cmake/WriteStaticModules_h.cmake @@ -24,10 +24,7 @@ function( NEST_WRITE_STATIC_MODULE_HEADER filename ) file( WRITE "${filename}" "#ifndef STATIC_MODULES_H\n" ) file( APPEND "${filename}" "#define STATIC_MODULES_H\n\n" ) - file( APPEND "${filename}" "// Add all in source modules:\n" ) - foreach ( mod ${SLI_MODULES} ) - file( APPEND "${filename}" "#include \"${mod}module.h\"\n" ) - endforeach () + file( APPEND "${filename}" "#include \"modelsmodule.h\"\n" ) # when we build statically, we need to add headers and addmodule for external modules # just as if it were a in source module. @@ -43,13 +40,7 @@ function( NEST_WRITE_STATIC_MODULE_HEADER filename ) # start `add_static_modules` function file( APPEND "${filename}" "void add_static_modules( SLIInterpreter& engine )\n{\n" ) - file( APPEND "${filename}" " // Add all in source modules:\n" ) - foreach ( mod ${SLI_MODULES} ) - # get class name, is always in nest namespace - file( STRINGS "${PROJECT_SOURCE_DIR}/${mod}/${mod}module.h" module_class_string REGEX "class.*: public SLIModule" ) - string( REGEX REPLACE "class ([a-zA-Z0-9_]+) : public SLIModule" "\\1" module_class ${module_class_string} ) - file( APPEND "${filename}" " engine.addmodule( new nest::${module_class}() );\n" ) - endforeach () + file( APPEND "${filename}" " engine.addmodule( new nest::ModelsModule() );\n" ) # when we build statically, we need to add headers and addmodule for external modules # just as if it were a in source module. @@ -59,14 +50,14 @@ function( NEST_WRITE_STATIC_MODULE_HEADER filename ) # get namespace: file( STRINGS "${mod_header}" module_namespace_string REGEX "^namespace.*" ) if ( NOT module_namespace_string ) - message( FATAL_ERROR "Could not find namespace in '${mod_header}'." ) + printError( "Could not find namespace in '${mod_header}'." ) endif () string( REGEX REPLACE "namespace ([a-zA-Z0-9_]+)" "\\1" module_namespace ${module_namespace_string} ) # get class name file( STRINGS "${mod_header}" module_class_string REGEX "^class.*: public SLIModule" ) if ( NOT module_class_string ) - message( FATAL_ERROR "Could not find class that extends SLIModule in '${mod_header}'." ) + printError( "Could not find class that extends SLIModule in '${mod_header}'." ) endif () string( REGEX REPLACE "class ([a-zA-Z0-9_]+) : public SLIModule" "\\1" module_class ${module_class_string} ) file( APPEND "${filename}" " engine.addmodule( new ${module_namespace}::${module_class}() );\n" ) diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 03a14fcdc6..0000000000 --- a/debian/changelog +++ /dev/null @@ -1,12 +0,0 @@ -nest (2.18.0+1SNAPSHOT-0ubuntu1ppa1) unstable; urgency=low - - * NEST daily builds of master in 'ppa:nest-simulator/nest-nightly' - * Build without MUSIC and libneurosim - - -- Steffen Graber Wed, 17 Oct 2019 10:20:16 +0000 - -nest (2.18.0+1SNAPSHOT-0ubuntu1ppa1) unstable; urgency=low - - * NEST daily builds of master in 'ppa:nest-simulator/nest-nightly' - - -- Steffen Graber Wed, 17 Jul 2019 06:50:16 +0000 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index f599e28b8a..0000000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/debian/control b/debian/control deleted file mode 100644 index c8b5a05338..0000000000 --- a/debian/control +++ /dev/null @@ -1,22 +0,0 @@ -Source: nest -Section: science -Priority: optional -Maintainer: Steffen Graber -Build-Depends: cmake, debhelper (>= 9), autotools-dev, - software-properties-common, build-essential, autoconf, python3, - libltdl-dev, libreadline-dev, libncurses-dev, libgsl-dev, openmpi-bin, - python3-dev, libopenmpi-dev, libgomp1, libomp-dev, libibverbs-dev, libpcre3, libpcre3-dev, jq, - python3-numpy, python3-pandas, python3-scipy,python3-matplotlib, python3-mpi4py, python3-setuptools, python3-tk, - python3-pydot, cython3, libtool -Standards-Version: 4.1.1 - -Package: nest -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, python3, libltdl-dev, - libreadline-dev, libncurses-dev, libgsl-dev, openmpi-bin, - python3-dev, libopenmpi-dev, libgomp1, libomp-dev, libibverbs-dev, libpcre3, libpcre3-dev, jq, - python3-numpy, python3-pandas, python3-scipy, python3-matplotlib, python3-mpi4py, python3-setuptools, - python3-pydot, python3-tk, cython3 -Description: NEST is a simulator for networks of spiking neurons. - NEST is a simulation system for large networks of biologically realistic - point-neurons and neurons with a small number of electrical compartments. \ No newline at end of file diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 3c2bc98e67..0000000000 --- a/debian/copyright +++ /dev/null @@ -1,25 +0,0 @@ -Format: http://dep.debian.net/deps/dep5 -Upstream-Name: nest-simulator -Source: https://github.com/nest/nest-simulator/ - -Files: * -Copyright: 2004 The NEST Initiative -License: GPL-2+ - -Files: debian/* -Copyright: 2004 The NEST Initiative -License: GPL-2+ - -License: GPL-2+ - NEST is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - . - NEST is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - . - You should have received a copy of the GNU General Public License - along with NEST. If not, see . diff --git a/debian/info b/debian/info deleted file mode 100755 index fd85ecec29..0000000000 --- a/debian/info +++ /dev/null @@ -1,3 +0,0 @@ -readline/doc/history.info -readline/doc/rluserman.info -readline/doc/readline.info diff --git a/debian/nest.postinst b/debian/nest.postinst deleted file mode 100644 index acda4ba844..0000000000 --- a/debian/nest.postinst +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -e -rm -f /etc/profile.d/nest-simulator.sh -touch /etc/profile.d/nest-simulator.sh -cat >>/etc/profile.d/nest-simulator.sh <. -install( DIRECTORY slihelp_generator - DESTINATION ${CMAKE_INSTALL_DATADIR} - ) - -if ( NOT CMAKE_CROSSCOMPILING ) - - # Python is needed to generate the help. If Python does not exist, - # there are problems with the following. - # See https://github.com/nest/nest-simulator/issues/678. - find_package( PythonInterp ) - if ( Python_FOUND ) - - # Extract help from all source files in the source code, put - # them in doc/help and generate a local help index in the - # build directory containing links to the help files. - install( CODE - "execute_process( - COMMAND ${Python_EXECUTABLE} -B generate_help.py \"${PROJECT_SOURCE_DIR}\" \"${PROJECT_BINARY_DIR}\" - WORKING_DIRECTORY \"${PROJECT_SOURCE_DIR}/doc/slihelp_generator\" - )" - ) - - # Copy the local doc/help directory to the global installation - # directory for documentation. - install( DIRECTORY "${PROJECT_BINARY_DIR}/doc/help" - DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}" - OPTIONAL - ) +if( BUILD_DOCS ) + # If we hit this, any part of the documentation was configured to be built. + # The top-level 'docs' target will contain all sub-documentations such as `sphinxdocs` + # and `doxygendocs`. Using `ALL` we make it run on `make install` as well. + add_custom_target( docs ALL ) +endif() - # Update the global help index to include all help files in - # the global installation directory for documentation. - install( CODE - "execute_process( - COMMAND ${Python_EXECUTABLE} -B generate_helpindex.py \"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}\" - WORKING_DIRECTORY \"${PROJECT_SOURCE_DIR}/doc/slihelp_generator\" - )" +if( BUILD_SLI_DOCS STREQUAL ON AND NOT CMAKE_CROSSCOMPILING ) + # This is a legacy code block marked for imminent removal together with SLI. (11/2022) + # It does not follow the restructured `docs`-`subdocs` dependencies, and + # configures SLI doc building to occur on `install` using `execute_process` calls. + message( STATUS "Configuring SLI documentation") + install( DIRECTORY slihelp_generator + DESTINATION ${CMAKE_INSTALL_DATADIR} ) + # Extract help from all source files in the source code, put + # them in doc/help and generate a local help index in the + # build directory containing links to the help files. + install( CODE + "execute_process( + COMMAND ${Python_EXECUTABLE} -B generate_help.py \"${PROJECT_SOURCE_DIR}\" \"${PROJECT_BINARY_DIR}\" + WORKING_DIRECTORY \"${PROJECT_SOURCE_DIR}/doc/slihelp_generator\" + )" + ) - endif () - -endif () - -if ( DOXYGEN_FOUND ) - add_custom_target( doc - COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/normaldoc.conf" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - ) + # Copy the local doc/help directory to the global installation + # directory for documentation. + install( DIRECTORY "${PROJECT_BINARY_DIR}/doc/help" + DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}" + OPTIONAL + ) - if ( DOXYGEN_DOT_FOUND ) - add_custom_target( fulldoc - COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/fulldoc.conf" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - ) - else () - add_custom_target( fulldoc - COMMAND ${CMAKE_COMMAND} -E echo "dot command is not found on your system. Cannot build full documentation." - ) - endif () -else () - add_custom_target( doc - COMMAND ${CMAKE_COMMAND} -E echo "Doxygen is not found on your system. Cannot build documentation." - ) - add_custom_target( fulldoc - COMMAND ${CMAKE_COMMAND} -E echo "Doxygen is not found on your system. Cannot build full documentation." - ) + # Update the global help index to include all help files in + # the global installation directory for documentation. + install( CODE + "execute_process( + COMMAND ${Python_EXECUTABLE} -B generate_helpindex.py \"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}\" + WORKING_DIRECTORY \"${PROJECT_SOURCE_DIR}/doc/slihelp_generator\" + )" + ) endif () +# Determine in or out of tree building if ( "${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}" ) set( OUT_OF_TREE_BUILD "False" ) else () set( OUT_OF_TREE_BUILD "True" ) endif () -set( DOC_BUILD_DIR "${PROJECT_BINARY_DIR}/doc/htmldoc" ) -set( DOC_SOURCE_DIR "${PROJECT_SOURCE_DIR}/doc/htmldoc" ) - -add_custom_target( html - COMMAND [ "${OUT_OF_TREE_BUILD}" = "True" ] && rm -rf "${DOC_BUILD_DIR}" || true - COMMAND [ "${OUT_OF_TREE_BUILD}" = "True" ] && cp -r "${DOC_SOURCE_DIR}" "${DOC_BUILD_DIR}" || true - COMMAND NESTSRCDIR=${PROJECT_SOURCE_DIR} sphinx-build -b html "${DOC_BUILD_DIR}" "${DOC_BUILD_DIR}/html" - COMMAND cp "${DOC_BUILD_DIR}/models/*.rst" "${DOC_BUILD_DIR}/html/models" - COMMAND ${PYTHON_EXECUTABLE} "${DOC_BUILD_DIR}/resolve_includes.py" "${DOC_BUILD_DIR}/html/models" -) -install( DIRECTORY "${DOC_BUILD_DIR}/html" - DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}" - OPTIONAL -) +if ( BUILD_SPHINX_DOCS ) + message( STATUS "Configuring Sphinx documentation" ) + set( _SPHINX_SOURCE_DIR "${PROJECT_SOURCE_DIR}/doc/htmldoc" ) + set( _SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/_build/html" ) + add_custom_target( sphinxdocs + WORKING_DIRECTORY ${_SPHINX_SOURCE_DIR} + COMMAND ${Python_EXECUTABLE} clean_source_dirs.py + COMMAND ${SPHINX_EXECUTABLE} -b html . ${_SPHINX_BUILD_DIR} + COMMAND ${Python_EXECUTABLE} resolve_includes.py ${SPHINX_BUILD_DIR}/models + ) + add_dependencies( docs sphinxdocs ) -install( DIRECTORY logos - DESTINATION ${CMAKE_INSTALL_DOCDIR} + install( DIRECTORY ${_SPHINX_BUILD_DIR} + DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR} + OPTIONAL ) + install( DIRECTORY logos + DESTINATION ${CMAKE_INSTALL_DOCDIR} + ) +endif () + +if ( BUILD_DOXYGEN_DOCS ) + add_custom_target( doxygendocs + COMMAND ${DOXYGEN_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/fulldoc.conf" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) + add_dependencies( docs doxygendocs ) +endif () diff --git a/doc/README.md b/doc/README.md index d6d7acc78e..bfad6b7bd7 100644 --- a/doc/README.md +++ b/doc/README.md @@ -5,6 +5,9 @@ as well as the infrastructure and tools for extracting documentation dynamically from the source code and building a unified HTML site using Sphinx. +To read the NEST documentation, please visit +https://nest-simulator.readthedocs.org. + For more information about the different workflows for documentation, please see -https://nest-simulator.readthedocs.io/en/latest/documentation_workflow/index.html +https://nest-simulator.readthedocs.io/en/latest/developer_space/workflows/documentation_workflow/ diff --git a/doc/fulldoc.conf.in b/doc/fulldoc.conf.in index 537b824973..d8f40eda37 100644 --- a/doc/fulldoc.conf.in +++ b/doc/fulldoc.conf.in @@ -38,7 +38,7 @@ PROJECT_NAME = NEST # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = @NEST_VERSION_STRING@ +PROJECT_NUMBER = @NEST_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/doc/htmldoc/.gitignore b/doc/htmldoc/.gitignore new file mode 100644 index 0000000000..afbca2a449 --- /dev/null +++ b/doc/htmldoc/.gitignore @@ -0,0 +1,6 @@ +# The auto_examples are generated by sphinx-gallery during each doc build. It preprocesses +# the `/pynest/examples` folder into RST files that are then picked up by the rest of the +# Sphinx build. +auto_examples/ +# Some images are copied over from the source into the doc static. +static/examples diff --git a/doc/htmldoc/404.rst b/doc/htmldoc/404.rst new file mode 100644 index 0000000000..29f6c7b647 --- /dev/null +++ b/doc/htmldoc/404.rst @@ -0,0 +1,11 @@ +:orphan: + +404 - Page not found +-------------------- + + +Sorry, it looks like the page you were looking for doesn't exist in this version or has moved. + +Try the search bar or the navigation sidebar. + + diff --git a/doc/htmldoc/_ext/HoverXTooltip.py b/doc/htmldoc/_ext/HoverXTooltip.py index 300eaf3c06..474baf05a9 100644 --- a/doc/htmldoc/_ext/HoverXTooltip.py +++ b/doc/htmldoc/_ext/HoverXTooltip.py @@ -19,14 +19,13 @@ # You should have received a copy of the GNU General Public License # along with NEST. If not, see . -import re import os +import re import sys + from docutils import nodes from docutils.parsers.rst import Directive, directives -from conf import doc_build_dir - class HoverXTooltipDirective(Directive): """Directive to add a tooltip. @@ -39,7 +38,7 @@ class HoverXTooltipDirective(Directive): required_arguments = 0 optional_arguemtns = 0 - option_spec = {'term': directives.unchanged, 'desc': directives.unchanged} + option_spec = {"term": directives.unchanged, "desc": directives.unchanged} def run(self): """Generates tooltip by defining text and tooltip content @@ -55,20 +54,24 @@ def run(self): desc = options["desc"] # the tag in which the term and description is defined. - span_tag = "" \ + span_tag = ( + "" "{term}".format(desc=desc, term=term) + ) # the docutils object that holds the tag as html code. - hover_raw_node = nodes.raw(text=span_tag, format='html') + hover_raw_node = nodes.raw(text=span_tag, format="html") # the jquery function to enable hovering. - jquery_tag = "" - js_raw_node = nodes.raw(text=jquery_tag, format='html') + ) + js_raw_node = nodes.raw(text=jquery_tag, format="html") return [hover_raw_node, js_raw_node] @@ -82,8 +85,8 @@ def hxt_role(pattern): Returns: function: returns its own function. """ - def role(name, rawtext, text, lineno, inliner, options={}, content=[]): + def role(name, rawtext, text, lineno, inliner, options={}, content=[]): # example: iaf raw_params = pattern % (text,) @@ -98,27 +101,30 @@ def role(name, rawtext, text, lineno, inliner, options={}, content=[]): desc = re.search(desc_template, raw_params).group(1) # the tag in which the term and description is defined. - span_tag = "" \ + span_tag = ( + "" "{term}".format(desc=desc, term=term) + ) # the docutils object that holds the tag as html code. - hover_raw_node = nodes.raw(text=span_tag, format='html') + hover_raw_node = nodes.raw(text=span_tag, format="html") # the jquery function to enable hovering. - jquery_tag = "" - js_raw_node = nodes.raw(text=jquery_tag, format='html') + ) + js_raw_node = nodes.raw(text=jquery_tag, format="html") return [hover_raw_node, js_raw_node], [] except Exception as e: - print("Something went wrong while parsing the hxt pattern: ({e})" - .format(e)) + print(f"Something went wrong while parsing the hxt pattern: ({e})") sys.exit(-1) return role @@ -133,44 +139,49 @@ def hxt_role_ref(pattern): Returns: function: returns its function pointer. """ - def role(name, rawtext, text, lineno, inliner, options={}, content=[]): + def role(name, rawtext, text, lineno, inliner, options={}, content=[]): term = pattern % (text,) desc = get_desc_from_glossary(term) - base_url = inliner.document.attributes['source'] + term_conv = term.replace(" ", "-") + base_url = inliner.document.attributes["source"] # for rtd builds if os.environ.get("READTHEDOCS") == "True": - branch_name = base_url.split('/doc/')[0].split('/')[-1] - refuri = (f'/en/{branch_name}/ref_material/glossary.html#term-{term}') + branch_name = base_url.split("/doc/")[0].split("/")[-1] + refuri = f"/en/{branch_name}/ref_material/glossary.html#term-{term_conv}" # for local builds else: - refuri = base_url.split('userdoc')[0] + f'userdoc/html/glossary.html#term-{term}' + refuri = base_url.split("htmldoc")[0] + f"htmldoc/html/ref_material/glossary.html#term-{term_conv}" # the tag in which the term and description is defined. - ref_tag = "" \ - "" \ - "{term}" \ - "" \ - .format(refuri=refuri, desc=desc, term=term) + ref_tag = ( + "" + "" + "{term}" + "".format(refuri=refuri, desc=desc, term=term) + ) # the docutils object that holds the tag as html code. - ref_node = nodes.raw(text=ref_tag, format='html') + ref_node = nodes.raw(text=ref_tag, format="html") # the jquery function to enable hovering. # Note this should be added once! - jquery_tag = "" - js_raw_node = nodes.raw(text=jquery_tag, format='html') + jquery_tag = ( + "" + ) + js_raw_node = nodes.raw(text=jquery_tag, format="html") return [ref_node, js_raw_node], [] + return role @@ -209,27 +220,26 @@ def get_desc_from_glossary(term): """ try: - with open(str(doc_build_dir) + '/ref_material/glossary.rst') as f: + with open("ref_material/glossary.rst") as f: file_content = f.read() # generate a list of lines from file content. - raw_file_content = list(filter(None, file_content - .split('Glossary')[1].splitlines(True))) + raw_file_content = list(filter(None, file_content.split("Glossary")[1].splitlines(True))) glossary_dict = {} # dictionary that holds terms and descriptions. for idx, line in enumerate(raw_file_content): # detect a term based on value of first column. - if len(line) > 1 and line[1] is not ' ': + if len(line) > 1 and line[1] != " ": # the key is the term in the dictionary. - key = line.strip('\n') + key = line.strip("\n") # the value is the description (which is on the next line). - val = raw_file_content[idx+1].strip('\n') + val = raw_file_content[idx + 1].strip("\n") glossary_dict[key[1:]] = val return glossary_dict[term] except Exception as e: - return f'Description Unavailable: {e}' + return f"Description Unavailable: {e}" def setup(app): @@ -242,23 +252,23 @@ def setup(app): TYPE: Description """ # add external css/js files - app.add_js_file('js/bootstrap.min.js') - app.add_css_file('css/bootstrap.min.css') + app.add_js_file("js/bootstrap/bootstrap.bundle.min.js") + app.add_css_file("css/bootstrap/bootstrap.min.css") # add custom css file - app.add_css_file('css/hoverxtooltip.css') + app.add_css_file("css/hoverxtooltip.css") # add the HoverXTooltipDirective app.add_directive("hxt_directive", HoverXTooltipDirective) # add the role that generates explicit text and tooltip. - app.add_role('hxt', hxt_role('%s')) + app.add_role("hxt", hxt_role("%s")) # add the role that generates tooltips based on glossary.rst. - app.add_role('hxt_ref', hxt_role_ref('%s')) + app.add_role("hxt_ref", hxt_role_ref("%s")) return { - 'version': '0.1', - 'parallel_read_safe': True, - 'parallel_write_safe': True, + "version": "0.1", + "parallel_read_safe": True, + "parallel_write_safe": True, } diff --git a/doc/htmldoc/_ext/VersionSyncRole.py b/doc/htmldoc/_ext/VersionSyncRole.py index de96bb6b17..0f52dc51ce 100644 --- a/doc/htmldoc/_ext/VersionSyncRole.py +++ b/doc/htmldoc/_ext/VersionSyncRole.py @@ -20,13 +20,13 @@ # along with NEST. If not, see . import json -from docutils import nodes +from pathlib import Path -from conf import doc_build_dir +from docutils import nodes def version_role(pattern): - """ Defines the role function + """Defines the role function Args: pattern (str): This argument represents the input pattern of the role which is just a string (%s). @@ -36,7 +36,7 @@ def version_role(pattern): """ def role(name, rawtext, text, lineno, inliner, options={}, content=[]): - """ Actual role implementation. + """Actual role implementation. Args: Refer to https://docutils.sourceforge.io/docs/howto/rst-roles.html for an overview. @@ -46,7 +46,7 @@ def role(name, rawtext, text, lineno, inliner, options={}, content=[]): """ package_level = pattern % text - payload = package_level.split(',') + payload = package_level.split(",") package = payload[0] if len(payload) > 1: @@ -54,21 +54,22 @@ def role(name, rawtext, text, lineno, inliner, options={}, content=[]): else: level = "min" - with open(str(doc_build_dir) + '/_ext/versions.json') as fp: + with open(Path(__file__).parent / "versions.json") as fp: data = json.load(fp) try: version = data[package.strip()][level.strip()] - except KeyError as e: + except KeyError: version = f"'{level}' was not found!" node = nodes.Text(version) return [node], [] + return role def setup(app): - """ Adds the necessary routines to Sphinx. + """Adds the necessary routines to Sphinx. Args: app (app): Application object. @@ -77,10 +78,10 @@ def setup(app): dict: returns a dict with version number of the extension and IO safety arguments. """ - app.add_role('version', version_role('%s')) + app.add_role("version", version_role("%s")) return { - 'version': '0.1', - 'parallel_read_safe': True, - 'parallel_write_safe': True, + "version": "0.1", + "parallel_read_safe": True, + "parallel_write_safe": True, } diff --git a/doc/htmldoc/_ext/add_button_notebook.py b/doc/htmldoc/_ext/add_button_notebook.py new file mode 100644 index 0000000000..7375f0a2db --- /dev/null +++ b/doc/htmldoc/_ext/add_button_notebook.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +# +# add_button_notebook.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see . + +import glob +import os +import sys +from pathlib import Path + +from sphinx.application import Sphinx + + +def add_button_to_examples(app, env, docnames): + """Find all examples and include a link to launch notebook. + + Function finds all restructured text files in auto_examples + and injects the multistring prolog, which is rendered + as a button link in HTML. The target is set to a Jupyter notebook of + the same name and a service to run it. + The nameholder in the string is replaced with the file name. + + The rst files are generated at build time by Sphinx_gallery. + The notebooks that the target points to are linked with + services (like EBRAINS JupyterHub) that runs notebooks using nbgitpuller. + See https://hub.jupyter.org/nbgitpuller/link.html + The notebooks are located in the repository nest/nest-simulator-examples/. + The notebooks are generated from the CI workflow of NEST + on GitHub, which converts the source Python files to .ipynb. + + The link to run the notebook is rendered in an image within a card directive. + """ + example_prolog = """ +.. only:: html + +---- + + Run this example as a Jupyter notebook: + + .. card:: + :width: 25% + :margin: 2 + :text-align: center + :link: https://lab.ebrains.eu/hub/user-redirect/\ +git-pull?repo=https%3A%2F%2Fgithub.com%2Fnest%2Fnest-simulator-examples&urlpath=lab\ +%2Ftree%2Fnest-simulator-examples%2Fnotebooks%2Fnotebooks%2Ffilepath.ipynb&branch=main + :link-alt: JupyterHub service + + .. image:: https://nest-simulator.org/TryItOnEBRAINS.png + + +.. grid:: 1 1 1 1 + :padding: 0 0 2 0 + + .. grid-item:: + :class: sd-text-muted + :margin: 0 0 3 0 + :padding: 0 0 3 0 + :columns: 4 + + See :ref:`our guide ` for more information and troubleshooting. + +---- +""" + # Find all relevant files + # Inject prolog into Python example + files = list(Path("auto_examples/").rglob("*.rst")) + for file in files: + # Skip index files and benchmark file. These files do not have notebooks that can run + # on the service. + if file.stem == "index" or file.stem == "hpc_benchmark": + continue + + with open(file, "r") as f: + parent = Path("auto_examples/") + path2example = os.path.relpath(file, parent) + path2example = os.path.splitext(path2example)[0] + path2example = path2example.replace("/", "%2F") + prolog = example_prolog.replace("filepath", path2example) + + lines = f.readlines() + + # find the first heading of the file. + for i, item in enumerate(lines): + if item.startswith("-----"): + break + + # insert prolog into rst file after heading + lines.insert(i + 1, prolog + "\n") + + with open(file, "w") as f: + lines = "".join(lines) + f.write(lines) + + +def setup(app): + app.connect("env-before-read-docs", add_button_to_examples) + + return { + "version": "0.1", + "parallel_read_safe": True, + "parallel_write_safe": True, + } diff --git a/doc/htmldoc/_ext/extract_api_functions.py b/doc/htmldoc/_ext/extract_api_functions.py new file mode 100644 index 0000000000..09b0f2e36f --- /dev/null +++ b/doc/htmldoc/_ext/extract_api_functions.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# +# extract_api_functions.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see . +import ast +import glob +import os +import re + +from sphinx.application import Sphinx + +""" +Generate a JSON dictionary that stores the module name as key and corresponding +functions as values, along with the ``NestModule`` and the kernel attributes. +Used in a Jinja template to generate the autosummary for each module in +the API documentation (``ref_material/pynest_api/``) +""" + + +def find_all_variables(file_path): + """ + This function gets the names of all functions listed in ``__all__`` + in each of the PyNEST API files, along with the Kernel Attributes + found in ``__init__.py`` of ``pynest/nest/``. + """ + all_variables = None + + if "pynest/nest/__init__" in file_path: + # Read the __init__.py file + with open(file_path, "r") as init_file: + file_content = init_file.read() + + # Find the class definition + match = re.search(r"class\s+NestModule\(.*?\):", file_content, re.DOTALL) + if match: + # Find the variable assignments within the class + all_variables = re.findall(r"(\w+)\s*=\s*KernelAttribute", file_content) + + with open(file_path, "r") as file: + try: + tree = ast.parse(file.read()) + except SyntaxError: + # Skip files with syntax errors + return None + + for node in ast.iter_child_nodes(tree): + if isinstance(node, ast.Assign) and len(node.targets) == 1: + target = node.targets[0] + if isinstance(target, ast.Name) and target.id == "__all__": + value = node.value + if isinstance(value, ast.List): + all_variables = [elem.s for elem in value.elts if isinstance(elem, ast.Str)] + break + + return all_variables + + +def process_directory(directory): + """ + Get the PyNEST API filenames and set the keys to the base name + """ + api_dict = {} + api_exception_list = ["raster_plot", "visualization", "voltage_trace"] + files = glob.glob(directory + "**/*.py", recursive=True) + + for file in files: + # ignoring the low level api and connection_helpers and helper modules + if "helper" in file or "ll_api" in file: + continue + + # get the NestModule for the kernel attributes + if "pynest/nest/__init__" in file: + api_name = "nest.NestModule" + + parts = file.split(os.path.sep) + nest_index = parts.index("nest") + module_name = os.path.splitext(parts[-1])[0] + # only get high level API modules + if "hl_" in file: + module_path = ".".join(parts[nest_index + 1 : -1]) + api_name = f"nest.{module_path}.{module_name}" + for item in api_exception_list: + if item in file: + api_name = f"nest.{module_name}" + + all_variables = find_all_variables(file) + if all_variables: + api_dict[api_name] = all_variables + + return api_dict + + +def get_pynest_list(app, env, docname): + directory = "../../pynest/nest/" + + if not hasattr(env, "pynest_dict"): + env.pynest_dict = {} + + env.pynest_dict = process_directory(directory) + + +def api_customizer(app, docname, source): + env = app.builder.env + if docname == "ref_material/pynest_api/index": + get_apis = env.pynest_dict + html_context = {"api_dict": get_apis} + api_source = source[0] + rendered = app.builder.templates.render_string(api_source, html_context) + source[0] = rendered + + +def setup(app): + app.connect("env-before-read-docs", get_pynest_list) + app.connect("source-read", api_customizer) + + return { + "version": "0.1", + "parallel_read_safe": True, + "parallel_write_safe": True, + } diff --git a/doc/extractor_userdocs.py b/doc/htmldoc/_ext/extractor_userdocs.py similarity index 74% rename from doc/extractor_userdocs.py rename to doc/htmldoc/_ext/extractor_userdocs.py index f3ce09c7f2..160982a645 100644 --- a/doc/extractor_userdocs.py +++ b/doc/htmldoc/_ext/extractor_userdocs.py @@ -19,42 +19,31 @@ # You should have received a copy of the GNU General Public License # along with NEST. If not, see . -import re -from tqdm import tqdm -from pprint import pformat -try: - from math import comb # breaks in Python < 3.8 -except ImportError: - from math import factorial as fac - - def comb(n, k): - return fac(n) / (fac(k) * fac(n - k)) - -import os import glob import json -from itertools import chain, combinations import logging +import os +import re from collections import Counter -logging.basicConfig(level=logging.INFO) -log = logging.getLogger() +from itertools import chain, combinations +from math import comb +from pprint import pformat + +from tqdm import tqdm + +logging.basicConfig(level=logging.WARNING) +log = logging.getLogger(__name__) def relative_glob(*pattern, basedir=os.curdir, **kwargs): tobase = os.path.relpath(basedir, os.curdir) - tohere = os.path.relpath(os.curdir, basedir) # prefix all patterns with basedir and expand - names = chain(*[glob.glob(os.path.join(tobase, pat), **kwargs) for pat in pattern]) + names = chain.from_iterable(glob.glob(os.path.join(tobase, pat), **kwargs) for pat in pattern) # remove prefix from all expanded names - return [name[len(tobase)+1:] for name in names] + return [name[len(tobase) + 1 :] for name in names] -def UserDocExtractor( - filenames, - basedir="..", - replace_ext='.rst', - outdir="userdocs/" - ): +def UserDocExtractor(filenames, basedir="..", replace_ext=".rst", outdir="userdocs/"): """ Extract all user documentation from given files. @@ -102,28 +91,28 @@ def UserDocExtractor( mapping tags to lists of documentation filenames (relative to `outdir`). """ if not os.path.exists(outdir): - log.info("creating output directory "+outdir) + log.info("creating output directory " + outdir) os.mkdir(outdir) - userdoc_re = re.compile(r'BeginUserDocs:?\s*(?P([\w -]+(,\s*)?)*)\n+(?P(.|\n)*)EndUserDocs') - tagdict = dict() # map tags to lists of documents + userdoc_re = re.compile(r"BeginUserDocs:?\s*(?P([\w -]+(,\s*)?)*)\n+(?P(.|\n)*)EndUserDocs") + tagdict = dict() # map tags to lists of documents nfiles_total = 0 with tqdm(unit="files", total=len(filenames)) as progress: for filename in filenames: progress.set_postfix(file=os.path.basename(filename)[:15], refresh=False) progress.update(1) - log.warning("extracting user documentation from %s...", filename) + log.info("extracting user documentation from %s...", filename) nfiles_total += 1 match = None - with open(os.path.join(basedir, filename), 'r', encoding='utf8') as infile: + with open(os.path.join(basedir, filename), "r", encoding="utf8") as infile: match = userdoc_re.search(infile.read()) if not match: - log.warning("No user documentation found in " + filename) + log.info("No user documentation found in " + filename) continue outname = os.path.basename(os.path.splitext(filename)[0]) + replace_ext - tags = [t.strip() for t in match.group('tags').split(',')] + tags = [t.strip() for t in match.group("tags").split(",")] for tag in tags: tagdict.setdefault(tag, list()).append(outname) - doc = match.group('doc') + doc = match.group("doc") try: doc = rewrite_short_description(doc, filename) except ValueError as e: @@ -131,7 +120,7 @@ def UserDocExtractor( try: doc = rewrite_see_also(doc, filename, tags) except ValueError as e: - log.warning("Failed to rebuild 'See also' section: %s", e) + log.info("Failed to rebuild 'See also' section: %s", e) write_rst_files(doc, tags, outdir, outname) log.info("%4d tags found:\n%s", len(tagdict), pformat(list(tagdict.keys()))) @@ -142,7 +131,7 @@ def UserDocExtractor( def rewrite_short_description(doc, filename, short_description="Short description"): - ''' + """ Modify a given text by replacing the first section named as given in `short_description` by the filename and content of that section. Parameters @@ -158,31 +147,27 @@ def rewrite_short_description(doc, filename, short_description="Short descriptio ------- str original parameter doc with short_description section replaced - ''' + """ titles = getTitles(doc) if not titles: raise ValueError("No sections found in '%s'!" % filename) name = os.path.splitext(os.path.basename(filename))[0] - for title, nexttitle in zip(titles, titles[1:]+[None]): + for title, nexttitle in zip(titles, titles[1:] + [None]): if title.group(1) != short_description: continue secstart = title.end() secend = len(doc) + 1 # last section ends at end of document if nexttitle: secend = nexttitle.start() - sdesc = doc[secstart:secend].strip().replace('\n', ' ') + sdesc = doc[secstart:secend].strip().replace("\n", " ") fixed_title = "%s – %s" % (name, sdesc) - return ( - doc[:title.start()] + - fixed_title + "\n" + "=" * len(fixed_title) + "\n\n" + - doc[secend:] - ) + return doc[: title.start()] + fixed_title + "\n" + "=" * len(fixed_title) + "\n\n" + doc[secend:] raise ValueError("No section '%s' found in %s!" % (short_description, filename)) def rewrite_see_also(doc, filename, tags, see_also="See also"): - ''' + """ Replace the content of a section named `see_also` in the document `doc` with links to indices of all its tags. The original content of the section -if not empty- will discarded and @@ -203,14 +188,14 @@ def rewrite_see_also(doc, filename, tags, see_also="See also"): ------- str original parameter doc with see_also section replaced - ''' + """ titles = getTitles(doc) if not titles: raise ValueError("No sections found in '%s'!" % filename) def rightcase(text): - ''' + """ Make text title-case except for acronyms, where an acronym is identified simply by being all upper-case. This function operates on the whole string, so a text with mixed @@ -225,27 +210,28 @@ def rightcase(text): str original text with poentially different characters being upper-/lower-case. - ''' + """ if text != text.upper(): return text.title() # title-case any tag that is not an acronym - return text # return acronyms unmodified + return text # return acronyms unmodified - for title, nexttitle in zip(titles, titles[1:]+[None]): + for title, nexttitle in zip(titles, titles[1:] + [None]): if title.group(1) != see_also: continue secstart = title.end() secend = len(doc) + 1 # last section ends at end of document if nexttitle: secend = nexttitle.start() - original = doc[secstart:secend].strip().replace('\n', ' ') + original = doc[secstart:secend].strip().replace("\n", " ") if original: - log.warning("dropping manual 'see also' list in %s user docs: '%s'", filename, original) + log.info("dropping manual 'see also' list in %s user docs: '%s'", filename, original) return ( - doc[:secstart] + - "\n" + ", ".join([":doc:`{taglabel} `".format(tag=tag, taglabel=rightcase(tag)) - for tag in tags]) + "\n\n" + - doc[secend:] - ) + doc[:secstart] + + "\n" + + ", ".join([":doc:`{taglabel} `".format(tag=tag, taglabel=rightcase(tag)) for tag in tags]) + + "\n\n" + + doc[secend:] + ) raise ValueError("No section '%s' found in %s!" % (see_also, filename)) @@ -296,11 +282,11 @@ def make_hierarchy(tags, *basetags): if tree.values(): remaining = baseitems.difference(set.union(*tree.values())) if remaining: - tree[''] = remaining + tree[""] = remaining return {basetags: tree} -def rst_index(hierarchy, current_tags=[], underlines='=-~', top=True): +def rst_index(hierarchy, current_tags=[], underlines="=-~", top=True): """ Create an index page from a given hierarchical dict of documents. @@ -329,14 +315,13 @@ def rst_index(hierarchy, current_tags=[], underlines='=-~', top=True): str formatted pretty index. """ + def mktitle(t, ul, link=None): text = t if t != t.upper(): text = t.title() # title-case any tag that is not an acronym - title = ':doc:`{text} <{filename}>`'.format( - text=text, - filename=link or "index_"+t) - text = title+'\n'+ul*len(title)+'\n\n' + title = ":doc:`{text} <{filename}>`".format(text=text, filename=link or "index_" + t) + text = title + "\n" + ul * len(title) + "\n\n" return text def mkitem(t): @@ -344,23 +329,30 @@ def mkitem(t): output = list() if top: - page_title = "Model Directory" + # Prevent warnings by adding an orphan role so Sphinx does not expect it in toctrees + orphan_text = ":orphan:" + "\n\n" + page_title = "Model directory" + description = """ + The model directory is organized and autogenerated by keywords (e.g., adaptive threshold, + conductance-based etc.). Models that contain a specific keyword will be listed under that word. + For more information on models, see our :ref:`intro to NEST models `. + """ if len(hierarchy.keys()) == 1: page_title += ": " + ", ".join(current_tags) - output.append(page_title) - output.append(underlines[0]*len(page_title)+"\n") + output.append(orphan_text + page_title) + output.append(underlines[0] * len(page_title) + "\n") + output.append(description + "\n") if len(hierarchy.keys()) != 1: underlines = underlines[1:] for tags, items in sorted(hierarchy.items()): - if "NOINDEX" in tags: continue if isinstance(tags, str): title = tags else: title = " & ".join(tags) - if title and not len(hierarchy) == 1: # not print title if already selected by current_tags + if title and not len(hierarchy) == 1: # not print title if already selected by current_tags output.append(mktitle(title, underlines[0])) if isinstance(items, dict): output.append(rst_index(items, current_tags, underlines[1:], top=False)) @@ -424,26 +416,24 @@ def CreateTagIndices(tags, outdir="userdocs/"): for tag, count in sorted([(tag, len(lst)) for tag, lst in tags.items()], key=lambda x: x[1]): log.info(" %%%ds tag in %%d files" % maxtaglen, tag, count) if "" in taglist: - taglist.remove('') + taglist.remove("") indexfiles = list() - depth = min(4, len(taglist)) # how many levels of indices to create at most - nindices = sum([comb(len(taglist), L) for L in range(depth-1)]) + depth = min(4, len(taglist)) # how many levels of indices to create at most + nindices = sum([comb(len(taglist), L) for L in range(depth - 1)]) log.info("indices down to level %d → %d possible keyword combinations", depth, nindices) - for current_tags in tqdm(chain(*[combinations(taglist, L) for L in range(depth-1)]), unit="idx", - desc="keyword indices", total=nindices): + for current_tags in tqdm( + chain(*[combinations(taglist, L) for L in range(depth - 1)]), unit="idx", desc="keyword indices", total=nindices + ): current_tags = sorted(current_tags) - indexname = "index%s.rst" % "".join(["_"+x for x in current_tags]) + indexname = "index%s.rst" % "".join(["_" + x for x in current_tags]) hier = make_hierarchy(tags.copy(), *current_tags) if not any(hier.values()): log.debug("index %s is empyt!", str(current_tags)) continue nfiles = len(set.union(*chain([set(subtag) for subtag in hier.values()]))) - if nfiles < 2: - log.warning("skipping index for %s, as it links only to %d distinct file(s)", set(hier.keys()), nfiles) - continue log.debug("generating index for %s...", str(current_tags)) indextext = rst_index(hier, current_tags) - with open(os.path.join(outdir, indexname), 'w') as outfile: + with open(os.path.join(outdir, indexname), "w") as outfile: outfile.write(indextext) indexfiles.append(indexname) log.info("%4d non-empty index files generated", len(indexfiles)) @@ -454,6 +444,7 @@ class JsonWriter: """ Helper class to have a unified data output interface. """ + def __init__(self, outdir): self.outdir = outdir log.info("writing JSON files to %s", self.outdir) @@ -463,13 +454,13 @@ def write(self, obj, name): Store the given object with the given name. """ outname = os.path.join(self.outdir, name + ".json") - with open(outname, 'w') as outfile: + with open(outname, "w") as outfile: json.dump(obj, outfile) log.info("data saved as " + outname) def getTitles(text): - ''' + """ extract all sections from the given RST file Parameters @@ -483,58 +474,25 @@ def getTitles(text): list elements are the section title re.match objects - ''' - titlechar = r'\+' - title_re = re.compile(r'^(?P.+)\n(?P<underline>'+titlechar+r'+)$', re.MULTILINE) + """ + titlechar = r"\+" + title_re = re.compile(r"^(?P<title>.+)\n(?P<underline>" + titlechar + r"+)$", re.MULTILINE) titles = [] # extract all titles for match in title_re.finditer(text): log.debug("MATCH from %s to %s: %s", match.start(), match.end(), pformat(match.groupdict())) - if len(match.group('title')) != len(match.group('underline')): - log.warning("Length of section title '%s' (%d) does not match length of underline (%d)", - match.group('title'), - len(match.group('title')), - len(match.group('underline'))) + if len(match.group("title")) != len(match.group("underline")): + log.warning( + "Length of section title '%s' (%d) does not match length of underline (%d)", + match.group("title"), + len(match.group("title")), + len(match.group("underline")), + ) titles.append(match) return titles -def getSections(text, titles=None): - ''' - Extract sections between titles - - Parameters - ---------- - - text : str - Full documentation text - - titles : list (optional) - Iterable with the ordered title re.match objects. If not given, titles - will be generated with a call to `getTitles()`. - - - Returns - ------- - - list - tuples of each title re.match object and the text of the following section. - ''' - if titles is None: - titles = getTitles(text) - sections = list() - for title, following in zip(titles, titles[1:]+[None]): - secstart = title.end() - secend = None # None = end of string - if following: - secend = following.start() - if title.group('title') in sections: - log.warning('Duplicate title in user documentation of %s', filename) - sections.append((title.group('title'), text[secstart:secend].strip())) - return sections - - -def ExtractUserDocs(listoffiles, basedir='..', outdir='userdocs/'): +def ExtractUserDocs(listoffiles, basedir="..", outdir="userdocs/"): """ Extract and build all user documentation and build tag indices. @@ -565,8 +523,5 @@ def ExtractUserDocs(listoffiles, basedir='..', outdir='userdocs/'): json.dump(list(set(toc_list)) + list(set(idx_list)), tocfile) -if __name__ == '__main__': - ExtractUserDocs( - relative_glob("models/*.h", "nestkernel/*.h", basedir='..'), - outdir="userdocs/" - ) +if __name__ == "__main__": + ExtractUserDocs(relative_glob("models/*.h", "nestkernel/*.h", basedir=".."), outdir="userdocs/") diff --git a/doc/htmldoc/_ext/list_examples.py b/doc/htmldoc/_ext/list_examples.py new file mode 100644 index 0000000000..0775fc5735 --- /dev/null +++ b/doc/htmldoc/_ext/list_examples.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# +# list_examples.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see <http://www.gnu.org/licenses/>. + +import glob +import logging +import os + +from docutils import nodes +from docutils.parsers.rst import Directive, Parser +from sphinx.application import Sphinx +from sphinx.util.docutils import SphinxDirective + +logging.basicConfig(level=logging.WARNING) +log = logging.getLogger(__name__) + + +class listnode(nodes.General, nodes.Element): + pass + + +def ProcessExamples(app, doctree, docname): + # Create the bullet list of examples, sorted by title + # given by the model name in the directive argument + + env = app.builder.env + examples_titles_map = {} + + try: + models_to_examples_map = ModelMatchExamples() + + for node in doctree.findall(listnode): + for requested_list in env.list_examples_directive_requests: + # compare current location with attribute location to get + # correct model name + if requested_list["name"] == docname: + if requested_list["model_name"] not in models_to_examples_map: + log.info("No examples found for Model: " + requested_list["model_name"]) + bullet_list = nodes.Text("None") + break + + list_of_examples = models_to_examples_map[requested_list["model_name"]] + for value in list_of_examples: + mydocname = os.path.splitext(value)[0] + examples_titles_map[mydocname] = str(env.titles[mydocname].children[0]) + sorted_examples = dict(sorted(examples_titles_map.items(), key=lambda kv: kv[1])) + bullet_list = nodes.bullet_list() + + for filename, title in sorted_examples.items(): + # Create a reference node that links to the example + # equivalent to HTML <li> + list_item = nodes.list_item() + newnode = nodes.reference("", "") + newnode["internal"] = True + newnode["refdocname"] = filename + newnode["refuri"] = app.builder.get_relative_uri(docname, filename) + newnode.append(nodes.Text(title)) + para = nodes.paragraph() + para += newnode + list_item.append(para) + bullet_list += list_item + + node.replace_self(bullet_list) + + except Exception as e: + log.warning(repr(e)) + log.warning("exception of class: %s", e.__class__) + raise + + +def ModelMatchExamples(): + # Get list of models and search the examples directory for matches + + filepath_models = "../../models/" + filepath_examples = "auto_examples/" + + model_files = [] + for filename in os.listdir(filepath_models): + if filename.endswith(".h"): + model_files.append(os.path.splitext(filename)[0]) + + matches = {} + files = glob.glob(filepath_examples + "**/*.rst", recursive=True) + for filename in files: + if "auto_examples/index" in filename: + continue + with open(filename, "r", errors="ignore") as file: + content = file.read() + for model_file in model_files: + if model_file in content: + matches.setdefault(model_file, []).append(filename) + + return matches + + +class ListExamplesDirective(SphinxDirective): + # Provide a list of the examples that contain the given model name. + # The model name is the required argument in the directive + # (.. listexamples:: model_name). No options, nor content is expected. + + has_content = False + required_arguments = 1 + option_spec = {} + + def run(self): + model_arg = self.arguments[0] + + if not hasattr(self.env, "list_examples_directive_requests"): + self.env.list_examples_directive_requests = [] + + # See TODO tutorial in Sphinx for more info. + # Using environment attribute list_examples_directive_requests to store argument and + # its location (docname) + self.env.list_examples_directive_requests.append({"model_name": model_arg, "name": self.env.docname}) + + return [listnode("")] + + +def setup(app): + # Note that the directive names need to be all lower case + app.add_directive("listexamples", ListExamplesDirective) + app.add_node(listnode) + app.connect("doctree-resolved", ProcessExamples) + + return { + "version": "0.1", + "parallel_read_safe": True, + "parallel_write_safe": True, + } diff --git a/doc/htmldoc/attribution-list.rst b/doc/htmldoc/attribution-list.rst new file mode 100644 index 0000000000..574534b4c9 --- /dev/null +++ b/doc/htmldoc/attribution-list.rst @@ -0,0 +1,28 @@ +:orphan: + +Icons provided by Flaticon +-------------------------- + + +<a href="https://www.flaticon.com/free-icons/neuron" title="neuron icons">Neuron icons created by Nadiinko - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/neuron" title="neuron icons">Neuron icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/monitor" title="monitor icons">Monitor icons created by Icongeek26 - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/dictionary" title="dictionary icons">Dictionary icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/neuron" title="neuron icons">Neuron icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/chat" title="chat icons">Chat icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/user" title="user icons">User icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/data-science" title="data science icons">Data science icons created by Eucalyp - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/brain" title="brain icons">Brain icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/teacher" title="teacher icons">Teacher icons created by Good Ware - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/math" title="math icons">Math icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/data-storage" title="data storage icons">Data storage icons created by IconLauk - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/version" title="version icons">Version icons created by Ahmad Roaayala - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/developer" title="developer icons">Developer icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/cloud-computing" title="cloud computing icons">Cloud computing icons created by Prosymbols Premium - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/teacher" title="teacher icons">Teacher icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/launch" title="launch icons">Launch icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/conversation" title="conversation icons">Conversation icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/quotation-marks" title="quotation marks icons">Quotation marks icons created by Retinaicons - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/quote" title="quote icons">Quote icons created by DinosoftLabs - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/mail" title="mail icons">Mail icons created by Freepik - Flaticon</a> +<a href="https://www.flaticon.com/free-icons/external-link" title="external link icons">External link icons created by Bharat Icons - Flaticon</a> diff --git a/doc/htmldoc/citing-nest.rst b/doc/htmldoc/citing-nest.rst index 9055fc270d..6955ae5bae 100644 --- a/doc/htmldoc/citing-nest.rst +++ b/doc/htmldoc/citing-nest.rst @@ -3,12 +3,16 @@ Cite NEST ========= -Please cite the version of NEST you used in your work. You can :ref:`let us know <contact_us>` about your publications that used NEST, and we +Please cite the *version of NEST you used in your work*. + +For all versions from 2.8 onwards, you can find the full citation `on Zenodo <https://zenodo.org/search?page=1&size=20&q=title:NEST%20AND%20-description:graphical%20AND%20simulator&file_type=gz&sort=-publication_date>`_ +You can also specify the commit hash for work done in the development branches. + +You can :ref:`let us know <contact_us>` about your publications that used NEST, and we will add them to our `publication list <https://www.nest-simulator.org/publications/>`_; this will help make them visible to potential readers. -For all versions from 2.8 onwards, you can find the full citation `on Zenondo <https://zenodo.org/search?page=1&size=20&q=title:NEST%20AND%20-description:graphical&file_type=gz&sort=-publication_date>`_. - +You can also `get the NEST logo <https://github.com/nest/nest-simulator/tree/master/doc/logos>`_ for your poster or presentation. ---- diff --git a/doc/htmldoc/clean_source_dirs.py b/doc/htmldoc/clean_source_dirs.py new file mode 100644 index 0000000000..7a499e3d7d --- /dev/null +++ b/doc/htmldoc/clean_source_dirs.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# +# clean_source_dirs.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see <http://www.gnu.org/licenses/>. +import os +import pathlib +import shutil +from glob import glob + +for dir_ in ("auto_examples", "models"): + for file_ in glob(str(pathlib.Path(__file__).parent / dir_ / "*")): + if not any(file_.endswith(f) for f in (".gitignore", "models-main.rst", "models-toc.rst")): + try: + try: + os.unlink(file_) + except OSError: + shutil.rmtree(file_) + except Exception: + print(f"Couldn't remove '{file_}'") diff --git a/doc/htmldoc/colorize.rst b/doc/htmldoc/colorize.rst index 2c953e4818..34c342eb58 100644 --- a/doc/htmldoc/colorize.rst +++ b/doc/htmldoc/colorize.rst @@ -1,3 +1,5 @@ +:orphan: + .. Color profiles for Sphinx. .. role:: maroon .. role:: red diff --git a/doc/htmldoc/community.rst b/doc/htmldoc/community.rst index 5438e7a871..df46c8f6e3 100644 --- a/doc/htmldoc/community.rst +++ b/doc/htmldoc/community.rst @@ -8,48 +8,111 @@ Community Contact us ---------- -Mailing list -~~~~~~~~~~~~ -The NEST users mailing list is intended to be a forum for questions on the usage -of NEST, the exchange of code and general discussions about NEST. The philosophy -is that all users profit by sharing their experience. All NEST core developers -are subscribed to this list and will participate in the discussions as far as -time allows. +.. card:: Mailing list -By subscribing to the mailing list you will also get notified of all NEST related events! + The NEST users mailing list is intended to be a forum for questions on the usage + of NEST, the exchange of code and general discussions about NEST. The philosophy + is that all users profit by sharing their experience. All NEST core developers + are subscribed to this list and will participate in the discussions as far as + time allows. -Before submitting a question, please take a look at our :ref:`guidelines for the NEST mailing list <mail_guidelines>`. + By subscribing to the mailing list you will also get notified of all NEST related events! +.. grid:: 3 -Submit an issue or pull request on Github -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You can :ref:`issues` on Github or contribute to the code or documentation. See our :ref:`contribute` page for -details. + .. grid-item-card:: + :link-type: ref + :link: mail_guidelines + :class-card: sd-bg-success sd-text-white -Open video conference -~~~~~~~~~~~~~~~~~~~~~ + See mailing list -Every two weeks, we have an open video conference to discuss current issues and developments in NEST. -We welcome users with questions regarding their implementations or issues they want help solving to join. -This is an opportunity to have discussions in real time with developers. -Information for dates and how to join can be found on `our GitHub wiki <https://github.com/nest/nest-simulator/wiki/Open-NEST-Developer-Video-Conference>`_ +.. card:: GitHub + Possible features, bugs, or other issues can be discussed on GitHub. + We encourage our whole community to provide feedback and help contribute to improving our code and documentation. -.. include:: getting_help.rst +.. grid:: 3 + + .. grid-item-card:: + :link-type: ref + :link: contribute + :class-card: sd-bg-success sd-text-white + + Submit an issue or pull request + +.. card:: Open video conference + + Every two weeks, we have an open video conference to discuss current issues and developments in NEST. + We welcome users with questions regarding their implementations or issues they want help solving to join. + This is an opportunity to have discussions in real time with developers. + + Information for dates and how to join can be found on our GitHub wiki. + +.. grid:: 3 + + .. grid-item-card:: + :link-type: url + :link: https://github.com/nest/nest-simulator/wiki/Open-NEST-Developer-Video-Conference + :class-card: sd-bg-success sd-text-white + + Open video conference wiki + +Get help +-------- + +.. grid:: + + .. grid-item-card:: Command line help + :link: command_help + :link-type: ref + + .. grid-item-card:: Troubleshooting and faqs + + * :ref:`troubleshooting` + + * :ref:`faqs` Explore the NEST ecosystem -~~~~~~~~~~~~~~~~~~~~~~~~~~ +--------------------------- + + +.. grid:: 3 + + .. grid-item-card:: Cite NEST + :link: cite_nest + :link-type: ref + + If you used NEST in your work, cite the version you used + + .. grid-item-card:: Publications related to NEST + :link: https://www.nest-simulator.org/publications/ + :link-type: url + + .. grid-item-card:: Find related projects + :link: related_projects + :link-type: ref + +.. grid:: + + .. grid-item-card:: News and updates + :link: https://nest-simulator.org + :link-type: url + + .. grid-item-card:: Become a NEST initiative member + :link: https://www.nest-initiative.org/ + :link-type: url + + .. toctree:: :maxdepth: 1 + :hidden: - News and updates <https://nest-simulator.org> - Publications <https://www.nest-simulator.org/publications/> - NEST Initiative <https://www.nest-initiative.org/> related_projects citing-nest - + getting_help diff --git a/doc/htmldoc/conf.py b/doc/htmldoc/conf.py index 33a1ad0c5f..fbc0ba0b0a 100644 --- a/doc/htmldoc/conf.py +++ b/doc/htmldoc/conf.py @@ -20,112 +20,79 @@ # along with NEST. If not, see <http://www.gnu.org/licenses/>. -import sys +import json import os -import re -import pip import subprocess - +import sys from pathlib import Path from shutil import copyfile -import json - -import sphinx_rtd_theme - -from subprocess import check_output, CalledProcessError -from mock import Mock as MagicMock - - -source_dir = os.environ.get('NESTSRCDIR', False) -if source_dir: - source_dir = Path(source_dir) -else: - source_dir = Path(__file__).resolve().parent.parent.parent.resolve() - - -if os.environ.get("READTHEDOCS") == "True": - doc_build_dir = source_dir / "doc/htmldoc" -else: - doc_build_dir = Path(os.environ["OLDPWD"]) / "doc/htmldoc" - -sys.path.append(os.path.abspath("./_ext")) +from urllib.request import urlretrieve -source_suffix = '.rst' -master_doc = 'index' +# Add the extension modules to the path +extension_module_dir = os.path.abspath("./_ext") +sys.path.append(extension_module_dir) -# Create the mockfile for extracting the PyNEST +from extractor_userdocs import ExtractUserDocs, relative_glob # noqa -excfile = source_dir / "pynest/nest/lib/hl_api_exceptions.py" -infile = source_dir / "pynest/pynestkernel.pyx" -outfile = doc_build_dir / "pynestkernel_mock.py" - -sys.path.insert(0, str(source_dir)) -sys.path.insert(0, str(source_dir / 'doc')) -sys.path.insert(0, str(source_dir / 'pynest')) -sys.path.insert(0, str(source_dir / 'pynest/nest')) -sys.path.insert(0, str(doc_build_dir)) - -from mock_kernel import convert # noqa - -with open(excfile, 'r') as fexc, open(infile, 'r') as fin, open(outfile, 'w') as fout: - mockedmodule = fexc.read() + "\n\n" - mockedmodule += "from mock import MagicMock\n\n" - mockedmodule += convert(fin) - - fout.write(mockedmodule) - -import pynestkernel_mock # noqa - -sys.modules["nest.pynestkernel"] = pynestkernel_mock -sys.modules["nest.kernel"] = pynestkernel_mock - -# For the doc build, explicitly import `nest` here so that it isn't -# `MagicMock`ed later on and expose `nest.NestModule` as `sphinx` does not seem -# to autodoc properties the way the `autoclass` directive would. We can then -# autoclass `nest.NestModule` to generate the documentation of the properties -import nest # noqa - -vars(nest)["NestModule"] = type(nest) # direct write to nest.NestModule is suppressed as unknown attribute +repo_root_dir = os.path.abspath("../..") +pynest_dir = os.path.join(repo_root_dir, "pynest") +# Add the NEST Python module to the path (just the py files, the binaries are mocked) +sys.path.append(pynest_dir) # -- General configuration ------------------------------------------------ + +source_suffix = ".rst" +master_doc = "index" extensions = [ - 'sphinx_gallery.gen_gallery', - 'sphinx.ext.autodoc', - 'sphinx.ext.napoleon', - 'sphinx.ext.autosummary', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.mathjax', - 'sphinx_tabs.tabs', - 'nbsphinx', - 'sphinx_rtd_theme', - 'HoverXTooltip', - 'VersionSyncRole', + "sphinx_gallery.gen_gallery", + "list_examples", + "sphinx.ext.autodoc", + "sphinx.ext.napoleon", + "sphinx.ext.autosummary", + "sphinx.ext.doctest", + "sphinx.ext.intersphinx", + "sphinxcontrib.mermaid", + "sphinx.ext.mathjax", + "add_button_notebook", + "IPython.sphinxext.ipython_console_highlighting", + "nbsphinx", + "extract_api_functions", + "sphinx_design", + "HoverXTooltip", + "VersionSyncRole", + "sphinx_copybutton", + "notfound.extension", ] -mathjax_path = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS-MML_HTMLorMML" # noqa - +autodoc_mock_imports = ["nest.pynestkernel", "nest.ll_api"] +mathjax_path = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" +panels_add_bootstrap_css = False # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["templates"] sphinx_gallery_conf = { - # 'doc_module': ('sphinx_gallery', 'numpy'), - # path to your examples scripts - 'examples_dirs': source_dir / 'pynest/examples', - # path where to save gallery generated examples - 'gallery_dirs': doc_build_dir / 'auto_examples', - # 'backreferences_dir': False - 'plot_gallery': 'False' + # path to your examples scripts + "examples_dirs": "../../pynest/examples", + # path where to save gallery generated examples + "gallery_dirs": "auto_examples", + "plot_gallery": "False", + "download_all_examples": False, } # General information about the project. -project = u'NEST simulator user documentation' -copyright = u'2004, nest-simulator' -author = u'nest-simulator' +project = "NEST Simulator user documentation" +copyright = "2004, nest-simulator" +author = "nest-simulator" + +copybutton_prompt_text = ">>> " +# The output lines will not be copied if set to True +copybutton_only_copy_prompt_lines = True +mermaid_output_format = "raw" +mermaid_version = "10.2.0" +# disable require js - mermaid doesn't work if require.js is loaded before it +nbsphinx_requirejs_path = "" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. @@ -136,15 +103,23 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['Thumbs.db', '.DS_Store', 'nest_by_example', 'README.md'] +exclude_patterns = [ + "**.ipynb_checkpoints", + ".DS_Store", + "README.md", + "Thumbs.db", + "auto_examples/**.ipynb", + "auto_examples/index.rst", + "nest_by_example", +] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'manni' +pygments_style = "manni" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -152,70 +127,96 @@ # add numbered figure link numfig = True -numfig_secnum_depth = (2) -numfig_format = {'figure': 'Figure %s', 'table': 'Table %s', - 'code-block': 'Code Block %s'} +numfig_secnum_depth = 2 +numfig_format = {"figure": "Figure %s", "table": "Table %s", "code-block": "Code Block %s"} # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'sphinx_rtd_theme' -html_logo = str(doc_build_dir / 'static/img/nest_logo.png') -html_theme_options = {'logo_only': True, - 'display_version': True, - 'style_external_links': True} +html_theme = "sphinx_material" +html_title = "NEST Simulator Documentation" +html_logo = "static/img/nest_logo.png" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # -# html_theme_options = {} +html_theme_options = { + # Set the name of the project to appear in the navigation. + # Set you GA account ID to enable tracking + # 'google_analytics_account': 'UA-XXXXX', + # Specify a base_url used to generate sitemap.xml. If not + # specified, then no sitemap will be built. + "base_url": "https://nest-simulator.readthedocs.io/en/latest/", + "html_minify": False, + "html_prettify": False, + "css_minify": True, + # Set the color and the accent color + "color_primary": "orange", + "color_accent": "white", + "theme_color": "ff6633", + "master_doc": True, + # Set the repo location to get a badge with stats + "repo_url": "https://github.com/nest/nest-simulator/", + "repo_name": "NEST Simulator", + # "nav_links": [ + # {"href": "index", "internal": True, "title": "NEST docs home"} + # ], + # Visible levels of the global TOC; -1 means unlimited + "globaltoc_depth": 1, + # If False, expand all TOC entries + "globaltoc_collapse": True, + # If True, show hidden TOC entries + "globaltoc_includehidden": True, + "version_dropdown": False, +} + +html_static_path = ["static"] +html_additional_pages = {"index": "index.html"} +html_sidebars = {"**": ["logo-text.html", "globaltoc.html", "localtoc.html", "searchbox.html"]} -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = [str(doc_build_dir / 'static')] +html_favicon = "static/img/nest_favicon.ico" # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'NESTsimulatordoc' +htmlhelp_basename = "NESTsimulatordoc" html_show_sphinx = False html_show_copyright = False # This way works for ReadTheDocs # With this local 'make html' is broken! -github_doc_root = '' +github_doc_root = "" intersphinx_mapping = { - 'python': ('https://docs.python.org/3', None), - 'nestml': ('https://nestml.readthedocs.io/en/latest/', None), - 'pynn': ('http://neuralensemble.org/docs/PyNN/', None), - 'elephant': ('https://elephant.readthedocs.io/en/latest/', None), - 'desktop': ('https://nest-desktop.readthedocs.io/en/latest/', None), - 'neuromorph': ('https://electronicvisions.github.io/hbp-sp9-guidebook/', None), - 'arbor': ('https://arbor.readthedocs.io/en/latest/', None), - 'tvb': ('http://docs.thevirtualbrain.org/', None), - 'extmod': ('https://nest-extension-module.readthedocs.io/en/latest/', None), + "python": ("https://docs.python.org/3", None), + "nestml": ("https://nestml.readthedocs.io/en/latest/", None), + "pynn": ("https://neuralensemble.org/docs/PyNN/", None), + "elephant": ("https://elephant.readthedocs.io/en/latest/", None), + "desktop": ("https://nest-desktop.readthedocs.io/en/latest/", None), + "gpu": ("https://nest-gpu.readthedocs.io/en/latest/", None), + "neuromorph": ("https://electronicvisions.github.io/hbp-sp9-guidebook/", None), + "arbor": ("https://docs.arbor-sim.org/en/latest/", None), + "tvb": ("https://docs.thevirtualbrain.org/", None), + "extmod": ("https://nest-extension-module.readthedocs.io/en/latest/", None), } -from doc.extractor_userdocs import ExtractUserDocs, relative_glob # noqa - def config_inited_handler(app, config): + models_rst_dir = os.path.abspath("models") ExtractUserDocs( - listoffiles=relative_glob("models/*.h", "nestkernel/*.h", basedir=source_dir), - basedir=source_dir, - outdir=str(doc_build_dir / "models") + listoffiles=relative_glob("models/*.h", "nestkernel/*.h", basedir=repo_root_dir), + basedir=repo_root_dir, + outdir=models_rst_dir, ) def toc_customizer(app, docname, source): if docname == "models/models-toc": - models_toc = json.load(open(doc_build_dir / "models/toc-tree.json")) + models_toc = json.load(open("models/toc-tree.json")) html_context = {"nest_models": models_toc} models_source = source[0] rendered = app.builder.templates.render_string(models_source, html_context) @@ -223,56 +224,34 @@ def toc_customizer(app, docname, source): def setup(app): - app.connect("source-read", toc_customizer) - app.add_css_file('css/custom.css') - app.add_css_file('css/pygments.css') - app.add_js_file("js/copybutton.js") - app.add_js_file("js/custom.js") - # for events see # https://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx-core-events - app.connect('config-inited', config_inited_handler) - - -nitpick_ignore = [('py:class', 'None'), - ('py:class', 'optional'), - ('py:class', 's'), - ('cpp:identifier', 'CommonSynapseProperties'), - ('cpp:identifier', 'Connection<targetidentifierT>'), - ('cpp:identifier', 'ArchivingNode'), - ('cpp:identifier', 'DeviceNode'), - ('cpp:identifier', 'Node'), - ('cpp:identifier', 'ClopathArchivingNode'), - ('cpp:identifier', 'MessageHandler'), - ('cpp:identifer', 'CommonPropertiesHomW')] - -# -- Options for LaTeX output --------------------------------------------- - - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} + app.connect("source-read", toc_customizer) + app.add_css_file("css/custom.css") + app.add_css_file("css/pygments.css") + app.add_js_file("js/custom.js") + app.connect("config-inited", config_inited_handler) + + +nitpick_ignore = [ + ("py:class", "None"), + ("py:class", "optional"), + ("py:class", "s"), + ("cpp:identifier", "CommonSynapseProperties"), + ("cpp:identifier", "Connection<targetidentifierT>"), + ("cpp:identifier", "ArchivingNode"), + ("cpp:identifier", "DeviceNode"), + ("cpp:identifier", "Node"), + ("cpp:identifier", "ClopathArchivingNode"), + ("cpp:identifier", "MessageHandler"), + ("cpp:identifer", "CommonPropertiesHomW"), +] # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'NESTsimulator.tex', u'NEST Simulator Documentation', - u'NEST Developer Community', 'manual'), + (master_doc, "NESTsimulator.tex", "NEST Simulator Documentation", "NEST Developer Community", "manual"), ] @@ -280,10 +259,7 @@ def setup(app): # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'nestsimulator', u'NEST simulator Documentation', - [author], 1) -] +man_pages = [(master_doc, "nestsimulator", "NEST Simulator Documentation", [author], 1)] # -- Options for Texinfo output ------------------------------------------- @@ -292,25 +268,69 @@ def setup(app): # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'NESTsimulator', u'NEST simulator Documentation', - author, 'NESTsimulator', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "NESTsimulator", + "NEST Simulator Documentation", + author, + "NESTsimulator", + "One line description of project.", + "Miscellaneous", + ), ] def copy_example_file(src): - copyfile(src, doc_build_dir / "examples" / src.parts[-1]) - - -def copy_acknowledgments_file(src): - copyfile(src, doc_build_dir / src.parts[-1]) + copyfile(os.path.join(pynest_dir, src), Path("examples") / Path(src).parts[-1]) -# -- Copy Acknowledgments file ---------------------------- -copy_acknowledgments_file(source_dir / "ACKNOWLEDGMENTS.md") # -- Copy documentation for Microcircuit Model ---------------------------- -copy_example_file(source_dir / "pynest/examples/Potjans_2014/box_plot.png") -copy_example_file(source_dir / "pynest/examples/Potjans_2014/raster_plot.png") -copy_example_file(source_dir / "pynest/examples/Potjans_2014/microcircuit.png") -copy_example_file(source_dir / "pynest/examples/Potjans_2014/README.rst") -copy_example_file(source_dir / "pynest/examples/hpc_benchmark_connectivity.svg") +copy_example_file("examples/hpc_benchmark_connectivity.svg") + + +def patch_documentation(patch_url): + """Apply a hot-fix patch to the documentation before building it. + + This function is useful in situations where the online documentation should + be modified, but the reason for a new documentation build does not justify + a new release of NEST. Example situations are the discovery of broken links + spelling errors, or styling issues. Moreover, this mechanism can be used to + customize to the look and feel of the NEST documentation in individual + installations. + + In order to make use of this function, the environment variable ``patch_url`` + has to be set to the URL where documentation patch files are located. The + environment variable must either be set locally or via the admin panel of + Read the Docs. + + Patch files under the ``patch_url`` are expected to have names in the format + ``{git_hash}_doc.patch``, where ``{git_hash}`` is the full hash of the version the + patch applies to. + + The basic algorithm implemented by this function is the following: + 1. obtain the Git hash of the version currently checked out + 2. log the hash by printing it to the console + 3. retrieve the patch + + """ + print("Preparing patch...") + try: + git_dir = f"{repo_root_dir}/.git" + git_hash = subprocess.check_output( + f"GIT_DIR='{git_dir}' git rev-parse HEAD", shell=True, encoding="utf8" + ).strip() + print(f" current git hash: {git_hash}") + patch_file = f"{git_hash}_doc.patch" + patch_url = f"{patch_url}/{patch_file}" + print(f" retrieving {patch_url}") + urlretrieve(patch_url, patch_file) + print(f" applying {patch_file}") + result = subprocess.check_output(f"git apply '{patch_file}'", stderr=subprocess.STDOUT, shell=True) + print(f"Patch result: {result}") + except Exception as exc: + print(f"Error while applying patch: {exc}") + + +patch_url = os.getenv("patch_url") +if patch_url is not None: + patch_documentation(patch_url) diff --git a/doc/htmldoc/connect_nest/nest_server.rst b/doc/htmldoc/connect_nest/nest_server.rst index f7eaf96505..c873d93fc6 100644 --- a/doc/htmldoc/connect_nest/nest_server.rst +++ b/doc/htmldoc/connect_nest/nest_server.rst @@ -3,10 +3,6 @@ NEST Server =========== -.. contents:: On this page, you'll find - :local: - :depth: 1 - What is NEST Server? -------------------- @@ -25,8 +21,8 @@ frontend could really be anything that can talk HTTP. Under the hood, NEST Server forwards the commands it receives to PyNEST, and sends back the result data in response packets. -NEST Server was initially developed as a backend for `NEST Desktop -<https://nest-desktop.readthedocs.io/>`_, a web-based graphical +NEST Server was initially developed as a backend for :doc:`NEST Desktop +<desktop:index>`, a web-based graphical frontend for NEST. With growing interest in a more general server backend for NEST, the functionality of the original NEST Server was extended to accommodate for this broader range of application. @@ -38,7 +34,7 @@ convenient way. Use cases for NEST Server ------------------------- -.. figure:: static/img/nest_server.png +.. figure:: ../static/img/nest_server.png :align: center :alt: NEST Server concept :width: 240px @@ -49,15 +45,14 @@ you a better idea of what NEST Server is good for, here are some of its main use cases. One scenario in which NEST Server comes in handy, is if you want to -work on your laptop, but run your NEST simulations on a -machine with higher performance or more memory, for instance, a big -workstation or computer cluster at your lab. For this, you would -deploy NEST Server on the remote machine, and use the provided -:ref:`NEST Server Client <nest_server_client>` locally or write your -own client using one of the recipes provided in the :ref:`section on -advanced applications <nest_server_advanced>`. - -`NEST Desktop <https://nest-desktop.readthedocs.io/>`_, the web-based +work on your laptop, but run your NEST simulations on a machine with +higher performance or more memory, for instance, a big workstation or +computer cluster at your lab. For this, you would deploy NEST Server +on the remote machine, and use the :ref:`NEST Client <nest_client>` +locally or write your own client using one of the recipes provided in +the :ref:`section on advanced applications <nest_server_advanced>`. + +:doc:`NEST Desktop <desktop:index>`, the web-based graphical user interface for NEST, uses NEST Server as its simulation backend. It supports server instances running either locally or remotely. More details about how to configure and run this setup can @@ -94,27 +89,47 @@ prefer using ``conda``:: As an alternative to a native installation, NEST Server is available from the NEST Docker image. Please check out the corresponding -:ref:`installation instructions <docker_vm_install>` for more details. +:ref:`installation instructions <docker>` for more details. + +.. _sec_server_vars: + +Set environment variables for security options +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +NEST Server comes with a number of access restrictions that are meant to protect your +computer. After careful consideration, each of the restrictions can be disabled by setting +a corresponding environment variable. + +* ``NEST_SERVER_DISABLE_AUTH``: By default, the NEST Server requires a NESTServerAuth tokens. Setting this variable to ``1`` disables this restriction. A token is automatically created and printed to the console by NEST Server upon start-up. If needed, a custom token can be set using the environment variable ``NEST_SERVER_ACCESS_TOKEN`` +* ``NEST_SERVER_CORS_ORIGINS``: By default, the NEST Server only allows requests from localhost (see `CORS <https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS>`_). Other hosts can be explicitly allowed by supplying them in the form `http://host_or_ip`` to this variable. +* ``NEST_SERVER_ENABLE_EXEC_CALL``: By default, NEST Server only allows calls to its PyNEST-like API. If the use-case requires the execution of scripts via the ``/exec`` route, this variable can be set to ``1``. PLEASE BE AWARE THAT THIS OPENS YOUR COMPUTER TO REMOTE CODE EXECUTION. +* ``NEST_SERVER_DISABLE_RESTRICTION``: By default, NEST Server runs all code passed to the ``/exec`` route through RestrictedPython to sanitize it. To disable this mechanism, this variable can be set to ``1``. For increased security, code passed in this way only allows explictly whitelisted modules to be imported. To import modules, the variable ``NEST_SERVER_MODULES`` can be set to a standard Python import line like this: + ``NEST_SERVER_MODULES='import nest; import scipy as sp; from numpy import random'`` Run NEST Server ~~~~~~~~~~~~~~~ All NEST Server operations are managed using the ``nest-server`` -command that can either be run directly:: +command that can either be run directly: + +.. code-block:: text - nest-server start + nest-server start or supplied to the execution command line for running the Docker -container:: +container: - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 5000:5000 nestsim/nest:latest nest-server start +.. code-block:: text + + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 52425:52425 nest/nest-simulator:dev nest-server start The generic invocation command line for the ``nest-server`` command -looks as follows:: +looks as follows: + +.. code-block:: text nest-server <command> [-d] [-h <host>] [-o] [-p <port>] -Possible commands are `start`, `stop`, `status`, or `log`. The meaning +Possible commands are ``start``, ``stop``, ``status``, or ``log``. The meaning of the other arguments is as follows: -d @@ -124,23 +139,25 @@ of the other arguments is as follows: -h <host> Use hostname/IP address <host> for the server instance [default: 127.0.0.1] -p <port> - Use port <port> for opening the socket [default: 5000] + Use port <port> for opening the socket [default: 52425] Run with MPI ~~~~~~~~~~~~ If NEST was compiled with support for :ref:`distributed computing via MPI <distributed_computing>`, it will usually execute the exact same -simulation script on each of the MPI processes. With NEST Server, this +simulation script on each of the :hxt_ref:`MPI` processes. With NEST Server, this would normally mean that one NEST Server instance would be spawned for each rank in a multi-process NEST simulation. To prevent this from happening, we provide a special version of the NEST Server command for -use with MPI. It can be run as follows:: +use with MPI. It can be run as follows: - mpirun -np N nest-server-mpi [--host HOST] [--port PORT] +.. code-block:: text + + mpirun -np N nest-server-mpi [--host HOST] [--port PORT] If run like this, the RESTful API of the NEST Server will only be -served by the MPI process with rank 0 (called the `master`), while all +served by the :hxt_ref:`MPI` process with rank 0 (called the `master`), while all other N-1 ranks will start the NEST Server in `worker` mode. Upon receiving a request, the master relays all commands to the workers, which execute them, collect all result data, and send it back to the @@ -152,21 +169,21 @@ completely the same as one coming from the serial version of the NEST Server. The only difference may be that information pertaining to process-local data structures is being replaced by generic values. -.. _nest_server_client: +.. _nest_client: -The NEST Server Client ----------------------- +The NEST Client +--------------- -The easiest way to interact with the NEST Server is the `NEST Server -Client` provided in ``examples/NESTServerClient`` in the source -distribution of NEST. It can be used either by directly starting -a Python session in that directory or installing it by running ``python3 -setup.py install`` therein. NEST itself does not have to be installed -in order to use the NEST Server Client. +The easiest way to interact with the NEST Server is the `NEST Client` +provided in `<https://github.com/nest/nest-client/>`_. It can be used +either by directly starting a Python session in a clone of that +repository, or by installing it by running ``python3 setup.py +install`` therein. NEST itself does not have to be installed in order +to use the NEST Client. -Using a dynamic function mapping mechanism, the NEST Server Client -supports the same functions as PyNEST does. However, instead of -directly executing calls in NEST, it forwards them together with their +Using a dynamic function mapping mechanism, the NEST Client supports +the same functions as PyNEST does. However, instead of directly +executing calls in NEST, it forwards them together with their arguments to the NEST Server, which in turn executes them. To you as a user, everything looks much like a typical simulation code for NEST Simulator. @@ -176,17 +193,16 @@ Basic usage To give you an idea of the usage, the following table shows a comparison of a typical simulation once for PyNEST and once using the -NEST Server Client. +NEST Client. .. list-table:: * - **PyNEST directly** - - **via NEST Server Client** + - **via NEST Client** * - .. code-block:: Python import nest - # Reset the kernel nest.ResetKernel() @@ -209,8 +225,8 @@ NEST Server Client. - .. code-block:: Python - from NESTServerClient import NESTServerClient - nsc = NESTServerClient() + from nest_client import NESTClient + nsc = NESTClient() # Reset the kernel nsc.ResetKernel() @@ -235,7 +251,7 @@ NEST Server Client. Run scripts ~~~~~~~~~~~ -The NEST Server Client is able to send complete simulation scripts to +The NEST Client is able to send complete simulation scripts to the NEST Server using the functions ``exec_script`` and ``from_file``. The following listing shows a Python snippet using the NEST Server Client to execute a simple script on the Server using the @@ -243,8 +259,8 @@ Client to execute a simple script on the Server using the .. code-block:: Python - from NESTServerClient import NESTServerClient - nsc = NESTServerClient() + from nest_client import NESTClient + nsc = NESTClient() script = "print('Hello world!')" response = nsc.exec_script(script) @@ -258,12 +274,12 @@ Client to execute a simple script on the Server using the In a more realistic scenario, you probably already have your simulation script stored in a file. Such scripts can be sent to the NEST Server for execution using the ``from_file`` function provided by -the NEST Server Client. +the NEST Client. .. code-block:: Python - from NESTServerClient import NESTServerClient - nsc = NESTServerClient() + from nest_client import NESTClient + nsc = NESTClient() response = nsc.from_file('simulation_script.py', return_vars='n_events') n_events = response['data'] @@ -278,47 +294,47 @@ the NEST Server Client. on :ref:`security and modules <nest_server_security>` below. -NEST Server Client API -~~~~~~~~~~~~~~~~~~~~~~ +NEST Client API +~~~~~~~~~~~~~~~ -.. py:class:: NESTServerClient +.. py:class:: NESTClient The client object to interact with the NEST Server -.. py:method:: NESTServerClient.<call>(*args, **kwargs) +.. py:method:: NESTClient.<call>(*args, **kwargs) - Execute a PyNEST function `<call>` on the NEST Server; the - arguments `args` and `kwargs` will be forwarded to the function + Execute a PyNEST function ``<call>`` on the NEST Server; the + arguments ``args`` and ``kwargs`` will be forwarded to the function -.. py:method:: NESTServerClient.exec_script(source, return_vars=None) +.. py:method:: NESTClient.exec_script(source, return_vars=None) Execute a Python script on the NEST Server; the script has to be - given as a string in the `source` argument + given as a string in the ``source`` argument -.. py:method:: NESTServerClient.from_file(filename, return_vars=None) +.. py:method:: NESTClient.from_file(filename, return_vars=None) Execute a Python script on the NEST Server; the argument - `filename` is the name of the file in which the script is stored + ``filename`` is the name of the file in which the script is stored REST API overview ----------------- -localhost:5000 +``localhost:52425`` Get the version of NEST used by NEST Server -localhost:5000/api +``localhost:52425/api`` List all available functions -localhost:5000/api/<call> - Execute the function `<call>` +``localhost:52425/api/<call>`` + Execute the function ``<call>``` -localhost:5000/api/<call>?inspect=getdoc - Get the documentation for the function `<call>` +``localhost:52425/api/<call>?inspect=getdoc`` + Get the documentation for the function ``<call>`` -localhost:5000/api/<call>?inspect=getsource - Get the source code of the function `<call>` +``localhost:52425/api/<call>?inspect=getsource`` + Get the source code of the function ``<call>`` -localhost:5000/exec +``localhost:52425/exec`` Execute a Python script. This requires JSON data in the form .. code-block:: JSON @@ -332,25 +348,35 @@ The preferred command line tool for interacting with NEST Server using a terminal is ``curl``. For more information, please visit the `curl website <https://curl.se/>`_. -To obtain basic information about the running server, run:: +To obtain basic information about the running server, run: + +.. code-block:: + + curl localhost:52425 - curl localhost:5000 +NEST Server responds to this by sending data in JSON format: -NEST Server responds to this by sending data in JSON format:: +.. code-block:: {"mpi":false,"nest":"3.2"} -You can retrieve data about the callable functions of NEST by running:: +You can retrieve data about the callable functions of NEST by running: - curl localhost:5000/api +.. code-block:: -Retrieve the current kernel status dict from NEST:: + curl localhost:52425/api - curl localhost:5000/api/GetKernelStatus +Retrieve the current kernel status dict from NEST: -Send API request with function arguments in JSON format:: +.. code-block:: - curl -H "Content-Type: application/json" -d '{"model": "iaf_psc_alpha"}' localhost:5000/api/GetDefaults + curl localhost:52425/api/GetKernelStatus + +Send API request with function arguments in JSON format: + +.. code-block:: + + curl -H "Content-Type: application/json" -d '{"model": "iaf_psc_alpha"}' localhost:5000/api/GetDefaults .. note:: @@ -358,7 +384,7 @@ Send API request with function arguments in JSON format:: ``curl`` through the JSON processor ``jq``. A sample command line to display the available functions in this way looks like this:: - curl -s localhost:5000/api | jq -r . + curl -s localhost:52425/api | jq -r . For more information, check the `documentation on jq <https://stedolan.github.io/jq/>`_. @@ -367,33 +393,35 @@ Send API request with function arguments in JSON format:: API access from Python ~~~~~~~~~~~~~~~~~~~~~~ -If you prefer Python over `curl`, you can use the ``requests`` module, +If you prefer Python over ``curl``, you can use the ``requests`` module, which provides a convenient API for communicating with RESTful APIs. On most systems this is already installed or can be easily installed -using `pip`. Extensive documentation is available on the pages about +using ``pip``. Extensive documentation is available on the pages about `HTTP for Humans <https://requests.readthedocs.io/en/master/>`_. Sending a simple request to the NEST Server using Python works as -follows:: +follows: + +.. code-block:: import requests - requests.get('http://localhost:5000').json() + requests.get('http://localhost:52425').json() To display a list of callable functions, use:: - requests.get('http://localhost:5000/api').json() + requests.get('http://localhost:52425/api').json() Reset the NEST simulation kernel (no response):: - requests.get('http://localhost:5000/api/ResetKernel').json() + requests.get('http://localhost:52425/api/ResetKernel').json() Sending an API request in JSON format:: - requests.post('http://localhost:5000/api/GetDefaults', json={'model': 'iaf_psc_alpha'}).json() + requests.post('http://localhost:52425/api/GetDefaults', json={'model': 'iaf_psc_alpha'}).json() Create neurons in NEST and return a list of IDs for the new nodes:: - neurons = requests.post('http://localhost:5000/api/Create', json={"model": "iaf_psc_alpha", "n": 100}).json() + neurons = requests.post('http://localhost:52425/api/Create', json={"model": "iaf_psc_alpha", "n": 100}).json() print(neurons) .. _nest_server_security: @@ -433,8 +461,8 @@ After this, NumPy can be used from within scripts in the regular way: .. code-block:: Python - from NESTServerClient import NESTServerClient - nsc = NESTServerClient() + from nest_client import NESTClient + nest = NESTClient() response = nsc.exec_script("a = numpy.arange(10)", 'a') print(response['data'][::2]) # [0, 2, 4, 6, 8] @@ -467,7 +495,7 @@ Run scripts in NEST Server using `curl` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As shown above, you can send custom simulation code to -``localhost:5000/exec``. On the command line, this approach might be a +``localhost:52425/exec``. On the command line, this approach might be a bit more challenging in the case your script does not fit on a single line. For such situations, we recommend using a JSON file as input for ``curl``: @@ -480,12 +508,12 @@ line. For such situations, we recommend using a JSON file as input for } If we assume that the above JSON object is stored in a file called -``simulation_script.json``, you can execute it using the follwing +``simulation_script.json``, you can execute it using the following command: .. code-block:: sh - curl -H "Content-Type: application/json" -d @simulation_script.json http://localhost:5000/exec + curl -H "Content-Type: application/json" -d @simulation_script.json http://localhost:52425/exec Interact with NEST Server using JavaScript @@ -498,9 +526,9 @@ client-side language as it is widely supported by all web browsers and provides libraries for handling HTTP requests and responses out of the box. Here is a small example showing the basic idea: -.. tabs:: +.. grid:: - .. tab:: HMTL + .. grid-item-card:: HMTL .. code-block:: HTML @@ -512,7 +540,7 @@ box. Here is a small example showing the basic idea: <body> <script> const xhr = new XMLHttpRequest(); - xhr.open("GET", "http://localhost:5000"); + xhr.open("GET", "http://localhost:52425"); xhr.addEventListener("readystatechange", () => { if (xhr.readyState === 4) { // request done console.log(xhr.responseText); @@ -523,7 +551,7 @@ box. Here is a small example showing the basic idea: </body> </html> - .. tab:: JavaScript + .. grid-item-card:: JavaScript .. code-block:: JavaScript @@ -535,7 +563,7 @@ box. Here is a small example showing the basic idea: } }); // send to api route of NEST Server - xhr.open("GET", "http://localhost:5000/api/" + call); + xhr.open("GET", "http://localhost:52425/api/" + call); xhr.send(null); } @@ -559,7 +587,7 @@ with a callback for POST requests: } }); // send to api route of NEST Server - xhr.open("POST", "http://localhost:5000/api/" + call); + xhr.open("POST", "http://localhost:52425/api/" + call); xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(data)); // serialize data @@ -574,7 +602,7 @@ Using this function, sending an API-request to NEST Server becomes easy: The third type of request we might want to make is sending a custom Python script to NEST Server. As outlined above, this is supported by -the `exec` route. to make use of that, we define a function with +the ``exec`` route. to make use of that, we define a function with callback for POST requests to execute a script: .. code-block:: JavaScript @@ -588,7 +616,7 @@ callback for POST requests to execute a script: } }); // send to exec route of NEST Server - xhr.open("POST", "http://localhost:5000/exec"); + xhr.open("POST", "http://localhost:52425/exec"); xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(data)); // serialize data @@ -616,7 +644,7 @@ For POST requests to the NEST API Server, we recommend to use a Bash function: .. code-block:: sh #!/bin/bash - NEST_API=localhost:5000/api + NEST_API=localhost:52425/api nest-server-api() { if [ $# -eq 2 ] diff --git a/doc/htmldoc/connect_nest/using_nest_with_music.rst b/doc/htmldoc/connect_nest/using_nest_with_music.rst index 17c553e50f..09bc75e9a0 100644 --- a/doc/htmldoc/connect_nest/using_nest_with_music.rst +++ b/doc/htmldoc/connect_nest/using_nest_with_music.rst @@ -92,7 +92,7 @@ generator. nest.Connect(sg, n, 'one_to_one', {'weight': 750.0, 'delay': 1.0}) -We then create a voltmeter, which will measure the membrane potenial, and +We then create a voltmeter, which will measure the membrane potential, and connect it with the neuron. :: diff --git a/doc/htmldoc/developer_space/contribute.rst b/doc/htmldoc/developer_space/contribute.rst deleted file mode 100644 index 380524b665..0000000000 --- a/doc/htmldoc/developer_space/contribute.rst +++ /dev/null @@ -1,80 +0,0 @@ -.. _contribute: - -Contribute to NEST -================== - -NEST draws its strength from the many people that use and improve it. We -are happy to consider your contributions (e.g., new models, bug or -documentation fixes) for addition to the official version of NEST. - -Please familiarize yourself with our: - -* :ref:`NEST Git workflow <git_workflow>` -* :ref:`C++ coding style guidelines <code_style_cpp>` -* :ref:`Documentation style guide <doc_styleguide>` -* :ref:`Developing NEST with IDEs guide <nest_ides>` - -In order to make sure that the NEST Initiative can manage the NEST code base in the long term, -you need to send us a completed and signed -:download:`NEST Contributor Agreement <NEST_Contributor_Agreement.pdf>` to transfer your -copyright to the NEST Initiative before we can merge your pull request. - -.. _issues: - -Report bugs and request features --------------------------------- - -If you find an error in the code or documentaton or want to suggest a feature, submit -`an issue on GitHub <https://github.com/nest/nest-simulator/issues>`_. - -Make sure to check that your issue has not already been reported there before creating a new one. - -.. _edit_nest: - -Change code or documentation ----------------------------- - -Interested in creating or editing documentation? Check out our :ref:`doc_workflow`. - -For making changes to the PyNEST APIs, please see our :ref:`pyapi_template`. - -If you are a Vim user and require support for SLI files, please refer to our -:ref:`vim_sli`. - -An explanation of our continuous integration pipeline can be found under :ref:`cont_integration`. - -Contribute a Python example script ----------------------------------- - -If you have a Python example network to contribute, please refer to our -:ref:`pyexample_template` to ensure you cover the required information. - -.. _review_guidelines: - -Code review guidelines ----------------------- - -See :ref:`code_guidelines`. - -Writing an extension module ---------------------------- - -See https://github.com/nest/nest-extension-module. - -Writing neuron and synapse models ---------------------------------- - -We recommend writing new neuron and synapse models in `NESTML <https://nestml.readthedocs.io/>`_. It will generate C++ -code and build a NEST extension module containing the model. - -See also https://github.com/nest/nest-extension-module for details about the generated C++ code. - -Have a question? ----------------- - -If you want to get in contact with us, see our :ref:`contact_us` section for ways you can reach us. - -.. note:: - - For all developer related topics see our :ref:`developer_space` - diff --git a/doc/htmldoc/developer_space/cppcomments.rst b/doc/htmldoc/developer_space/cppcomments.rst new file mode 100644 index 0000000000..bcf03cf370 --- /dev/null +++ b/doc/htmldoc/developer_space/cppcomments.rst @@ -0,0 +1,82 @@ +Guidelines for C++ code comments +================================ + +There are two types of code comments for C++ files: doxygen style and C++ style comments. + +* Doxygen styled comments are used for describing things like the purpose of the function, which parameters it accepts, and what output it generates. +* Use Doxygen style comments in the header (``.h``) files. Avoid using them in ``.cpp`` files. +* Do not duplicate code in comments. +.. Include the variable name in functions in header file to match cpp file. + + +Generate HTML from doxygen comments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To generate HTML output of the doxgyen comments, + +in the build directory, + +run ``cmake`` with developer documentation on:: + + cmake -Dwith-devdoc=ON path/to/nest-simulator. + +then + +:: + + make docs + xdg-open doc/doxygen/html/index.html + +.. seealso:: + + See `the official doxygen documentation <https://www.doxygen.nl/>`_ for details. + + +Doxygen style +~~~~~~~~~~~~~ + +* Multi-line comments + +.. code-block:: cpp + + /** + * Short description + * + * Further details, if necesary + */ + +.. note:: + + Functions and classes should use the multi-line style even for single line comments. + +* Single or two line comments to use with variables: + +.. code-block:: cpp + + //! The maximum delay of the simulation + long may_delay; + + +* If a short comment is needed for variables, you can add a comment to the right of the code: + +.. code-block:: cpp + + long max_delay_; //!< The maximum delay of the simulation + +C++ style +~~~~~~~~~ + +* Multi-line comments: + +.. code-block:: cpp + + // + // + // + // + + * Single or two line comments: + +.. code-block:: cpp + + // diff --git a/doc/htmldoc/developer_space/guidelines/code_review_guidelines.rst b/doc/htmldoc/developer_space/guidelines/code_review_guidelines.rst index fcbd88b68a..a9d9bf9132 100644 --- a/doc/htmldoc/developer_space/guidelines/code_review_guidelines.rst +++ b/doc/htmldoc/developer_space/guidelines/code_review_guidelines.rst @@ -15,21 +15,27 @@ can be discussed on the :ref:`NEST mailing lists <contact_us>`. * In most cases, each pull request needs an OK from the CI platform and at least two reviewers to be merged. + * The two reviews have to cover the technical side (i.e., if the code does the right thing and is architecturally sound) and the content side (i.e., if the code is scientifically correct and fixes an actual issue). -* For changes labeled “not code” or “minor” (e.g., changes in + +* For changes labeled "not code" or "minor" (e.g., changes in documentation, fixes for typos, etc.), the need for a second code review can be waived, and a single review plus the OK from the CI system is sufficient to merge the request. + * New features like SLI or PyNEST functions, neuron or synapse models need to be accompanied by one or more tests written in either SLI or Python. + * Each change to the code has to be reflected in the corresponding examples and documentation. + * A pull request should be coherent and contain only changes that belong together. + * Please also check that the typesetting of the documentation looks correct. To learn how to test the documentation locally offline, please check out our :ref:`User documentation workflow @@ -40,10 +46,14 @@ Before merging, reviewers have to make sure that: 1. pull request titles match the actual content of the PR and be adequate for the release notes + 1. pull request titles are complete sentences that start with an - upper-case, present-tense verb and end without punctuation + upper-case, present-tense verb and end without punctuation + 1. pull requests are assigned to projects and properly and completely labeled + 1. all discussions are settled and all conversations are marked as resolved + 1. there are no blocking issues mentioned in the comments diff --git a/doc/htmldoc/developer_space/guidelines/coding_guidelines_check.rst b/doc/htmldoc/developer_space/guidelines/coding_guidelines_check.rst index cf63d60ffa..963b5f5811 100644 --- a/doc/htmldoc/developer_space/guidelines/coding_guidelines_check.rst +++ b/doc/htmldoc/developer_space/guidelines/coding_guidelines_check.rst @@ -1,147 +1,97 @@ -.. _check_code: +.. _required_dev_tools: -Check your code -=============== +Required development tools +========================== -Below, we provide tools and scripts that you can use to check the formatting of your code. -Before you get started, please take a look at our :ref:`detailed guidelines for C++ coding in NEST <code_style_cpp>` +Here, we list required tools for NEST development and explain their usage. The +tools are mostly for formatting your code. Before you get started, please take +a look at our :ref:`detailed guidelines for C++ coding in NEST <code_style_cpp>`. Development environment ----------------------- -We have provided an `environment.yml <https://github.com/nest/nest-simulator/blob/master/environment.yml>`_ file that contains all packages to do development -in NEST, including the tools to check coding style. +We have provided an `environment.yml <https://github.com/nest/nest-simulator/blob/master/environment.yml>`_ +file that contains all packages to do development in NEST, including the tools listed below. See our :ref:`instructions on installing NEST from source <dev_install>`. - Tooling ------- -The `clang-format <http://clang.llvm.org/docs/ClangFormat.html>`_ tool is built -on the clang compiler frontend. It prettyprints input files in a -configurable manner, and also has Vim and Emacs integration. We supply a -:ref:`clang-format-file` to enforce some parts of the coding style. During -the code review process we check that there is no difference between the committed -files and the formatted version of the committed files. - - -Developers can benefit from the tool by formatting their changes -before issuing a pull request. For fixing more files at once we -provide a script that applies the formatting. - -From the source directory call: - -.. code:: - - ./build_support/format_all_c_c++_files.sh [start folder, defaults to '$PWD'] - - -The code has to compile without warnings (in the default settings of the build -infrastructure). We restrict ourselves to the C++11 standard for a larger support of -compilers on various cluster systems and supercomputers. - -We use clang-format version 9 in our CI. - -Furthermore, we use `Vera++ <https://bitbucket.org/verateam/vera/wiki/Home>`_, which -'is a programmable tool for verification, analysis and transformation of C++ -source code'. It enables further checks for the code complying to the coding -guidelines. We provide the :ref:`vera-profile-nest` file in the -repository (which needs to be copied/symlinked into ``vera++home>/lib/vera++/profiles/``). -We then check that there are no messages generated by the execution of the following command: - -.. code:: sh +pre-commit +~~~~~~~~~~ - vera++ -profile nest <committed file> +We use `pre-commit <https://pre-commit.com/>`_ to run Git hooks on every commit to identify simple issues such as +trailing whitespace or not complying with the required formatting. Our ``pre-commit`` configuration is +specified in the `.pre-commit-config.yaml <https://github.com/nest/nest-simulator/blob/master/.pre-commit-config.yaml>`_ +file. +To set up the Git hook scripts specified in ``.pre-commit-config.yaml``, run -Finally, we let `cppcheck <http://cppcheck.sourceforge.net/>`_ statically analyse -the committed files and check for severe errors. We require cppcheck version -1.69 or later. +.. code-block:: bash -.. code:: sh - - cppcheck --enable=all <committed file> + pre-commit install .. note:: - For Python, we enforce `PEP8 <https://www.python.org/dev/peps/pep-0008/>`_ formatting. - -Local static analysis ---------------------- - -We ship a script ``./build_support/check_code_style.sh`` that lets you perform the -checks on all changed files as we do during the Travis CI tasks. - -.. code:: sh + If ``pre-commit`` identifies formatting issues in the commited code, the ``pre-commit`` Git hooks will reformat + the code. If code is reformatted, it will show up in your unstaged changes. Stage them and recommit to + successfully commit your code. - $ ./build_support/check_code_style.sh --help - Usage: check_code_style.sh [options ...] +Black +~~~~~ - Usage: ./build_support/check_code_style.sh [options ...] +We enforce `PEP8 <https://www.python.org/dev/peps/pep-0008/>`_ formatting of Python code by using the uncompromising +`Black <https://github.com/psf/black>`_ formatter. - This script processes C/C++ and Python source code files to verify compliance with the NEST - coding style guidelines. The checks are performed the same way as in the NEST Travis CI - build and test environment. If no file is specified, a local 'git diff' is issued to obtain - the changed files in the commit range '<git-sha-start>..<git-sha-end>'. By default, this is - 'master..head'. +``Black`` is run automatically with ``pre-commit``. - The script expects to be run from the base directory of the NEST sources, - i.e. all executions should start like: - ./build_support/check_code_style.sh ... +Run ``Black`` manually with - The setup of the tooling is explained here: - https://nest-simulator.readthedocs.io/en/latest/contribute/coding_guidelines_cpp.html +.. code-block:: bash - Options: + black . - --help This help. +isort +~~~~~ - --[i]ncremental Prompt user before each file analysis. +We use `isort <https://github.com/PyCQA/isort>`_ to sort imports in Python code. - --file=/path/to/file Perform the analysis on this file. +``isort`` is run automatically with ``pre-commit``. - --git-start=Git_SHA_value Hash value (Git SHA) from which Git starts the diff. - Default: --git-start=master +Run ``isort`` manually with - --git-end=Git_SHA_value Hash value (Git SHA) at which Git ends the diff. - Default: --git-start=HEAD +.. code-block:: bash - --vera++=exe The name of the VERA++ executable. - Default: --vera++=vera++ + isort --profile=black --thirdparty="nest" . - --cppcheck=exe The name of the CPPCHECK executable. - Default: --cppcheck=cppcheck - Note: CPPCHECK version 1.69 or later is required. - This corresponds to the version installed in - the NEST Travis CI build and test environment. +clang-format +~~~~~~~~~~~~ - --clang-format=exe The name of the CLANG-FORMAT executable. - Default: --clang-format=clang-format-9 - Note: CLANG-FORMAT version 9 is required. +We use `clang-format <http://clang.llvm.org/docs/ClangFormat.html>`_ to format C/C++ code. +Our ``clang-format`` configuration is specified in the +`.clang-format <https://github.com/nest/nest-simulator/blob/master/.clang-format>`_ file. - --pep8=exe The name of the PEP8 executable. - Default: --pep8=pep8 +``clang-format`` is run automatically with ``pre-commit``. - --perform-vera=on/off Turn on/off VERA++ analysis. - Default: --perform-vera=on +We supply the +`build_support/format_all_c_c++_files.sh <https://github.com/nest/nest-simulator/blob/master/build_support/format_all_c_c++_files.sht>`_ +shell script to run ``clang-format`` manually: - --perform-cppcheck=on/off Turn on/off CPPCHECK analysis. - Default: --perform-cppcheck=off +.. code-block:: bash - --perform-clang-format=on/off Turn on/off CLANG-FORMAT analysis. - Default: --perform-clang-format=on - - --perform-pep8=on/off Turn on/off PEP8 analysis. - Default: --perform-pep8=on - -Assuming you are in source directory of NEST and you want to check all changed -files between the commits ``104d47c0`` and ``d66e4465``, execute the following -line: + ./build_support/format_all_c_c++_files.sh [start folder, defaults to '$PWD'] -.. code:: sh +.. note:: - ./build_support/check_code_style.sh --git-start=104d47c0 --git-end=d66e4465 + We use ``clang-format`` version 13.0.0 in our CI. If your ``clang-format`` executable is + not version 13, you need to specify an executable with version 13.0.0 explicitly with + the `--clang-format` option to ensure consistency with the NEST CI. +Local static analysis +--------------------- +We have several static code analyzers in the GitHub Actions CI. To run static code checks locally, +please refer to the "run" lines in the GitHub Actions CI definition at +https://github.com/nest/nest-simulator/blob/master/.github/workflows/nestbuildmatrix.yml. diff --git a/doc/htmldoc/developer_space/guidelines/coding_guidelines_cpp.rst b/doc/htmldoc/developer_space/guidelines/coding_guidelines_cpp.rst index 38d9b0e140..6cc611f335 100644 --- a/doc/htmldoc/developer_space/guidelines/coding_guidelines_cpp.rst +++ b/doc/htmldoc/developer_space/guidelines/coding_guidelines_cpp.rst @@ -180,8 +180,9 @@ and is only left for compatibility. All files in NEST start with a preamble, which contains the filename and the NEST copyright text (see example below). -Lines should not exceed 120 characters (clang-format). Files should not be too -long (max. 2000 lines) (vera++:L006). No trailing whitespace (clang-format). +* Lines should not exceed 120 character +* Files should not be too long (max. 2000 lines) +* No trailing whitespace Folders ******* @@ -192,7 +193,7 @@ Variables and class members *************************** In general, use meaningful, non-abbreviated names or follow naming conventions -from the neuroscience field, e.g. the membrane potential is ``V_m``. Use the +from the neuroscience field, for example, the membrane potential is :hxt_ref:`V_m`. Use the ``lower_case_under_lined`` notation. Private member variables should end with an underscore (``name_``). If applicable, the general rule is use is to use the same notation for biophysical quantities as is used in `Dayan&Abbot, 2001 @@ -223,12 +224,12 @@ Functions and class methods *************************** In general, use meaningful, non-abbreviated names or follow naming conventions -from the neuroscience field, e.g. the membrane potential is ``V_m``. Use the +from the neuroscience field, e.g. the membrane potential is :hxt_ref:`V_m`. Use the ``lower_case_under_lined`` notation. There should be a line-break after the method's return type (implementation -only) (clang-format). Parameters of methods should either fit into one line or -each parameter is on a separate line (clang-format). +only). Parameters of methods should either fit into one line or +each parameter is on a separate line. .. code:: @@ -244,9 +245,9 @@ Namespaces ********** Use ``lower_case_under_lined`` notation for namespaces. Do not use ``using namespace`` -statements in header files (vera++:T018). The closing brace of a namespace should be +statements in header files. The closing brace of a namespace should be followed by a comment containing the namespace statement. -Do not indent the body of namespaces (clang-format). +Do not indent the body of namespaces. .. code:: @@ -266,7 +267,7 @@ Use a ``struct`` only for passive objects that carry data; everything else is a underscore (``State_``). The access modifier (``public``, ``protected``, ``private``) in class definitions are -not indented (clang-format). +not indented. Do not implement methods inside the class definition, but implement small ``inline`` methods after the class definition and other methods in the @@ -276,7 +277,7 @@ Template class declarations follow the same style as normal class declarations. This applies in particular to inline declarations. The keyword template followed by the list of template parameters appear on a separate line. The < and > in template expressions have one space after and before the sign, -respectively, e.g. ``std::vector< int >`` (clang-format). +respectively, e.g., ``std::vector< int >``. .. code:: @@ -295,16 +296,15 @@ Further indentation and formatting Avoid committing indentation and formatting changes together with changes in logic. Always commit these changes separately._ -As a general rule of thumb, always indent with two spaces (clang-format). Do -not use TAB character in any source file (vera++:L002). Always use braces -around blocks of code (vera++:T019). The braces of code blocks have their own -line (clang-format). +As a general rule of thumb, always indent with two spaces. Do +not use TAB character in any source file. Always use braces +around blocks of code. The braces of code blocks have their own +line. Control structures (``if``, ``while``, ``for``, ...) have a single space after the -keyword (clang-format / vera++:T003, T008). The parenthesis around the tests -have a space after the opening and before the closing parenthesis -(clang-format). The case labels in ``switch`` statements are not indented -(clang-format). +keyword. The parenthesis around the tests +have a space after the opening and before the closing parenthesis. +The case labels in ``switch`` statements are not indented. .. code:: @@ -326,50 +326,19 @@ have a space after the opening and before the closing parenthesis } Binary operators (`+`, `-`, `*`, `||`, `&`, ...) are surrounded by one space, e.g. -``a + b`` (clang-format). +``a + b``. -Unary operators have no space between operator and operand, e.g. ``-a`` -(clang-format). Do not use the negation operator `!` since it can easily be -overseen. Instead use ``not``, e.g. ``not vec.empty()`` (vera++:T012). +Unary operators have no space between operator and operand, e.g. ``-a``. +Do not use the negation operator `!` since it can easily be +overseen. Instead use ``not``, e.g. ``not vec.empty()``. -There is no space between a statement and its corresponding semicolon -(clang-format): +There is no space between a statement and its corresponding semicolon: .. code:: return a + 3 ; // bad return a + 3; // good -Further checks performed by vera++ -********************************** - -* **F001** Source files should not use the '\r' (CR) character -* **F002** File names should be well-formed -* **L001** No trailing whitespace (clang-format) -* **L003** no leading / ending empty lines -* **L005** not to many (> 2) consecutive empty lines -* **T001** One-line comments should not have forced continuation ( ``// ... \``) -* **T002** Reserved names should not be used for preprocessor macros -* **T004** Some keywords should be immediately followed by a colon (clang-format) -* **T005** Keywords break and continue should be immediately followed by a semicolon (clang-format) -* **T006** Keywords return and throw should be immediately followed by a semicolon or a single space (clang-format) -* **T007** Semicolons should not be isolated by spaces or comments from the rest of the code (~ clang-format) -* **T010** Identifiers should not be composed of 'l' and 'O' characters only -* **T017** Unnamed namespaces are not allowed in header files - -Further transformations performed by clang-format -************************************************* - -* Align trailing comments -* Always break before multi-line strings -* Always break template declarations -* Break constructor initializers before comma -* Pointer alignment: Left -* Space before assignment operators -* Spaces before trailing comments: 1 -* Spaces in parentheses -* Spaces in square brackets - Stopwatch example ~~~~~~~~~~~~~~~~~ @@ -597,7 +566,7 @@ For example, the ``stopwatch.h`` file could look like: } else { - // stopped before, get time of current measurment + last measurments + // stopped before, get time of current measurement + last measurements return _end - _beg + _prev_elapsed; } #else @@ -611,7 +580,7 @@ For example, the ``stopwatch.h`` file could look like: #ifndef DISABLE_TIMING _beg = 0; // invariant: _end >= _beg _end = 0; - _prev_elapsed = 0; // erase all prev. measurments + _prev_elapsed = 0; // erase all prev. measurements _running = false; // of course not running. #endif } diff --git a/doc/htmldoc/developer_space/guidelines/mailing_list_guidelines.rst b/doc/htmldoc/developer_space/guidelines/mailing_list_guidelines.rst index 88454f53cc..afadaadff8 100644 --- a/doc/htmldoc/developer_space/guidelines/mailing_list_guidelines.rst +++ b/doc/htmldoc/developer_space/guidelines/mailing_list_guidelines.rst @@ -33,6 +33,13 @@ please follow the guidelines below: to try to ask several diverse questions in one email. Some of your questions may get overlooked if there is just too much information to read through. +.. grid:: 2 + + .. grid-item-card:: |mailicon| Access the mailing list + :link-type: url + :link: https://www.nest-initiative.org/mailinglist/ + + ---- **Feel free to contribute to the conversation!** @@ -41,6 +48,4 @@ The purpose of the mailing list is to share ideas and solutions. We encourage all our users to provide their knowledge and experience to those seeking advice. -`Access the mailing list here <https://www.nest-initiative.org/mailinglist/>`_ ------------------------------------------------------------------------------------- - +.. |mailicon| image:: ../../static/img/email_orange64.png diff --git a/doc/htmldoc/developer_space/guidelines/naming_conventions.rst b/doc/htmldoc/developer_space/guidelines/naming_conventions.rst index 50368dbdad..5f3b98715f 100644 --- a/doc/htmldoc/developer_space/guidelines/naming_conventions.rst +++ b/doc/htmldoc/developer_space/guidelines/naming_conventions.rst @@ -1,41 +1,60 @@ .. _naming_conventions: -Variables and parameter Names +Variables and parameter names ============================= Conventions for parameters -------------------------- -1. Do not use capitalization to indicate whether a value in the status dictionary is variable. -1. Where available, use the notation from P.Dayan & L.F.Abbott, _Theoretical Neuroscience_, MIT Press, 2001. -1. Where not available, use a notation that is consistent with Dayan & Abbott. -1. Subscripts are indicated by underscores +#. Do not use capitalization to indicate whether a value in the status dictionary is variable. +#. Where available, use the notation from P.Dayan & L.F.Abbott, Theoretical Neuroscience, MIT Press, 2001. +#. Where not available, use a notation that is consistent with Dayan & Abbott. +#. Subscripts are indicated by underscores Parameters and symbols ---------------------- +----------------------------------+-------------+ | PARAMETER | SYMBOL/NAME | -+----------------------------------+-------------+ ++==================================+=============+ | Membrane potential | V_m | ++----------------------------------+-------------+ | Resting potential | E_L | ++----------------------------------+-------------+ | Input current | I_e | ++----------------------------------+-------------+ | Leak current | I_L | ++----------------------------------+-------------+ | Threshold | V_th | ++----------------------------------+-------------+ | Reset Potential | V_reset | ++----------------------------------+-------------+ | Capacity or specific capacitance | c_m | ++----------------------------------+-------------+ | Capacitance | C_m | ++----------------------------------+-------------+ | Membrane time const. | tau_m | ++----------------------------------+-------------+ | Synapse time constant | tau_syn | ++----------------------------------+-------------+ | Refractory period | t_ref | ++----------------------------------+-------------+ | Time of last spike | t_spike | ++----------------------------------+-------------+ | Excitatory reversal potential | E_ex | ++----------------------------------+-------------+ | Inhibitory reversal potential | E_in | ++----------------------------------+-------------+ | Conductance | g | ++----------------------------------+-------------+ | Leak conductance | g_L | ++----------------------------------+-------------+ | Sodium conductance | g_Na | ++----------------------------------+-------------+ | Sodium reversal potential | E_Na | ++----------------------------------+-------------+ | Potassium conductance | g_K | ++----------------------------------+-------------+ | Potassium reversal potential | E_K | +----------------------------------+-------------+ @@ -44,13 +63,20 @@ Common suffixes (subscripts) +----------------------------------+-------------+ | SUBSCRIPT | MEANING | -+----------------------------------+-------------+ ++==================================+=============+ | m | membrane | ++----------------------------------+-------------+ | L | leak | ++----------------------------------+-------------+ | e | extern | ++----------------------------------+-------------+ | th | threshold | ++----------------------------------+-------------+ | syn | synapse | ++----------------------------------+-------------+ | ref | refractory | ++----------------------------------+-------------+ | ex | excitatory | ++----------------------------------+-------------+ | in | inhibitory | +----------------------------------+-------------+ diff --git a/doc/htmldoc/developer_space/guidelines/styleguide/styleguide.rst b/doc/htmldoc/developer_space/guidelines/styleguide/styleguide.rst index 06d111ccc9..ba2d6a4ef1 100644 --- a/doc/htmldoc/developer_space/guidelines/styleguide/styleguide.rst +++ b/doc/htmldoc/developer_space/guidelines/styleguide/styleguide.rst @@ -3,10 +3,6 @@ The NEST documentation style guide ================================== -.. contents:: On this page, you will find - :local: - :depth: 1 - Why do we have a style guide? ----------------------------- diff --git a/doc/htmldoc/developer_space/index.rst b/doc/htmldoc/developer_space/index.rst index 270e856da3..808ad16670 100644 --- a/doc/htmldoc/developer_space/index.rst +++ b/doc/htmldoc/developer_space/index.rst @@ -6,42 +6,120 @@ Developer space Here is all documentation pertaining to the development of NEST. It is documentation for anyone needing to touch the code or documentation. +.. grid:: 3 -.. toctree:: - :maxdepth: 1 - :caption: Install from source + .. grid-item-card:: + :link-type: ref + :link: dev_install + :class-card: sd-bg-success sd-text-white - ../installation/linux_install + Install NEST from source -.. toctree:: - :maxdepth: 1 - :caption: Workflows - :glob: - workflows/* +.. _contribute: -.. toctree:: - :maxdepth: 1 - :caption: Guidelines - :glob: +Contribute to NEST +------------------ - guidelines/* - guidelines/styleguide/styleguide - guidelines/styleguide/vim_support_sli +NEST draws its strength from the many people that use and improve it. We +are happy to consider your contributions (e.g., new models, bug or +documentation fixes) for addition to the official version of NEST. +Please familiarize yourself with our guides and workflows: -.. toctree:: - :maxdepth: 1 - :caption: Templates - :glob: - templates/* + +.. grid:: 1 1 2 2 + + .. grid-item-card:: Mailing list + + Have a question or problem about NEST? Get help from the NEST community: + use our :ref:`mailing list <mail_guidelines>`. + + .. grid-item-card:: Create a GitHub issue + + If you have a feature request, bug report or other issue, create + an issue on GitHub using `the templates <https://github.com/nest/nest-simulator/issues/new/choose>`_ + + +.. grid:: 1 1 2 2 + + .. grid-item-card:: Contribute code + + * New to git or need a refresher? See our :ref:`NEST git workflow <git_workflow>` + * Follow the :ref:`C++ coding style guidelines <code_style_cpp>` + * Review the :ref:`naming conventions for NEST <naming_conventions>` + * Writing an extension module? See :doc:`extmod:index` + * :ref:`required_dev_tools` + + .. grid-item-card:: Contribute documentation + + * Review the :ref:`documentation style guide <doc_styleguide>` + * For making changes to the PyNEST APIs, see our :ref:`pyapi_template` + * If you have a Python example network to contribute, please refer to our + :ref:`pyexample_template` + * Check that documentation renders properly: See the :ref:`build documentation <doc_workflow>` guide for developer and user documentation + +.. note:: Adding models to NEST + + If you are looking at creating a new model, please check out :doc:`NESTML <nestml:index>`: + a modeling language supporting neuron and synapse specification, based on the syntax of Python. + +In order to make sure that the NEST Initiative can manage the NEST code base in the long term, +you need to send us a completed and signed +:download:`NEST Contributor Agreement <static/NEST_Contributor_Agreement.pdf>` to transfer your +copyright to the NEST Initiative before we can merge your pull request. + +---- + +Developer guides +---------------- + +.. grid:: 1 1 2 2 + + .. grid-item-card:: Reviewer guidelines + + If you are requested to review a pull request, please + check our :ref:`code_guidelines` + + + .. grid-item-card:: Continuous integration + + * Here you can find details on our :ref:`CI workflow <cont_integration>` + +.. grid:: 1 1 2 2 + + .. grid-item-card:: SLI documentation + :link: sli_doc + :link-type: ref + + + .. grid-item-card:: C++ documentation + + * see :ref:`devdoc_workflow` + +.. grid:: 1 1 2 2 + + .. grid-item-card:: Helpful guides + + Here are a few miscellaneous guides that you might find useful: + + + * :ref:`Developing NEST with IDEs <nest_ides>` + + * :ref:`vim_sli` .. toctree:: :maxdepth: 1 - :caption: SLI docs + :hidden: :glob: + workflows/* + workflows/documentation_workflow/* + guidelines/* + guidelines/styleguide/styleguide + guidelines/styleguide/vim_support_sli + templates/* sli_docs/index - + cppcomments diff --git a/doc/htmldoc/developer_space/sli_docs/first-steps.rst b/doc/htmldoc/developer_space/sli_docs/first-steps.rst index 62a36c4533..2b7db37d8e 100644 --- a/doc/htmldoc/developer_space/sli_docs/first-steps.rst +++ b/doc/htmldoc/developer_space/sli_docs/first-steps.rst @@ -166,5 +166,5 @@ on the stack. ``patsck`` Display the stack in syntax form. ``stack`` Display the stack. ``pop``, ``;`` Pop object from stack. ``npop`` Pop ``n`` objects from stack. ``dup`` Duplicate top object of stack. ``copy`` Copy the first n objects of the stack. ``index`` Copy the -``n``\ ’th object of the stack. ``roll`` Roll a portion of ``n`` stack +``n``\ 'th object of the stack. ``roll`` Roll a portion of ``n`` stack levels ``k`` times. ``exec`` Execute the top element on the stack. diff --git a/doc/htmldoc/developer_space/sli_docs/neural-simulations.rst b/doc/htmldoc/developer_space/sli_docs/neural-simulations.rst index 89d5038624..ea36f82c7c 100644 --- a/doc/htmldoc/developer_space/sli_docs/neural-simulations.rst +++ b/doc/htmldoc/developer_space/sli_docs/neural-simulations.rst @@ -9,7 +9,7 @@ Overview -------- A simulation of a network is like an experiment with the difference that -it takes place inside the computer’s memory rather than in the physical +it takes place inside the computer's memory rather than in the physical world. Like in a real experiment, you need a system which you want to @@ -187,7 +187,7 @@ the time step from 1.1 ms to 1.2 ms. During the time step from 10.9 ms to 11.0 ms, the membrane potential crosses the threshold value -55.0 mV. Thus, the neuron emits an output spike at 11.0 ms and the membrane potential is then reset to -70.0 mV -and clamped to the resting value for 2 ms, the refractory period of the +and clamped to the resting value for 2 ms, the :hxt_ref:`refractory period` of the neuron. After the refractory period, the membrane continues to depolarize due to the continuing input current. @@ -205,7 +205,7 @@ the key 'synapse_models' will return the list of available synapse models. You can find a list of all available neuron models in our :doc:`model -directory <models/index_neuron>`. +directory <../../models/index_neuron>`. Creating nodes ~~~~~~~~~~~~~~ @@ -232,7 +232,7 @@ In the fist line, we create one integrate and fire neuron from the model The return value of ``Create`` is an integer that identifies the last node that was created in the network (note that this can be different from 1 if you have not called ``ResetKernel before)``. This integer is -called the node’s *node ID* (the network as a whole owns the node ID +called the node's *node ID* (the network as a whole owns the node ID ``0``, therefore the ids of user-created nodes start with ``1``). Often, it is neccessary to have a large number of nodes of the same type. The command Create can also be used for this purpose. The following line of @@ -286,7 +286,7 @@ layer we have created above: Using the command ``SetStatus``, it is possible to change the entries of this so called *status dictionary*. The following lines of code change -the threshold value ``V_th`` to -60 mV: +the threshold value :hxt_ref:`V_th` to -60 mV: :: @@ -295,7 +295,7 @@ the threshold value ``V_th`` to -60 mV: -60 Please note, that ``SetStatus`` checks if a property really exists in a -node and will issue an error if it doesn’t. This behavior can be changed +node and will issue an error if it doesn't. This behavior can be changed by the following command: :: @@ -318,7 +318,7 @@ expected type: Provided datatype: stringtype In order to find out, which properties of a given model can be changed -an which not, you have to refer to the model’s documentation. +an which not, you have to refer to the model's documentation. Connections ----------- @@ -416,7 +416,7 @@ By definition, a device is active in the interval \\((t_1,t_2)\) if we can observe events \\(E\) with time stamps \\(t_E\) which obey \\(t_1 <= t_E < t_2\) for all \\(E\) . In other words, the interval during which the device is active corresponds to the range of time-stamps of the -device’s events. +device's events. Note that it is not possible to generate/observe an event with time stamp 0. @@ -453,18 +453,19 @@ different amplitudes at different times. Example 5 ^^^^^^^^^ -:: +.. code-block:: text SLI ] /iaf_psc_alpha Create /n Set SLI ] /poisson_generator Create /pg Set SLI ] pg << /rate 220.0 Hz >> SetStatus SLI ] pg n Connect + Recording devices ~~~~~~~~~~~~~~~~~ All devices which are used to observe the state of other network nodes -are called recording devices. Examples are ``multimeter`` and +are called recording devices. Examples are :hxt_ref:`multimeter` and ``spike_recorder``. Recording devices have properties which control the amount, the @@ -476,15 +477,15 @@ set ``memory``, which is also the default for all devices. Data stored in memory can be retrieved after the simulation using ``GetStatus``. To get a list of all available recording backends, run -:: +.. code-block:: text - SLI ] GetKernelStatus /recording_backends get == + SLI ] GetKernelStatus /recording_backends get == A list of node models including all available device models can be retrieved by calling -``GetKernelStatus /node_models get`. The most important devices are: +``GetKernelStatus /node_models get``. The most important devices are: * ``voltmeter`` Device to observe membrane potentials. -* ``multimeter`` Device to observe arbitrary analog quantities. +* :hxt_ref:`multimeter` Device to observe arbitrary analog quantities. * ``spike_recorder`` Device to observe spike times. Please note that the connection direction for analog recorders (all @@ -495,13 +496,13 @@ this case. Example 6 ^^^^^^^^^ -:: +.. code-block:: text - SLI ] /iaf_psc_alpha Create /n Set - SLI ] /voltmeter Create /vm Set - SLI ] /spike_recorder Create /sr Set - SLI ] vm n Connect - SLI ] n sr Connect + SLI ] /iaf_psc_alpha Create /n Set + SLI ] /voltmeter Create /vm Set + SLI ] /spike_recorder Create /sr Set + SLI ] vm n Connect + SLI ] n sr Connect Simulation ---------- diff --git a/doc/htmldoc/developer_space/sli_docs/objects-and-data-types.rst b/doc/htmldoc/developer_space/sli_docs/objects-and-data-types.rst index a3ad6cc900..bac350b2b2 100644 --- a/doc/htmldoc/developer_space/sli_docs/objects-and-data-types.rst +++ b/doc/htmldoc/developer_space/sli_docs/objects-and-data-types.rst @@ -116,7 +116,7 @@ Strings Strings are sequences of characters, delimited by parenthesis. In SLI, characters are represented by interger numbers, e.g. 97 represents the -letter ‘a’, while 32 represents the *space* character. +letter "a", while 32 represents the *space* character. The elements of a string are indexed, starting with zero (0) as the first index. @@ -202,11 +202,21 @@ There are a number of different object types in SLI. Each type is represented by a literal name (i.e. a name with a prepended slash). Here is a list of the most important types: -\|—————–|——————-\| \| ``/integertype`` \| ``/doubletype`` \| \| -``/booltype`` \| ``/stringtype`` \| \| ``/nametype`` \| ``/literaltype`` -\| \| ``/arraytype`` \| ``/proceduretype`` \| \| ``/modeltype`` \| -``/dictionarytype`` \| \| ``/ostreamtype`` \| ``/istreamtype`` \| \| -``/xistreamtype`` \| ``/trietype`` \| +* ``/integertype`` +* ``/doubletype`` +* ``/booltype`` +* ``/stringtype`` +* ``/nametype`` +* ``/literaltype`` +* ``/arraytype`` +* ``/proceduretype`` +* ``/modeltype`` +* ``/dictionarytype`` +* ``/ostreamtype`` +* ``/istreamtype`` +* ``/xistreamtype`` +* ``/trietype`` + Getting type information ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/htmldoc/developer_space/sli_docs/programming-in-sli.rst b/doc/htmldoc/developer_space/sli_docs/programming-in-sli.rst index 2eeddbc0b0..fbe9b6252f 100644 --- a/doc/htmldoc/developer_space/sli_docs/programming-in-sli.rst +++ b/doc/htmldoc/developer_space/sli_docs/programming-in-sli.rst @@ -30,12 +30,12 @@ A program is a sequence of SLI objects and procedures which are defined in a file. Program files are ordinary ASCII text files, which can be created and modified with an editor of your choice (e.g. GNU Emacs). -SLI programs usually have the file ending “sli”, for example +SLI programs usually have the file ending "sli", for example ``hello_world.sli``. The ``run`` command is used to execute a program file. -Example: “Hello World!” +Example: "Hello World!" ~~~~~~~~~~~~~~~~~~~~~~~ Write the program ``hello_world.sli`` according to the example, given @@ -236,7 +236,7 @@ The simplest loop is performed by the command ``loop``:  : ``loop`` performs the procedure repeatedly and thus in the example, an -infinite succession of the words “Hello World” is printed. The only way +infinite succession of the words "Hello World" is printed. The only way to leave a ``loop``-structure is to call the command ``exit`` somewhere inside the loop: @@ -246,7 +246,7 @@ inside the loop: SLI [1] { 1 add dup (Hello World) = 10 eq {exit} if } SLI [2] loop -it prints ten times ‘Hello World’. First the initial value 0 is pushed +it prints ten times "Hello World". First the initial value 0 is pushed on the operand stack. The procedure adds 1 in each cycle and takes care that one copy of the counter stays on the stack to serve as the initial value for the next cycle. After the message has been printed, the stop @@ -263,7 +263,7 @@ Finite loops The last example can be implemented much easier, using a ``repeat`` loop. ``repeat`` takes two arguments: An integer, and a procedure object. The integer determines how often the procedure is executed. -Thus, in order to print ten times “Hello World” we write: +Thus, in order to print ten times "Hello World" we write: :: diff --git a/doc/htmldoc/developer_space/sli_docs/using-files-and-keyboard-input.rst b/doc/htmldoc/developer_space/sli_docs/using-files-and-keyboard-input.rst index dfc584bc45..77f98a81b1 100644 --- a/doc/htmldoc/developer_space/sli_docs/using-files-and-keyboard-input.rst +++ b/doc/htmldoc/developer_space/sli_docs/using-files-and-keyboard-input.rst @@ -8,7 +8,7 @@ Using files and keyboard input Overview -------- -SLI’s input/output fascilities differ from those of PostScript and are +SLI's input/output fascilities differ from those of PostScript and are close to the stream concept of C++. However, for compatibility some PostScript output commands are implemented. @@ -29,7 +29,7 @@ Print *Hello World* to the standard output. SLI ] ``cout`` is the standard output of SLI. The command ``<-`` takes the -role of C++’s ``<<`` output operator and prints the ASCII representation +role of C++'s ``<<`` output operator and prints the ASCII representation of the object at stack level 0 to the stream at level 1. After this, the object is removed and the stream remains at level 0. @@ -111,7 +111,7 @@ to right of the field. ``ostream internal`` Sign left and number right. ``stream uppercase`` ``ostream nouppercase`` ``ostream oct`` Switch to octal notation. ``ostream dec`` Switch to decimal notation. ``ostream hex`` Switch to hexadecimal notation. ``ostream showbase`` -Show base according to use of oct/dec/hex. ``ostream noshowbase`` Don’t +Show base according to use of oct/dec/hex. ``ostream noshowbase`` Don't show base according to use of oct/dec/hex. ``ostream showpoint`` Decimal point is always printed. ``ostream noshowpoint`` Decimal point is never printed. ``ostream n setprecision`` Set number of decimal places to diff --git a/doc/htmldoc/developer_space/templates/pynest_api_template.py b/doc/htmldoc/developer_space/templates/pynest_api_template.py index 5a41b62823..8f41abcd40 100644 --- a/doc/htmldoc/developer_space/templates/pynest_api_template.py +++ b/doc/htmldoc/developer_space/templates/pynest_api_template.py @@ -36,6 +36,9 @@ """ +from msilib.schema import Error + + def GetConnections(source=None, target=None, synape_model=None, synapse_label=None): r"""Return a `SynapseCollection` representing the connection identifiers. [[ In a single 'summary line', state what the function does ]] @@ -120,13 +123,11 @@ def GetConnections(source=None, target=None, synape_model=None, synapse_label=No .. [1] Bonewald LF. (2011). The amazing osteocyte. Journal of Bone and Mineral Research 26(2):229–238. DOI: 10.1002/jbmr.320. - """ + """ # [[ in line comments should be used to explain why this code is here]] # This code was included because of bug Y when running X # Temporary, I HOPE HOPE HOPE - if model is not None and syn_spec is not None: - raise kernel.NESTerror( - "'model' is an alias for 'syn_spec' and cannot" - " be used together with 'syn_spec'.") + if source is None and target is None: + raise Error("'source' and 'target' both cannot be None") diff --git a/doc/htmldoc/developer_space/templates/pynest_example_template.py b/doc/htmldoc/developer_space/templates/pynest_example_template.py index d7ed77713d..3bfed68a1b 100644 --- a/doc/htmldoc/developer_space/templates/pynest_example_template.py +++ b/doc/htmldoc/developer_space/templates/pynest_example_template.py @@ -124,6 +124,7 @@ :Authors: D Adams, N Gaiman """ +# flake8: noqa import nest # [[ begin code section with imports]] import scipy @@ -142,7 +143,7 @@ nest.SetStatus(noise, [{"rate": n_ex * r_ex}, {"rate": n_in * r_in}]) nest.SetStatus(voltmeter, {"withgid": True, "withtime": True}) -complete code ... +# complete code ... ############################################################################## diff --git a/doc/htmldoc/developer_space/workflows/ci.rst b/doc/htmldoc/developer_space/workflows/ci.rst index 57d70ce3f4..36355d683e 100644 --- a/doc/htmldoc/developer_space/workflows/ci.rst +++ b/doc/htmldoc/developer_space/workflows/ci.rst @@ -24,21 +24,19 @@ The current CI implementation is defined in `.github/workflows/nestbuildmatrix.y #. Static checks - This first stage checks the code without building or running it. + This first stages check the code without building or running it. - clang-format checks C++ code formatting (whitespace, etc.). Please note that a specific version of clang-format is used for consistency. The maximum line length is set to 120 characters. - - Vera++ and cppcheck are used for more detailed semantic (but still static) code analysis. + - cppcheck are used for more detailed semantic (but still static) code analysis. - - pycodestyle is used to statically check Python code. A few errors are intentionally ignored, defined in the variable ``PYCODESTYLE_IGNORES`` in `build_support/static_code_analysis.sh <https://github.com/nest/nest-simulator/blob/master/build_support/static_code_analysis.sh>`_. Again, the maximum line length is 120 characters. + - mypy, pylint, black and flake8 are used to statically check Python code. A few errors are intentionally ignored, defined in `tox.ini <https://github.com/nest/nest-simulator/blob/master/tox.ini>`_. Again, the maximum line length is 120 characters. Errors that occurred in this stage are printed at the end of the log, including a list of affected files. #. Build of NEST Simulator - To ensure that changes in the code do not increase the number of compiler warnings generated during the build, warnings are counted and compared to a hardcoded number in the function ``makebuild_summary()`` in `build_support/parse_build_log.py <https://github.com/nest/nest-simulator/blob/master/build_support/parse_build_log.py>`_. The number of counted and expected warnings is printed in the "Build report" table printed at the end of the stage. For changes that legitimately increase the number of warnings, these values should be changed as part of the pull request. - - The CI builds cover both the gcc and clang compilers. + For details about the CI stages, please see the GitHub Actions workflow file https://github.com/nest/nest-simulator/blob/master/.github/workflows/nestbuildmatrix.yml. #. Unit testing diff --git a/doc/htmldoc/developer_space/workflows/development_workflow.rst b/doc/htmldoc/developer_space/workflows/development_workflow.rst index b074364d11..7a0e32c619 100644 --- a/doc/htmldoc/developer_space/workflows/development_workflow.rst +++ b/doc/htmldoc/developer_space/workflows/development_workflow.rst @@ -3,10 +3,6 @@ NEST Git workflow ================= -.. contents:: On this page, you'll find - :local: - :depth: 2 - Basic Git setup --------------- @@ -20,16 +16,16 @@ Installation and global setup 1. `Install Git <http://git-scm.com/book/en/v2/Getting-Started-Installing-Git>`_. 2. Introduce yourself to Git: -.. code:: + .. code:: - git config --global user.email you@yourdomain.example.com - git config --global user.name "Your Name Comes Here" + git config --global user.email you@yourdomain.example.com + git config --global user.name "Your Name Comes Here" Setting up your GitHub account ############################## The NEST source code is hosted in a public repository on -`GitHub <https://github.com/nest/nest-simulator>`_. If you don’t have a GitHub +`GitHub <https://github.com/nest/nest-simulator>`_. If you don't have a GitHub account already, please create one. You then need to configure your account to allow write access - please see the @@ -80,7 +76,7 @@ Commands explained This downloads your fork to your local system. Investigate. Change directory to your new repository: ``cd nest-simulator``. -Then ``git branch -a`` to show you all branches. You’ll get something like: +Then ``git branch -a`` to show you all branches. You'll get something like: .. code:: @@ -109,7 +105,7 @@ the main source code repository is usually called ``upstream``. .. note:: - We’ve used ``git://`` in the web address instead of ``git@``. + We've used ``git://`` in the web address instead of ``git@``. The ``git://`` web address is read only and ensures that you don't make any accidental changes to the ``upstream`` repository (if you have permissions to write to it, of course). @@ -160,27 +156,27 @@ Before you make any changes, ensure that your local copy is up to date with the 1. Go to (checkout) the default master branch -.. code:: + .. code:: - git checkout master + git checkout master 2. Download (fetch) changes from upstream -.. code:: + .. code:: - git fetch upstream + git fetch upstream 3. Update your master branch - merge any changes that have been made upstream -.. code:: + .. code:: - git merge upstream/master --ff-only + git merge upstream/master --ff-only 4. Update the remote for your fork -.. code:: + .. code:: - git push origin master + git push origin master We suggest using the ``--ff-only`` flag since it ensures that a new commit is not created when you merge the changes from ``upstream`` into your @@ -213,33 +209,33 @@ Editing workflow - command list 1. Improve ``modified_file`` with your text editor/IDE. 2. Confirm what files have changed in the repository. -.. code:: + .. code:: - git status + git status 3. Review the changes you've made (optional). -.. code:: + .. code:: - git diff + git diff 4. Inform Git that you want to save these changes. -.. code:: + .. code:: - git add modified_file + git add modified_file 5. Save these changes. -.. code:: + .. code:: - git commit + git commit 6. Push these changes to the remote for your fork. -.. code:: + .. code:: - git push origin my-new-feature + git push origin my-new-feature Editing workflow - commands explained ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -273,7 +269,7 @@ Editing workflow - commands explained diff --git a/development_workflow.rst b/development_workflow.rst index f05f0cd..e581f00 100644 --- a/development_workflow.rst - +++ b/development_workflow.rst + +++ b/development_workflow.rst @@ -8,17 +8,22 @@ layout: index 6. Inform Git of what modified or new files you want to save (stage) using ``git add modified_file``. diff --git a/doc/htmldoc/developer_space/workflows/documentation_workflow/developer_documentation_workflow.rst b/doc/htmldoc/developer_space/workflows/documentation_workflow/developer_documentation_workflow.rst index 69a0c3fe3e..423ee530ff 100644 --- a/doc/htmldoc/developer_space/workflows/documentation_workflow/developer_documentation_workflow.rst +++ b/doc/htmldoc/developer_space/workflows/documentation_workflow/developer_documentation_workflow.rst @@ -10,10 +10,11 @@ For developer documentation, we use `Doxygen <http://doxygen.org/>`__ comments extensively throughout NEST. After installing NEST, you can extract comments from the source code -with ``make doc``. A ``doxygen`` folder with HTML files will be +with ``make docs``. A ``doxygen`` folder with HTML files will be generated in the ``doc`` folder in your source directory. .. note:: + This workflow shows you how to create **developer documentation** for NEST. For the **user documentation**, please refer to our :ref:`User documentation workflow <userdoc_workflow>`. @@ -21,40 +22,37 @@ generated in the ``doc`` folder in your source directory. Instructions ++++++++++++ -Make sure you have already :ref:`installed NEST -<install_nest>` and created your ``build`` and ``install`` -directories. Your ``CMake`` version needs to be up-to-date. +1. Install Doxygen and graphviz. -1. Install Doxygen. + If you are a Linux user, type: -If you are a Linux user, type: + .. code-block:: -.. code-block:: - :name: Linux + sudo apt install doxygen graphviz - sudo apt install doxygen + For macOS, please use `Homebrew <https://brew.sh/>`_: -For macOS, please use `Homebrew <https://brew.sh/>`_: + .. code-block:: -.. code-block:: + brew install doxygen graphviz - brew install doxygen +2. Navigate to, or create a ``build`` directory. See :ref:`install_nest`. -2. Go to your build directory: +3. Add the ``-Dwith-devdoc=ON`` flag to your regular CMake command: -.. code-block:: + .. code-block:: - cd </path/to/nest-build> + cmake -Dwith-devdoc=ON 3. Generate HTML: -.. code-block:: + .. code-block:: - make doc + make docs 4. Preview documentation: -.. code-block:: + .. code-block:: - cd doc/doxygen/html - browser index.html + cd doc/doxygen/html + browser index.html diff --git a/doc/htmldoc/developer_space/workflows/documentation_workflow/user_documentation_workflow.rst b/doc/htmldoc/developer_space/workflows/documentation_workflow/user_documentation_workflow.rst index ef40d6ebeb..1b01b91fab 100644 --- a/doc/htmldoc/developer_space/workflows/documentation_workflow/user_documentation_workflow.rst +++ b/doc/htmldoc/developer_space/workflows/documentation_workflow/user_documentation_workflow.rst @@ -1,19 +1,19 @@ .. _userdoc_workflow: User-level documentation workflow -################################# +================================= -What you need to know -+++++++++++++++++++++ +Overview of workflow +-------------------- We use `Sphinx <https://www.sphinx-doc.org/en/master/>`_ to generate documentation and `Read the Docs <https://readthedocs.org/>`_ to publish it. Sphinx uses reStructuredText as the base format for the documentation. To learn more about the syntax, check out this `quick reference -<https://thomas-cokelaer.info/tutorials/sphinx/rest_syntax.html>`_. +<https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_. -The NEST simulator documentation lives alongside its code. It is +The NEST Simulator documentation lives alongside its code. It is contained in the ``doc/htmldoc`` directory within the `NEST source code repository <https://github.com/nest/nest-simulator>`_ on GitHub. @@ -21,35 +21,73 @@ We work with `GitHub <https://www.github.com>`_ as a web-based hosting service for Git. Git allows us to keep our versions under control, with each release of NEST having its own documentation. -This workflow aims for the concept of **user-correctable documentation**. +.. mermaid:: + :zoom: + :caption: Overview of documentation build. Drag and zoom to explore. + + flowchart TB + + sphinx:::TextPosition + + classDef TextPosition padding-right:25em; + classDef orangeFill color:#fff, stroke:#f63, stroke-width:2px, fill:#f63; + classDef blueFill color:#fff, stroke:#072f42, stroke-width:2px, fill:#072f42; + classDef brownFill color:#fff, stroke:#652200, stroke-width:2px, fill:#652200; + + subgraph sphinx[SPHINX] + read(Read source files):::blueFill-->ext + read-->custom + subgraph Parse_rst ["Parse rst"] + ext(sphinx_extensions):::blueFill + custom(custom_extensions):::blueFill + end + Parse_rst-->build + build(Build output formats):::blueFill + end + subgraph EDIT SOURCE FILES + source(repo: nest/nest-simulator):::orangeFill-- sphinx-build-->read + end + + subgraph OUTPUT["REVIEW OUTPUT"] + direction TB + build--local filesystem-->local(_build directory):::brownFill + build--hosting platform-->rtd(Read the Docs):::brownFill + local-->HTML(HTML):::brownFill + rtd-->HTML + end + + +Contribute to the documentation +------------------------------- + +You can make changes directly to your forked copy of the `NEST source +code repository <https://github.com/nest/nest-simulator>`_ and create a `pull +request <https://github.com/nest/nest-simulator/pulls>`_. Just follow the +workflow below! -.. image:: ../static/img/documentation_workflow.png - :width: 500 - :alt: Alternative text +If you have not done so alrealdy first -.. note:: - This workflow shows you how to create **user-level documentation** - for NEST. For the **developer documentation**, please refer to our - :ref:`Developer documentation workflow - <devdoc_workflow>`. +* Fork the nest-simulator repository (see :ref:`here <fork>` for details on first time setup) -Changing the documentation -++++++++++++++++++++++++++ +* Clone the nest-simulator: -If you notice any errors or weaknesses in the documentation, please -submit an `Issue <https://github.com/nest/nest-simulator/issues>`_ in -our GitHub repository. +.. code-block:: bash -You can also make changes directly to your forked copy of the `NEST source -code repository <https://github.com/nest/nest-simulator>`_ and create a `pull -request <https://github.com/nest/nest-simulator/pulls>`_. Just follow the -workflow below! + git clone git@github.com:<my-username>/nest-simulator + +* Create a branch to a make your changes + +.. code-block:: bash -Setting up your environment -+++++++++++++++++++++++++++ + git checkout -b <my-new-feature> -We recommend that you set up a full NEST developer environment using -Conda (for details on Conda, see :ref:`conda_tips`): +Set up your environment +~~~~~~~~~~~~~~~~~~~~~~~ + +Using the Conda package (includes everything to build NEST, including documentation) +```````````````````````````````````````````````````````````````````````````````````` + +For details on Conda, see :ref:`conda_tips` .. code-block:: bash @@ -64,6 +102,9 @@ If you later on want to deactivate or delete the build environment: conda deactivate rm -rf conda/ +Using pip (includes packages for documentation only) +```````````````````````````````````````````````````` + If you want to install only a minimal set of packages for building the documentation and avoid using Conda, you can use pip: @@ -71,106 +112,120 @@ documentation and avoid using Conda, you can use pip: pip3 install -r <nest_source_dir>/doc/requirements.txt +If you use pip, install ``pandoc`` from your platform's package manager (e.g. apt): + +.. code-block:: bash -Generating documentation with Sphinx -++++++++++++++++++++++++++++++++++++ + sudo apt-get install pandoc -Now that you activated your environment, you can generate HTML files using -Sphinx. -Rendering HTML -~~~~~~~~~~~~~~ +Edit and create pages +~~~~~~~~~~~~~~~~~~~~~~ -You can build and preview the documentation locally by running the following -commands. +You can now edit or add new files with your editor of choice. Most documentation files are +written in reStructuredText and are found in the ``doc/htmldoc`` directory. There are some exceptions, detailed below. +If you're unfamiliar with reStructuredText, you can find some +`helpful hints here <https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_. -1. Go to the :ref:`build directory <source-install>` of NEST (i.e., the -directory where you ran ``cmake``) +Please see our :ref:`documentation style guide <doc_styleguide>` for information on how to write good documentation in NEST. -.. code-block:: bash - cd nest-simulator-x.y.z-build +Where to find documentation in the repository +````````````````````````````````````````````` -2. Generate HTML files +Most documentation is located in ``doc/htmldoc`` with some exceptions. -.. code-block:: bash +If you want to edit Model docs, PyNEST API files, or PyNEST examples, you will need to edit the source files: - make html +.. list-table:: + :header-rows: 1 + + * - Type of documentation + - Source location + * - Model docs + - ``nest-simulator/models/*.h`` in the section `BeginUserDocs` + * - PyNEST API + - ``nest-simulator/pynest/nest/**/*.py`` + * - PyNEST examples + - ``nest-simulator/pynest/examples/**/*.py`` + + +.. note:: + + + Also consider that any new pages you create need to be referenced in the relevant + table of contents. -3. Preview files. They are located in ``doc/htmldoc/html`` -.. code-block:: bash - browser doc/htmldoc/html/index.html +Review changes you made +~~~~~~~~~~~~~~~~~~~~~~~ -To install the documentation under ``<nest_install_dir>`` along with -the rest of NEST, the ``make html`` command can be followed by +To check that the changes you made are correct in the HTML output, +you will need to build the documentation locally with Sphinx. + +#. Navigate to the ``doc/htmldoc`` folder: .. code-block:: bash - make install + cd nest-simulator/doc/htmldoc -If you want to view the files after installation, you can run +#. Build the docs: .. code-block:: bash - browser <nest_install_dir>/share/doc/nest/html/index.html + sphinx-build . ../_build/html -b html -Editing and creating pages -~~~~~~~~~~~~~~~~~~~~~~~~~~ +#. Preview files. They are located in ``doc/_build/html`` -To edit existing `reStructuredText <https://thomas-cokelaer.info/tutorials/ -sphinx/rest_syntax.html>`_ files or to create new ones, follow the steps below: +.. code-block:: bash -1. You can edit and/or add ``.rst`` files in the ``doc/htmldoc`` directory using your - editor of choice. + <browser> ../_build/html/index.html -2. If you create a new page, open ``index.rst`` in the ``doc/htmldoc`` directory - and add the file name under ``.. toctree::``. This will ensure it appears on - the NEST simulator documentation's table of contents. +.. tip:: -3. If you rename or move a file, please make sure you update all the - corresponding cross-references. + You can also build the user documentation in the build directory with CMake: -4. Save your changes. + .. code-block:: bash -5. Re-render documentation as described above. + cmake -Dwith-userdoc=ON </path/to/NEST/src> + make docs -.. note:: - Please see our :ref:`documentation style guide <doc_styleguide>` for information on how to write good documentation in the NEST style. -Proceed as follows to preview your version of the documentation on Read the -Docs. +Create a pull request +~~~~~~~~~~~~~~~~~~~~~ -1. Check that unwanted directories are listed in ``.gitignore``: +Once you're happy with the changes, you can submit a pull request on Github from your fork. +Github has a nice help page that outlines the process for +`submitting pull requests <https://help.github.com/articles/using-pull-requests/#initiating-the-pull-request>`_. -.. code-block:: bash +Reviewers will be assigned and go through your changes. + +If you are a first time contributor, we ask that you fill out the +:download:`NEST Contributor Agreement <https://nest-simulator.readthedocs.io/en/latest/_downloads/9b65adbdacba6bfed66e68c62af4e308/NEST_Contributor_Agreement.pdf>` +form to transfer your copyright to the NEST initiative and send it to *info [at] nest-initiative.org*. - _build - _static - _templates +.. tip:: -2. Add, commit and push your changes to GitHub. + If you notice any errors or weaknesses in the documentation, you can + also submit an `Issue <https://github.com/nest/nest-simulator/issues>`_ on + GitHub. -3. Go to `Read the Docs <https://readthedocs.org/>`_. Sign up for an account - if you don't have one. -4. `Import <https://readthedocs.org/dashboard/import/>`_ the project. +.. seealso:: -5. Enter the details of your project in the ``repo`` field and hit ``Create``. + This workflow shows you how to create **user-level documentation** + for NEST. For the **developer documentation**, please refer to our + :ref:`Developer documentation workflow + <devdoc_workflow>`. -6. `Build <https://docs.readthedocs.io/en/stable/intro/ - import-guide.html#building-your-documentation>`_ your documentation. -This allows you to preview your work on your Read the Docs account. In order -to see the changes on the official NEST simulator documentation, please submit -a pull request. +Read the Docs +`````````````` -Creating pull request -+++++++++++++++++++++ +NEST documentation is hosted on Read the Docs. If you would like to view the documentation +on Read the Docs, you can set up your own account and link it with your Github account. -Once your documentation work is finished, you can create a -:ref:`pull request <git_workflow>` to the ``master`` -branch of the NEST Source Code Repository. Your pull request will be reviewed -by the NEST Documentation Team! +See `this guide <https://docs.readthedocs.io/en/stable/intro/import-guide.htmli>`_ +for more information. diff --git a/doc/htmldoc/developer_space/workflows/nest_with_ides.rst b/doc/htmldoc/developer_space/workflows/nest_with_ides.rst index 90da62144b..2f9fe0a91c 100644 --- a/doc/htmldoc/developer_space/workflows/nest_with_ides.rst +++ b/doc/htmldoc/developer_space/workflows/nest_with_ides.rst @@ -185,7 +185,7 @@ Running and debugging ~~~~~~~~~~~~~~~~~~~~~ Running a NEST Python script -############################ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The steps below give a rough guide to how you can run a NEST Python script. For more detailed documentation on working with Python in VS Code, see the @@ -210,7 +210,7 @@ documentation on working with Python in VS Code, see the **Run Python file in Terminal**. A panel should open with a terminal showing the output. Running a NEST Python script with a Python debugger -################################################### +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The steps below give a rough guide to how you can run a NEST Python script with the built-in debugger. For more detailed documentation on Python debugging in VS Code, see the @@ -228,7 +228,7 @@ documentation on Python debugging in VS Code, see the #. A panel with output will open, and the program will run until it finishes, or encounters an error or a breakpoint. Running a SLI script with a debugger -#################################### +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The steps below give a rough guide to how you can run NEST with GDB in VS Code. For more detailed documentation on C++ debugging in VS Code, see the @@ -249,7 +249,7 @@ documentation on C++ debugging in VS Code, see the Xcode Workflow -------------- -This section contains instructions on how to develop NEST on a Mac (OSX 10.10.3 as of this writing) using Xcode (Version 6.3.2). As the shipped gcc, aka clang (based on LLVM 3.6.0svn), does not support OpenMP and there is no MPI shipped by default, this also explains how to get a proper gcc (with OpenMP and MPI enabled) installed on Mac. +This section contains instructions on how to develop NEST on a Mac (OSX 10.10.3 as of this writing) using Xcode (Version 6.3.2). As the shipped gcc, aka clang (based on LLVM 3.6.0svn), does not support OpenMP and there is no :hxt_ref:`MPI` shipped by default, this also explains how to get a proper gcc (with OpenMP and MPI enabled) installed on Mac. Setup Infrastructure ~~~~~~~~~~~~~~~~~~~~ @@ -368,31 +368,22 @@ Get Xcode working with NEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Create a new project, which we will call ``NEST-fork`` in this article. In the menu select File -> New -> Project... . Then select OS X -> Other -> External Build System (with build tool ``/usr/bin/make``) -1. Add the NEST sources to the project. There is a ``+`` in the left-bottom corner (see image). Click ``Add Files to "NEST-fork"...``. Then select the ``<somebase>/NEST/src/`` folder (do not copy items and use groups). +1. Add the NEST sources to the project. There is a ``+`` in the left-bottom corner. Click ``Add Files to "NEST-fork"...``. Then select the ``<somebase>/NEST/src/`` folder (do not copy items and use groups). - .. figure:: _images/xcode_article/add_files.png - :alt: Add Sources +Also add the generated files: - Also add the generated files: + .. code-block:: - .. code-block:: - - <somebase>/NEST/build/libnestutil/config.h - <somebase>/NEST/build/libnestutil/sliconfig.h - <somebase>/NEST/build/nest/static_modules.h - -1. On the left panel select the newly created project ``NEST-fork``, then select the created target: + <somebase>/NEST/build/libnestutil/config.h + <somebase>/NEST/build/libnestutil/sliconfig.h + <somebase>/NEST/build/nest/static_modules.h - .. figure:: _images/xcode_article/execution_dir.png - :alt: Execution path +1. On the left panel select the newly created project ``NEST-fork``, then select the created target. Here you set set Directory to ``<somebase>/NEST/build``. This will be the directory, in which the ``make`` command is executed. Also check ``Pass build settings in environment``. 1. Next select the ``Build Settings`` panel. - .. figure:: _images/xcode_article/add_path.png - :alt: Add $PATH - Here you ``Add User-Defined Setting`` and name it ``PATH``. In the ``NEST-fork`` column (the second) you copy the content of your ``PATH`` variable (do ``echo $PATH`` in the Terminal). 1. The build system (CMD+B) should work from now on. @@ -422,8 +413,4 @@ We have to create a new target and configure it appropriately: 1. Make the target a OS X -> Command Line Tool (Next), of type C++ in your project (preselected). We call it ``completion`` 1. Remove all files and folders that are created with the new target. 1. In the tab "Build Phase" of the new target, under "Compile Sources" add all ``*.h``, ``*.hpp``, ``*.c``, ``*.cc``, ``*.cpp`` files from the list (you can use CMD+a). - - .. figure:: _images/xcode_article/completion.png - :alt: Code Completion - 1. Now Xcode generates its index and after that code completion should work. diff --git a/doc/htmldoc/devices/record_from_simulations.rst b/doc/htmldoc/devices/record_from_simulations.rst index af303ec873..0520f6adec 100644 --- a/doc/htmldoc/devices/record_from_simulations.rst +++ b/doc/htmldoc/devices/record_from_simulations.rst @@ -101,7 +101,7 @@ kernel attribute ``recording_backends``. If a recording backend has global properties (i.e., parameters shared by all enrolled recording devices), those can be inspected with -:py:func`.GetDefaults` +:py:func:`.GetDefaults` :: diff --git a/doc/htmldoc/devices/stimulate_the_network.rst b/doc/htmldoc/devices/stimulate_the_network.rst index adf79daaca..0f8ffbbb5e 100644 --- a/doc/htmldoc/devices/stimulate_the_network.rst +++ b/doc/htmldoc/devices/stimulate_the_network.rst @@ -17,6 +17,10 @@ The most commonly used generators for spike trains are: - :doc:`../models/poisson_generator` - :doc:`../models/spike_generator` +For injecting prescribed spike trains (e.g., to mimic the output of regular neurons): + +- :doc:`../models/spike_train_injector` + Device properties ----------------- diff --git a/doc/htmldoc/examples/.gitignore b/doc/htmldoc/examples/.gitignore new file mode 100644 index 0000000000..99eed0a521 --- /dev/null +++ b/doc/htmldoc/examples/.gitignore @@ -0,0 +1,5 @@ +# The example's README is copied over from the source directory. +README.rst +# The figures are copied over from the source directory as well. +*.png +*.svg diff --git a/doc/htmldoc/examples/cortical_microcircuit.rst b/doc/htmldoc/examples/cortical_microcircuit.rst deleted file mode 100644 index b5082e5240..0000000000 --- a/doc/htmldoc/examples/cortical_microcircuit.rst +++ /dev/null @@ -1,2 +0,0 @@ -.. include:: Potjans_2014_README.rst - diff --git a/doc/htmldoc/examples/cortical_microcircuit_index.rst b/doc/htmldoc/examples/cortical_microcircuit_index.rst deleted file mode 100644 index 6e5b41a001..0000000000 --- a/doc/htmldoc/examples/cortical_microcircuit_index.rst +++ /dev/null @@ -1,24 +0,0 @@ -.. _toc_microcircuit: - -Cortical microcircuit model -=========================== - -This is a PyNEST implementation of the cortical microcircuit model by Potjans and Diesmann [1]_. - -Here you can inspect all files belonging to this example: - -* :doc:`README <README>`: documentation of this microcircuit model implementation and its usage -* :doc:`run_microcircuit.py <../auto_examples/Potjans_2014/run_microcircuit>`: an example script to try out the microcircuit -* :doc:`network.py <../auto_examples/Potjans_2014/network>`: the main Network class with functions to build and simulate the network -* :doc:`helpers.py <../auto_examples/Potjans_2014/helpers>`: helper functions for network construction, simulation and evaluation -* :doc:`network_params.py <../auto_examples/Potjans_2014/network_params>`: network and neuron parameters -* :doc:`stimulus_params.py <../auto_examples/Potjans_2014/stimulus_params>`: parameters for optional external stimulation -* :doc:`sim_params.py <../auto_examples/Potjans_2014/sim_params>`: simulation parameters -* `reference_data <https://github.com/nest/nest-simulator/tree/master/pynest/examples/Potjans_2014/reference_data>`_: reference data and figures obtained by executing run_microcircuit.py with default parameters - -References ----------- - -.. [1] Potjans TC. and Diesmann M. 2014. The cell-type specific cortical - microcircuit: relating structure and activity in a full-scale spiking - network model. Cerebral Cortex. 24(3):785–806. DOI: `10.1093/cercor/bhs358 <https://doi.org/10.1093/cercor/bhs358>`__. diff --git a/doc/htmldoc/examples/index.rst b/doc/htmldoc/examples/index.rst index 852bdbbd97..fd70e54ac4 100644 --- a/doc/htmldoc/examples/index.rst +++ b/doc/htmldoc/examples/index.rst @@ -3,10 +3,255 @@ PyNEST examples =============== +.. grid:: 1 1 2 3 + + .. grid-item-card:: Simple networks + :img-top: ../static/img/pynest/mc_neuron.png + + * :doc:`../auto_examples/one_neuron` + * :doc:`../auto_examples/one_neuron_with_noise` + * :doc:`../auto_examples/twoneurons` + * :doc:`../auto_examples/balancedneuron` + * :doc:`../auto_examples/aeif_cond_beta_multisynapse` + * :doc:`../auto_examples/testiaf` + * :doc:`../auto_examples/vinit_example` + * :doc:`../auto_examples/mc_neuron` + + + .. grid-item-card:: 2D Spatially-structured networks + :img-top: ../static/img/pynest/layer4.png + + * :doc:`../auto_examples/spatial/conncomp` + * :doc:`../auto_examples/spatial/conncon_sources` + * :doc:`../auto_examples/spatial/conncon_targets` + * :doc:`../auto_examples/spatial/connex` + * :doc:`../auto_examples/spatial/connex_ew` + * :doc:`../auto_examples/spatial/ctx_2n` + * :doc:`../auto_examples/spatial/gaussex` + * :doc:`../auto_examples/spatial/grid_iaf` + * :doc:`../auto_examples/spatial/grid_iaf_irr` + * :doc:`../auto_examples/spatial/grid_iaf_oc` + + .. grid-item-card:: 3D Spatially-structured networks + :img-top: ../static/img/pynest/spatial_test3d.png + + * :doc:`../auto_examples/spatial/test_3d` + * :doc:`../auto_examples/spatial/test_3d_exp` + * :doc:`../auto_examples/spatial/test_3d_gauss` + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: NEST Sudoku solver + :img-top: ../static/img/sudoku_solution.gif + + * :doc:`../auto_examples/sudoku/sudoku_solver` + * :doc:`../auto_examples/sudoku/plot_progress` + + .. grid-item-card:: NEST Pong game + :img-top: ../static/img/pong_sim.gif + + * :doc:`../auto_examples/pong/run_simulations` + * :doc:`../auto_examples/pong/generate_gif` + + .. grid-item-card:: Astrocytes + :img-top: ../static/img/astrocyte_tripartite.png + + * :doc:`../auto_examples/astrocyte_single` + * :doc:`../auto_examples/astrocyte_tripartite` + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: Random balanced networks (Brunel) + :img-top: ../static/img/pynest/brunel_alpha.png + + * :doc:`../auto_examples/brunel_alpha_nest` + * :doc:`../auto_examples/brunel_delta_nest` + * :doc:`../auto_examples/brunel_siegert_nest` + * :doc:`../auto_examples/brunel_exp_multisynapse_nest` + * :doc:`../auto_examples/brunel_alpha_evolution_strategies` + + + .. grid-item-card:: Cortical microcircuit (Potjans) + :img-top: ../static/img/potjans_2014_raster_plot.png + + * :doc:`../auto_examples/Potjans_2014/index` + + .. grid-item-card:: GLIF (from Allen institute) + :img-top: ../static/img/pynest/glif_cond.png + + * :doc:`../auto_examples/glif_cond_neuron` + * :doc:`../auto_examples/glif_psc_neuron` + * :doc:`../auto_examples/glif_psc_double_alpha_neuron` + + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: Compartmental neurons + :img-top: ../static/img/pynest/dendritic_synapse_conductances.png + + * :doc:`../auto_examples/compartmental_model/receptors_and_current` + * :doc:`../auto_examples/compartmental_model/two_comps` + + + .. grid-item-card:: Rate neurons + :img-top: ../static/img/pynest/rate_neuron.png + + * :doc:`../auto_examples/lin_rate_ipn_network` + * :doc:`../auto_examples/rate_neuron_dm` + + + + .. grid-item-card:: GIF (from Gerstner lab) + :img-top: ../static/img/pynest/gif_pop.png + + * :doc:`../auto_examples/gif_cond_exp_multisynapse` + * :doc:`../auto_examples/gif_population` + * :doc:`../auto_examples/gif_pop_psc_exp` + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: Hodgkin-Huxley + :img-top: ../static/img/pynest/hh_phase.png + + * :doc:`../auto_examples/hh_psc_alpha` + * :doc:`../auto_examples/hh_phaseplane` + + .. grid-item-card:: Brody Hopfield + :img-top: ../static/img/nest_logo-faded.png + + * :doc:`../auto_examples/BrodyHopfield` + + .. grid-item-card:: Brette and Gerstner + :img-top: ../static/img/pynest/brette_gerstner2c.png + + * :doc:`../auto_examples/brette_gerstner_fig_2c` + * :doc:`../auto_examples/brette_gerstner_fig_3d` + +.. grid:: 1 1 2 3 + + + .. grid-item-card:: Precise spiking + :img-top: ../static/img/pynest/precisespiking.png + + * :doc:`../auto_examples/precise_spiking` + + .. grid-item-card:: Campbell Siegert + :img-top: ../static/img/nest_logo-faded.png + + * :doc:`../auto_examples/CampbellSiegert` + + .. grid-item-card:: SONATA network + :img-top: ../static/img/300_pointneurons.png + + * :doc:`../auto_examples/sonata_example/sonata_network` + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: Gap junctions + :img-top: ../static/img/pynest/gap_junctioninhib.png + + + * :doc:`../auto_examples/gap_junctions_two_neurons` + * :doc:`../auto_examples/gap_junctions_inhibitory_network` + + + .. grid-item-card:: Structural plasticity + :img-top: ../static/img/pynest/structuralplasticity.png + + * :doc:`../auto_examples/structural_plasticity` + + .. grid-item-card:: Synapse collection + :img-top: ../static/img/pynest/synapsecollection.png + + * :doc:`../auto_examples/synapsecollection` + +.. grid:: 1 1 2 3 + + .. grid-item-card:: Urbanczik + :img-top: ../static/img/pynest/urbanczik_syn.png + + * :doc:`../auto_examples/urbanczik_synapse_example` + + + + .. grid-item-card:: Clopath + :img-top: ../static/img/pynest/clopath.png + + + * :doc:`../auto_examples/clopath_synapse_spike_pairing` + * :doc:`../auto_examples/clopath_synapse_small_network` + + + + .. grid-item-card:: Tsodyks + :img-top: ../static/img/pynest/tsodyks_dep.png + + * :doc:`../auto_examples/tsodyks_depressing` + * :doc:`../auto_examples/tsodyks_facilitating` + * :doc:`../auto_examples/evaluate_tsodyks2_synapse` + + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: Recording and analyzing networks + :img-top: ../static/img/pynest/correlospinmatrix.png + + * :doc:`../auto_examples/multimeter_file` + * :doc:`../auto_examples/plot_weight_matrices` + * :doc:`../auto_examples/if_curve` + * :doc:`../auto_examples/pulsepacket` + * :doc:`../auto_examples/correlospinmatrix_detector_two_neuron` + * :doc:`../auto_examples/cross_check_mip_corrdet` + + .. grid-item-card:: Stimulating networks + :img-top: ../static/img/pynest/sensitivitypertubation.png + + * :doc:`../auto_examples/sinusoidal_poisson_generator` + * :doc:`../auto_examples/sinusoidal_gamma_generator` + * :doc:`../auto_examples/repeated_stimulation` + * :doc:`../auto_examples/sensitivity_to_perturbation` + * :doc:`../auto_examples/intrinsic_currents_spiking` + * :doc:`../auto_examples/intrinsic_currents_subthreshold` + + .. grid-item-card:: Handling output + :img-top: ../static/img/pynest/store_restore.png + + + * :doc:`../auto_examples/recording_demo` + * :doc:`../auto_examples/store_restore_network` + * :doc:`../auto_examples/music_cont_out_proxy_example/nest_script` + + +.. grid:: 1 1 2 3 + + .. grid-item-card:: HPC benchmark + :img-top: ../static/img/nest_logo-faded.png + + * :doc:`../auto_examples/hpc_benchmark` + + + .. grid-item-card:: Connection set algebra + :img-top: ../static/img/nest_logo-faded.png + + * :doc:`../auto_examples/csa_example` + * :doc:`../auto_examples/csa_spatial_example` + .. toctree:: - :maxdepth: 1 - :caption: Basic network examples + :hidden: + running_notebooks + ../auto_examples/sudoku/index + ../auto_examples/pong/index + ../auto_examples/spatial/index + ../auto_examples/music_cont_out_proxy_example/index + ../auto_examples/compartmental_model/index + ../auto_examples/Potjans_2014/index ../auto_examples/one_neuron ../auto_examples/one_neuron_with_noise ../auto_examples/twoneurons @@ -23,20 +268,12 @@ PyNEST examples ../auto_examples/mc_neuron ../auto_examples/glif_cond_neuron ../auto_examples/glif_psc_neuron + ../auto_examples/glif_psc_double_alpha_neuron ../auto_examples/precise_spiking ../auto_examples/CampbellSiegert -.. toctree:: - :maxdepth: 1 - :caption: Examples for handling networks - ../auto_examples/vinit_example ../auto_examples/recording_demo ../auto_examples/store_restore_network - -.. toctree:: - :maxdepth: 1 - :caption: Synapse examples - ../auto_examples/synapsecollection ../auto_examples/structural_plasticity ../auto_examples/gap_junctions_two_neurons @@ -48,41 +285,17 @@ PyNEST examples ../auto_examples/urbanczik_synapse_example ../auto_examples/tsodyks_depressing ../auto_examples/tsodyks_facilitating - -.. toctree:: - :maxdepth: 1 - :caption: Compartmental neuron examples - ../auto_examples/compartmental_model/receptors_and_current ../auto_examples/compartmental_model/two_comps - -.. toctree:: - :maxdepth: 1 - :caption: Rate neuron examples - ../auto_examples/lin_rate_ipn_network ../auto_examples/rate_neuron_dm - -.. toctree:: - :maxdepth: 1 - :caption: Random balanced network examples - ../auto_examples/brunel_alpha_nest ../auto_examples/brunel_delta_nest ../auto_examples/brunel_siegert_nest ../auto_examples/brunel_exp_multisynapse_nest ../auto_examples/brunel_alpha_evolution_strategies - -.. toctree:: - :maxdepth: 1 - :caption: Cortical microcircuit example - - Cortical microcircuit model (based on Potjans and Diesmann, 2014) <cortical_microcircuit_index> - -.. toctree:: - :maxdepth: 1 - :caption: Spatially-stuctured networks examples - + ../auto_examples/sonata_example/index + ../auto_examples/sonata_example/sonata_network ../auto_examples/spatial/conncomp ../auto_examples/spatial/conncon_sources ../auto_examples/spatial/conncon_targets @@ -96,11 +309,6 @@ PyNEST examples ../auto_examples/spatial/test_3d ../auto_examples/spatial/test_3d_exp ../auto_examples/spatial/test_3d_gauss - -.. toctree:: - :maxdepth: 1 - :caption: Device usage examples - ../auto_examples/testiaf ../auto_examples/repeated_stimulation ../auto_examples/multimeter_file @@ -114,18 +322,22 @@ PyNEST examples ../auto_examples/cross_check_mip_corrdet ../auto_examples/intrinsic_currents_spiking ../auto_examples/intrinsic_currents_subthreshold - -.. toctree:: - :maxdepth: 1 - :caption: Connection set algebra examples - ../auto_examples/csa_example ../auto_examples/csa_spatial_example + ../auto_examples/hpc_benchmark + ../auto_examples/astrocyte_single + ../auto_examples/astrocyte_tripartite .. toctree:: - :maxdepth: 1 - :caption: HPC benchmark + :hidden: - ../auto_examples/hpc_benchmark + ../auto_examples/sudoku/sudoku_net + ../auto_examples/sudoku/sudoku_solver + ../auto_examples/sudoku/plot_progress +.. toctree:: + :hidden: + ../auto_examples/pong/run_simulations + ../auto_examples/pong/pong + ../auto_examples/pong/generate_gif diff --git a/doc/htmldoc/examples/running_notebooks.rst b/doc/htmldoc/examples/running_notebooks.rst new file mode 100644 index 0000000000..6bdd7200e3 --- /dev/null +++ b/doc/htmldoc/examples/running_notebooks.rst @@ -0,0 +1,115 @@ +.. _run_jupyter: + +How to run Jupyter notebooks +============================ + +Using EBRAINS JupyterHub +------------------------ + +Prerequisites + + * an EBRAINS account + + If you do not have an account yet, you can sign up here: https://ebrains.eu/register. + +1. Click on the Try it on EBRAINS button in the desired :ref:`example notebook <pynest_examples>`. + + .. image:: https://nest-simulator.org/TryItOnEBRAINS.png + + You will be redirected to https://lab.ebrains.eu + +2. If you are not signed into EBRAINS already, you will be asked to sign in. + + .. image:: ../static/img/signin-ebrains.png + +3. Choose a lab execution site: + + .. image:: ../static/img/lab-execution-site-de.png + +4. JupyterHub will then try to clone the NEST repository and open the selected notebook. + The other notebooks will be available in JupyterHub in the left column, as well. + +Now you can run the notebook and change variables to test how it works! + + .. image:: ../static/img/running-jupyterlab.png + + +.. important:: + + If you want to save any changes you made you need to move the file to either your shared folder in EBRAINS or + download it to your computer. + +---- + +Troubleshooting +--------------- + +Error: Command returned non-zero status 128 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +JupyterHub fails to clone the repository. + + .. image:: ../static/img/error-jupyter-ebrains.png + + +* Select the ``Control Panel`` button on top of page. + +* Stop the server - this may take several minutes. + +.. image:: ../static/img/stopserver-ebrains.png + +.. warning:: + + If you stop the server, you will lose any changes you made during your session that + have not been stored on your computer or in the shared folder. + Download or move any files you wish to keep before restarting the server! + + You can return to JupyterHub by clicking on JupyterHub icon on the Control Panel. + + +* Once the server stops, you can retry running the notebook again. + + Alternatively, you can try another execution site. + + + +``ModuleNotFoundError``: ``no module named nest`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The active notebook fails at importing ``nest`` module. + +* Check that the kernel version is correct (EBRAINS-22.10 and later should be compatible with NEST notebooks). + + .. image:: ../static/img/kernel-version-jupyter.png + +``ModuleNotFoundError``: any other module besides ``nest`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The active notebook fails at importing one or several required modules or packages. + +.. image:: ../static/img/traceback-modulenotfound.png + +* Check that the kernel version is correct (EBRAINS-22.10 and later should be compatible with NEST notebooks). + +* Before the import line in the notebook, insert a new cell. + +.. image:: ../static/img/insert_cell.png + +* Install the missing module with pip, note the exclamation mark before pip: + + .. code-block:: + + !pip install module-name + +.. image:: ../static/img/notebook-pipinstall.png + +If the module is installed successfully, you can try to rerun the notebook. + +---- + +Still not working? +~~~~~~~~~~~~~~~~~~ + +`Create an issue on GitHub <https://github.com/nest/nest-simulator/issues/new/choose>`_. + +The developer team will look into issues as quickly as possible. diff --git a/doc/htmldoc/faqs/faqs.rst b/doc/htmldoc/faqs/faqs.rst index c39ae8277f..98bab8305e 100644 --- a/doc/htmldoc/faqs/faqs.rst +++ b/doc/htmldoc/faqs/faqs.rst @@ -1,14 +1,14 @@ .. _faqs: -Frequently Asked Questions +Frequently asked questions ========================== Installation ------------ -1. **If I compile NEST with MPI support, I get errors about +1. **If I compile NEST with :hxt_ref:`MPI` support, I get errors about ``SEEK_SET``, ``SEEK_CUR`` and ``SEEK_END`` being defined** This is a - known issue in some MPI implementations. A solution is to add + known issue in some :hxt_ref:`MPI` implementations. A solution is to add --with-debug="-DMPICH\_IGNORE\_CXX\_SEEK" to the configure command line. More details about this problem can be found `here <http://www-unix.mcs.anl.gov/mpi/mpich/faq.htm#cxxseek>`__ @@ -41,8 +41,7 @@ Installation which compiler was used. Then re-build NEST with the same compiler version. -6. **I get a segmentation fault wher I use SciPy in the same script - together with PyNEST**. We recently observed that if PyNEST is used +6. **I get a segmentation fault when I use SciPy and PyNEST in the same script**. We recently observed that if PyNEST is used with some versions of SciPy, a segmentation fault is caused. A workaround for the problem is to import SciPy before PyNEST. See https://github.com/numpy/numpy/issues/2521 for the official bug @@ -58,7 +57,7 @@ running ``nest.data_path = "/path/to/data"``. In scripts, this property can be set via the environment variable ``NEST_DATA_PATH``. Please note that the directory ``/path/to/data`` has to exist and will not be created. A common prefix for all data file names can be - set by running ``nest.data_prefix = "prefix"`` or by setting the +set by running ``nest.data_prefix = "prefix"`` or by setting the environment variable ``NEST_DATA_PREFIX``. Neuron models @@ -87,4 +86,6 @@ Connections nest.Connect(n, n[:1], sync_spec={'model'='exc_dist_syn'}) nest.Simulate(10) +.. _faqs_precise_neurons: +.. include:: qa-precise-spike-times.rst diff --git a/doc/htmldoc/faqs/qa-precise-spike-times.rst b/doc/htmldoc/faqs/qa-precise-spike-times.rst index 3103c7c746..64163149de 100644 --- a/doc/htmldoc/faqs/qa-precise-spike-times.rst +++ b/doc/htmldoc/faqs/qa-precise-spike-times.rst @@ -1,174 +1,172 @@ -.. _faqs_precise_neurons: - Questions and answers about precise neurons -=========================================== - -(1) Q: **Is it meaningful to compare the precise sequences of spikes - generated by the simulations of a recurrent network using different - solvers?** - -A: No, due to the chaotic nature of the dynamics, minor differences in -the computer representation of the spike times lead to completely -different spike sequences after a short time. - -(2) Q: **Does an event-driven algorithm which determines the precise - spike times of a neuron by numerically evaluating a closed form - expression or an iterative procedure like Newton-Raphson lead to - machine independent spike sequences?** - -A: No. For example, if machine A uses “double” for the representation of -floating point numbers and machine B uses “quad” precision, the spike -sequences of the two simulations deviate after a short time. Even with -the same representation of floating point values, results rapidly -diverge if some library function like exp() is implemented in a slightly -different way or the terms of mathematical expressions are reordered. - -(3) Q: **Given the non-reproducibility of spike sequences in network - simulations, is there any meaningful way to talk about the accuracy - of a solver?** - -A: Yes, even though network dynamics may be chaotic, for many neuron -models relevant to Computational Neuroscience the dynamics of the single -neuron is not. Examples are integrate-and-fire models with linear -subthreshold dynamics and the AdEx model considered in `Hanuschkin -(2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__. In these cases -it is possible to study the accuracy of a solution of the single neuron -dynamics. - -(4) Q: **Why are we investigating the performance of network simulations - anyway?** - -A: A single neuron simulation is no challenge for modern processors in -terms of memory consumption. The data fit into the fast cache memory and -memory bandwidth is not an issue. In a network simulation, however, the -run time of a simulation algorithm is to a large extent determined by -the organization of the data flow between main memory and processor. -Solvers may differ considerably in their demands on memory bandwidth. -Therefore it is essential that integration algorithms are compared with -respect to the run time of network simulations. - -(5) Q: **How can the efficiency of a solver be defined if accuracy is - only accessible in single neuron simulations and run time is only of - interest for network simulations?** - -A: Efficiency needs to be defined as the run time of a network -simulation required to achieve a certain accuracy goal of a single -neuron simulation with input statistics corresponding to the network -simulation. This was developed and described in `Morrison et al. -(2007) <http://dx.doi.org/10.1162/neco.2007.19.1.47>`__. - -(6) Q: **Given that network dynamics is chaotic anyway, why is it - important that single neuron dynamics is accurately integrated?** - -A: Although the networks dynamics is chaotic, in some cases mesoscopic -measures of network activity can be affected by the quality of the -single neuron solver. For example, `Hansel et al. -(1998) <http://dx.doi.org/10.1162/089976698300017845>`__ showed that a -measure of network synchrony exhibits a considerable error if the single -neuron dynamics is integrated using a grid-constrained algorithm. -Without confidence in the precision of the single neuron solver we -cannot interpret features observed on the network level or control for -artifacts. - -(7) Q: **The biological system contains noise and any model is only an - accurate description of nature to some degree. Why is it then - important to be able to integrate a model with a precision of n - digits?** - -A: This question is based on a mix-up between a scientific model and a -simulation of the model. A simulation should always attempt to solve the -equations of a model accurately, so that the scientist can be sure of -the predictions of the model. Any noise terms or variability of -parameters should be explicit constituents of the model, not of a -particular simulation. - -(8) Q: **Does this mean that we should always simulate using the maximum - precision implementations of neuron models?** - -A: No, for many scientific problems a limited precision is good enough. -The fastest method delivering at least the required precision is the one -of choice. In the case of chaotic dynamics there is generally no good -reason to consider results produced by a neuron model implementation -with high precision as being ‘more correct’ than those produced by a -faster implementation with lower precision, as long as mesoscopic -measures of interest remain unchanged. With a more accurate method at -hand, the researcher can always carry out control simulations at higher -precision to verify that the scientific results are robust with respect -to the integration method. - -(9) Q: **Is there a fundamental difference between event-driven and - time-driven algorithms in the reproducibility of the spike sequences - of network simulations if the solvers do not miss any spikes?** - -A: No. In both cases the sequence of spike times is generally not -reproducible by a different implementation or on a different machine -because it depends on the details of the numerical implementation and -the representation of floating point numbers. - -(10) Q: **Is there a fundamental difference in the accuracy of an - event-driven algorithm and the time-driven algorithm presented - in**\ `Hanuschkin - (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **?** - -A: Yes. In a class of integrate-and-fire neuron models with linear -subthreshold dynamics the event-driven methods never miss a spike. The -time-driven method presented in the study misses spikes with a low -probability. - -(11) Q: **Is there a fundamental difference in the accuracy of an - event-driven algorithm and the time-driven algorithm presented - in**\ `Hanuschkin - (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **if the - event-driven algorithm is used for a neuron model like the AdEx - model, for which a spike prediction expression remains to be - discovered?** - -A: No, in this case both types of algorithms rely on solvers moving -forward with an adaptive step size which can theoretically miss spikes, -but in practice does not, due to the explosive dynamics at threshold. As -there is no difference in the accuracy, the faster algorithm should be -chosen. - -(12) Q: **Why is the time-driven method for the AdEx model presented - in**\ `Hanuschkin - (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **the - preferred method if neither an event-driven nor a time-driven - algorithm is known which theoretically excludes the loss of - spikes**? - -A: The time-driven method is more efficient: it delivers the same -accuracy in a shorter time because of a lower administrative overhead. - -(13) Q: **What is the rate at which spikes are missed in a typical - large-scale neuronal network simulation of integrate-and-fire model - neurons with linear subthreshold dynamics in the balanced state and - a spike rate of around 10 Hz**? - -A: At a typical parameter setting for a simulation with around 10,000 -neurons and 15 million synapses, the total rate at which spikes are -missed is up to 5 spikes per second. - -(14) Q: **Is the time-driven method presented in**\ `Hanuschkin - (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **more - general than the event-driven methods discussed?** - -A: Yes, the event-driven methods that do not miss any spikes are -specific to a particular class of neuron models (current based with -exponential synapses). In contrast, the time-driven method presented in -the study is applicable to any neuron model with a threshold condition -independently of the nature of the subthreshold dynamics. - -(15) Q: **What is the scalability of the proposed solution for - large-scale network simulations in comparison to an event-driven - scheme?** - -A: The scalability of the time-driven method presented in `Hanuschkin -(2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__ is excellent. It -is identical to that of the classical time-driven solver constraining -spikes to a fixed computation time grid. In contrast, the classical -event-driven scheme does not scale well because it requires a central -queue. This can be improved if a decoupling technique based on the -existence of a minimal delay (`Morrison et -al. 2005 <http://dx.doi.org/10.1162/0899766054026648>`__) is employed, -see `Lytton & Hines -(2005) <http://dx.doi.org/10.1162/0899766053429453>`__. +------------------------------------------- + +1. Q: **Is it meaningful to compare the precise sequences of spikes + generated by the simulations of a recurrent network using different + solvers?** + + A: No, due to the chaotic nature of the dynamics, minor differences in + the computer representation of the spike times lead to completely + different spike sequences after a short time. + +2. Q: **Does an event-driven algorithm which determines the precise + spike times of a neuron by numerically evaluating a closed form + expression or an iterative procedure like Newton-Raphson lead to + machine independent spike sequences?** + + A: No. For example, if machine A uses "double" for the representation of + floating point numbers and machine B uses "quad" precision, the spike + sequences of the two simulations deviate after a short time. Even with + the same representation of floating point values, results rapidly + diverge if some library function like exp() is implemented in a slightly + different way or the terms of mathematical expressions are reordered. + +3. Q: **Given the non-reproducibility of spike sequences in network + simulations, is there any meaningful way to talk about the accuracy + of a solver?** + + A: Yes, even though network dynamics may be chaotic, for many neuron + models relevant to Computational Neuroscience the dynamics of the single + neuron is not. Examples are integrate-and-fire models with linear + :hxt_ref:`subthreshold dynamics` and the AdEx model considered in `Hanuschkin + (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__. In these cases + it is possible to study the accuracy of a solution of the single neuron + dynamics. + +4. Q: **Why are we investigating the performance of network simulations + anyway?** + + A: A single neuron simulation is no challenge for modern processors in + terms of memory consumption. The data fit into the fast cache memory and + memory bandwidth is not an issue. In a network simulation, however, the + run time of a simulation algorithm is to a large extent determined by + the organization of the data flow between main memory and processor. + Solvers may differ considerably in their demands on memory bandwidth. + Therefore it is essential that integration algorithms are compared with + respect to the run time of network simulations. + +5. Q: **How can the efficiency of a solver be defined if accuracy is + only accessible in single neuron simulations and run time is only of + interest for network simulations?** + + A: Efficiency needs to be defined as the run time of a network + simulation required to achieve a certain accuracy goal of a single + neuron simulation with input statistics corresponding to the network + simulation. This was developed and described in `Morrison et al. + (2007) <http://dx.doi.org/10.1162/neco.2007.19.1.47>`__. + +6. Q: **Given that network dynamics is chaotic anyway, why is it + important that single neuron dynamics is accurately integrated?** + + A: Although the networks dynamics is chaotic, in some cases mesoscopic + measures of network activity can be affected by the quality of the + single neuron solver. For example, `Hansel et al. + (1998) <http://dx.doi.org/10.1162/089976698300017845>`__ showed that a + measure of network synchrony exhibits a considerable error if the single + neuron dynamics is integrated using a grid-constrained algorithm. + Without confidence in the precision of the single neuron solver we + cannot interpret features observed on the network level or control for + artifacts. + +7. Q: **The biological system contains noise and any model is only an + accurate description of nature to some degree. Why is it then + important to be able to integrate a model with a precision of n + digits?** + + A: This question is based on a mix-up between a scientific model and a + simulation of the model. A simulation should always attempt to solve the + equations of a model accurately, so that the scientist can be sure of + the predictions of the model. Any noise terms or variability of + parameters should be explicit constituents of the model, not of a + particular simulation. + +8. Q: **Does this mean that we should always simulate using the maximum + precision implementations of neuron models?** + + A: No, for many scientific problems a limited precision is good enough. + The fastest method delivering at least the required precision is the one + of choice. In the case of chaotic dynamics there is generally no good + reason to consider results produced by a neuron model implementation + with high precision as being 'more correct' than those produced by a + faster implementation with lower precision, as long as mesoscopic + measures of interest remain unchanged. With a more accurate method at + hand, the researcher can always carry out control simulations at higher + precision to verify that the scientific results are robust with respect + to the integration method. + +9. Q: **Is there a fundamental difference between event-driven and + time-driven algorithms in the reproducibility of the spike sequences + of network simulations if the solvers do not miss any spikes?** + + A: No. In both cases the sequence of spike times is generally not + reproducible by a different implementation or on a different machine + because it depends on the details of the numerical implementation and + the representation of floating point numbers. + +10. Q: **Is there a fundamental difference in the accuracy of an + event-driven algorithm and the time-driven algorithm presented + in**\ `Hanuschkin + (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **?** + + A: Yes. In a class of integrate-and-fire neuron models with linear + subthreshold dynamics the event-driven methods never miss a spike. The + time-driven method presented in the study misses spikes with a low + probability. + +11. Q: **Is there a fundamental difference in the accuracy of an + event-driven algorithm and the time-driven algorithm presented + in**\ `Hanuschkin + (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **if the + event-driven algorithm is used for a neuron model like the AdEx + model, for which a spike prediction expression remains to be + discovered?** + + A: No, in this case both types of algorithms rely on solvers moving + forward with an adaptive step size which can theoretically miss spikes, + but in practice does not, due to the explosive dynamics at threshold. As + there is no difference in the accuracy, the faster algorithm should be + chosen. + +12. Q: **Why is the time-driven method for the AdEx model presented + in**\ `Hanuschkin + (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **the + preferred method if neither an event-driven nor a time-driven + algorithm is known which theoretically excludes the loss of + spikes**? + + A: The time-driven method is more efficient: it delivers the same + accuracy in a shorter time because of a lower administrative overhead. + +13. Q: **What is the rate at which spikes are missed in a typical + large-scale neuronal network simulation of integrate-and-fire model + neurons with linear subthreshold dynamics in the balanced state and + a spike rate of around 10 Hz**? + + A: At a typical parameter setting for a simulation with around 10,000 + neurons and 15 million synapses, the total rate at which spikes are + missed is up to 5 spikes per second. + +14. Q: **Is the time-driven method presented in**\ `Hanuschkin + (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__\ **more + general than the event-driven methods discussed?** + + A: Yes, the event-driven methods that do not miss any spikes are + specific to a particular class of neuron models (current based with + exponential synapses). In contrast, the time-driven method presented in + the study is applicable to any neuron model with a threshold condition + independently of the nature of the subthreshold dynamics. + +15. Q: **What is the scalability of the proposed solution for + large-scale network simulations in comparison to an event-driven + scheme?** + + A: The scalability of the time-driven method presented in `Hanuschkin + (2010) <http://dx.doi.org/10.3389/fninf.2010.00113>`__ is excellent. It + is identical to that of the classical time-driven solver constraining + spikes to a fixed computation time grid. In contrast, the classical + event-driven scheme does not scale well because it requires a central + queue. This can be improved if a decoupling technique based on the + existence of a minimal delay (`Morrison et + al. 2005 <http://dx.doi.org/10.1162/0899766054026648>`__) is employed, + see `Lytton & Hines + (2005) <http://dx.doi.org/10.1162/0899766053429453>`__. diff --git a/doc/htmldoc/features.rst b/doc/htmldoc/features.rst deleted file mode 100644 index 16ee049e12..0000000000 --- a/doc/htmldoc/features.rst +++ /dev/null @@ -1,139 +0,0 @@ -.. _features: - -Features -======== - -1. NEST provides over 50 neuron models many of which have been - published. Choose from simple integrate-and-fire neurons with - current or conductance based synapses, over the Izhikevich or AdEx - models, to Hodgkin-Huxley models. - -2. NEST provides over 10 synapse models, including short-term - plasticity (Tsodyks & Markram) and different variants of - spike-timing dependent plasticity (STDP). - -3. NEST provides the possibility to create spatially-structured networks. - (:ref:`Guide to spatially-structured networks<spatial_networks>`) - -4. NEST provides many examples that help you getting started with your - own simulation project. - -5. NEST offers convenient and efficient commands to define and connect - large networks, ranging from algorithmically determined connections - to data-driven connectivity. - -6. NEST lets you inspect and modify the state of each neuron and each - connection at any time during a simulation. - -7. NEST is fast and memory efficient. It makes best use of your - multi-core computer and compute clusters with minimal user - intervention. - -8. NEST runs on a wide range of UNIX-like systems, from MacBooks to - supercomputers. - -9. NEST has minimal dependencies. All it really needs is a C++ - compiler. Everything else is optional. - -10. NEST developers are using agile `continuous - integration <continuous-integration.md>`__-based workflows in order - to maintain high code quality standards for correct and reproducible - simulations. - -11. NEST has one of the largest and most experienced developer - communities of all neural simulators. NEST was first released in - 1994 under the name SYNOD and has been extended and improved ever - since. - -12. NEST is open source software and is licensed under the `GNU General - Public License v2 or later <http://www.gnu.org/licenses/>`__. - -General Features ----------------- - -- Python based user interface (`PyNEST <introduction-to-pynest.md>`__) -- Built-in simulation language interpreter - (`SLI <an-introduction-to-sli.md>`__) -- Multi-threading to use multi-processor machines efficiently -- MPI-parallelism to use computer clusters and super computers - -Neuron models -------------- - -- Integrate and fire (IAF) neuron models with current based synapses - (delta-, exponential- and alpha-function shaped) - -- Integrate and fire neuron models with conductance-based synapses - -- Adaptive-exponential integrate and fire neuron model (AdEx) (`Brette - & Gerstner, - 2005 <http://jn.physiology.org/cgi/content/abstract/94/5/3637>`__)- - the standard in the FACETS EU project - (`[1] <http://facets.kip.uni-heidelberg.de/>`__) - -- MAT2 neuron model (`Kobayashi et al. - 2009 <http://www.frontiersin.org/computational_neuroscience/10.3389/neuro.10/009.2009/abstract>`__) - -- Hodgkin-Huxley type models with one compartment - -- Neuron models with few compartments - -Synapse models --------------- - -- Static synapses -- Spike-timing dependent plasticity (STDP) -- Short-term plasticity (`Tsodyks et al. - 2000 <http://neuro.cjb.net/cgi/content/abstract/20/1/RC50>`__) -- Neuromodulatory synapses using dopamine - -Spatially structured networks ------------------------------ - -- Node positions in 2D or 3D space -- Connection-rules and parameters based on node positions -- :ref:`Guide to spatially-structured networks<spatial_networks>` - -Interoperability ----------------- - -- Interface to the Multi Simulator Coordinator - `MUSIC <using-nest-with-music.md>`__ -- Backend for the simulator-independent modeling tool - `PyNN <http://neuralensemble.org/PyNN/>`__ - -Accuracy --------- - -- Each neuron model is assigned an appropriate solver - -- `Exact - Integration <http://www.springerlink.com/content/08legf57tjkc6nj0/>`__ - is used for suitable neuron models - -- By default spikes are restricted to the grid spanned by the - computation time step - -- For some neuron models `spike interaction in continuous - time <simulations-with-precise-spike-times.md>`__ is available - -Verification ------------- - -- After installation NEST can be verified by an automatic testsuite - -- The testsuite is automatically run after each modification of the - NEST sources. You can watch the current status on our `Continuous - Integration <continuous-integration.md>`__ system. - -Supported platforms -------------------- - -- Linux -- Mac OS X -- Virtual machines for use under Windows - -By support we mean that we regularly test and use NEST on recent -versions of these systems and that NEST therefore should work on those -systems. It should not be construed as any warranty that NEST will run -on any particular system. diff --git a/doc/htmldoc/get-started_index.rst b/doc/htmldoc/get-started_index.rst index dbc362a006..472c8ec436 100644 --- a/doc/htmldoc/get-started_index.rst +++ b/doc/htmldoc/get-started_index.rst @@ -3,7 +3,26 @@ Tutorials and examples .. toctree:: :maxdepth: 1 + :hidden: tutorials/index PyNEST example scripts <examples/index> + +.. grid:: 1 1 2 2 + :gutter: 1 + + .. grid-item-card:: |nav| Tutorials + :class-title: sd-d-flex-row sd-align-minor-center + :link: tutorials + :link-type: ref + + .. grid-item-card:: |example| PyNEST example scripts + :class-title: sd-d-flex-row sd-align-minor-center + :link: pynest_examples + :link-type: ref + + + +.. |nav| image:: static/img/GPS-Settings-256_nest.svg +.. |example| image:: static/img/Documents-02-256_nest.svg diff --git a/doc/htmldoc/getting_help.rst b/doc/htmldoc/getting_help.rst index 0f7a5b952d..40adafece7 100644 --- a/doc/htmldoc/getting_help.rst +++ b/doc/htmldoc/getting_help.rst @@ -1,53 +1,37 @@ -.. _getting_help: - -Get help --------- - -Have a specific question or problem with NEST? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Check out the :ref:`troubleshooting section <troubleshooting>` for -common issues. - -If your question is not on there, you are welcome to subscribe to our -:ref:`Mailing List <contact_us>` and ask. +.. _command_help: Get help on the command line interface -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +====================================== * The :py:func:`.helpdesk` command will launch the documentation pages on your browser. * To access the High-level Python API reference material you can use the commands: - .. code-block:: python +.. code-block:: - # list all functions and attributes - dir(nest) + # list all functions and attributes + dir(nest) - # Get docstring for function in Python ... - help('nest.FunctionName') + # Get docstring for function in Python ... + help('nest.FunctionName') - # ... or in IPython - nest.FunctionName? + # ... or in IPython + nest.FunctionName? Model information ~~~~~~~~~~~~~~~~~ * To get a list of available neuron models, use: - .. code-block:: python +.. code-block:: python - nest.node_models + nest.node_models * To get a list of available synapse models, use: - .. code-block:: python - - nest.synapse_models - -* To get details on model equations and parameters, use: - - .. code-block:: python +.. code-block:: python - nest.help('model_name') + nest.synapse_models +* To get details on the model equations and parameters, + please check out our :doc:`model documentation <models/index>`. diff --git a/doc/htmldoc/getting_started.rst b/doc/htmldoc/getting_started.rst deleted file mode 100644 index a01ea57dad..0000000000 --- a/doc/htmldoc/getting_started.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. _getting_started: - -Getting started -=============== - -Have you already :ref:`installed NEST <install_nest>`? - -Then let's look at how to create a neural network simulation! - -NEST is a command line tool for simulating neural networks. -A NEST simulation tries to follow the logic of an electrophysiological -experiment - the difference being it takes place inside the computer -rather than in the physical world. - -You can use NEST interactively from the Python prompt, from within -IPython or in a Jupyter Notebook. The latter is helpful when you are -exploring PyNEST, trying to learn a new functionality or debugging a -routine. - -How does it work? ------------------ - -Let's start with a basic script to simulate a simple neural network. - -Run Python or a Jupyter Notebook and try out this example simulation in NEST: - -Import required packages: - -.. code-block:: python - - import nest - import nest.voltage_trace - import matplotlib.pyplot as plt - nest.ResetKernel() - -Create the neuron models you want to simulate: - -.. code-block:: python - - neuron = nest.Create('iaf_psc_exp') - -Create the devices to stimulate or observe the neurons in the simulation: - -.. code-block:: python - - spikegenerator = nest.Create('spike_generator') - voltmeter = nest.Create('voltmeter') - -Modify properties of the device: - -.. code-block:: python - - spikegenerator.set(spike_times=[10.0, 50.0]) - -Connect neurons to devices and specify synapse (connection) properties: - -.. code-block:: python - - nest.Connect(spikegenerator, neuron, syn_spec={'weight': 1e3}) - nest.Connect(voltmeter, neuron) - -Simulate the network for the given time in miliseconds: - -.. code-block:: python - - nest.Simulate(100.0) - -Display the voltage graph from the voltmeter: - -.. code-block:: python - - nest.voltage_trace.from_device(voltmeter) - plt.show() - -You should see the following image as the output: - -.. image:: static/img/output_getting_started.png - :align: center - -**And that's it! You have performed your first neuronal simulation in NEST!** - -Need a quieter NEST? --------------------- - -Take a look at the :py:func:`.set_verbosity` documentation, which describes how to display fewer messages on the terminal. - -Want to know more? ------------------- - -* Check out our :ref:`PyNEST tutorial <tutorials>`, which - provides full explanations on how to build your first neural network - simulation in NEST. - -* We have a large collection of :ref:`Example networks - <pynest_examples>` for you to explore. - -* Regularly used terms and default physical units in NEST are - explained in the :ref:`Glossary <glossary>`. diff --git a/doc/htmldoc/hpc/benchmarking.rst b/doc/htmldoc/hpc/benchmarking.rst new file mode 100644 index 0000000000..cd0f17f5fe --- /dev/null +++ b/doc/htmldoc/hpc/benchmarking.rst @@ -0,0 +1,48 @@ +.. _benchmark: + +Benchmarking NEST +================= + + +beNNch +~~~~~~ + +Computational efficiency is essential to simulate complex neuronal networks and study long-term effects such as learning. +The scaling performance of neuronal network simulators on high-performance computing systems can be assessed with benchmark simulations. +However, maintaining comparability of benchmark results across different systems, software environments, network models, and researchers from potentially different labs poses a challenge. + +The software framework `beNNch <https://github.com/INM-6/beNNch>`_ tackles this challenge by implementing a unified, modular workflow for configuring, executing, and analyzing such benchmarks. +beNNch builds around the `JUBE Benchmarking Environment <https://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/JUBE/_node.html>`_, installs simulation software, provides an interface to benchmark models, automates data and metadata annotation, and accounts for storage and presentation of results. + +For more details on the conceptual ideas behind beNNch, refer to Albers et al. (2022) [1]_. + +.. figure:: ../static/img/multi-area-model_5faa0e9c.png + + Example ``beNNch`` output (Figure 5C of [1]_) + + Strong-scaling performance of the `multi-area model <https://github.com/INM-6/multi-area-model>`_ simulated with NEST on JURECA-DC. + The left graph shows the absolute wall-clock time measured with Python-level timers for both network construction and state propagation. + Error bars indicate variability across three simulation repeats with different random seeds. + The top right graph displays the real-time factor defined as wall-clock time normalized by the model time. + Built-in timers resolve four different phases of the state propagation: update, collocation, communication, and delivery. + Pink error bars show the same variability of state propagation as the left graph. + The lower right graph shows the relative contribution of these phases to the state-propagation time. + + +.. seealso:: + + For further details, see the accompanying `beNNch GitHub Page <https://inm-6.github.io/beNNch>`_. + And for a detailed step-by-step walk though see `Walk through guide <https://inm-6.github.io/beNNch/walk-through.html>`_. + + Example PyNEST script: :doc:`../auto_examples/hpc_benchmark` + + +References +---------- + + +.. [1] Albers J., et al (2022). A Modular Workflow for Performance Benchmarking of Neuronal Network Simulations. + Frontiers in Neuroinformatics(16):837549. https://doi.org/10.3389/fninf.2022.837549 + + + diff --git a/doc/htmldoc/hpc/index.rst b/doc/htmldoc/hpc/index.rst index 1400b9de17..807d561f44 100644 --- a/doc/htmldoc/hpc/index.rst +++ b/doc/htmldoc/hpc/index.rst @@ -1,7 +1,7 @@ -.. _hpc_index: +:orphan: -All about high performance computing -==================================== +High performance computing +========================== .. toctree:: :maxdepth: 1 @@ -9,6 +9,3 @@ All about high performance computing * -.. todo:: - - Add pinning threads and benchmarking documentation here. diff --git a/doc/htmldoc/hpc/mpi_processes.rst b/doc/htmldoc/hpc/mpi_processes.rst new file mode 100644 index 0000000000..adfd42773c --- /dev/null +++ b/doc/htmldoc/hpc/mpi_processes.rst @@ -0,0 +1,66 @@ +.. _mpi_process: + +MPI process +=========== + + +An MPI process is process of a computer program that is being executed by one or many threads and employs an implementation of the Message Passing Interface (MPI) to communicate its data with the other processes. + +An example is the commonly used program `OpenMPI <https://www.open-mpi.org/>`_. + +In practice, the number of MPI processes on each each node is related to the number of :ref:`threads <threads>` you want for each MPI process. +Multiplied together, we suggest that the values should equal the total number of cores in a node. + +.. seealso:: + + * :ref:`overview_hardware` + * :ref:`threads` + * :ref:`slurm_script` + +After allocation of resources on which one wants to run the MPI processes, you also may want to export environment +variables related the implementation of the multiprocessing API. + + +.. list-table:: OpenMPI settings + :header-rows: 1 + + * - Keyword arguments + - Description + * - ``--enable-mpi-threads`` + - Enable thread support in OpenMPI + * - ``--map-by socket/node`` + - map MPI processes to socket/node + * - ``--bind-to socket/node`` + - bind MPI processes to socket/node + * - ``--report-bindings`` + - report bindings of launched processes + * - ``--display-allocation`` + - display detected allocation + + +.. seealso:: + + For general details on pinning options in OpenMPI see `the HPC wiki article <https://hpc-wiki.info/hpc/Binding/Pinning>`_. + The `Slurm documentation <https://slurm.schedmd.com/mpi_guide.html#open_mpi>`_ contains additional options for running MPI. + +In addition, you can consider the number of virtual processes (Number of MPI processes x number of threads) you are using. + +.. list-table:: + :header-rows: 1 + + * - Number of MPI processes x threads/core + - Description + * - Is less than number of cores + - Resources may be underutilized. + * - Is equal to the number of cores + - Resources are fully utilized (recommended for NEST) + * - Is greater than the number of cores + - Resources are oversubscribed + +In the first two scenarios, the simulation may show better performance because it will not be slowed by processes interfering +with eachother (e.g., virtual memory thrashing). + +Over-subscribing processes is typically used in development in testing and can help identify performance bottlenecks. +But performance can be degraded in this scenario. + + diff --git a/doc/htmldoc/hpc/optimizing_nest.rst b/doc/htmldoc/hpc/optimizing_nest.rst new file mode 100644 index 0000000000..58ec656b00 --- /dev/null +++ b/doc/htmldoc/hpc/optimizing_nest.rst @@ -0,0 +1,65 @@ +.. _optimize_performance: + +Optimize performance of HPC Systems +=================================== + +.. toctree:: + :hidden: + + overview_hardware + slurm_script + threading + mpi_processes + + +If you are new to running NEST on HPC systems or trying to improve the performance or debug issues, +we have provided a few guides to help you out. There are a few things to consider about the +hardware and software of the HPC system you are using for improving the overall +performance. + + +Although there will be some variation between scripts and HPC systems, in general, we recommend that + + * resources are fully utilized (e.g., all available cores are used). + * one thread pinned to one core (no simultaneous multithreading) + * More than one MPI process is used (for NEST 3) + +.. grid:: 1 1 2 2 + + .. grid-item-card:: Overview of HPC systems + :class-title: sd-d-flex-row sd-align-minor-center + :link: overview_hardware + :link-type: ref + + Get an overview of common hardware and software components in HPC systems + + .. grid-item-card:: Example SLURM script + :class-title: sd-d-flex-row sd-align-minor-center + :link: slurm_script + :link-type: ref + + See a typical job script, with detailed descriptions of each line. + +.. grid:: 1 1 2 2 + + .. grid-item-card:: Threading + :class-title: sd-d-flex-row sd-align-minor-center + :link: threads + :link-type: ref + + Learn about threading and useful OpenMP settings + + .. grid-item-card:: MPI processes + :class-title: sd-d-flex-row sd-align-minor-center + :link: mpi_process + :link-type: ref + + Get some tips on MPI processes and OpenMPI + + +.. seealso:: + + See our other guides on + + * :ref:`parallel_computing` + * :ref:`benchmark` diff --git a/doc/htmldoc/hpc/overview_hardware.rst b/doc/htmldoc/hpc/overview_hardware.rst new file mode 100644 index 0000000000..18320944a0 --- /dev/null +++ b/doc/htmldoc/hpc/overview_hardware.rst @@ -0,0 +1,46 @@ +.. _overview_hardware: + +Overview of various hardware and software components +==================================================== + +To optimize NEST performance, it's important to understand the system you are using and its components. +Here we try to provide a brief description of the generic setup of hardware and corresponding software. +Note that these are not terms used specifically for NEST, but are common in HPC organizations. + +.. note:: + + This is just one configuration for hardware setup. A particular system may use other components, and confusingly + the terminology used for the physical and software components can change depending on the company and organization. + + +.. seealso:: + + * :ref:`slurm_script` + * :ref:`threads` + * :ref:`mpi_process` + + +.. image:: ../static/img/hpc-hardware.svg + :align: center + + + +A supercomputer or cluster will have many nodes. + +* A node can contain sockets where the individual CPUs (also called processors) are located. + Each CPU contains cores, which execute computations and cache (L1, L2, L3), which is the local memory store. + + +Data and instructions are allocated through software. + +* A set of data and instructions that belong together is referred to as a task or process. This can be your entire simulation + script or a subset of it. + To allow processes to run in parallel, we typically use the standard Message Passing Interface (MPI) + to instruct how they work (See e.g., `OpenMPI <https://www.open-mpi.org/>`_). + +* The smallest unit of executable program is known as a thread. We can control threads following standards like `OpenMP <https://www.openmp.org/>`_. + +To efficiently run your large and complex simulation, you need to configure the optimal number of :ref:`threads <threads>` and :ref:`processes <mpi_process>` for +your simulation and the given hardware of the HPC system you are using. + + diff --git a/doc/htmldoc/hpc/parallel_computing.rst b/doc/htmldoc/hpc/parallel_computing.rst index 772094f59a..93cfc0d4b9 100644 --- a/doc/htmldoc/hpc/parallel_computing.rst +++ b/doc/htmldoc/hpc/parallel_computing.rst @@ -3,9 +3,15 @@ Guide to parallel computing =========================== +This guide is to explain how NEST utilizes thread parallel and distributed computing in simulations. +We explain how neurons, devices, and synapses in NEST intersect with threads and processes in parallel setups. + +.. admonition:: Speed up parallel simulations + + During network construction, create all nodes of one type (e.g., neurons) followed by all nodes of another type (e.g., devices). + See :py:func:`.Create`. + For comparison tests, see `this GitHub thread <https://github.com/nest/nest-simulator/pull/2290>`_. -.. contents:: - :local: What is parallelization? ------------------------ @@ -34,11 +40,13 @@ documentation on :ref:`Random numbers in NEST <random_numbers>` +.. _sec_virt_proc: + Virtual processes ----------------- We use the concept of local and remote threads, called *virtual processes*. -A virtual process (VP) is a thread residing in one of NEST's MPI processes. +A virtual process (VP) is a thread residing in one of NEST's :hxt_ref:`MPI` processes. For both thread and distributed parallelization, VPs simplify handling of neuron and synapses distributions. Virtual processes are distributed round-robin (i.e. each VP is allocated equal @@ -110,7 +118,7 @@ The first part is the name of the `model` (e.g., ``voltmeter`` or ``spike_recorder``) or, if set, the `label` of the recording device. Next is the node ID of the recording device, followed by the id of the VP assigned to the recorder. Spike files have the file extension ``gdf`` and -analog recordings from the ``multimeter`` have ``dat`` as file extension. +analog recordings from the :hxt_ref:`multimeter` have ``dat`` as file extension. The ``label`` and ``file_extension`` of a recording device can be set like any other parameter of a node using :py:func:`.SetStatus`. @@ -132,7 +140,7 @@ Spikes between neurons to the `target neuron` may be handled by **different virtual processes**. * But the virtual process assigned to the `target_neuron` always handles the corresponding spike delivery - (see property ``vp`` in the status dictionary). + (see property :hxt_ref:`vp` in the status dictionary). Spikes between neurons and devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -180,21 +188,34 @@ command for this is Usually, a good choice for `T` is the number of processor cores available on your machine. -.. note:: +In some situations, `oversubscribing` (i.e., to specify a +``local_num_threads`` that is higher than available cores on your +machine) can yield 20–30% improvement in simulation speed. Finding the +optimal thread number for a specific situation might require a bit of +experimenting. + +.. admonition:: NEST ignores OMP_NUM_THREADS - In some situations, `oversubscribing` (i.e., to specify a ``local_num_threads`` that is higher than available cores on your machine) - can yield 20-30% improvement in simulation speed. Finding the optimal thread number for a - specific situation might require a bit of experimenting. + NEST ignores ``OMP_NUM_THREADS`` environment + variable, which may be set by mpi4py, Slurm or similar runtime + environments. NEST will always start running on a single thread + until the number of threads is changed by setting either the + ``local_num_threads`` or the ``total_num_virtual_procs`` + :ref:`kernel attribute<sec_kernel_attributes>`. + Multiprocessing --------------- -**Using Python's ``multiprocessing`` module with NEST may lead to unpredictable results!** NEST internally parallelizes network construction [1]_ and maintains internal data structures in this process. For example, running several :py:func:`.Connect` calls simultaneously can interfere with the internal parallelization and will likely lead to unpredictable/wrong results. +.. warning:: + + Using Python's ``multiprocessing`` module with NEST may lead to unpredictable results! + .. _distributed_computing: Using distributed computing @@ -212,7 +233,7 @@ cluster or supercomputer, you most likely already have this. In case you are using a pre-packaged MPI library, please make sure that you also have the MPI development packages installed. -When using the :ref:`standard installation instructions <standard>`, it +When installing :ref:`from source <dev_install>`, it is usually sufficient to add ``-Dwith-mpi=ON`` when calling `cmake`. However, more detailed information on this and related flags (e.g., for enabling the :ref:`recording backend for recording to binary files @@ -228,7 +249,7 @@ Run distributed simulations Distributed simulations **cannot be run interactively**, which means that the simulation has to be provided as a script. However, the script can be the same -as a script for any simulation. No changes are necessary for distibuted simulation scripts: +as a script for any simulation. No changes are necessary for distributed simulation scripts: inter-process communication and node distribution is managed transparently inside of NEST. To distribute a simulation onto 128 processes of a computer cluster, the @@ -238,8 +259,9 @@ command should look like this mpirun -np 128 python3 simulation.py -Please refer to the MPI library documentation for details on the usage -of ``mpirun``. +Please refer to the documentation of your MPI implementation to learn +more about the usage of ``mpirun``. + MPI related commands ~~~~~~~~~~~~~~~~~~~~ @@ -265,6 +287,32 @@ commands are available: :py:func:`.SyncProcesses` Synchronize all MPI processes. +.. important:: + + One should never call any ``nest.*`` function inside a block that will only be executed on a subset of MPI ranks. + + Trying to access kernel information with a subset of MPI processes causes a deadlock. + + For example: + + **Don't do this** + + .. code-block:: + + if nest.Rank() == 0: + rng_seed = nest.rng_seed + print(f"RNG seed: {rng_seed}") + + + **Do this** + + .. code-block:: + + rng_seed = nest.rng_seed + if nest.Rank() == 0: + print(f"RNG seed: {rng_seed}") + + Reproducibility --------------- diff --git a/doc/htmldoc/hpc/slurm_script.rst b/doc/htmldoc/hpc/slurm_script.rst new file mode 100644 index 0000000000..fc1843e17e --- /dev/null +++ b/doc/htmldoc/hpc/slurm_script.rst @@ -0,0 +1,232 @@ +.. _slurm_script: + +Example Slurm script +==================== + +`Slurm <https://slurm.schedmd.com/documentation.html>`_ is a job scheduler used on many high performance computing systems. + +Typically, you specify system parameters for the job you want to run in a job script. + +This is an example job script that shows common settings useful when running NEST on HPC systems. The settings are applicable +to other job schedulers other than Slurm but the syntax will be different. + +.. note:: + + The example script is compatible with Slurm version <22.05. + Always consult the documentation of the system you are running on to find out exactly what you need to provide in your script. + +You will likely need to alter the job script to optimize the performance on the system your're using. +Finding the optimal parameters for your script may require some trial and error. + + +.. seealso:: + + * :ref:`overview_hardware` + * :ref:`threads` + * :ref:`mpi_process` + +In this example, we are using 1 node, which contains 2 sockets and 64 cores per socket. + +.. code-block:: sh + + #!/bin/bash -l + #SBATCH --job-name=<job-name> + #SBATCH --account=<account-name> + #SBATCH --partition=<partition-type> + #SBATCH --time=01:00:00 + #SBATCH --nodes=1 + #SBATCH --ntasks-per-node=2 + #SBATCH --cpus-per-task=64 + #SBATCH --hint=nomultithread + + export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK + export OMP_PROC_BIND=TRUE + + + # On some systems, MPI is run by SLURM + srun --exclusive python3 my_nest_simulation.py + + # On other systems, you must explicitly call MPI: + mpirun -n <num_of_processes> --hostfile <hostfile> python3 my_nest_simulation.py + + + +---- + +.. note:: + + Slurm can set pinning to specific CPUs for you with the environment variable ``CPU_AFFINITY``. + Setting this to ``True`` may lead to problems with any pinning settings you + have set manually. We recommend setting this to ``None``. + + +Let's break this script down line by line. + +:: + + #!/bin/bash -l + +You are submitting a shell script to Slurm. The "shebang" line must be the first line of shell script + +| + +:: + + #SBATCH --job-name=<job-name> + +The name of the job should be unique and descriptive enough to differentiate it from other jobs. + +| + +:: + + #SBATCH --account=<account-name> + +Name of your account + +| + +:: + + #SBATCH --partition=<partition-type> + +The partition describes what architecture or hardware specifications your job will use. +For example, some systems have GPU and CPU partitions. +The actual partition name will depend on the HPC system and what it has available. + +| + +:: + + #SBATCH --time=01:00:00 + +This is also known as wall time, which is the time allocated to your job. + +| + +:: + + #SBATCH --nodes=1 + +The number of nodes needed for your job (see :ref:`figure here <overview_hardware>`). The number of nodes will depend on your memory needs and if you're +trying to increase the speed of the simulation. + +.. note:: + + How many nodes do you need for your simulations? + This depends on how much memory is available for each node. + + For example: The :doc:`microcircuit model <../auto_examples/Potjans_2014/index>` requires around 16 GB of memory and the `multi-area-model <https://github.com/INM-6/multi-area-model>`_ requires 1.4 TB. + If a node has 128 GB of memory then one node is more than sufficient for the microcircuit model but the multi-area model + will need 12 nodes to run. + +| + +The next two lines specify the process (task) and threading settings of the system. For NEST, we recommend a hybrid approach for +large simulations. This approach combines distributed computing (openMPI) along with thread parallel (OpenMP) simulations. + +In this job script, we can state the number of processes (or tasks) and threads we use using with the ``ntasks-per-node`` and ``cpus-per-task`` +options, respectively. Multiplied together, the values should equal the total number of cores in a node. (The number of cores +varies depending on what HPC system you are using). + + +``ntasks-per-node * cpus-per-task = number of cores in the node`` . + +.. note:: + + In NEST, the above calculation is the same one you would do to determine the number of `virtual processes` in a given simulation. + See the :ref:`parallel_computing` for more details. + + +:: + + #SBATCH --ntasks-per-node=2 + + #SBATCH --cpus-per-task=64 + +In this example, we are assuming there are 128 cores in a node. We are using 2 MPI processes (``ntasks-per-node``) and 64 threads +(``cpus-per-task``). We can increase the ``ntasks-per-node`` +to 4, but then we would want to decrease the ``cpus-per-task`` to 32 (because we want the total to be 128). +This ensures we are fully utilizing the resources. + +| + +:: + + #SBATCH --hint=nomultithread + +We suggest you include the line ``--hint=nomultithread`` to avoid the system from assigning 2 threads to a core. +Two threads per core can lead to slower performance in NEST. + +| + +We want to control the placement of the threads using OpenMP. This is referred to as pinning threads. (See section +:ref:`pinning_threads` for further details.) + +:: + + export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK + + export OMP_PROC_BIND=TRUE + +The first line sets the number of threads to match what we stated earlier and then want to set ``OMP_PROC_BIND`` to ``True``. This +will prevent the threads from moving around. + +| + + +You can then tell the job script to schedule your simulation. +Setting the ``exclusive`` option prevents other processes or jobs from doing work on the same node. + +:: + + srun --exclusive python my_nest_simulation.py + +Or, if you are using multiple MPI processes, you can invoke the MPI software explicitly: + +:: + + mpirun -n <num_of_processes> python3 my_nest_simulation.py + + + + +---- + +Set ``local_num_threads`` in your NEST script +--------------------------------------------- + +Here is a simple example of the NEST script ``my_nest_simulation.py``. + +To ensure the correct number of threads are used, you have to set ``local_num_threads`` in your script! +It should match the number of ``cpus-per-task``. + +.. code-block:: python + + import nest + + # Set the local_num_threads to match the value in your job script. + nest.local_num_threads = 64 + + # In this example, we set the number of neurons to match the + # number of threads. In this scenario each neuron would be + # placed on its own thread. In most setups, the number of + # neurons would be different than the number of of threads. + n = nest.Create("iaf_psc_alpha", 64) + pg = nest.Create("poisson_generator", params={"rate": 50000.0}) + sr = nest.Create("spike_recorder", params={"record_to": "ascii"}) + nest.Connect(pg, n, 'all_to_all', syn_spec={'weight': 100}) + nest.Connect(n, sr) + nest.Simulate(100.) + +.. seealso:: + + :ref:`parallel_computing` + + + + + + + + diff --git a/doc/htmldoc/hpc/threading.rst b/doc/htmldoc/hpc/threading.rst new file mode 100644 index 0000000000..8f057c6e7d --- /dev/null +++ b/doc/htmldoc/hpc/threading.rst @@ -0,0 +1,107 @@ +.. _threads: + +Threading +========= + +The smallest unit of executable program is known as a thread. + +We can adjust the number of :ref:`MPI processes <mpi_process>` and threads, but the product of the two should ideally be the total number of cores. +For example, with 8 cores, we can have 2 processes and 4 threads per process or 1 process with 8 threads. +In NEST, we recommend only having one thread per core. + +We can control the number and placement of threads with programs that implement standards such as `OpenMP <https://www.openmp.org/>`_. + +For a detailed investigation, we recommend reading Kurth et al. 2022 [1]_. + +.. seealso:: + + * :ref:`overview_hardware` + * :ref:`mpi_process` + * :ref:`slurm_script` + +.. _pinning_threads: + +Pinning threads +--------------- + +Pinning threads allows you to control the distribution of threads across available cores on your system, and is particularly +useful in high performance computing (HPC) systems. + +Allowing threads to move can be beneficial in some cases. But when threads move, the data that is to be processed needs to move too. +With NEST, each thread gets allocated a specific set of data objects to work with during simulation (due to the round robin distribution). +This means that when a thread moves, it cannot perform any computation until its specific data gets to the right place. +This is called *cache misses*. For this reason, pinning threads typically decreases run time. +See our overview :ref:`handling threads with virtual processes <sec_virt_proc>`. + +There are different types of pinning schemes, and the optimal scheme will depend on your script. +Here we show two different example schemes. + + +Sequential pinning scheme +````````````````````````` + +.. figure:: ../static/img/CPUs-lin-lin.gif + + Sequential placing + + In this scheme, the cores of 1 CPU are filled before going to next + + Setting to use for this case: ``export OMP_PROC_BIND = close`` + +Distant pinning scheme +`````````````````````` + +.. figure:: ../static/img/CPUs-lin-sparse.gif + + Distant placing + + Maximizes distance between threads in hardware + + Setting to use for this case: ``export OMP_PROC_BIND = spread`` + + + +Table of OpenMP settings +```````````````````````` + +.. list-table:: OpenMP settings + :header-rows: 1 + + * - Setting + - Description + * - ``export OMP_NUM_THREADS=#CPUSPERTASK#`` + - variable telling OpenMP how many threads are used on a MPI process + * - ``export OMP_PROC_BIND=true`` + - no movement of threads between OpenMP threads and OpenMP places + * - ``export OMP_PROC_BIND=close/spread`` + - no movement of threads between OpenMP threads and OpenMP places and OpenMP places are 'close' in a hardware sense + * - ``export OMP_PLACES=threads/cores`` + - each OpenMP place corresponds to a hardware thread/core + * - ``export OMP_PLACES="{a : b : c}"`` + - OpenMP places are a, a+b, a+2c, ... a+nc=b (numbering usually relates to cores/hardware threads) + * - ``export OMP_DISPLAY_ENV=true`` + - display OpenMP variables + +.. note:: + + Using ```python``` on HPC systems might lead to inconsistencies in multi-threading libraries resulting in a degredation of performance. + For instance, depending on the installation ```numpy``` uses the multi-threading library provided by the MKL. + To resolve this one needs to set ```export MKL_THREADING_LAYER=GNU``` in order to pass the OpenMP settings correctly. + + +.. seealso:: + + For general details on pinning in HPC systems see `the HPC wiki article <https://hpc-wiki.info/hpc/Binding/Pinning>`_. + + + + +References +---------- + +.. [1] Kurth AC. Senk J. Terhorst D. Finnerty J. and Diesmann M (2022). Sub-realtime simulation of a neuronal network of natural density. + Neuromorphic Computing and Engineering(2):021001. https://doi.org/10.1088/2634-4386/ac55fc + + + + diff --git a/doc/htmldoc/img/All_to_all.png b/doc/htmldoc/img/All_to_all.png deleted file mode 100644 index 0192745143..0000000000 Binary files a/doc/htmldoc/img/All_to_all.png and /dev/null differ diff --git a/doc/htmldoc/img/Convergent_connect.png b/doc/htmldoc/img/Convergent_connect.png deleted file mode 100644 index 234ebfe453..0000000000 Binary files a/doc/htmldoc/img/Convergent_connect.png and /dev/null differ diff --git a/doc/htmldoc/img/Divergent_connect.png b/doc/htmldoc/img/Divergent_connect.png deleted file mode 100644 index 3e4471bc3d..0000000000 Binary files a/doc/htmldoc/img/Divergent_connect.png and /dev/null differ diff --git a/doc/htmldoc/img/Fixed_indegree.png b/doc/htmldoc/img/Fixed_indegree.png deleted file mode 100644 index 0279a8b780..0000000000 Binary files a/doc/htmldoc/img/Fixed_indegree.png and /dev/null differ diff --git a/doc/htmldoc/img/Fixed_outdegree.png b/doc/htmldoc/img/Fixed_outdegree.png deleted file mode 100644 index d1342bb61b..0000000000 Binary files a/doc/htmldoc/img/Fixed_outdegree.png and /dev/null differ diff --git a/doc/htmldoc/img/MultimeterExample.png b/doc/htmldoc/img/MultimeterExample.png deleted file mode 100644 index a2919da69e..0000000000 Binary files a/doc/htmldoc/img/MultimeterExample.png and /dev/null differ diff --git a/doc/htmldoc/img/Node_distribution.png b/doc/htmldoc/img/Node_distribution.png deleted file mode 100644 index 25d069a4e1..0000000000 Binary files a/doc/htmldoc/img/Node_distribution.png and /dev/null differ diff --git a/doc/htmldoc/img/One_to_one.png b/doc/htmldoc/img/One_to_one.png deleted file mode 100644 index 6d2500d3df..0000000000 Binary files a/doc/htmldoc/img/One_to_one.png and /dev/null differ diff --git a/doc/htmldoc/img/Process_vp_thread.png b/doc/htmldoc/img/Process_vp_thread.png deleted file mode 100644 index 8ca08c98ae..0000000000 Binary files a/doc/htmldoc/img/Process_vp_thread.png and /dev/null differ diff --git a/doc/htmldoc/img/Receptor_types.png b/doc/htmldoc/img/Receptor_types.png deleted file mode 100644 index 9ec9a15519..0000000000 Binary files a/doc/htmldoc/img/Receptor_types.png and /dev/null differ diff --git a/doc/htmldoc/img/free.png b/doc/htmldoc/img/free.png deleted file mode 100644 index d6e79785ae..0000000000 Binary files a/doc/htmldoc/img/free.png and /dev/null differ diff --git a/doc/htmldoc/img/grid.png b/doc/htmldoc/img/grid.png deleted file mode 100644 index 55d5f58bea..0000000000 Binary files a/doc/htmldoc/img/grid.png and /dev/null differ diff --git a/doc/htmldoc/img/nest_sionlib_file_format_v2.png b/doc/htmldoc/img/nest_sionlib_file_format_v2.png deleted file mode 100644 index d99499affe..0000000000 Binary files a/doc/htmldoc/img/nest_sionlib_file_format_v2.png and /dev/null differ diff --git a/doc/htmldoc/img/precise1-300x175.png b/doc/htmldoc/img/precise1-300x175.png deleted file mode 100644 index 6bc10e2caa..0000000000 Binary files a/doc/htmldoc/img/precise1-300x175.png and /dev/null differ diff --git a/doc/htmldoc/img/precise2-300x171.png b/doc/htmldoc/img/precise2-300x171.png deleted file mode 100644 index df5b402daf..0000000000 Binary files a/doc/htmldoc/img/precise2-300x171.png and /dev/null differ diff --git a/doc/htmldoc/img/python_interface.png b/doc/htmldoc/img/python_interface.png deleted file mode 100644 index 3a229c3769..0000000000 Binary files a/doc/htmldoc/img/python_interface.png and /dev/null differ diff --git a/doc/htmldoc/img/sample1_circgauss.png b/doc/htmldoc/img/sample1_circgauss.png deleted file mode 100644 index 376eb353dd..0000000000 Binary files a/doc/htmldoc/img/sample1_circgauss.png and /dev/null differ diff --git a/doc/htmldoc/img/sample2_rectanchor.png b/doc/htmldoc/img/sample2_rectanchor.png deleted file mode 100644 index 5197e6b0c4..0000000000 Binary files a/doc/htmldoc/img/sample2_rectanchor.png and /dev/null differ diff --git a/doc/htmldoc/img/sample3_doughnutlinear.png b/doc/htmldoc/img/sample3_doughnutlinear.png deleted file mode 100644 index 52f41633d1..0000000000 Binary files a/doc/htmldoc/img/sample3_doughnutlinear.png and /dev/null differ diff --git a/doc/htmldoc/img/sample4_gaussweights.png b/doc/htmldoc/img/sample4_gaussweights.png deleted file mode 100644 index 440e57cf66..0000000000 Binary files a/doc/htmldoc/img/sample4_gaussweights.png and /dev/null differ diff --git a/doc/htmldoc/img/simulation_loop-241x300.png b/doc/htmldoc/img/simulation_loop-241x300.png deleted file mode 100644 index 28afc10a4a..0000000000 Binary files a/doc/htmldoc/img/simulation_loop-241x300.png and /dev/null differ diff --git a/doc/htmldoc/img/spikes_one_neuron.pdf.png b/doc/htmldoc/img/spikes_one_neuron.pdf.png deleted file mode 100644 index fe253e7f27..0000000000 Binary files a/doc/htmldoc/img/spikes_one_neuron.pdf.png and /dev/null differ diff --git a/doc/htmldoc/img/spikes_one_neuron_noise.pdf.png b/doc/htmldoc/img/spikes_one_neuron_noise.pdf.png deleted file mode 100644 index 1dee5f6a06..0000000000 Binary files a/doc/htmldoc/img/spikes_one_neuron_noise.pdf.png and /dev/null differ diff --git a/doc/htmldoc/img/time_definitions-300x61.png b/doc/htmldoc/img/time_definitions-300x61.png deleted file mode 100644 index 098eca6b1e..0000000000 Binary files a/doc/htmldoc/img/time_definitions-300x61.png and /dev/null differ diff --git a/doc/htmldoc/img/vm_one_neuron.pdf.png b/doc/htmldoc/img/vm_one_neuron.pdf.png deleted file mode 100644 index 2332eb9189..0000000000 Binary files a/doc/htmldoc/img/vm_one_neuron.pdf.png and /dev/null differ diff --git a/doc/htmldoc/img/vm_one_neuron_noise.pdf.png b/doc/htmldoc/img/vm_one_neuron_noise.pdf.png deleted file mode 100644 index ccdee3ce4b..0000000000 Binary files a/doc/htmldoc/img/vm_one_neuron_noise.pdf.png and /dev/null differ diff --git a/doc/htmldoc/img/vm_psp_two_neurons.pdf-w400.png b/doc/htmldoc/img/vm_psp_two_neurons.pdf-w400.png deleted file mode 100644 index 3bec941126..0000000000 Binary files a/doc/htmldoc/img/vm_psp_two_neurons.pdf-w400.png and /dev/null differ diff --git a/doc/htmldoc/img/vm_psp_two_neurons.pdf.png b/doc/htmldoc/img/vm_psp_two_neurons.pdf.png deleted file mode 100644 index 8ebee4c224..0000000000 Binary files a/doc/htmldoc/img/vm_psp_two_neurons.pdf.png and /dev/null differ diff --git a/doc/htmldoc/index.rst b/doc/htmldoc/index.rst index 4d9ea09229..2c1b8675f5 100644 --- a/doc/htmldoc/index.rst +++ b/doc/htmldoc/index.rst @@ -1,130 +1,16 @@ -******************************************** -Welcome to the NEST simulator documentation! -******************************************** - +NEST Simulator documentaiton +============================ .. toctree:: :maxdepth: 1 :hidden: - Install NEST <installation/index> + Installation <installation/index> Tutorials and examples <get-started_index> Understand how NEST works <understand_index> - API <ref_material/pynest_apis> - Model directory <models/index> - Contribute <developer_space/contribute> + PyNEST API <ref_material/pynest_api/index> + Available models <models/index> + Contribute <developer_space/index> + What's new? <whats_new/index> Community <community> license - -In our :ref:`release notes <release_notes>`, you can find an overview of the newest changes and features for NEST 3.x. - -If you are transitioning from NEST 2.x to NEST 3.x, check out our :ref:`reference guide <refguide_2_3>`. - - -+------------------------------------+---------------------------------------+ -| | | -| :ref:`Download <download>` | :ref:`Install <install_nest>` | -| | | -+------------------------------------+---------------------------------------+ - -NEST is a simulator for **spiking neural network models**, ideal for networks of any size, for example: - -1. Models of information processing e.g., in the visual or auditory cortex of - mammals, - -2. Models of network activity dynamics, e.g., laminar cortical networks or - balanced random networks, - -3. Models of learning and plasticity. - -**New to NEST?** - Start here at our :ref:`getting_started` page - - -**Know which model you need?** - NEST comes packaged with a large collection of neuron and synaptic plasticity models. - You can find a list of all available models in our :doc:`model directory <models/index>`, - or select a model category by clicking one of the images: - -If you use NEST for your project, don't forget to :ref:`cite NEST <cite_nest>`! - -.. raw:: html - - <embed> - - <a href="models/index_neuron.html"> - <img src="_static/img/neuron.png" alt="Neuron Models" style="width:150px;height:150px;border:0;"> - </a> - <a href="models/index_synapse.html"> - <img src="_static/img/synapse1.png" alt="Synapse Models" style="width:150px;height:150px;border:0;"> - </a> - <a href="models/index_device.html"> - <img src="_static/img/oscilloscope.png" alt="Devices" style="width:150px;height:150px;border:0;"> - </a> - </embed> - -**Create complex networks using the Microcircuit Model:** - -.. raw:: html - - <embed> - <a href="examples/cortical_microcircuit_index.html"> - <img src="_images/microcircuit.png" alt="Microcircuit" style="width:150px;height:150px;border:0;"> - </a> - </embed> - -**Need a different model?** - To customize or combine features of neuron and synapse models, we recommend - using the `NESTML modeling language <https://nestml.readthedocs.io/>`_. - -**Have a question or issue with NEST?** - See our :ref:`Getting Help <getting_help>` page. - -Where to find what ------------------- - -* :ref:`Tutorials <tutorials>` show you step by step instructions using NEST. If you haven't used NEST before, the PyNEST tutorial is a good place to start. - -* :ref:`Example Networks <pynest_examples>` demonstrate the use of dozens of the neural network models implemented in NEST. - -* :ref:`Topical Guides <toc_guides>` provide deeper insight into several topics and concepts from :ref:`Parallel Computing <parallel_computing>` - to handling :ref:`Gap Junction Simulations <sim_gap_junctions>` and :ref:`setting up a spatially-structured network <spatial_networks>`. - -* :ref:`Reference Material <pynest_api>` provides a quick look up of definitions, functions and terms. - -Interested in contributing? ---------------------------- - -* Have you used NEST in an article or presentation? :ref:`Let us know <community>` and we will add it to our list of `publications <https://www.nest-simulator.org/publications/>`_. - Find out how to :ref:`cite NEST <cite_nest>` in your work. - -* If you have any comments or suggestions, please share them on our :ref:`Mailing List <community>`. - -* Want to contribute code? Visit out our :ref:`Contributing <contribute>` pages to get started! - -* Interested in creating or editing documentation? Check out our :ref:`Documentation workflows <doc_workflow>`. - -* For more info about our larger community and the history of NEST check out the `NEST Initiative <https://www.nest-initiative.org>`_ website - -Related projects ----------------- - -* :ref:`Discover related projects here <related_projects>` - -License -------- - -NEST is available under the :ref:`GNU General Public License 2 or later <license>`. This means that you can - -- use NEST for your research, -- modify and improve NEST according to your needs, -- distribute NEST to others under the same license. - -.. include:: ACKNOWLEDGMENTS.md - -.. image:: static/img/HBP.png - :width: 55 % - :target: https://www.humanbrainproject.eu/ -.. image:: static/img/EBRAINS.svg - :width: 25 % - :target: https://ebrains.eu/ diff --git a/doc/htmldoc/installation/admin.rst b/doc/htmldoc/installation/admin.rst index c8ce741cd8..c95367944e 100644 --- a/doc/htmldoc/installation/admin.rst +++ b/doc/htmldoc/installation/admin.rst @@ -6,7 +6,7 @@ Administrator installation instructions If you need to deploy NEST on a machine -* Check out our guides to :ref:`optimizing NEST for HPC systems <hpc_index>` +* Check out our guides to :ref:`optimizing NEST for HPC systems <optimize_performance>` Configure HPC systems ~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/htmldoc/installation/cmake_options.rst b/doc/htmldoc/installation/cmake_options.rst index 41df78b1eb..59123e9e61 100644 --- a/doc/htmldoc/installation/cmake_options.rst +++ b/doc/htmldoc/installation/cmake_options.rst @@ -3,25 +3,33 @@ CMake Options for NEST ====================== -NEST is installed with ``cmake`` (at least v3.12). In the simplest case, the commands:: +Before compiling and installing NEST, the source code has to be +configured with ``cmake``. In the simplest case, the commands:: - cmake -DCMAKE_INSTALL_PREFIX:PATH=<nest_install_dir> <nest_source_dir> + cmake <nest_source_dir> make make install -should build and install NEST to ``/install/path``, which should be an absolute -path. +will build NEST and install it to the site-packages of your Python +environment. + +.. note:: + + If you want to specify an alternative install location, use + ``-DCMAKE_INSTALL_PREFIX:PATH=<nest_install_dir>``. It needs to be + writable by the user running the install command. Choice of compiler ------------------ -We :ref:`systematically test <cont_integration>` NEST using the GNU gcc and the Clang compiler suites. -Compilation with other up-to-date compilers should also work, but we do not -regularly test against those compilers and can thus only provide limited support. +We :ref:`systematically test <cont_integration>` NEST using the GNU +gcc and the Clang compiler suites. Compilation with other up-to-date +compilers should also work, but we do not regularly test against those +compilers and can thus only provide limited support. -To select a specific compiler, please add the following flags to your ``cmake`` -line:: +To select a specific compiler, please add the following flags to your +``cmake`` command line:: -DCMAKE_C_COMPILER=<C-compiler> -DCMAKE_CXX_COMPILER=<C++-compiler> @@ -30,6 +38,31 @@ Options for configuring NEST NEST allows for several configuration options for custom builds: +.. _modelset_config: + +Select built-in models +~~~~~~~~~~~~~~~~~~~~~~ + +By default, NEST will compile and register *all* neuron and synapse +models that are shipped in the source distribution. This is very +convenient for an explorative development of simulation scripts, but +leads to quite long compilation times and is often not necessary. + +There are two ways to restrict the set of built-in models to tailor +NEST to your needs: + ++---------------------------------------+------------------------------------------------------------------------------+ +| ``-Dwith-modelset=<modelset>`` | Specify the modelset to include. Sample configurations are in the | +| | `modelsets <https://github.com/nest/nest-simulator/tree/master/modelsets>`_ | +| | directory in the top-level of the source tree. A modelset is just a file | +| | listing one model header files (without the .h filename extension) to scan | +| | for models. | +| | This option is mutually exclusive with -Dwith-models. [default=full]. | ++---------------------------------------+------------------------------------------------------------------------------+ +| ``-Dwith-models=[<modellist>|OFF]`` | Specify the models to include as a semicolon-separated list of model header | +| | files (without the .h filename extension) that are to be scanned for models. | +| | This option is mutually exclusive with -Dwith-modelset. [default=OFF]. | ++---------------------------------------+------------------------------------------------------------------------------+ Use Python to build PyNEST ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -47,14 +80,32 @@ Select parallelization scheme ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +---------------------------------------------+----------------------------------------------------------------+ -| ``-Dwith-mpi=[OFF|ON|</path/to/mpi>]`` | Build with MPI parallelization [default=OFF]. Optionally give | -| | directory with MPI installation. | +| ``-Dwith-mpi=[OFF|ON]`` | Build with MPI parallelization [default=OFF]. | +| | | +---------------------------------------------+----------------------------------------------------------------+ | ``-Dwith-openmp=[OFF|ON|<OpenMP-Flag>]`` | Build with OpenMP multi-threading [default=ON]. Optionally set | | | OMP compiler flags. | +---------------------------------------------+----------------------------------------------------------------+ -See also the section on :ref:`building with mpi <compile-with-mpi>` below. +See also the section on :ref:`building with MPI <compile-with-mpi>` below. + + +Build documentation +~~~~~~~~~~~~~~~~~~~ + ++------------------------------+-------------------------------------------------------------+ +| ``-Dwith-devdoc=[OFF|ON]`` | Build the developer (doxygen) documentation [default=OFF] | +| | | ++------------------------------+-------------------------------------------------------------+ +| ``-Dwith-userdoc=[OFF|ON]`` | Build the user (Sphinx) documentation [default=OFF] | +| | | ++------------------------------+-------------------------------------------------------------+ + +If either documentation build is toggled to `ON`, you can then run ``make docs`` if you only want to +build the docs. + +See also the :ref:`documentation workflow <doc_workflow>` for user and developer docs. + External libraries ~~~~~~~~~~~~~~~~~~ @@ -79,6 +130,10 @@ External libraries +-------------------------------------------------------+------------------------------------------------------------------------------------------------+ | ``-Dwith-gsl=[OFF|ON|</path/to/gsl>]`` | Build with the GSL library [default=ON]. To set a specific library, give the install path. | +-------------------------------------------------------+------------------------------------------------------------------------------------------------+ ++-------------------------------------------------------+------------------------------------------------------------------------------------------------+ +| ``-Dwith-hdf5=[OFF|ON|</path/to/hdf5>]`` | Build with `HDF5 <https://hdfgroup.org/>`_ library [default=OFF]. To set a specific library, | +| | give the install path. HDF5 is required for SONATA support, see :ref:`nest_sonata`. | ++-------------------------------------------------------+------------------------------------------------------------------------------------------------+ NEST properties ~~~~~~~~~~~~~~~ @@ -99,6 +154,11 @@ NEST properties | | If running on more than 262144 MPI processes or more than 512 | | | threads, change to 'hpc'. | +-----------------------------------------------+----------------------------------------------------------------+ +| ``-Dwith-full-logging=[OFF|ON]`` | Write debug output to file ``dump_<num_ranks>_<rank>.log`` | +| | [default=OFF]. Developers should wrap debugging output in | +| | macro ``FULL_LOGGING_ONLY()`` and call kernel().write_dump()` | +| | from inside it. The macro can contain almost any valid code. | ++-----------------------------------------------+----------------------------------------------------------------+ Generic build configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -107,8 +167,9 @@ Generic build configuration | ``-Dstatic-libraries=[OFF|ON]`` | Build static executable and libraries [default=OFF]. | +------------------------------------------------------+------------------------------------------------------------------+ | ``-Dwith-optimize=[OFF|ON|<list;of;flags>]`` | Enable user defined optimizations | -| | [default=OFF (uses '-O2')]. When ON, '-O3' is used. Separate | -| | multiple flags by ';'. | +| | [default=ON (uses '-O2')]. When OFF, no '-O' flag is passed to | +| | the compiler. Explicit compiler flags can be given; separate | +| | multiple flags by ';'." | +------------------------------------------------------+------------------------------------------------------------------+ | ``-Dwith-warning=[OFF|ON|<list;of;flags>]`` | Enable user defined warnings [default=ON (uses '-Wall')]. | | | Separate multiple flags by ';'. | @@ -144,13 +205,16 @@ Interface (MPI). Depending on your setup, you have to use one of the following steps in order to add support for MPI: 1. Try ``-Dwith-mpi=ON`` as argument for ``cmake``. + 2. If 1. does not work, or you want to use a non-standard MPI, try ``-Dwith-mpi=/path/to/my/mpi``. The `mpi` directory should contain the `include`, `lib` and `bin` subdirectories of the MPI installation. - 3. If 2. does not work, but you know the correct compiler wrapper + + 3. IfO 2. does not work, but you know the correct compiler wrapper for your installation, try adding the following to the invocation of ``cmake``:: + -DMPI_CXX_COMPILER=myC++_CompilerWrapper \ -DMPI_C_COMPILER=myC_CompilerWrapper -Dwith-mpi=ON @@ -159,19 +223,30 @@ neurons, writing to ASCII files might become prohibitively slow due to the large number of resulting files. By installing the `SIONlib library <http://www.fz-juelich.de/jsc/sionlib>`_ and supplying its installation path to the ``-Dwith-sionlib=<path>`` option when calling -`cmake`, you can enable the :ref:`recording backend for binary files +``cmake``, you can enable the :ref:`recording backend for binary files <recording_backends>`, which solves this problem. -If you compiled NEST with support for MPI and also want to run the -corresponding tests, you have to tell it about how your -``mpirun``/``mpiexec`` command works by defining the ``mpirun`` -function in your ``~/.nestrc`` file. The file already contains an -example implementation that should work with the `OpenMPI -<http://www.openmpi.org>`__ implementation. For more details, see the -documentation on the :ref:`config_options`. +In order to run the distributed tests upon ``make installcheck``, NEST +needs to know how to execute the launcher of your MPI implementation. +CMake is usually able to detect the command line for this, but you can +customize it using the follwing configuration variables (common +defaults are shown below):: + + -DMPIEXEC=/usr/bin/mpirun + -DMPIEXEC_NUMPROCS_FLAG=-np + -DMPIEXEC_PREFLAGS= + -DMPIEXEC_POSTFLAGS= + +The final command line is composed in the following way:: + + $MPIEXEC $MPIEXEC_NUMPROC_FLAG <np> $MPIEXEC_PREFLAGS <prog> $MPIEXEC_POSTFLAGS <args> + +For details on setting specific flags for your MPI launcher command, +see the `CMake documentation +<https://cmake.org/cmake/help/latest/module/FindMPI.html>`_. -See the :ref:`parallel_computing` to learn how to execute -threaded and distributed simulations with NEST. +See the :ref:`parallel_computing` to learn how to execute threaded and +distributed simulations with NEST. .. _compile_with_libneurosim: @@ -231,6 +306,6 @@ overridden with :: -Dwith-intel-compiler-flags="<intel-flags>" Portland compiler -~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~ Use the ``-Kieee`` flag to ensure that computations obey the IEEE754 standard for floating point numerics. diff --git a/doc/htmldoc/installation/conda_forge.rst b/doc/htmldoc/installation/conda_forge.rst index 2bbffb493f..0c53eabf20 100644 --- a/doc/htmldoc/installation/conda_forge.rst +++ b/doc/htmldoc/installation/conda_forge.rst @@ -3,6 +3,13 @@ Conda forge install =================== +.. note:: + + If you encounter problems installing the NEST conda package and + environment, we recommend using Mamba (https://mamba.readthedocs.io). + Mamba has the advantage of installing conda packages and + environments more quickly and can be used as a complete drop-in replacement for conda. + 1. To keep your conda setup tidy, we recommend that you install NEST into a separate `conda environment <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html>`_ together with Python packages that you will use when working with NEST; @@ -46,8 +53,3 @@ Conda forge install - We currently provide NEST with thread-based parallelization on conda. This should suffice for most uses on personal computers. - - Until dedicated conda builds for Apple's M1 chip (arm64) become available, you should expect relatively - poor performance on computers with the M1 chip. You need to :ref:`build NEST yourself <mac_install>` on - M1 systems for good performance. - - diff --git a/doc/htmldoc/installation/conda_tips.rst b/doc/htmldoc/installation/conda_tips.rst index fca564897f..17a6116eae 100644 --- a/doc/htmldoc/installation/conda_tips.rst +++ b/doc/htmldoc/installation/conda_tips.rst @@ -3,10 +3,16 @@ Tips for installing NEST with conda =================================== +.. note:: + + If you encounter problems installing the NEST conda package and + environment, we recommend using Mamba (https://mamba.readthedocs.io). + Mamba has the advantage of installing conda packages and + environments more quickly and can be used as a complete drop-in replacement for conda. + This page provides a series of recommendations for installing pre-built NEST with conda or to set up conda environments for building NEST and NEST documentation. - Basic conda setup ----------------- @@ -53,7 +59,7 @@ To see which environments are installed on your system, use Installing NEST with Conda -------------------------- -We provide pre-built versions of NEST on `Conda Forge <https://anaconda.org/conda-forge/nest-simulator/files>`. +We provide pre-built versions of NEST on `Conda Forge <https://anaconda.org/conda-forge/nest-simulator/files>`_. Follow :ref:`these instructions to install NEST from Conda Forge <conda_forge_install>`. @@ -74,7 +80,7 @@ This will create an environment in the folder ``conda/``. If you would like to a conda activate conda/ -Note that the trailing slash is required for conda not to confuse the path with a named envionment (for example when +Note that the trailing slash is required for conda not to confuse the path with a named environment (for example when using ``--name``). @@ -85,10 +91,10 @@ Obtain a good overview of which packages are installed where. You can use ``conda env export -n base`` and ``conda env export -n yournestenv`` (replacing the ``yournestenv`` name with whatever you chose). Make sure each environment contains all dependencies. One way to make -this obvious would be to reduce conda stack to ``0`` (conda documentation -`here <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#nested-activation>`_), -and/or to a certain degree by not auto-activating the base environment (conda documentation -`here <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#conda-init>`_). +this obvious would be to reduce conda stack to ``0`` (see conda documentation on +`nested activation <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#nested-activation>`_), +and/or to a certain degree by not auto-activating the base environment (see conda documentation on +`conda init <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#conda-init>`_). Then packages from base do not 'leak' into your new environments. .. note:: diff --git a/doc/htmldoc/installation/condaenv_install.rst b/doc/htmldoc/installation/condaenv_install.rst index 9b348aa8d5..488774acbe 100644 --- a/doc/htmldoc/installation/condaenv_install.rst +++ b/doc/htmldoc/installation/condaenv_install.rst @@ -3,6 +3,13 @@ Install from source in a conda environment ========================================== +.. note:: + + If you encounter problems installing the NEST conda package and + environment, we recommend using Mamba (https://mamba.readthedocs.io). + Mamba has the advantage of installing conda packages and + environments more quickly and can be used as a complete drop-in replacement for conda. + * Create a conda environment from the `environment.yml <https://github.com/nest/nest-simulator/blob/master/environment.yml>`_ file. We recommend specifying a dedicated location (``-p <path/to/conda/env>``) for your environment. See the `conda documentation <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#specifying-a-location-for-an-environment>`_ diff --git a/doc/htmldoc/installation/configuration.rst b/doc/htmldoc/installation/configuration.rst index 2a413e4837..9a2cdc29fa 100644 --- a/doc/htmldoc/installation/configuration.rst +++ b/doc/htmldoc/installation/configuration.rst @@ -3,34 +3,9 @@ Configuration Options ===================== -There are two main ways of configuring NEST at runtime, via the configuration file or command line switches. - -NEST configuration file ------------------------ - -Upon importing the NEST Python module or starting the ``nest`` executable from the command line for the first time, NEST will create a -configuration file called ``.nestrc`` in your home directory. - -By adapting this file, you can set a number of options: - -* The browser for displaying the helpdesk -* The pager for showing the built-in help in the terminal -* The ``mpirun`` command for :ref:`parallel execution <parallel_computing>` of the testsuite - -In case your MPI Implementation requires special options (e.g. ``--oversubscribe`` to allow the use of more -processes than available compute cores in OpenMPI versions above 3.0), you can add them to the ``mpirun`` command as shown in -the following example: - -:: - - /mpirun - [/integertype /stringtype /stringtype] - [/numproc /executable /scriptfile] - { - () [ - (mpirun --oversubscribe -np ) numproc cvs ( ) executable ( ) scriptfile - ] {join} Fold - } Function def +The behavior of the NEST executable can be tweaked by supplying it +with command line switches, SLI scripts, and additional parameters for +the scripts. Command line switches for the nest executable --------------------------------------------- diff --git a/doc/htmldoc/installation/developer.rst b/doc/htmldoc/installation/developer.rst index 2225d5b7fe..8ad5c567cb 100644 --- a/doc/htmldoc/installation/developer.rst +++ b/doc/htmldoc/installation/developer.rst @@ -28,11 +28,21 @@ Install NEST from source We have provided an `environment.yml <https://github.com/nest/nest-simulator/blob/master/environment.yml>`_ file that contains all possible packages needed for NEST development. -See our instructions for installing NEST from source in a :ref:`conda environment <condaenv>` -OR +.. grid:: 2 -If you want to install NEST without any environment, see the :ref:`instructions here <noenv>`. + .. grid-item-card:: Install NEST with conda + + See our instructions for installing NEST from source in a :ref:`conda environment <condaenv>` + + .. grid-item-card:: Install NEST without environment + + If you want to install NEST without any environment, see the :ref:`instructions here <noenv>`. + + +.. seealso:: + + :ref:`cmake options for NEST <cmake_options>` What gets installed where ------------------------- diff --git a/doc/htmldoc/installation/docker.rst b/doc/htmldoc/installation/docker.rst index 60edf60c90..18d12a766d 100644 --- a/doc/htmldoc/installation/docker.rst +++ b/doc/htmldoc/installation/docker.rst @@ -1,6 +1,6 @@ .. _docker: -|macos| |linux| |windows| Docker +Docker |macos| |linux| |windows| -------------------------------- Docker provides an isolated container to run applications. @@ -27,13 +27,14 @@ Docker provides an isolated container to run applications. Usage -You can use the docker images directly out of docker-registry.ebrains.eu like this: +You can use the docker images directly out of https://hub.docker.com/r/nest/nest-simulator +like this: .. code-block:: bash - docker pull docker-registry.ebrains.eu/nest/nest-simulator:TAG + docker pull nest/nest-simulator:<TAG> -``TAG`` can be a version of NEST ``2.20.2`` or later. Alternatively, you can use ``dev`` for the +``<TAG>`` can be a version of NEST ``2.20.2`` or later. Alternatively, you can use ``dev`` for the development branch (master). NEST 3.2 and later @@ -45,7 +46,7 @@ To use 'docker-compose' you need the definition file from the git repository. Do .. code-block:: bash - wget https://raw.githubusercontent.com/steffengraber/nest-docker/master/docker-compose.yml + wget https://raw.githubusercontent.com/steffengraber/nest-docker/<TAG>/docker-compose.yml You can then run ``docker-compose up`` with one of the following options: @@ -60,10 +61,10 @@ or .. code-block:: bash - docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 5000:5000 / - docker-registry.ebrains.eu/nest/nest-simulator:<version> + docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 52425:52425 \ + nest/nest-simulator:<TAG> -Starts the NEST API server container and opens the corresponding port 5000. Test it with `curl localhost:5000/api`. +Starts the NEST API server container and opens the corresponding port 52425. Test it with `curl localhost:52425/api`. See the :ref:`nest_server` documentation for more details. - NEST desktop @@ -76,13 +77,13 @@ or .. code-block:: bash - docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 5000:5000 / - docker-registry.ebrains.eu/nest/nest-simulator:<version> - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 8000:8000 / - -e NEST_CONTAINER_MODE=nest-desktop docker-registry.ebrains.eu/nest/nest-simulator:<version> + docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 52425:52425 \ + nest/nest-simulator:<TAG> + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 54286:54286 \ + -e NEST_CONTAINER_MODE=nest-desktop nest/nest-simulator:<TAG> -Starts the NEST server and the NEST desktop web interface. Port 8000 is also made available. -Open NEST Desktop in the web browser using the following http link: `http://localhost:8000` +Starts the NEST server and the NEST desktop web interface. Port 54286 is also made available. +Open NEST Desktop in the web browser using the following http link: `http://localhost:54286` Visit the :doc:`NEST Desktop <desktop:index>` documentation to learn more. @@ -96,8 +97,8 @@ or .. code-block:: bash - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:<version> + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook \ + -p 8080:8080 nest/nest-simulator:<TAG> Starts a notebook server with pre-installed NEST. The corresponding URL is displayed in the console. You can copy an d paste into your browser. @@ -113,8 +114,8 @@ or .. code-block:: bash - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:<version>) + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab \ + -p 8080:8080 nest/nest-simulator:<TAG> Starts a Jupyter lab server with pre-installed NEST. The corresponding URL is displayed in the console. Copy and paste the URL into your browser. @@ -123,7 +124,6 @@ Copy and paste the URL into your browser. To stop and delete running containers use `docker-compose down`. - To run NEST 2.20.2 ^^^^^^^^^^^^^^^^^^ @@ -131,15 +131,8 @@ Jupyter notebook with NEST 2.20.2: .. code-block:: bash - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 - -Jupyter lab with NEST 2.20.2 - -.. code-block:: bash - - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook \ + -p 8080:8080 nest/nest-simulator:2.20.2 NEST dev ^^^^^^^^ @@ -148,7 +141,7 @@ If you want to use the compose configuration for the ``dev`` NEST version, you c .. code-block:: bash - wget https://raw.githubusercontent.com/steffengraber/nest-docker/master/docker-compose.yml + wget https://raw.githubusercontent.com/nest/nest-docker/master/docker-compose-dev.yml docker-compose -f docker-compose-dev.yml up nest-notebook On Windows @@ -161,35 +154,36 @@ On Windows .. code-block:: bash - docker run -it --rm -v %cd%:/opt/data -p 8080:8080 -e NEST_CONTAINER_MODE=<args> / - docker-registry.ebrains.eu/nest/nest-simulator:<version> + docker run -it --rm -v %cd%:/opt/data -p 8080:8080 -e NEST_CONTAINER_MODE=<args> \ + nest/nest-simulator:<TAG> In Powershell, '%cd%' might not work for the current directory. Then you should explicitly specify a folder with existing write permissions. In any case, this will download the docker image with the pre-installed -NEST master from docker-registry.ebrains.eu and start it. After booting an URL is presented. -Click on it or copy it to your browser. Voilá Jupyter notebook starts from -the docker image. +NEST master from https://hub.docker.com/r/nest/nest-simulator and start it. +After booting, a URL is presented. Click on it or copy it to your browser. +Voilá! Jupyter notebook starts from the docker image. You can update the image with: .. code-block:: bash - docker pull docker-registry.ebrains.eu/nest/nest-simulator:<version> + docker pull nest/nest-simulator:<TAG> For more information, you can checkout the `nest-docker repository <https://github.com/nest/nest-docker>`_ .. |linux| image:: ../static/img/linux.png + :class: no-scaled-link :scale: 15% .. |macos| image:: ../static/img/macos.png + :class: no-scaled-link :scale: 15% .. |windows| image:: ../static/img/windows.png + :class: no-scaled-link :scale: 15% - - diff --git a/doc/htmldoc/installation/index.rst b/doc/htmldoc/installation/index.rst index d3a3e95c6b..69bc61728c 100644 --- a/doc/htmldoc/installation/index.rst +++ b/doc/htmldoc/installation/index.rst @@ -3,35 +3,46 @@ Install NEST ============ +.. grid:: 1 1 2 2 -Install pre-built NEST package ------------------------------- + .. grid-item-card:: |user| Install pre-built NEST package + :class-title: sd-d-flex-row sd-align-minor-center -|user| I'm a user who wants to :ref:`install NEST on my computer <user_install>` + I'm a user who wants to :ref:`install NEST on my computer <user_install>` -| -Install NEST for a class or workshop ------------------------------------- + .. grid-item-card:: |teacher| Install NEST for a class or workshop + :class-title: sd-d-flex-row sd-align-minor-center -|lecturer| I'm a lecturer who wants to :ref:`use NEST to teach <lecturer>` + I'm a lecturer who wants to :ref:`use NEST to teach <lecturer>` -| -Install NEST for HPC --------------------- +.. grid:: 1 1 2 2 + + .. grid-item-card:: |admin| Install NEST for supercomputers and clusters + :class-title: sd-d-flex-row sd-align-minor-center + + I'm an admin or user who wants to :ref:`run NEST on HPC <admin_install>` + + .. grid-item-card:: |dev| Install NEST from source + :class-title: sd-d-flex-row sd-align-minor-center + + I'm a developer who wants to :ref:`do development in NEST <dev_install>` + +.. grid:: 1 1 2 2 -|admin| I'm an administrator or user who wants to :ref:`set up NEST on a large cluster or supercomputer <admin_install>` + .. grid-item-card:: |nestml| Install NEST with NESTML + :class-title: sd-d-flex-row sd-align-minor-center + + I'm a user who wants to :doc:`create or customize models <nestml:installation>`. | -Install NEST from source ------------------------- -|dev| I'm a developer who wants to :ref:`do development in NEST <dev_install>` ---- + If installation didn't work, see the :ref:`troubleshooting section <troubleshooting>`. @@ -45,19 +56,9 @@ If installation didn't work, see the :ref:`troubleshooting section <troubleshoot cmake_options * -.. |user| image:: ../static/img/020-user_black.png - :target: user.html - :width: 100px - -.. |dev| image:: ../static/img/dev_black.png - :target: developer.html - :width: 100px - -.. |admin| image:: ../static/img/001-shuttle_black.png - :target: admin.html - :width: 100px - -.. |lecturer| image:: ../static/img/class_black.png - :target: lecturer.html - :width: 100px - +.. |user| image:: ../static/img/020-user.svg +.. |teacher| image:: ../static/img/014-teacher.svg +.. |admin| image:: ../static/img/001-shuttle.svg +.. |dev| image:: ../static/img/dev_orange.svg +.. |nestml| image:: ../static/img/nestml-logo.png + :scale: 15% diff --git a/doc/htmldoc/installation/lecturer.rst b/doc/htmldoc/installation/lecturer.rst index 1815293e48..becafdd561 100644 --- a/doc/htmldoc/installation/lecturer.rst +++ b/doc/htmldoc/installation/lecturer.rst @@ -7,16 +7,19 @@ Lecturer installation instructions NEST Desktop ~~~~~~~~~~~~ -* :doc:`NEST Desktop <desktop:index>` is a graphical user interface designed for illustrating neural network concepts - ideal for the classroom setting. +:doc:`NEST Desktop <desktop:index>` is a graphical user interface designed for illustrating neural network concepts +ideal for the classroom setting. +There are several materials for Bachelor and Master's level already prepared. -We recommend you checkout the NEST desktop project and see if it fits your needs! +* Check out :doc:`the lecture material for NEST Desktop <desktop:lecturer/index>` Docker install ~~~~~~~~~~~~~~ -We provide a docker container for NEST, with options to include NEST-Desktop, Jupyter notebooks or Jupyterlab. +We provide a docker container for NEST that also includes NESTML. You can select from options +to also include NEST-Desktop, Jupyter Notebooks, or JupyterLab. + See :ref:`instructions for docker here <docker>`. diff --git a/doc/htmldoc/installation/livemedia.rst b/doc/htmldoc/installation/livemedia.rst index d22cc36c02..5c71e496a1 100644 --- a/doc/htmldoc/installation/livemedia.rst +++ b/doc/htmldoc/installation/livemedia.rst @@ -51,9 +51,9 @@ Older versions of VM images --------------------------- -`NEST Live Media 3.1 <https://nest-simulator.org/downloads/gplreleases/nest-3.1.ova>`_ +`NEST Live Media 3.3 <https://nest-simulator.org/downloads/gplreleases/nest-3.3.ova>`_ -`Checksum 3.1 <https://nest-simulator.org/downloads/gplreleases/nest-3.1.ova.sha512sum>`_ +`Checksum 3.3 <https://nest-simulator.org/downloads/gplreleases/nest-3.3.ova.sha512sum>`_ `NEST Live Media 2.20.2 <https://nest-simulator.org/downloads/gplreleases/nest-2.20.2.ova>`_ diff --git a/doc/htmldoc/installation/noenv_install.rst b/doc/htmldoc/installation/noenv_install.rst index 7c1a2ed7f9..941150c515 100644 --- a/doc/htmldoc/installation/noenv_install.rst +++ b/doc/htmldoc/installation/noenv_install.rst @@ -41,7 +41,8 @@ further adjust settings for your system. python3-pip \ python3-pytest \ python3-pytest-timeout \ - python3-pytest-xdist + python3-pytest-xdist \ + python3-pandas * Create an install directory diff --git a/doc/htmldoc/installation/pynest_readme_link.rst b/doc/htmldoc/installation/pynest_readme_link.rst deleted file mode 100644 index b6224b02ae..0000000000 --- a/doc/htmldoc/installation/pynest_readme_link.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../../pynest/README.rst diff --git a/doc/htmldoc/installation/user.rst b/doc/htmldoc/installation/user.rst index 1005339a46..0e76554463 100644 --- a/doc/htmldoc/installation/user.rst +++ b/doc/htmldoc/installation/user.rst @@ -7,7 +7,7 @@ Cross-platform |macos| |linux| |windows| ---------------------------------------- Docker -~~~~~ +~~~~~~ :ref:`See our docker installation instructions <docker>`. @@ -17,7 +17,7 @@ Conda install You can install NEST with the :ref:`Conda forge package <conda_forge_install>`. Live media -~~~~~~~~~ +~~~~~~~~~~ We have live media (.ova) if you want to run NEST in a virtual machine. @@ -26,8 +26,8 @@ We have live media (.ova) if you want to run NEST in a virtual machine. ------------- -|linux| Linux ---------------- +Linux |linux| +------------- Ubuntu ~~~~~~ @@ -96,7 +96,7 @@ Debian users can install NEST via the Ubuntu PPA repository. dpkg-genchanges --build=binary >../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.changes and note down the full package name. In the above example this would be -`nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb`, where the number `202001311135` and potentially the +``nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb``, where the number ``202001311135`` and potentially the Ubuntu version number may be different. 6. Install the ready Debian package after the rebuild: @@ -115,7 +115,9 @@ Ubuntu version number may be different. python3 import nest -|macos| macOS +------------- + +macOS |macos| ------------- 1. `Install Homebrew <https://brew.sh/>`_. @@ -126,19 +128,19 @@ Ubuntu version number may be different. brew install nest ------ - - .. |linux| image:: ../static/img/linux.png + :class: no-scaled-link :scale: 11% .. |macos| image:: ../static/img/macos.png + :class: no-scaled-link :scale: 11% .. |windows| image:: ../static/img/windows.png + :class: no-scaled-link :scale: 11% diff --git a/doc/htmldoc/mock_kernel.py b/doc/htmldoc/mock_kernel.py deleted file mode 100644 index 0b7f468a52..0000000000 --- a/doc/htmldoc/mock_kernel.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# mock_kernel.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see <http://www.gnu.org/licenses/>. - -""" -Mock pynestkernel.pyx into dummy python file. -""" - -import ast -import re - - -def has_return(ast_func): - b = False - - for node in ast.walk(ast_func): - if isinstance(node, ast.Return): - b = True - - return b - - -def convert(infile): - """Turn cython file into python - - Munge the cython file into parsable python and return the converted - result as a string. - - The conversion is not correct but it can then be parsed by ast and - thus coverted to a fully mocked file with dummy classes and fuctions - (either pass or return MagicMock) - """ - res, res_tmp = "", "" - - cdef_in_classes_re = re.compile(r' +cdef') - cdef_class_re = re.compile(r'cdef class (.*)') - rmdatatype_re = re.compile(r'\bint\b|\bnew\b|\&(?=\w)|<[^>]+>') - - inclass = False - - for line in infile: - if "__cinit__" in line: - line = line.replace("__cinit__", "__init__") - if inclass is True: - if cdef_in_classes_re.match(line): - continue - if not (line.startswith(" ") or line == "\n"): - inclass = False - else: - line = rmdatatype_re.sub("", line) - res_tmp += line - - if inclass is False: - m = cdef_class_re.match(line) - if m is not None: - res_tmp += line[5:] # remove "cdef " - inclass = True - else: - if line.startswith("cdef"): - continue - - tree = ast.parse(res_tmp) - - for klass in tree.body: - bases = "" - - if klass.bases: - if len(klass.bases) == 1: - bases = "(" + klass.bases[0].id + ")" - else: - bases = "(" + ", ".join([k.id for k in klass.bases]) + ")" - - res += "class {name}{bases}:\n".format(name=klass.name, bases=bases) - - for child in klass.body: - if isinstance(child, ast.FunctionDef): - args = "" - - if len(child.args.args) == 1: - args = child.args.args[0].arg - else: - args = ", ".join([a.arg for a in child.args.args]) - - res += " def {name}({args}):\n".format(name=child.name, args=args) - - if has_return(child): - res += " return MagicMock()\n" - else: - res += " pass\n" - - res += "\n\n" - - return res diff --git a/doc/htmldoc/neurons/model_details/HillTononiModels.ipynb b/doc/htmldoc/model_details/HillTononiModels.ipynb similarity index 95% rename from doc/htmldoc/neurons/model_details/HillTononiModels.ipynb rename to doc/htmldoc/model_details/HillTononiModels.ipynb index 13f28a2353..074836d444 100644 --- a/doc/htmldoc/neurons/model_details/HillTononiModels.ipynb +++ b/doc/htmldoc/model_details/HillTononiModels.ipynb @@ -12,7 +12,7 @@ "\n", "This notebook describes the neuron and synapse model proposed by Hill and Tononi in *J Neurophysiol* 93:1671-1698, 2005 ([doi:10.1152/jn.00915.2004](http://dx.doi.org/doi:10.1152/jn.00915.2004)) and their implementation in NEST. The notebook also contains some tests.\n", "\n", - "This description is based on the original publication and publications cited therein, an analysis of the source code of the original Synthesis implementation kindly provided by Sean Hill, and plausiblity arguments.\n", + "This description is based on the original publication and publications cited therein, an analysis of the source code of the original Synthesis implementation kindly provided by Sean Hill, and plausibility arguments.\n", "\n", "In what follows, we will refer to the original paper as [HT05].\n", "\n", @@ -61,10 +61,12 @@ "\\end{equation}\n", "\n", "The neuron emits a single spike if \n", + "\n", "- it is not refractory\n", "- membrane potential crosses the threshold, $V\\geq\\theta$\n", "\n", "Upon spike emission,\n", + "\n", "- $V \\leftarrow E_{\\text{Na}}$\n", "- $\\theta \\leftarrow E_{\\text{Na}}$\n", "- the neuron becomes refractory for time $t_{\\text{spike}}$ (`t_ref` in NEST)\n", @@ -72,7 +74,7 @@ "The repolarizing current is active during, and only during the refractory period:\n", "\\begin{equation}\n", "g_{\\text{spike}} = \\begin{cases} 1 & \\text{neuron is refractory}\\\\\n", - " 0 & \\text{else} \\end{cases}\n", + "0 & \\text{else} \\end{cases}\n", "\\end{equation}\n", "\n", "During the refractory period, the neuron cannot fire new spikes, but all state variables evolve freely, nothing is clamped. \n", @@ -145,7 +147,7 @@ "N_T &= 2 \\\\\n", "m_T^{\\infty}(V) &= \\frac{1}{1+\\exp\\left(-\\frac{V+59\\text{mV}}{6.2\\text{mV}}\\right)}\\\\\n", "\\tau_{m,T}(V) &= 0.13\\text{ms} \n", - " + \\frac{0.22\\text{ms}}{\\exp\\left(-\\frac{V + 132\\text{mV}}{16.7\\text{mV}}\\right) + \\exp\\left(\\frac{V + 16.8\\text{mV}}{18.2\\text{mV}}\\right)} \\\\ \n", + "+ \\frac{0.22\\text{ms}}{\\exp\\left(-\\frac{V + 132\\text{mV}}{16.7\\text{mV}}\\right) + \\exp\\left(\\frac{V + 16.8\\text{mV}}{18.2\\text{mV}}\\right)} \\\\ \n", "h_T^{\\infty}(V) &= \\frac{1}{1+\\exp\\left(\\frac{V+83\\text{mV}}{4\\text{mV}}\\right)}\\\\\n", "\\tau_{h,T}(V) &= 8.2\\text{ms} + \\frac{56.6\\text{ms} + 0.27\\text{ms} \\exp\\left(\\frac{V + 115.2\\text{mV}}{5\\text{mV}}\\right)}{1 + \\exp\\left(\\frac{V + 86\\text{mV}}{3.2\\text{mV}}\\right)}\n", "\\end{align}\n", @@ -199,30 +201,30 @@ "##### Equations in paper\n", "\n", "\\begin{align}\n", - " dD/dt &= D_{\\text{influx}} - D(1-D_{\\text{eq}})/\\tau_D \\\\\n", - " D_{\\text{influx}} &= 1/\\{1+ \\exp[-(V-D_{\\theta})/\\sigma_D]\\} \\\\\n", - " m_{DK}^{\\infty} &= 1/1 + (d_{1/2}D)^{3.5}\n", + "dD/dt &= D_{\\text{influx}} - D(1-D_{\\text{eq}})/\\tau_D \\\\\n", + "D_{\\text{influx}} &= 1/\\{1+ \\exp[-(V-D_{\\theta})/\\sigma_D]\\} \\\\\n", + "m_{DK}^{\\infty} &= 1/1 + (d_{1/2}D)^{3.5}\n", "\\end{align}\n", "\n", "There are several problems with these equations.\n", "\n", "In the steady state the first equation becomes\n", "\\begin{equation}\n", - " 0 = - D(1-D_{\\text{eq}})/\\tau_D \n", - " \\end{equation}\n", - " with solution\n", - " \\begin{equation}\n", - " D = 0\n", + "0 = - D(1-D_{\\text{eq}})/\\tau_D \n", + "\\end{equation}\n", + "with solution\n", + "\\begin{equation}\n", + "D = 0\n", "\\end{equation}\n", "This contradicts both the statement [HT05, p. 1679] that $D\\to D_{\\text{eq}}$ in this case, and the requirement that $D>0$ to avoid a singluarity in the equation for $m_{DK}^{\\infty}$. The most plausible correction is\n", "\\begin{equation}\n", - " dD/dt = D_{\\text{influx}} - (D-D_{\\text{eq}})/\\tau_D \n", + "dD/dt = D_{\\text{influx}} - (D-D_{\\text{eq}})/\\tau_D \n", "\\end{equation}\n", "\n", "The third equation appears incorrect and logic as well as Wang et al, *J Neurophysiol* 89:3279–3293, 2003, Eq 9, cited in [HT05, p 1679], indicate that the correct equation is\n", "\n", "\\begin{equation}\n", - " m_{DK}^{\\infty} = 1/(1 + (d_{1/2} / D)^{3.5})\n", + "m_{DK}^{\\infty} = 1/(1 + (d_{1/2} / D)^{3.5})\n", "\\end{equation}\n", "\n", "\n", @@ -233,10 +235,10 @@ "\n", "\\begin{align}\n", "I_{DK} &= - g_{\\text{peak},DK} m_{DK}(V,t) (V - E_{DK})\\\\\n", - " m_{DK} &= \\frac{1}{1 + \\left(\\frac{d_{1/2}}{D}\\right)^{3.5}}\\\\\n", - " \\frac{dD}{dt} &= D_{\\text{influx}}(V) - \\frac{D-D_{\\text{eq}}}{\\tau_D} = \\frac{D_{\\infty}(V)-D}{\\tau_D} \\\\\n", - " D_{\\infty}(V) &= \\tau_D D_{\\text{influx}}(V) + {D_{\\text{eq}}}\\\\\n", - " D_{\\text{influx}} &= \\frac{D_{\\text{influx,peak}}}{1+ \\exp\\left(-\\frac{V-D_{\\theta}}{\\sigma_D}\\right)} \n", + "m_{DK} &= \\frac{1}{1 + \\left(\\frac{d_{1/2}}{D}\\right)^{3.5}}\\\\\n", + "\\frac{dD}{dt} &= D_{\\text{influx}}(V) - \\frac{D-D_{\\text{eq}}}{\\tau_D} = \\frac{D_{\\infty}(V)-D}{\\tau_D} \\\\\n", + "D_{\\infty}(V) &= \\tau_D D_{\\text{influx}}(V) + {D_{\\text{eq}}}\\\\\n", + "D_{\\text{influx}} &= \\frac{D_{\\text{influx,peak}}}{1+ \\exp\\left(-\\frac{V-D_{\\theta}}{\\sigma_D}\\right)} \n", "\\end{align}\n", "\n", "with \n", @@ -255,7 +257,7 @@ "- To the right of this window, $I_{DK}\\sim -(V-E_{DK})$.\n", "- $m_{DK}$ is not integrated over time, instead it is an instantaneous transform of $D$, which is integrated over time.\n", "\n", - "**Note: The differential equation for $dD/dt$ differs from the one implemented in Synthesis.**" + "**Note:** The differential equation for $dD/dt$ differs from the one implemented in Synthesis." ] }, { @@ -279,10 +281,10 @@ "The conductance change due to a single input spike at time $t=0$ through a channel of type $X$ is given by (see below for exceptions)\n", "\n", "\\begin{align}\n", - " \\bar{g}_X(t) &= g_X(t)\\\\\n", - " g_X(t) &= g_{\\text{peak}, X}\\frac{\\exp(-t/\\tau_1) - \\exp(-t/\\tau_2)}{\n", - " \\exp(-t_{\\text{peak}}/\\tau_1) - \\exp(-t_{\\text{peak}}/\\tau_2)} \\Theta(t)\\\\\n", - " t_{\\text{peak}} &= \\frac{\\tau_2 \\tau_1}{\\tau_2 - \\tau_1} \\ln\\frac{ \\tau_2}{\\tau_1}\n", + "\\bar{g}_X(t) &= g_X(t)\\\\\n", + "g_X(t) &= g_{\\text{peak}, X}\\frac{\\exp(-t/\\tau_1) - \\exp(-t/\\tau_2)}{\n", + "\\exp(-t_{\\text{peak}}/\\tau_1) - \\exp(-t_{\\text{peak}}/\\tau_2)} \\Theta(t)\\\\\n", + "t_{\\text{peak}} &= \\frac{\\tau_2 \\tau_1}{\\tau_2 - \\tau_1} \\ln\\frac{ \\tau_2}{\\tau_1}\n", "\\end{align} \n", "\n", "where $t_{\\text{peak}}$ is the time of the conductance maximum and $\\tau_1$ and $\\tau_2$ are synaptic rise- and decay-time, respectively; $\\Theta(t)$ is the Heaviside step function. The equation is integrated using exact integration in Synthesis; in NEST, it is included in the ODE-system integrated using the Runge-Kutta-Fehlberg 4(5) solver from GSL.\n", @@ -304,11 +306,11 @@ "The voltage-dependent gating $m(V, t)$ is defined as follows (based on textual description, Vargas-Caballero and Robinson *J Neurophysiol* 89:2778–2783, 2003, [doi:10.1152/jn.01038.2002](http://dx.doi.org/10.1152/jn.01038.2002), and code inspection):\n", "\n", "\\begin{align}\n", - " m(V, t) &= a(V) m_{\\text{fast}}^*(V, t) + ( 1 - a(V) ) m_{\\text{slow}}^*(V, t)\\\\\n", - " a(V) &= 0.51 - 0.0028 V \\\\\n", - " m^{\\infty}(V) &= \\frac{1}{ 1 + \\exp\\left( -S_{\\text{act}} ( V - V_{\\text{act}} ) \\right) } \\\\\n", - " m_X^*(V, t) &= \\min(m^{\\infty}(V), m_X(V, t))\\\\\n", - " \\frac{\\text{d}m_X}{\\text{d}t} &= \\frac{m^{\\infty}(V) - m_X }{ \\tau_{\\text{Mg}, X}}\n", + "m(V, t) &= a(V) m_{\\text{fast}}^*(V, t) + ( 1 - a(V) ) m_{\\text{slow}}^*(V, t)\\\\\n", + "a(V) &= 0.51 - 0.0028 V \\\\\n", + "m^{\\infty}(V) &= \\frac{1}{ 1 + \\exp\\left( -S_{\\text{act}} ( V - V_{\\text{act}} ) \\right) } \\\\\n", + "m_X^*(V, t) &= \\min(m^{\\infty}(V), m_X(V, t))\\\\\n", + "\\frac{\\text{d}m_X}{\\text{d}t} &= \\frac{m^{\\infty}(V) - m_X }{ \\tau_{\\text{Mg}, X}}\n", "\\end{align} \n", "\n", "where $X$ is \"slow\" or \"fast\". $a(V)$ expresses voltage-dependent weighting between slow and fast unblocking, $m^{\\infty}(V)$ the steady-state value of the proportion of unblocked NMDA-channels, the minimum condition in $m_X^*(V,t)$ the instantaneous blocking and the differential equation for $m_X(V,t)$ the unblocking dynamics.\n", @@ -324,7 +326,7 @@ "source": [ "##### Detailed relation between NMDA channel model in NEST and previous work\n", "\n", - "The NMDA channel dynamics are not very clearly described in the original paper by Hill and Tononi. The model implemented in NEST is at this point mostly based on inspecting the code of Sean Hill’s Synthesis simulator. \n", + "The NMDA channel dynamics are not very clearly described in the original paper by Hill and Tononi. The model implemented in NEST is at this point mostly based on inspecting the code of Sean Hill's Synthesis simulator. \n", "\n", "The equations for $m(V,t)$ and $a(V)$ above are based on Eq 2 of Vargas-Caballero and Robinson (2003) [VCR in the following] and text below that equation, from which the slow and fast NMDA unblocking time constants are also taken. The exponential time courses in VCR Eq 2 are in NEST modeled by the differential equation above. \n", "\n", @@ -420,7 +422,7 @@ "import nest\n", "\n", "%matplotlib inline\n", - "plt.rcParams['figure.figsize'] = (12, 3)" + "plt.rcParams[\"figure.figsize\"] = (12, 3)" ] }, { @@ -455,12 +457,13 @@ "outputs": [], "source": [ "def Vpass(t, V0, gNaL, ENa, gKL, EK, taum, I=0):\n", - " tau_eff = taum/(gNaL + gKL)\n", - " Vinf = (gNaL*ENa + gKL*EK + I)/(gNaL + gKL)\n", - " return V0*np.exp(-t/tau_eff) + Vinf*(1-np.exp(-t/tau_eff))\n", + " tau_eff = taum / (gNaL + gKL)\n", + " Vinf = (gNaL * ENa + gKL * EK + I) / (gNaL + gKL)\n", + " return V0 * np.exp(-t / tau_eff) + Vinf * (1 - np.exp(-t / tau_eff))\n", + "\n", "\n", "def theta(t, th0, theq, tauth):\n", - " return th0*np.exp(-t/tauth) + theq*(1-np.exp(-t/tauth))" + " return th0 * np.exp(-t / tauth) + theq * (1 - np.exp(-t / tauth))" ] }, { @@ -483,25 +486,25 @@ ], "source": [ "nest.ResetKernel()\n", - "nest.SetDefaults('ht_neuron', {'g_peak_NaP': 0., 'g_peak_KNa': 0.,\n", - " 'g_peak_T': 0., 'g_peak_h': 0.,\n", - " 'tau_theta': 10.})\n", - "hp = nest.GetDefaults('ht_neuron')\n", + "nest.SetDefaults(\n", + " \"ht_neuron\", {\"g_peak_NaP\": 0.0, \"g_peak_KNa\": 0.0, \"g_peak_T\": 0.0, \"g_peak_h\": 0.0, \"tau_theta\": 10.0}\n", + ")\n", + "hp = nest.GetDefaults(\"ht_neuron\")\n", "\n", - "V_0 = [-100., -70., -55.]\n", - "th_0 = [-65., -51., -10.]\n", - "T_sim = 20.\n", + "V_0 = [-100.0, -70.0, -55.0]\n", + "th_0 = [-65.0, -51.0, -10.0]\n", + "T_sim = 20.0\n", "\n", - "nrns = nest.Create('ht_neuron', n=len(V_0), params={'V_m': V_0, 'theta': th_0}) \n", + "nrns = nest.Create(\"ht_neuron\", n=len(V_0), params={\"V_m\": V_0, \"theta\": th_0})\n", "\n", "nest.Simulate(T_sim)\n", - "V_th_sim = nrns.get(['V_m', 'theta'])\n", + "V_th_sim = nrns.get([\"V_m\", \"theta\"])\n", "\n", - "for (V0, th0, Vsim, thsim) in zip(V_0, th_0, V_th_sim['V_m'], V_th_sim['theta']):\n", - " Vex = Vpass(T_sim, V0, hp['g_NaL'], hp['E_Na'], hp['g_KL'], hp['E_K'], hp['tau_m'])\n", - " thex = theta(T_sim, th0, hp['theta_eq'], hp['tau_theta'])\n", - " print('Vex = {:.3f}, Vsim = {:.3f}, Vex-Vsim = {:.3e}'.format(Vex, Vsim, Vex-Vsim))\n", - " print('thex = {:.3f}, thsim = {:.3f}, thex-thsim = {:.3e}'.format(thex, thsim, thex-thsim))" + "for V0, th0, Vsim, thsim in zip(V_0, th_0, V_th_sim[\"V_m\"], V_th_sim[\"theta\"]):\n", + " Vex = Vpass(T_sim, V0, hp[\"g_NaL\"], hp[\"E_Na\"], hp[\"g_KL\"], hp[\"E_K\"], hp[\"tau_m\"])\n", + " thex = theta(T_sim, th0, hp[\"theta_eq\"], hp[\"tau_theta\"])\n", + " print(\"Vex = {:.3f}, Vsim = {:.3f}, Vex-Vsim = {:.3e}\".format(Vex, Vsim, Vex - Vsim))\n", + " print(\"thex = {:.3f}, thsim = {:.3f}, thex-thsim = {:.3e}\".format(thex, thsim, thex - thsim))" ] }, { @@ -539,10 +542,10 @@ "outputs": [], "source": [ "def t_first_spike(gNaL, ENa, gKL, EK, taum, theq, tI, I):\n", - " tau_eff = taum/(gNaL + gKL)\n", - " Vinf0 = (gNaL*ENa + gKL*EK)/(gNaL + gKL)\n", - " VinfI = (gNaL*ENa + gKL*EK + I)/(gNaL + gKL)\n", - " return tI - tau_eff * np.log((theq-VinfI) / (Vinf0-VinfI))" + " tau_eff = taum / (gNaL + gKL)\n", + " Vinf0 = (gNaL * ENa + gKL * EK) / (gNaL + gKL)\n", + " VinfI = (gNaL * ENa + gKL * EK + I) / (gNaL + gKL)\n", + " return tI - tau_eff * np.log((theq - VinfI) / (Vinf0 - VinfI))" ] }, { @@ -563,30 +566,26 @@ "source": [ "nest.ResetKernel()\n", "nest.resolution = 0.001\n", - "nest.SetDefaults('ht_neuron', {'g_peak_NaP': 0., 'g_peak_KNa': 0.,\n", - " 'g_peak_T': 0., 'g_peak_h': 0.})\n", - "hp = nest.GetDefaults('ht_neuron')\n", - "\n", - "I = [25., 50., 100.]\n", - "tI = 1.\n", - "delay = 1.\n", - "T_sim = 40.\n", - "\n", - "nrns = nest.Create('ht_neuron', n=len(I))\n", - "dcgens = nest.Create('dc_generator', n=len(I), params={'amplitude': I, 'start': tI})\n", - "srs = nest.Create('spike_recorder', n=len(I))\n", - "nest.Connect(dcgens, nrns, 'one_to_one', {'delay': delay})\n", - "nest.Connect(nrns, srs, 'one_to_one')\n", + "nest.SetDefaults(\"ht_neuron\", {\"g_peak_NaP\": 0.0, \"g_peak_KNa\": 0.0, \"g_peak_T\": 0.0, \"g_peak_h\": 0.0})\n", + "hp = nest.GetDefaults(\"ht_neuron\")\n", + "\n", + "I = [25.0, 50.0, 100.0]\n", + "tI = 1.0\n", + "delay = 1.0\n", + "T_sim = 40.0\n", + "\n", + "nrns = nest.Create(\"ht_neuron\", n=len(I))\n", + "dcgens = nest.Create(\"dc_generator\", n=len(I), params={\"amplitude\": I, \"start\": tI})\n", + "srs = nest.Create(\"spike_recorder\", n=len(I))\n", + "nest.Connect(dcgens, nrns, \"one_to_one\", {\"delay\": delay})\n", + "nest.Connect(nrns, srs, \"one_to_one\")\n", "nest.Simulate(T_sim)\n", "\n", - "t_first_sim = [t[0] for t in srs.get('events', 'times')]\n", + "t_first_sim = [t[0] for t in srs.get(\"events\", \"times\")]\n", "\n", "for dc, tf_sim in zip(I, t_first_sim):\n", - " tf_ex = t_first_spike(hp['g_NaL'], hp['E_Na'], hp['g_KL'], hp['E_K'], \n", - " hp['tau_m'], hp['theta_eq'], tI+delay, dc)\n", - " print('tex = {:.4f}, tsim = {:.4f}, tex-tsim = {:.4f}'.format(tf_ex, \n", - " tf_sim, \n", - " tf_ex-tf_sim))\n" + " tf_ex = t_first_spike(hp[\"g_NaL\"], hp[\"E_Na\"], hp[\"g_KL\"], hp[\"E_K\"], hp[\"tau_m\"], hp[\"theta_eq\"], tI + delay, dc)\n", + " print(\"tex = {:.4f}, tsim = {:.4f}, tex-tsim = {:.4f}\".format(tf_ex, tf_sim, tf_ex - tf_sim))" ] }, { @@ -646,20 +645,24 @@ "outputs": [], "source": [ "def Vspike(tspk, gNaL, ENa, gKL, EK, taum, tauspk, I=0):\n", - " tau_eff = taum/(gNaL + gKL + taum/tauspk)\n", - " Vinf = (gNaL*ENa + gKL*EK + I + taum/tauspk*EK)/(gNaL + gKL + taum/tauspk)\n", - " return ENa*np.exp(-tspk/tau_eff) + Vinf*(1-np.exp(-tspk/tau_eff))\n", + " tau_eff = taum / (gNaL + gKL + taum / tauspk)\n", + " Vinf = (gNaL * ENa + gKL * EK + I + taum / tauspk * EK) / (gNaL + gKL + taum / tauspk)\n", + " return ENa * np.exp(-tspk / tau_eff) + Vinf * (1 - np.exp(-tspk / tau_eff))\n", + "\n", "\n", "def thetaspike(tspk, ENa, theq, tauth):\n", - " return ENa*np.exp(-tspk/tauth) + theq*(1-np.exp(-tspk/tauth))\n", + " return ENa * np.exp(-tspk / tauth) + theq * (1 - np.exp(-tspk / tauth))\n", + "\n", "\n", "def Vpost(t, tspk, gNaL, ENa, gKL, EK, taum, tauspk, I=0):\n", " Vsp = Vspike(tspk, gNaL, ENa, gKL, EK, taum, tauspk, I)\n", - " return Vpass(t-tspk, Vsp, gNaL, ENa, gKL, EK, taum, I)\n", + " return Vpass(t - tspk, Vsp, gNaL, ENa, gKL, EK, taum, I)\n", + "\n", "\n", "def thetapost(t, tspk, ENa, theq, tauth):\n", " thsp = thetaspike(tspk, ENa, theq, tauth)\n", - " return theta(t-tspk, thsp, theq, tauth)\n", + " return theta(t - tspk, thsp, theq, tauth)\n", + "\n", "\n", "def threshold(t, tspk, gNaL, ENa, gKL, EK, taum, tauspk, I, theq, tauth):\n", " return Vpost(t, tspk, gNaL, ENa, gKL, EK, taum, tauspk, I) - thetapost(t, tspk, ENa, theq, tauth)" @@ -683,34 +686,50 @@ "source": [ "nest.ResetKernel()\n", "nest.resolution = 0.001\n", - "nest.SetDefaults('ht_neuron', {'g_peak_NaP': 0., 'g_peak_KNa': 0.,\n", - " 'g_peak_T': 0., 'g_peak_h': 0.})\n", - "hp = nest.GetDefaults('ht_neuron')\n", - "\n", - "I = [25., 50., 100.]\n", - "tI = 1.\n", - "delay = 1.\n", - "T_sim = 1000.\n", - "\n", - "nrns = nest.Create('ht_neuron', n=len(I))\n", - "dcgens = nest.Create('dc_generator', n=len(I), params={'amplitude': I, 'start': tI})\n", - "srs = nest.Create('spike_recorder', n=len(I))\n", - "nest.Connect(dcgens, nrns, 'one_to_one', {'delay': delay})\n", - "nest.Connect(nrns, srs, 'one_to_one')\n", + "nest.SetDefaults(\"ht_neuron\", {\"g_peak_NaP\": 0.0, \"g_peak_KNa\": 0.0, \"g_peak_T\": 0.0, \"g_peak_h\": 0.0})\n", + "hp = nest.GetDefaults(\"ht_neuron\")\n", + "\n", + "I = [25.0, 50.0, 100.0]\n", + "tI = 1.0\n", + "delay = 1.0\n", + "T_sim = 1000.0\n", + "\n", + "nrns = nest.Create(\"ht_neuron\", n=len(I))\n", + "dcgens = nest.Create(\"dc_generator\", n=len(I), params={\"amplitude\": I, \"start\": tI})\n", + "srs = nest.Create(\"spike_recorder\", n=len(I))\n", + "nest.Connect(dcgens, nrns, \"one_to_one\", {\"delay\": delay})\n", + "nest.Connect(nrns, srs, \"one_to_one\")\n", "nest.Simulate(T_sim)\n", "\n", "isi_sim = []\n", "for ev in srs.events:\n", - " t_spk = ev['times']\n", + " t_spk = ev[\"times\"]\n", " isi = np.diff(t_spk)\n", " isi_sim.append((np.min(isi), np.mean(isi), np.max(isi)))\n", "\n", "for dc, (isi_min, isi_mean, isi_max) in zip(I, isi_sim):\n", - " isi_ex = so.bisect(threshold, hp['t_ref'], 50, \n", - " args=(hp['t_ref'], hp['g_NaL'], hp['E_Na'], hp['g_KL'], hp['E_K'], \n", - " hp['tau_m'], hp['tau_spike'], dc, hp['theta_eq'], hp['tau_theta']))\n", - " print('isi_ex = {:.4f}, isi_sim (min, mean, max) = ({:.4f}, {:.4f}, {:.4f})'.format(\n", - " isi_ex, isi_min, isi_mean, isi_max))" + " isi_ex = so.bisect(\n", + " threshold,\n", + " hp[\"t_ref\"],\n", + " 50,\n", + " args=(\n", + " hp[\"t_ref\"],\n", + " hp[\"g_NaL\"],\n", + " hp[\"E_Na\"],\n", + " hp[\"g_KL\"],\n", + " hp[\"E_K\"],\n", + " hp[\"tau_m\"],\n", + " hp[\"tau_spike\"],\n", + " dc,\n", + " hp[\"theta_eq\"],\n", + " hp[\"tau_theta\"],\n", + " ),\n", + " )\n", + " print(\n", + " \"isi_ex = {:.4f}, isi_sim (min, mean, max) = ({:.4f}, {:.4f}, {:.4f})\".format(\n", + " isi_ex, isi_min, isi_mean, isi_max\n", + " )\n", + " )" ] }, { @@ -737,24 +756,33 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class Channel:\n", " \"\"\"\n", " Base class for channel models in Python.\n", " \"\"\"\n", + "\n", " def tau_m(self, V):\n", " raise NotImplementedError()\n", + "\n", " def tau_h(self, V):\n", " raise NotImplementedError()\n", + "\n", " def m_inf(self, V):\n", " raise NotImplementedError()\n", + "\n", " def h_inf(self, V):\n", " raise NotImplementedError()\n", + "\n", " def D_inf(self, V):\n", " raise NotImplementedError()\n", + "\n", " def dh(self, h, t, V):\n", - " return (self.h_inf(V)-h)/self.tau_h(V)\n", + " return (self.h_inf(V) - h) / self.tau_h(V)\n", + "\n", " def dm(self, m, t, V):\n", - " return (self.m_inf(V)-m)/self.tau_m(V)" + " return (self.m_inf(V) - m) / self.tau_m(V)" ] }, { @@ -767,14 +795,13 @@ " \"Run voltage clamp with voltage V through intervals DT.\"\n", "\n", " # NEST part\n", - " nest_g_0 = {'g_peak_h': 0., 'g_peak_T': 0., 'g_peak_NaP': 0., 'g_peak_KNa': 0.}\n", - " nest_g_0[channel.nest_g] = 1.\n", - " \n", + " nest_g_0 = {\"g_peak_h\": 0.0, \"g_peak_T\": 0.0, \"g_peak_NaP\": 0.0, \"g_peak_KNa\": 0.0}\n", + " nest_g_0[channel.nest_g] = 1.0\n", + "\n", " nest.ResetKernel()\n", " nest.resolution = nest_dt\n", - " nrn = nest.Create('ht_neuron', params=nest_g_0)\n", - " mm = nest.Create('multimeter', params={'record_from': ['V_m', 'theta', channel.nest_I],\n", - " 'interval': nest_dt})\n", + " nrn = nest.Create(\"ht_neuron\", params=nest_g_0)\n", + " mm = nest.Create(\"multimeter\", params={\"record_from\": [\"V_m\", \"theta\", channel.nest_I], \"interval\": nest_dt})\n", " nest.Connect(mm, nrn)\n", "\n", " # ensure we start from equilibrated state\n", @@ -783,15 +810,15 @@ " nrn.set(V_m=V, voltage_clamp=True)\n", " nest.Simulate(DT)\n", " t_end = nest.biological_time\n", - " \n", + "\n", " # simulate a little more so we get all data up to t_end to multimeter\n", " nest.Simulate(2 * nest.min_delay)\n", - " \n", + "\n", " tmp = pd.DataFrame(mm.events)\n", " nest_res = tmp[tmp.times <= t_end]\n", - " \n", + "\n", " # Control part\n", - " t_old = 0.\n", + " t_old = 0.0\n", " try:\n", " m_old = channel.m_inf(DT_V_seq[0][1])\n", " except NotImplementedError:\n", @@ -804,13 +831,13 @@ " D_old = channel.D_inf(DT_V_seq[0][1])\n", " except NotImplementedError:\n", " D_old = None\n", - " \n", + "\n", " t_all, I_all = [], []\n", " if D_old is not None:\n", " D_all = []\n", - " \n", + "\n", " for DT, V in DT_V_seq:\n", - " t_loc = np.arange(0., DT+0.1*nest_dt, nest_dt)\n", + " t_loc = np.arange(0.0, DT + 0.1 * nest_dt, nest_dt)\n", " I_loc = channel.compute_I(t_loc, V, m_old, h_old, D_old)\n", " t_all.extend(t_old + t_loc[1:])\n", " I_all.extend(I_loc[1:])\n", @@ -820,11 +847,11 @@ " h_old = channel.h[-1] if h_old is not None else None\n", " D_old = channel.D[-1] if D_old is not None else None\n", " t_old = t_all[-1]\n", - " \n", + "\n", " if D_old is None:\n", - " ctrl_res = pd.DataFrame({'times': t_all, channel.nest_I: I_all})\n", + " ctrl_res = pd.DataFrame({\"times\": t_all, channel.nest_I: I_all})\n", " else:\n", - " ctrl_res = pd.DataFrame({'times': t_all, channel.nest_I: I_all, 'D': D_all})\n", + " ctrl_res = pd.DataFrame({\"times\": t_all, channel.nest_I: I_all, \"D\": D_all})\n", "\n", " return nest_res, ctrl_res" ] @@ -853,23 +880,24 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class Ih(Channel):\n", - " \n", - " nest_g = 'g_peak_h'\n", - " nest_I = 'I_h'\n", - " \n", + " nest_g = \"g_peak_h\"\n", + " nest_I = \"I_h\"\n", + "\n", " def __init__(self, ht_params):\n", " self.hp = ht_params\n", - " \n", + "\n", " def tau_m(self, V):\n", - " return 1/(np.exp(-14.59-0.086*V) + np.exp(-1.87 + 0.0701*V))\n", - " \n", + " return 1 / (np.exp(-14.59 - 0.086 * V) + np.exp(-1.87 + 0.0701 * V))\n", + "\n", " def m_inf(self, V):\n", - " return 1/(1+np.exp((V+75)/5.5))\n", + " return 1 / (1 + np.exp((V + 75) / 5.5))\n", "\n", " def compute_I(self, t, V, m0, h0, D0):\n", " self.m = si.odeint(self.dm, m0, t, args=(V,))\n", - " return - self.hp['g_peak_h'] * self.m * (V - self.hp['E_rev_h'])" + " return -self.hp[\"g_peak_h\"] * self.m * (V - self.hp[\"E_rev_h\"])" ] }, { @@ -891,16 +919,16 @@ } ], "source": [ - "ih = Ih(nest.GetDefaults('ht_neuron'))\n", + "ih = Ih(nest.GetDefaults(\"ht_neuron\"))\n", "\n", "V = np.linspace(-110, 30, 100)\n", - "plt.plot(V, ih.tau_m(V));\n", - "ax = plt.gca();\n", - "ax.set_xlabel('Voltage V [mV]');\n", - "ax.set_ylabel('Time constant tau_m [ms]', color='b');\n", + "plt.plot(V, ih.tau_m(V))\n", + "ax = plt.gca()\n", + "ax.set_xlabel(\"Voltage V [mV]\")\n", + "ax.set_ylabel(\"Time constant tau_m [ms]\", color=\"b\")\n", "ax2 = ax.twinx()\n", - "ax2.plot(V, ih.m_inf(V), 'g');\n", - "ax2.set_ylabel('Steady-state m_h^inf', color='g');" + "ax2.plot(V, ih.m_inf(V), \"g\")\n", + "ax2.set_ylabel(\"Steady-state m_h^inf\", color=\"g\");" ] }, { @@ -919,8 +947,8 @@ "metadata": {}, "outputs": [], "source": [ - "ih = Ih(nest.GetDefaults('ht_neuron'))\n", - "nr, cr = voltage_clamp(ih, [(500, -65.), (500, -80.), (500, -100.), (500, -90.), (500, -55.)]) " + "ih = Ih(nest.GetDefaults(\"ht_neuron\"))\n", + "nr, cr = voltage_clamp(ih, [(500, -65.0), (500, -80.0), (500, -100.0), (500, -90.0), (500, -55.0)])" ] }, { @@ -943,18 +971,18 @@ ], "source": [ "plt.subplot(1, 2, 1)\n", - "plt.plot(nr.times, nr.I_h, label='NEST');\n", - "plt.plot(cr.times, cr.I_h, label='Control');\n", - "plt.legend(loc='upper left');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('I_h [mV]');\n", - "plt.title('I_h current')\n", + "plt.plot(nr.times, nr.I_h, label=\"NEST\")\n", + "plt.plot(cr.times, cr.I_h, label=\"Control\")\n", + "plt.legend(loc=\"upper left\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"I_h [mV]\")\n", + "plt.title(\"I_h current\")\n", "\n", "plt.subplot(1, 2, 2)\n", - "plt.plot(nr.times, (nr.I_h-cr.I_h)/np.abs(cr.I_h));\n", - "plt.title('Relative I_h error')\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel. error (NEST-Control)/|Control|');" + "plt.plot(nr.times, (nr.I_h - cr.I_h) / np.abs(cr.I_h))\n", + "plt.title(\"Relative I_h error\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel. error (NEST-Control)/|Control|\");" ] }, { @@ -976,7 +1004,7 @@ "I_T &= g_{\\text{peak}, T} m_T^2(V, t) h_T(V,t) (V-E_T) \\\\\n", "m_T^{\\infty}(V) &= \\frac{1}{1+\\exp\\left(-\\frac{V+59\\text{mV}}{6.2\\text{mV}}\\right)}\\\\\n", "\\tau_{m,T}(V) &= 0.13\\text{ms} \n", - " + \\frac{0.22\\text{ms}}{\\exp\\left(-\\frac{V + 132\\text{mV}}{16.7\\text{mV}}\\right) + \\exp\\left(\\frac{V + 16.8\\text{mV}}{18.2\\text{mV}}\\right)} \\\\ \n", + "+ \\frac{0.22\\text{ms}}{\\exp\\left(-\\frac{V + 132\\text{mV}}{16.7\\text{mV}}\\right) + \\exp\\left(\\frac{V + 16.8\\text{mV}}{18.2\\text{mV}}\\right)} \\\\ \n", "h_T^{\\infty}(V) &= \\frac{1}{1+\\exp\\left(\\frac{V+83\\text{mV}}{4\\text{mV}}\\right)}\\\\\n", "\\tau_{h,T}(V) &= 8.2\\text{ms} + \\frac{56.6\\text{ms} + 0.27\\text{ms} \\exp\\left(\\frac{V + 115.2\\text{mV}}{5\\text{mV}}\\right)}{1 + \\exp\\left(\\frac{V + 86\\text{mV}}{3.2\\text{mV}}\\right)}\n", "\\end{align}" @@ -989,30 +1017,31 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class IT(Channel):\n", - " \n", - " nest_g = 'g_peak_T'\n", - " nest_I = 'I_T'\n", - " \n", + " nest_g = \"g_peak_T\"\n", + " nest_I = \"I_T\"\n", + "\n", " def __init__(self, ht_params):\n", " self.hp = ht_params\n", - " \n", + "\n", " def tau_m(self, V):\n", - " return 0.13 + 0.22/(np.exp(-(V+132)/16.7) + np.exp((V+16.8)/18.2))\n", + " return 0.13 + 0.22 / (np.exp(-(V + 132) / 16.7) + np.exp((V + 16.8) / 18.2))\n", "\n", " def tau_h(self, V):\n", - " return 8.2 + (56.6 + 0.27 * np.exp((V+115.2)/5.0)) /(1 + np.exp((V+86.0)/3.2))\n", + " return 8.2 + (56.6 + 0.27 * np.exp((V + 115.2) / 5.0)) / (1 + np.exp((V + 86.0) / 3.2))\n", "\n", " def m_inf(self, V):\n", - " return 1/(1+np.exp(-(V+59.0)/6.2))\n", + " return 1 / (1 + np.exp(-(V + 59.0) / 6.2))\n", "\n", " def h_inf(self, V):\n", - " return 1/(1+np.exp((V+83.0)/4.0))\n", + " return 1 / (1 + np.exp((V + 83.0) / 4.0))\n", "\n", " def compute_I(self, t, V, m0, h0, D0):\n", " self.m = si.odeint(self.dm, m0, t, args=(V,))\n", " self.h = si.odeint(self.dh, h0, t, args=(V,))\n", - " return - self.hp['g_peak_T'] * self.m**2 * self.h * (V - self.hp['E_rev_T'])" + " return -self.hp[\"g_peak_T\"] * self.m**2 * self.h * (V - self.hp[\"E_rev_T\"])" ] }, { @@ -1034,21 +1063,21 @@ } ], "source": [ - "iT = IT(nest.GetDefaults('ht_neuron'))\n", + "iT = IT(nest.GetDefaults(\"ht_neuron\"))\n", "\n", "V = np.linspace(-110, 30, 100)\n", - "plt.plot(V, 10 * iT.tau_m(V), 'b-', label='10 * tau_m');\n", - "plt.plot(V, iT.tau_h(V), 'b--', label='tau_h');\n", - "ax1 = plt.gca();\n", - "ax1.set_xlabel('Voltage V [mV]');\n", - "ax1.set_ylabel('Time constants [ms]', color='b');\n", + "plt.plot(V, 10 * iT.tau_m(V), \"b-\", label=\"10 * tau_m\")\n", + "plt.plot(V, iT.tau_h(V), \"b--\", label=\"tau_h\")\n", + "ax1 = plt.gca()\n", + "ax1.set_xlabel(\"Voltage V [mV]\")\n", + "ax1.set_ylabel(\"Time constants [ms]\", color=\"b\")\n", "ax2 = ax1.twinx()\n", - "ax2.plot(V, iT.m_inf(V), 'g-', label='m_inf');\n", - "ax2.plot(V, iT.h_inf(V), 'g--', label='h_inf');\n", - "ax2.set_ylabel('Steady-state', color='g');\n", + "ax2.plot(V, iT.m_inf(V), \"g-\", label=\"m_inf\")\n", + "ax2.plot(V, iT.h_inf(V), \"g--\", label=\"h_inf\")\n", + "ax2.set_ylabel(\"Steady-state\", color=\"g\")\n", "ln1, lb1 = ax1.get_legend_handles_labels()\n", "ln2, lb2 = ax2.get_legend_handles_labels()\n", - "plt.legend(ln1+ln2, lb1+lb2, loc='upper right');" + "plt.legend(ln1 + ln2, lb1 + lb2, loc=\"upper right\");" ] }, { @@ -1067,10 +1096,10 @@ "metadata": {}, "outputs": [], "source": [ - "iT = IT(nest.GetDefaults('ht_neuron'))\n", - "nr, cr = voltage_clamp(iT, [(200, -65.), (200, -80.), (200, -100.), (200, -90.), (200, -70.),\n", - " (200, -55.)],\n", - " nest_dt=0.1) " + "iT = IT(nest.GetDefaults(\"ht_neuron\"))\n", + "nr, cr = voltage_clamp(\n", + " iT, [(200, -65.0), (200, -80.0), (200, -100.0), (200, -90.0), (200, -70.0), (200, -55.0)], nest_dt=0.1\n", + ")" ] }, { @@ -1093,18 +1122,18 @@ ], "source": [ "plt.subplot(1, 2, 1)\n", - "plt.plot(nr.times, nr.I_T, label='NEST');\n", - "plt.plot(cr.times, cr.I_T, label='Control');\n", - "plt.legend(loc='upper left');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('I_T [mV]');\n", - "plt.title('I_T current')\n", + "plt.plot(nr.times, nr.I_T, label=\"NEST\")\n", + "plt.plot(cr.times, cr.I_T, label=\"Control\")\n", + "plt.legend(loc=\"upper left\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"I_T [mV]\")\n", + "plt.title(\"I_T current\")\n", "\n", "plt.subplot(1, 2, 2)\n", - "plt.plot(nr.times, (nr.I_T-cr.I_T)/np.abs(cr.I_T));\n", - "plt.title('Relative I_T error')\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel. error (NEST-Control)/|Control|');" + "plt.plot(nr.times, (nr.I_T - cr.I_T) / np.abs(cr.I_T))\n", + "plt.title(\"Relative I_T error\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel. error (NEST-Control)/|Control|\");" ] }, { @@ -1136,23 +1165,24 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class INaP(Channel):\n", - " \n", - " nest_g = 'g_peak_NaP'\n", - " nest_I = 'I_NaP'\n", - " \n", + " nest_g = \"g_peak_NaP\"\n", + " nest_I = \"I_NaP\"\n", + "\n", " def __init__(self, ht_params):\n", " self.hp = ht_params\n", - " \n", + "\n", " def m_inf(self, V):\n", - " return 1/(1+np.exp(-(V+55.7)/7.7))\n", - " \n", + " return 1 / (1 + np.exp(-(V + 55.7) / 7.7))\n", + "\n", " def compute_I(self, t, V, m0, h0, D0):\n", - " return self.I_V_curve(V * np.ones_like(t)) \n", + " return self.I_V_curve(V * np.ones_like(t))\n", "\n", " def I_V_curve(self, V):\n", " self.m = self.m_inf(V)\n", - " return - self.hp['g_peak_NaP'] * self.m**3 * (V - self.hp['E_rev_NaP'])" + " return -self.hp[\"g_peak_NaP\"] * self.m**3 * (V - self.hp[\"E_rev_NaP\"])" ] }, { @@ -1161,8 +1191,8 @@ "metadata": {}, "outputs": [], "source": [ - "iNaP = INaP(nest.GetDefaults('ht_neuron'))\n", - "V = np.arange(-110., 30., 1.)\n", + "iNaP = INaP(nest.GetDefaults(\"ht_neuron\"))\n", + "V = np.arange(-110.0, 30.0, 1.0)\n", "nr, cr = voltage_clamp(iNaP, [(1, v) for v in V], nest_dt=0.1)" ] }, @@ -1186,18 +1216,18 @@ ], "source": [ "plt.subplot(1, 2, 1)\n", - "plt.plot(nr.times, nr.I_NaP, label='NEST');\n", - "plt.plot(cr.times, cr.I_NaP, label='Control');\n", - "plt.legend(loc='upper left');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('I_NaP [mV]');\n", - "plt.title('I_NaP current')\n", + "plt.plot(nr.times, nr.I_NaP, label=\"NEST\")\n", + "plt.plot(cr.times, cr.I_NaP, label=\"Control\")\n", + "plt.legend(loc=\"upper left\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"I_NaP [mV]\")\n", + "plt.title(\"I_NaP current\")\n", "\n", "plt.subplot(1, 2, 2)\n", - "plt.plot(nr.times, (nr.I_NaP-cr.I_NaP));\n", - "plt.title('I_NaP error')\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Error (NEST-Control)');" + "plt.plot(nr.times, (nr.I_NaP - cr.I_NaP))\n", + "plt.title(\"I_NaP error\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Error (NEST-Control)\");" ] }, { @@ -1218,10 +1248,10 @@ "\n", "\\begin{align}\n", "I_{DK} &= - g_{\\text{peak},DK} m_{DK}(V,t) (V - E_{DK})\\\\\n", - " m_{DK} &= \\frac{1}{1 + \\left(\\frac{d_{1/2}}{D}\\right)^{3.5}}\\\\\n", - " \\frac{dD}{dt} &= D_{\\text{influx}}(V) - \\frac{D-D_{\\text{eq}}}{\\tau_D} = \\frac{D_{\\infty}(V)-D}{\\tau_D} \\\\\n", - " D_{\\infty}(V) &= \\tau_D D_{\\text{influx}}(V) + {D_{\\text{eq}}}\\\\\n", - " D_{\\text{influx}} &= \\frac{D_{\\text{influx,peak}}}{1+ \\exp\\left(-\\frac{V-D_{\\theta}}{\\sigma_D}\\right)} \n", + "m_{DK} &= \\frac{1}{1 + \\left(\\frac{d_{1/2}}{D}\\right)^{3.5}}\\\\\n", + "\\frac{dD}{dt} &= D_{\\text{influx}}(V) - \\frac{D-D_{\\text{eq}}}{\\tau_D} = \\frac{D_{\\infty}(V)-D}{\\tau_D} \\\\\n", + "D_{\\infty}(V) &= \\tau_D D_{\\text{influx}}(V) + {D_{\\text{eq}}}\\\\\n", + "D_{\\text{influx}} &= \\frac{D_{\\text{influx,peak}}}{1+ \\exp\\left(-\\frac{V-D_{\\theta}}{\\sigma_D}\\right)} \n", "\\end{align}\n", "\n", "with \n", @@ -1246,30 +1276,31 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class IDK(Channel):\n", - " \n", - " nest_g = 'g_peak_KNa'\n", - " nest_I = 'I_KNa'\n", - " \n", + " nest_g = \"g_peak_KNa\"\n", + " nest_I = \"I_KNa\"\n", + "\n", " def __init__(self, ht_params):\n", " self.hp = ht_params\n", - " \n", + "\n", " def m_DK(self, D):\n", - " return 1/(1+(0.25/D)**3.5)\n", + " return 1 / (1 + (0.25 / D) ** 3.5)\n", "\n", " def D_inf(self, V):\n", - " return 1250. * self.D_influx(V) + 0.001\n", - " \n", + " return 1250.0 * self.D_influx(V) + 0.001\n", + "\n", " def D_influx(self, V):\n", - " return 0.025 / ( 1 + np.exp(-(V+10)/5.) )\n", - " \n", + " return 0.025 / (1 + np.exp(-(V + 10) / 5.0))\n", + "\n", " def dD(self, D, t, V):\n", - " return (self.D_inf(V) - D)/1250.\n", - " \n", + " return (self.D_inf(V) - D) / 1250.0\n", + "\n", " def compute_I(self, t, V, m0, h0, D0):\n", " self.D = si.odeint(self.dD, D0, t, args=(V,))\n", " self.m = self.m_DK(self.D)\n", - " return - self.hp['g_peak_KNa'] * self.m * (V - self.hp['E_rev_KNa'])" + " return -self.hp[\"g_peak_KNa\"] * self.m * (V - self.hp[\"E_rev_KNa\"])" ] }, { @@ -1285,7 +1316,7 @@ "metadata": {}, "outputs": [], "source": [ - "iDK = IDK(nest.GetDefaults('ht_neuron'))" + "iDK = IDK(nest.GetDefaults(\"ht_neuron\"))" ] }, { @@ -1307,24 +1338,24 @@ } ], "source": [ - "D=np.linspace(0.01, 1.5,num=200);\n", - "V=np.linspace(-110, 30, num=200);\n", + "D = np.linspace(0.01, 1.5, num=200)\n", + "V = np.linspace(-110, 30, num=200)\n", "\n", - "ax1 = plt.subplot2grid((1, 9), (0, 0), colspan=4);\n", + "ax1 = plt.subplot2grid((1, 9), (0, 0), colspan=4)\n", "ax2 = ax1.twinx()\n", - "ax3 = plt.subplot2grid((1, 9), (0, 6), colspan=3);\n", + "ax3 = plt.subplot2grid((1, 9), (0, 6), colspan=3)\n", "\n", - "ax1.plot(V, -iDK.m_DK(iDK.D_inf(V))*(V - iDK.hp['E_rev_KNa']), 'g');\n", - "ax1.set_ylabel('Current I_inf(V)', color='g');\n", - "ax2.plot(V, iDK.m_DK(iDK.D_inf(V)), 'b');\n", - "ax2.set_ylabel('Activation m_inf(D_inf(V))', color='b');\n", - "ax1.set_xlabel('Membrane potential V [mV]');\n", - "ax2.set_title('Steady-state activation and current');\n", + "ax1.plot(V, -iDK.m_DK(iDK.D_inf(V)) * (V - iDK.hp[\"E_rev_KNa\"]), \"g\")\n", + "ax1.set_ylabel(\"Current I_inf(V)\", color=\"g\")\n", + "ax2.plot(V, iDK.m_DK(iDK.D_inf(V)), \"b\")\n", + "ax2.set_ylabel(\"Activation m_inf(D_inf(V))\", color=\"b\")\n", + "ax1.set_xlabel(\"Membrane potential V [mV]\")\n", + "ax2.set_title(\"Steady-state activation and current\")\n", "\n", - "ax3.plot(D, iDK.m_DK(D), 'b');\n", - "ax3.set_xlabel('D');\n", - "ax3.set_ylabel('Activation m_inf(D)', color='b');\n", - "ax3.set_title('Activation as function of D');" + "ax3.plot(D, iDK.m_DK(D), \"b\")\n", + "ax3.set_xlabel(\"D\")\n", + "ax3.set_ylabel(\"Activation m_inf(D)\", color=\"b\")\n", + "ax3.set_title(\"Activation as function of D\");" ] }, { @@ -1332,8 +1363,8 @@ "metadata": {}, "source": [ "- Note that current in steady state is \n", - " - $\\approx 0$ for $V < -40$mV\n", - " - $\\sim -(V-E_{DK})$ for $V> -30$mV" + "- $\\approx 0$ for $V < -40$mV\n", + "- $\\sim -(V-E_{DK})$ for $V> -30$mV" ] }, { @@ -1349,8 +1380,7 @@ "metadata": {}, "outputs": [], "source": [ - "nr, cr = voltage_clamp(iDK, [(500, -65.), (500, -35.), (500, -25.), (500, 0.), (5000, -70.)],\n", - " nest_dt=1.) " + "nr, cr = voltage_clamp(iDK, [(500, -65.0), (500, -35.0), (500, -25.0), (500, 0.0), (5000, -70.0)], nest_dt=1.0)" ] }, { @@ -1372,20 +1402,20 @@ } ], "source": [ - "ax1 = plt.subplot2grid((1, 9), (0, 0), colspan=4);\n", - "ax2 = plt.subplot2grid((1, 9), (0, 6), colspan=3);\n", + "ax1 = plt.subplot2grid((1, 9), (0, 0), colspan=4)\n", + "ax2 = plt.subplot2grid((1, 9), (0, 6), colspan=3)\n", "\n", - "ax1.plot(nr.times, nr.I_KNa, label='NEST');\n", - "ax1.plot(cr.times, cr.I_KNa, label='Control');\n", - "ax1.legend(loc='lower right');\n", - "ax1.set_xlabel('Time [ms]');\n", - "ax1.set_ylabel('I_DK [mV]');\n", - "ax1.set_title('I_DK current');\n", + "ax1.plot(nr.times, nr.I_KNa, label=\"NEST\")\n", + "ax1.plot(cr.times, cr.I_KNa, label=\"Control\")\n", + "ax1.legend(loc=\"lower right\")\n", + "ax1.set_xlabel(\"Time [ms]\")\n", + "ax1.set_ylabel(\"I_DK [mV]\")\n", + "ax1.set_title(\"I_DK current\")\n", "\n", - "ax2.plot(nr.times, (nr.I_KNa-cr.I_KNa)/np.abs(cr.I_KNa));\n", - "ax2.set_title('Relative I_DK error')\n", - "ax2.set_xlabel('Time [ms]');\n", - "ax2.set_ylabel('Rel. error (NEST-Control)/|Control|');" + "ax2.plot(nr.times, (nr.I_KNa - cr.I_KNa) / np.abs(cr.I_KNa))\n", + "ax2.set_title(\"Relative I_DK error\")\n", + "ax2.set_xlabel(\"Time [ms]\")\n", + "ax2.set_ylabel(\"Rel. error (NEST-Control)/|Control|\");" ] }, { @@ -1414,17 +1444,20 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class SynChannel:\n", " \"\"\"\n", " Base class for synapse channel models in Python.\n", " \"\"\"\n", "\n", " def t_peak(self):\n", - " return self.tau_1 * self.tau_2 / (self.tau_2 - self.tau_1) * np.log(self.tau_2/self.tau_1)\n", - " \n", + " return self.tau_1 * self.tau_2 / (self.tau_2 - self.tau_1) * np.log(self.tau_2 / self.tau_1)\n", + "\n", " def beta(self, t):\n", - " val = ( ( np.exp(-t/self.tau_1) - np.exp(-t/self.tau_2) ) /\n", - " ( np.exp(-self.t_peak()/self.tau_1) - np.exp(-self.t_peak()/self.tau_2) ) )\n", + " val = (np.exp(-t / self.tau_1) - np.exp(-t / self.tau_2)) / (\n", + " np.exp(-self.t_peak() / self.tau_1) - np.exp(-self.t_peak() / self.tau_2)\n", + " )\n", " val[t < 0] = 0\n", " return val" ] @@ -1440,22 +1473,20 @@ "\n", " spike_time = 1.0\n", " delay = 1.0\n", - " \n", + "\n", " nest.ResetKernel()\n", " nest.resolution = nest_dt\n", " try:\n", - " nrn = nest.Create('ht_neuron', params={'theta': 1e6, 'theta_eq': 1e6,\n", - " 'instant_unblock_NMDA': channel.instantaneous})\n", + " nrn = nest.Create(\n", + " \"ht_neuron\", params={\"theta\": 1e6, \"theta_eq\": 1e6, \"instant_unblock_NMDA\": channel.instantaneous}\n", + " )\n", " except:\n", - " nrn = nest.Create('ht_neuron', params={'theta': 1e6, 'theta_eq': 1e6})\n", + " nrn = nest.Create(\"ht_neuron\", params={\"theta\": 1e6, \"theta_eq\": 1e6})\n", "\n", - " mm = nest.Create('multimeter', \n", - " params={'record_from': ['g_'+channel.receptor],\n", - " 'interval': nest_dt})\n", - " sg = nest.Create('spike_generator', params={'spike_times': [spike_time]})\n", + " mm = nest.Create(\"multimeter\", params={\"record_from\": [\"g_\" + channel.receptor], \"interval\": nest_dt})\n", + " sg = nest.Create(\"spike_generator\", params={\"spike_times\": [spike_time]})\n", " nest.Connect(mm, nrn)\n", - " nest.Connect(sg, nrn, syn_spec={'weight': 1.0, 'delay': delay,\n", - " 'receptor_type': channel.rec_code})\n", + " nest.Connect(sg, nrn, syn_spec={\"weight\": 1.0, \"delay\": delay, \"receptor_type\": channel.rec_code})\n", "\n", " # ensure we start from equilibrated state\n", " nrn.set(V_m=DT_V_seq[0][1], equilibrate=True, voltage_clamp=True)\n", @@ -1463,32 +1494,30 @@ " nrn.set(V_m=V, voltage_clamp=True)\n", " nest.Simulate(DT)\n", " t_end = nest.biological_time\n", - " \n", + "\n", " # simulate a little more so we get all data up to t_end to multimeter\n", " nest.Simulate(2 * nest.min_delay)\n", - " \n", - " tmp = pd.DataFrame(mm.get('events'))\n", + "\n", + " tmp = pd.DataFrame(mm.get(\"events\"))\n", " nest_res = tmp[tmp.times <= t_end]\n", - " \n", + "\n", " # Control part\n", - " t_old = 0.\n", + " t_old = 0.0\n", " t_all, g_all = [], []\n", - " \n", - " m_fast_old = (channel.m_inf(DT_V_seq[0][1]) \n", - " if channel.receptor == 'NMDA' and not channel.instantaneous else None) \n", - " m_slow_old = (channel.m_inf(DT_V_seq[0][1]) \n", - " if channel.receptor == 'NMDA' and not channel.instantaneous else None) \n", + "\n", + " m_fast_old = channel.m_inf(DT_V_seq[0][1]) if channel.receptor == \"NMDA\" and not channel.instantaneous else None\n", + " m_slow_old = channel.m_inf(DT_V_seq[0][1]) if channel.receptor == \"NMDA\" and not channel.instantaneous else None\n", "\n", " for DT, V in DT_V_seq:\n", - " t_loc = np.arange(0., DT+0.1*nest_dt, nest_dt)\n", - " g_loc = channel.g(t_old+t_loc-(spike_time+delay), V, m_fast_old, m_slow_old)\n", + " t_loc = np.arange(0.0, DT + 0.1 * nest_dt, nest_dt)\n", + " g_loc = channel.g(t_old + t_loc - (spike_time + delay), V, m_fast_old, m_slow_old)\n", " t_all.extend(t_old + t_loc[1:])\n", " g_all.extend(g_loc[1:])\n", " m_fast_old = channel.m_fast[-1] if m_fast_old is not None else None\n", " m_slow_old = channel.m_slow[-1] if m_slow_old is not None else None\n", " t_old = t_all[-1]\n", - " \n", - " ctrl_res = pd.DataFrame({'times': t_all, 'g_'+channel.receptor: g_all})\n", + "\n", + " ctrl_res = pd.DataFrame({\"times\": t_all, \"g_\" + channel.receptor: g_all})\n", "\n", " return nest_res, ctrl_res" ] @@ -1507,21 +1536,23 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", + "\n", + "\n", "class PlainChannel(SynChannel):\n", " def __init__(self, hp, receptor):\n", " self.hp = hp\n", " self.receptor = receptor\n", - " self.rec_code = hp['receptor_types'][receptor]\n", - " self.tau_1 = hp['tau_rise_'+receptor]\n", - " self.tau_2 = hp['tau_decay_'+receptor]\n", - " self.g_peak = hp['g_peak_'+receptor]\n", - " self.E_rev = hp['E_rev_'+receptor]\n", - " \n", + " self.rec_code = hp[\"receptor_types\"][receptor]\n", + " self.tau_1 = hp[\"tau_rise_\" + receptor]\n", + " self.tau_2 = hp[\"tau_decay_\" + receptor]\n", + " self.g_peak = hp[\"g_peak_\" + receptor]\n", + " self.E_rev = hp[\"E_rev_\" + receptor]\n", + "\n", " def g(self, t, V, mf0, ms0):\n", " return self.g_peak * self.beta(t)\n", - " \n", + "\n", " def I(self, t, V):\n", - " return - self.g(t) * (V-self.E_rev)" + " return -self.g(t) * (V - self.E_rev)" ] }, { @@ -1543,19 +1574,19 @@ } ], "source": [ - "ampa = PlainChannel(nest.GetDefaults('ht_neuron'), 'AMPA')\n", - "am_n, am_c = syn_voltage_clamp(ampa, [(25, -70.)], nest_dt=0.1)\n", - "plt.subplot(1, 2, 1);\n", - "plt.plot(am_n.times, am_n.g_AMPA, label='NEST');\n", - "plt.plot(am_c.times, am_c.g_AMPA, label='Control');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('g_AMPA');\n", - "plt.title('AMPA Channel');\n", - "plt.subplot(1, 2, 2);\n", - "plt.plot(am_n.times, (am_n.g_AMPA-am_c.g_AMPA)/am_c.g_AMPA);\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel error');\n", - "plt.title('AMPA rel error');" + "ampa = PlainChannel(nest.GetDefaults(\"ht_neuron\"), \"AMPA\")\n", + "am_n, am_c = syn_voltage_clamp(ampa, [(25, -70.0)], nest_dt=0.1)\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(am_n.times, am_n.g_AMPA, label=\"NEST\")\n", + "plt.plot(am_c.times, am_c.g_AMPA, label=\"Control\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"g_AMPA\")\n", + "plt.title(\"AMPA Channel\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(am_n.times, (am_n.g_AMPA - am_c.g_AMPA) / am_c.g_AMPA)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel error\")\n", + "plt.title(\"AMPA rel error\");" ] }, { @@ -1586,19 +1617,19 @@ } ], "source": [ - "ampa = PlainChannel(nest.GetDefaults('ht_neuron'), 'AMPA')\n", - "am_n, am_c = syn_voltage_clamp(ampa, [(25, -70.)], nest_dt=0.001)\n", - "plt.subplot(1, 2, 1);\n", - "plt.plot(am_n.times, am_n.g_AMPA, label='NEST');\n", - "plt.plot(am_c.times, am_c.g_AMPA, label='Control');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('g_AMPA');\n", - "plt.title('AMPA Channel');\n", - "plt.subplot(1, 2, 2);\n", - "plt.plot(am_n.times, (am_n.g_AMPA-am_c.g_AMPA)/am_c.g_AMPA);\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel error');\n", - "plt.title('AMPA rel error');" + "ampa = PlainChannel(nest.GetDefaults(\"ht_neuron\"), \"AMPA\")\n", + "am_n, am_c = syn_voltage_clamp(ampa, [(25, -70.0)], nest_dt=0.001)\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(am_n.times, am_n.g_AMPA, label=\"NEST\")\n", + "plt.plot(am_c.times, am_c.g_AMPA, label=\"Control\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"g_AMPA\")\n", + "plt.title(\"AMPA Channel\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(am_n.times, (am_n.g_AMPA - am_c.g_AMPA) / am_c.g_AMPA)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel error\")\n", + "plt.title(\"AMPA rel error\");" ] }, { @@ -1620,19 +1651,19 @@ } ], "source": [ - "gaba_a = PlainChannel(nest.GetDefaults('ht_neuron'), 'GABA_A')\n", - "ga_n, ga_c = syn_voltage_clamp(gaba_a, [(50, -70.)])\n", - "plt.subplot(1, 2, 1);\n", - "plt.plot(ga_n.times, ga_n.g_GABA_A, label='NEST');\n", - "plt.plot(ga_c.times, ga_c.g_GABA_A, label='Control');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('g_GABA_A');\n", - "plt.title('GABA_A Channel');\n", - "plt.subplot(1, 2, 2);\n", - "plt.plot(ga_n.times, (ga_n.g_GABA_A-ga_c.g_GABA_A)/ga_c.g_GABA_A);\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel error');\n", - "plt.title('GABA_A rel error');" + "gaba_a = PlainChannel(nest.GetDefaults(\"ht_neuron\"), \"GABA_A\")\n", + "ga_n, ga_c = syn_voltage_clamp(gaba_a, [(50, -70.0)])\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(ga_n.times, ga_n.g_GABA_A, label=\"NEST\")\n", + "plt.plot(ga_c.times, ga_c.g_GABA_A, label=\"Control\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"g_GABA_A\")\n", + "plt.title(\"GABA_A Channel\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(ga_n.times, (ga_n.g_GABA_A - ga_c.g_GABA_A) / ga_c.g_GABA_A)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel error\")\n", + "plt.title(\"GABA_A rel error\");" ] }, { @@ -1654,19 +1685,19 @@ } ], "source": [ - "gaba_b = PlainChannel(nest.GetDefaults('ht_neuron'), 'GABA_B')\n", - "gb_n, gb_c = syn_voltage_clamp(gaba_b, [(750, -70.)])\n", - "plt.subplot(1, 2, 1);\n", - "plt.plot(gb_n.times, gb_n.g_GABA_B, label='NEST');\n", - "plt.plot(gb_c.times, gb_c.g_GABA_B, label='Control');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('g_GABA_B');\n", - "plt.title('GABA_B Channel');\n", - "plt.subplot(1, 2, 2);\n", - "plt.plot(gb_n.times, (gb_n.g_GABA_B-gb_c.g_GABA_B)/gb_c.g_GABA_B);\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel error');\n", - "plt.title('GABA_B rel error');" + "gaba_b = PlainChannel(nest.GetDefaults(\"ht_neuron\"), \"GABA_B\")\n", + "gb_n, gb_c = syn_voltage_clamp(gaba_b, [(750, -70.0)])\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(gb_n.times, gb_n.g_GABA_B, label=\"NEST\")\n", + "plt.plot(gb_c.times, gb_c.g_GABA_B, label=\"Control\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"g_GABA_B\")\n", + "plt.title(\"GABA_B Channel\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(gb_n.times, (gb_n.g_GABA_B - gb_c.g_GABA_B) / gb_c.g_GABA_B)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel error\")\n", + "plt.title(\"GABA_B rel error\");" ] }, { @@ -1686,11 +1717,11 @@ "The equations for this channel are\n", "\n", "\\begin{align}\n", - " \\bar{g}_{\\text{NMDA}}(t) &= m(V, t) g_{\\text{NMDA}}(t) m(V, t)\\\\ &= a(V) m_{\\text{fast}}^*(V, t) + ( 1 - a(V) ) m_{\\text{slow}}^*(V, t)\\\\\n", - " a(V) &= 0.51 - 0.0028 V \\\\\n", - " m^{\\infty}(V) &= \\frac{1}{ 1 + \\exp\\left( -S_{\\text{act}} ( V - V_{\\text{act}} ) \\right) } \\\\\n", - " m_X^*(V, t) &= \\min(m^{\\infty}(V), m_X(V, t))\\\\\n", - " \\frac{\\text{d}m_X}{\\text{d}t} &= \\frac{m^{\\infty}(V) - m_X }{ \\tau_{\\text{Mg}, X}}\n", + "\\bar{g}_{\\text{NMDA}}(t) &= m(V, t) g_{\\text{NMDA}}(t) m(V, t)\\\\ &= a(V) m_{\\text{fast}}^*(V, t) + ( 1 - a(V) ) m_{\\text{slow}}^*(V, t)\\\\\n", + "a(V) &= 0.51 - 0.0028 V \\\\\n", + "m^{\\infty}(V) &= \\frac{1}{ 1 + \\exp\\left( -S_{\\text{act}} ( V - V_{\\text{act}} ) \\right) } \\\\\n", + "m_X^*(V, t) &= \\min(m^{\\infty}(V), m_X(V, t))\\\\\n", + "\\frac{\\text{d}m_X}{\\text{d}t} &= \\frac{m^{\\infty}(V) - m_X }{ \\tau_{\\text{Mg}, X}}\n", "\\end{align} \n", "\n", "where $g_{\\text{NMDA}}(t)$ is the beta functions as for the other channels. In case of instantaneous unblocking, $m=m^{\\infty}$." @@ -1713,23 +1744,23 @@ " def __init__(self, hp, receptor):\n", " self.hp = hp\n", " self.receptor = receptor\n", - " self.rec_code = hp['receptor_types'][receptor]\n", - " self.tau_1 = hp['tau_rise_'+receptor]\n", - " self.tau_2 = hp['tau_decay_'+receptor]\n", - " self.g_peak = hp['g_peak_'+receptor]\n", - " self.E_rev = hp['E_rev_'+receptor]\n", - " self.S_act = hp['S_act_NMDA']\n", - " self.V_act = hp['V_act_NMDA']\n", + " self.rec_code = hp[\"receptor_types\"][receptor]\n", + " self.tau_1 = hp[\"tau_rise_\" + receptor]\n", + " self.tau_2 = hp[\"tau_decay_\" + receptor]\n", + " self.g_peak = hp[\"g_peak_\" + receptor]\n", + " self.E_rev = hp[\"E_rev_\" + receptor]\n", + " self.S_act = hp[\"S_act_NMDA\"]\n", + " self.V_act = hp[\"V_act_NMDA\"]\n", " self.instantaneous = True\n", - " \n", + "\n", " def m_inf(self, V):\n", - " return 1. / ( 1. + np.exp(-self.S_act*(V-self.V_act)))\n", - " \n", + " return 1.0 / (1.0 + np.exp(-self.S_act * (V - self.V_act)))\n", + "\n", " def g(self, t, V, mf0, ms0):\n", " return self.g_peak * self.m_inf(V) * self.beta(t)\n", - " \n", + "\n", " def I(self, t, V):\n", - " return - self.g(t) * (V-self.E_rev)" + " return -self.g(t) * (V - self.E_rev)" ] }, { @@ -1751,19 +1782,19 @@ } ], "source": [ - "nmdai = NMDAInstantChannel(nest.GetDefaults('ht_neuron'), 'NMDA')\n", - "ni_n, ni_c = syn_voltage_clamp(nmdai, [(50, -60.), (50, -50.), (50, -20.), (50, 0.), (50, -60.)])\n", - "plt.subplot(1, 2, 1);\n", - "plt.plot(ni_n.times, ni_n.g_NMDA, label='NEST');\n", - "plt.plot(ni_c.times, ni_c.g_NMDA, label='Control');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('g_NMDA');\n", - "plt.title('NMDA Channel (instant unblock)');\n", - "plt.subplot(1, 2, 2);\n", - "plt.plot(ni_n.times, (ni_n.g_NMDA-ni_c.g_NMDA)/ni_c.g_NMDA);\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel error');\n", - "plt.title('NMDA (inst) rel error');" + "nmdai = NMDAInstantChannel(nest.GetDefaults(\"ht_neuron\"), \"NMDA\")\n", + "ni_n, ni_c = syn_voltage_clamp(nmdai, [(50, -60.0), (50, -50.0), (50, -20.0), (50, 0.0), (50, -60.0)])\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(ni_n.times, ni_n.g_NMDA, label=\"NEST\")\n", + "plt.plot(ni_c.times, ni_c.g_NMDA, label=\"Control\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"g_NMDA\")\n", + "plt.title(\"NMDA Channel (instant unblock)\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(ni_n.times, (ni_n.g_NMDA - ni_c.g_NMDA) / ni_c.g_NMDA)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel error\")\n", + "plt.title(\"NMDA (inst) rel error\");" ] }, { @@ -1791,22 +1822,22 @@ " def __init__(self, hp, receptor):\n", " self.hp = hp\n", " self.receptor = receptor\n", - " self.rec_code = hp['receptor_types'][receptor]\n", - " self.tau_1 = hp['tau_rise_'+receptor]\n", - " self.tau_2 = hp['tau_decay_'+receptor]\n", - " self.g_peak = hp['g_peak_'+receptor]\n", - " self.E_rev = hp['E_rev_'+receptor]\n", - " self.S_act = hp['S_act_NMDA']\n", - " self.V_act = hp['V_act_NMDA']\n", - " self.tau_fast = hp['tau_Mg_fast_NMDA']\n", - " self.tau_slow = hp['tau_Mg_slow_NMDA']\n", + " self.rec_code = hp[\"receptor_types\"][receptor]\n", + " self.tau_1 = hp[\"tau_rise_\" + receptor]\n", + " self.tau_2 = hp[\"tau_decay_\" + receptor]\n", + " self.g_peak = hp[\"g_peak_\" + receptor]\n", + " self.E_rev = hp[\"E_rev_\" + receptor]\n", + " self.S_act = hp[\"S_act_NMDA\"]\n", + " self.V_act = hp[\"V_act_NMDA\"]\n", + " self.tau_fast = hp[\"tau_Mg_fast_NMDA\"]\n", + " self.tau_slow = hp[\"tau_Mg_slow_NMDA\"]\n", " self.instantaneous = False\n", - " \n", + "\n", " def m_inf(self, V):\n", - " return 1. / ( 1. + np.exp(-self.S_act*(V-self.V_act)) )\n", - " \n", + " return 1.0 / (1.0 + np.exp(-self.S_act * (V - self.V_act)))\n", + "\n", " def dm(self, m, t, V, tau):\n", - " return ( self.m_inf(V) - m ) / tau\n", + " return (self.m_inf(V) - m) / tau\n", "\n", " def g(self, t, V, mf0, ms0):\n", " self.m_fast = si.odeint(self.dm, mf0, t, args=(V, self.tau_fast))\n", @@ -1817,9 +1848,9 @@ " mfs[mfs > m_inf] = m_inf\n", " mss = self.m_slow[:]\n", " mss[mss > m_inf] = m_inf\n", - " m = np.squeeze(a * mfs + ( 1 - a ) * mss)\n", + " m = np.squeeze(a * mfs + (1 - a) * mss)\n", " return self.g_peak * m * self.beta(t)\n", - " \n", + "\n", " def I(self, t, V):\n", " raise NotImplementedError()" ] @@ -1843,19 +1874,19 @@ } ], "source": [ - "nmda = NMDAChannel(nest.GetDefaults('ht_neuron'), 'NMDA')\n", - "nm_n, nm_c = syn_voltage_clamp(nmda, [(50, -70.), (50, -50.), (50, -20.), (50, 0.), (50, -60.)])\n", - "plt.subplot(1, 2, 1);\n", - "plt.plot(nm_n.times, nm_n.g_NMDA, label='NEST');\n", - "plt.plot(nm_c.times, nm_c.g_NMDA, label='Control');\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('g_NMDA');\n", - "plt.title('NMDA Channel');\n", - "plt.subplot(1, 2, 2);\n", - "plt.plot(nm_n.times, (nm_n.g_NMDA-nm_c.g_NMDA)/nm_c.g_NMDA);\n", - "plt.xlabel('Time [ms]');\n", - "plt.ylabel('Rel error');\n", - "plt.title('NMDA rel error');" + "nmda = NMDAChannel(nest.GetDefaults(\"ht_neuron\"), \"NMDA\")\n", + "nm_n, nm_c = syn_voltage_clamp(nmda, [(50, -70.0), (50, -50.0), (50, -20.0), (50, 0.0), (50, -60.0)])\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(nm_n.times, nm_n.g_NMDA, label=\"NEST\")\n", + "plt.plot(nm_c.times, nm_c.g_NMDA, label=\"Control\")\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"g_NMDA\")\n", + "plt.title(\"NMDA Channel\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(nm_n.times, (nm_n.g_NMDA - nm_c.g_NMDA) / nm_c.g_NMDA)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Rel error\")\n", + "plt.title(\"NMDA rel error\");" ] }, { @@ -1892,32 +1923,32 @@ ], "source": [ "nest.ResetKernel()\n", - "sp = nest.GetDefaults('ht_synapse')\n", - "P0 = sp['P']\n", - "dP = sp['delta_P']\n", - "tP = sp['tau_P']\n", - "spike_times = [10., 12., 20., 20.5, 100., 200., 1000.]\n", - "expected = [(0., P0, P0)]\n", + "sp = nest.GetDefaults(\"ht_synapse\")\n", + "P0 = sp[\"P\"]\n", + "dP = sp[\"delta_P\"]\n", + "tP = sp[\"tau_P\"]\n", + "spike_times = [10.0, 12.0, 20.0, 20.5, 100.0, 200.0, 1000.0]\n", + "expected = [(0.0, P0, P0)]\n", "for idx, t in enumerate(spike_times):\n", " tlast, Psend, Ppost = expected[idx]\n", - " Psend = 1 - (1-Ppost)*math.exp(-(t-tlast)/tP)\n", - " expected.append((t, Psend, (1-dP)*Psend))\n", + " Psend = 1 - (1 - Ppost) * math.exp(-(t - tlast) / tP)\n", + " expected.append((t, Psend, (1 - dP) * Psend))\n", "expected_weights = list(zip(*expected[1:]))[1]\n", "\n", - "sg = nest.Create('spike_generator', params={'spike_times': spike_times})\n", - "n = nest.Create('parrot_neuron', 2)\n", - "wr = nest.Create('weight_recorder')\n", + "sg = nest.Create(\"spike_generator\", params={\"spike_times\": spike_times})\n", + "n = nest.Create(\"parrot_neuron\", 2)\n", + "wr = nest.Create(\"weight_recorder\")\n", "\n", - "nest.SetDefaults('ht_synapse', {'weight_recorder': wr, 'weight': 1.0})\n", + "nest.SetDefaults(\"ht_synapse\", {\"weight_recorder\": wr, \"weight\": 1.0})\n", "nest.Connect(sg, n[:1])\n", - "nest.Connect(n[:1], n[1:], syn_spec='ht_synapse')\n", + "nest.Connect(n[:1], n[1:], syn_spec=\"ht_synapse\")\n", "nest.Simulate(1200)\n", "\n", - "rec_weights = wr.get('events', 'weights')\n", + "rec_weights = wr.get(\"events\", \"weights\")\n", "\n", - "print('Recorded weights:', rec_weights)\n", - "print('Expected weights:', expected_weights)\n", - "print('Difference :', np.array(rec_weights) - np.array(expected_weights))" + "print(\"Recorded weights:\", rec_weights)\n", + "print(\"Expected weights:\", expected_weights)\n", + "print(\"Difference :\", np.array(rec_weights) - np.array(expected_weights))" ] }, { @@ -1943,26 +1974,27 @@ "outputs": [], "source": [ "nest.ResetKernel()\n", - "nrn = nest.Create('ht_neuron')\n", - "ppg = nest.Create('pulsepacket_generator', n=4,\n", - " params={'pulse_times': [700., 1700., 2700., 3700.],\n", - " 'activity': 700, 'sdev': 50.})\n", - "pr = nest.Create('parrot_neuron', n=4)\n", - "mm = nest.Create('multimeter', \n", - " params={'interval': 0.1,\n", - " 'record_from': ['V_m', 'theta',\n", - " 'g_AMPA', 'g_NMDA',\n", - " 'g_GABA_A', 'g_GABA_B',\n", - " 'I_NaP', 'I_KNa', 'I_T', 'I_h']})\n", - "\n", - "weights = {'AMPA': 25., 'NMDA': 20., 'GABA_A': 10., 'GABA_B': 1.}\n", - "receptors = nest.GetDefaults('ht_neuron')['receptor_types']\n", - "\n", - "nest.Connect(ppg, pr, 'one_to_one')\n", + "nrn = nest.Create(\"ht_neuron\")\n", + "ppg = nest.Create(\n", + " \"pulsepacket_generator\", n=4, params={\"pulse_times\": [700.0, 1700.0, 2700.0, 3700.0], \"activity\": 700, \"sdev\": 50.0}\n", + ")\n", + "pr = nest.Create(\"parrot_neuron\", n=4)\n", + "mm = nest.Create(\n", + " \"multimeter\",\n", + " params={\n", + " \"interval\": 0.1,\n", + " \"record_from\": [\"V_m\", \"theta\", \"g_AMPA\", \"g_NMDA\", \"g_GABA_A\", \"g_GABA_B\", \"I_NaP\", \"I_KNa\", \"I_T\", \"I_h\"],\n", + " },\n", + ")\n", + "\n", + "weights = {\"AMPA\": 25.0, \"NMDA\": 20.0, \"GABA_A\": 10.0, \"GABA_B\": 1.0}\n", + "receptors = nest.GetDefaults(\"ht_neuron\")[\"receptor_types\"]\n", + "\n", + "nest.Connect(ppg, pr, \"one_to_one\")\n", "for p, (rec_name, rec_wgt) in zip(pr, weights.items()):\n", - " nest.Connect(p, nrn, syn_spec={'synapse_model': 'ht_synapse',\n", - " 'receptor_type': receptors[rec_name],\n", - " 'weight': rec_wgt})\n", + " nest.Connect(\n", + " p, nrn, syn_spec={\"synapse_model\": \"ht_synapse\", \"receptor_type\": receptors[rec_name], \"weight\": rec_wgt}\n", + " )\n", "nest.Connect(mm, nrn)\n", "\n", "nest.Simulate(5000)" @@ -1987,39 +2019,45 @@ } ], "source": [ - "data = nest.GetStatus(mm)[0]['events']\n", - "t = data['times']\n", + "data = nest.GetStatus(mm)[0][\"events\"]\n", + "t = data[\"times\"]\n", + "\n", + "\n", "def texify_name(name):\n", - " return r'${}_{{\\mathrm{{{}}}}}$'.format(*name.split('_'))\n", + " return r\"${}_{{\\mathrm{{{}}}}}$\".format(*name.split(\"_\"))\n", + "\n", "\n", - "fig = plt.figure(figsize=(12,10))\n", + "fig = plt.figure(figsize=(12, 10))\n", "\n", "Vax = fig.add_subplot(311)\n", - "Vax.plot(t, data['V_m'], 'k', lw=1, label=r'$V_m$')\n", - "Vax.plot(t, data['theta'], 'r', alpha=0.5, lw=1, label=r'$\\Theta$')\n", - "Vax.set_ylabel('Potential [mV]')\n", - "Vax.legend(fontsize='small')\n", - "Vax.set_title('ht_neuron driven by sinousiodal Poisson processes')\n", + "Vax.plot(t, data[\"V_m\"], \"k\", lw=1, label=r\"$V_m$\")\n", + "Vax.plot(t, data[\"theta\"], \"r\", alpha=0.5, lw=1, label=r\"$\\Theta$\")\n", + "Vax.set_ylabel(\"Potential [mV]\")\n", + "Vax.legend(fontsize=\"small\")\n", + "Vax.set_title(\"ht_neuron driven by sinousiodal Poisson processes\")\n", "\n", "Iax = fig.add_subplot(312)\n", - "for iname, color in (('I_h', 'blue'), ('I_KNa', 'green'),\n", - " ('I_NaP', 'red'), ('I_T', 'cyan')):\n", + "for iname, color in ((\"I_h\", \"blue\"), (\"I_KNa\", \"green\"), (\"I_NaP\", \"red\"), (\"I_T\", \"cyan\")):\n", " Iax.plot(t, data[iname], color=color, lw=1, label=texify_name(iname))\n", - "#Iax.set_ylim(-60, 60)\n", - "Iax.legend(fontsize='small')\n", - "Iax.set_ylabel('Current [mV]')\n", + "# Iax.set_ylim(-60, 60)\n", + "Iax.legend(fontsize=\"small\")\n", + "Iax.set_ylabel(\"Current [mV]\")\n", "\n", "Gax = fig.add_subplot(313)\n", - "for gname, sgn, color in (('g_AMPA', 1, 'green'), ('g_GABA_A', -1, 'red'), \n", - " ('g_GABA_B', -1, 'cyan'), ('g_NMDA', 1, 'magenta')):\n", - " Gax.plot(t, sgn*data[gname], lw=1, label=texify_name(gname), color=color)\n", - "#Gax.set_ylim(-150, 150)\n", - "Gax.legend(fontsize='small')\n", - "Gax.set_ylabel('Conductance')\n", - "Gax.set_xlabel('Time [ms]');" + "for gname, sgn, color in (\n", + " (\"g_AMPA\", 1, \"green\"),\n", + " (\"g_GABA_A\", -1, \"red\"),\n", + " (\"g_GABA_B\", -1, \"cyan\"),\n", + " (\"g_NMDA\", 1, \"magenta\"),\n", + "):\n", + " Gax.plot(t, sgn * data[gname], lw=1, label=texify_name(gname), color=color)\n", + "# Gax.set_ylim(-150, 150)\n", + "Gax.legend(fontsize=\"small\")\n", + "Gax.set_ylabel(\"Conductance\")\n", + "Gax.set_xlabel(\"Time [ms]\");" ] }, - { + { "cell_type": "markdown", "metadata": {}, "source": [ @@ -2031,13 +2069,13 @@ "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", "\n", "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." - ] + ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -2051,7 +2089,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.9.13" } }, "nbformat": 4, diff --git a/doc/htmldoc/model_details/IAF_Integration_Singularity.ipynb b/doc/htmldoc/model_details/IAF_Integration_Singularity.ipynb new file mode 100644 index 0000000000..45eeb99fce --- /dev/null +++ b/doc/htmldoc/model_details/IAF_Integration_Singularity.ipynb @@ -0,0 +1,952 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Handling time-constant singularities in integrate-and-fire neurons\n", + "\n", + "This notebook details how NEST handles the numerical instability of the exact integration propagator matrix $P = e^{A h}$ which arise if $\\tau_m\\approx \\tau_{\\text{syn}}$. For an overview over exact integration of integrate-and-fire neuron subthreshold dynamics, please see [the exact integration documentation](../neurons/exact-integration.rst).\n", + "\n", + "We illustrate the approach for neurons with alpha-shaped currents, where the synaptic current is described by two differential equations. For exponential-shaped currents, a similar but simpler treatment applies.\n", + "\n", + "The singularity-handling code is implemented in `libnestutil/iaf_propagator.[h,cpp]`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparations\n", + "\n", + "We use SymPy to allow symbolic analysis of the propagator matrices and their limits." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sp\n", + "from sympy.matrices import zeros\n", + "\n", + "sp.init_printing(use_latex=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Introduce formal variables for time constants, capacitance and time step $h$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "tau_m, tau_s, C_m, h = sp.symbols(\"tau_m, tau_s, C_m, h\", positive=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The ODE matrix\n", + "\n", + "The following matrix describes the ODE system for synaptic current and membrane potential (bottom row). It applies for singular and non-singular cases. For brevity, we write $\\tau_s$ instead of $\\tau_{\\text{syn}}$." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}- \\frac{1}{\\tau_{s}} & 0 & 0\\\\1 & - \\frac{1}{\\tau_{s}} & 0\\\\0 & \\frac{1}{C_{m}} & - \\frac{1}{\\tau_{m}}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡-1 ⎤\n", + "⎢─── 0 0 ⎥\n", + "⎢ τₛ ⎥\n", + "⎢ ⎥\n", + "⎢ -1 ⎥\n", + "⎢ 1 ─── 0 ⎥\n", + "⎢ τₛ ⎥\n", + "⎢ ⎥\n", + "⎢ 1 -1 ⎥\n", + "⎢ 0 ── ───⎥\n", + "⎣ Cₘ τₘ⎦" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A = sp.Matrix([[-1 / tau_s, 0, 0], [1, -1 / tau_s, 0], [0, 1 / C_m, -1 / tau_m]])\n", + "A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Propagator in the non-singular case ($\\tau_m\\neq \\tau_s$) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}e^{- \\frac{h}{\\tau_{s}}} & 0 & 0\\\\h e^{- \\frac{h}{\\tau_{s}}} & e^{- \\frac{h}{\\tau_{s}}} & 0\\\\\\frac{\\tau_{m} \\tau_{s} \\left(- h \\tau_{m} e^{\\frac{h}{\\tau_{m}}} + h \\tau_{s} e^{\\frac{h}{\\tau_{m}}} - \\tau_{m} \\tau_{s} e^{\\frac{h}{\\tau_{m}}} + \\tau_{m} \\tau_{s} e^{\\frac{h}{\\tau_{s}}}\\right) e^{- \\frac{h}{\\tau_{s}} - \\frac{h}{\\tau_{m}}}}{C_{m} \\left(\\tau_{m}^{2} - 2 \\tau_{m} \\tau_{s} + \\tau_{s}^{2}\\right)} & \\frac{\\tau_{m} \\tau_{s} \\left(- e^{\\frac{h}{\\tau_{m}}} + e^{\\frac{h}{\\tau_{s}}}\\right) e^{- \\frac{h \\left(\\tau_{m} + \\tau_{s}\\right)}{\\tau_{m} \\tau_{s}}}}{C_{m} \\left(\\tau_{m} - \\tau_{s}\\right)} & e^{- \\frac{h}{\\tau_{m}}}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ -h ⎤\n", + "⎢ ─── ⎥\n", + "⎢ τₛ ⎥\n", + "⎢ ℯ 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢ -h -h ⎥\n", + "⎢ ─── ─── ⎥\n", + "⎢ τₛ τₛ ⎥\n", + "⎢ h⋅ℯ ℯ 0 ⎥\n", + "⎢ ⎥\n", + "⎢ ⎛ h h h h ⎞ h h ⎛ h h ⎞ -h⋅(τₘ + τₛ) ⎥\n", + "⎢ ⎜ ── ── ── ──⎟ - ── - ── ⎜ ── ──⎟ ───────────── -h ⎥\n", + "⎢ ⎜ τₘ τₘ τₘ τₛ⎟ τₛ τₘ ⎜ τₘ τₛ⎟ τₘ⋅τₛ ───⎥\n", + "⎢τₘ⋅τₛ⋅⎝- h⋅τₘ⋅ℯ + h⋅τₛ⋅ℯ - τₘ⋅τₛ⋅ℯ + τₘ⋅τₛ⋅ℯ ⎠⋅ℯ τₘ⋅τₛ⋅⎝- ℯ + ℯ ⎠⋅ℯ τₘ⎥\n", + "⎢──────────────────────────────────────────────────────────────── ────────────────────────────────── ℯ ⎥\n", + "⎢ ⎛ 2 2⎞ Cₘ⋅(τₘ - τₛ) ⎥\n", + "⎣ Cₘ⋅⎝τₘ - 2⋅τₘ⋅τₛ + τₛ ⎠ ⎦" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P = sp.simplify(sp.exp(A * h))\n", + "P" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- The entries in the first two rows of $P$ are unproblematic, as is $P_{33}$.\n", + "- In the first two entries on the bottom row, $P_{31}$ and $P_{32}$, the denominators will vanish for $\\tau_s\\to\\tau_m$.\n", + "- $P_{32}$ also appears in the propagator matrix for the case of exponential synaptic currents." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Propagator in the singular case ($\\tau_s = \\tau_m$) \n", + "\n", + "In this case, we have" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}- \\frac{1}{\\tau_{m}} & 0 & 0\\\\1 & - \\frac{1}{\\tau_{m}} & 0\\\\0 & \\frac{1}{C_{m}} & - \\frac{1}{\\tau_{m}}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡-1 ⎤\n", + "⎢─── 0 0 ⎥\n", + "⎢ τₘ ⎥\n", + "⎢ ⎥\n", + "⎢ -1 ⎥\n", + "⎢ 1 ─── 0 ⎥\n", + "⎢ τₘ ⎥\n", + "⎢ ⎥\n", + "⎢ 1 -1 ⎥\n", + "⎢ 0 ── ───⎥\n", + "⎣ Cₘ τₘ⎦" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A_s = sp.Matrix([[-1 / tau_m, 0, 0], [1, -1 / tau_m, 0], [0, 1 / C_m, -1 / tau_m]])\n", + "A_s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the propagator becomes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}e^{- \\frac{h}{\\tau_{m}}} & 0 & 0\\\\h e^{- \\frac{h}{\\tau_{m}}} & e^{- \\frac{h}{\\tau_{m}}} & 0\\\\\\frac{h^{2} e^{- \\frac{h}{\\tau_{m}}}}{2 C_{m}} & \\frac{h e^{- \\frac{h}{\\tau_{m}}}}{C_{m}} & e^{- \\frac{h}{\\tau_{m}}}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ -h ⎤\n", + "⎢ ─── ⎥\n", + "⎢ τₘ ⎥\n", + "⎢ ℯ 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢ -h -h ⎥\n", + "⎢ ─── ─── ⎥\n", + "⎢ τₘ τₘ ⎥\n", + "⎢h⋅ℯ ℯ 0 ⎥\n", + "⎢ ⎥\n", + "⎢ -h -h ⎥\n", + "⎢ ─── ─── -h ⎥\n", + "⎢ 2 τₘ τₘ ───⎥\n", + "⎢h ⋅ℯ h⋅ℯ τₘ⎥\n", + "⎢─────── ────── ℯ ⎥\n", + "⎣ 2⋅Cₘ Cₘ ⎦" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_s = sp.simplify(sp.exp(A_s * h))\n", + "P_s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- This is well-formed and non-singular.\n", + "- The \"unproblematic\" matrix elements agree with the non-singular case." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Numeric stability of propagator elements\n", + "\n", + "We will now show that the matrix elements of the non-singular case converge to those in the general case, so that we have overall\n", + "$$\n", + "\\lim_{\\tau_s\\to\\tau_m} P = P_s\\;.\n", + "$$\n", + "\n", + "Using symbolic algebra we find for $\\lim_{\\tau_s\\to\\tau_m} P_{31} = P_{s,31}$:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{h^{2} e^{- \\frac{h}{\\tau_{m}}}}{2 C_{m}}$" + ], + "text/plain": [ + " -h \n", + " ───\n", + " 2 τₘ\n", + "h ⋅ℯ \n", + "───────\n", + " 2⋅Cₘ " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_31 = P.row(2).col(0)[0]\n", + "P_31_l = sp.limit(P_31, tau_s, tau_m)\n", + "P_31_l" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test for mathematical equality [as recommended in SymPy](https://docs.sympy.org/dev/tutorials/intro-tutorial/gotchas.html#equals-signs)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.simplify(P_31_l - P_s.row(2).col(0)[0]) == 0" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD4AAAA2CAYAAACfkiopAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE20lEQVRoBe2a61EUQRDHD8sAfGSAGSBE4JGBjwiUDKT8BN8szUAyUMkAjcBHBpKBYAb4+w3bW7O3LC7rrOzhddXcvGf6393TMztza2dnZ7NlpP39/ZfyTfx2CP+3hnSaSJ/v8LE1lJdlBr4N6KOhwG8P7TiBfnN4+ImpPyZWCG9IH/fla5k1vgHIT4A9JP5BUBC9aSmBA1bQh8Suc0mNf02pnj9LCRxsajdf3+sKgaDZ96JlBf4AdJ8yhMeAdnvLy7LqdnJtWffxNpSrldReHYndoetHwibhhLxSvbGUA/8Fym0AfyO+kqPokg5j6YTedNVn5Tu0bWxF5IsfKRlzLeZsmXo14RNit4kbSw3nBtjYC3s7iWWVTAM4INwP9ZCa/Y2mhqkDONa3e+Q9gg7Oddpag5TNaK9DfEX4aR6y/W4pwTGOFqiPcB4pKYTyh+fZ4b+5c3NwQUr1uZdJ9PRO/sSKoIqpd+T1B+kERWx/BbEb7f4yvsOYD6u5ZsTFlmANHAZjfT9ngoaHpS4knnBQv05Cq9AS4thonWPkJyrLBhNjh4NV6A1hUveCMjUf1uk85lWU/PrJ+n6BP4rOKQfu+vbYlwOxlVoMBsxLalpSI+lCgPR9whH5Ylpxgoo2GTeZeRQQnxD8OFH48j4jPiX6SOw53qJnhEU8ls9y4GqrAZDOatbwnpBTakv9oNuPfKCe6UULnDG34NR2sgTSalnHHIJXGJ3Wl7x61SnMN+dlh8wv6i+S2pe84Zhp5m/4l2yu9HFS5VVGgLZoTj+F45JoUQJO6VNraJR3tMhOByYcgKBwJDWgabeINr2/kFqdr1DAPGo4V8ii4ly2nR8uYeqaxSJo2XDwMPMHDJSEQJleXmuoqWLEcsPoxHyu+doSyDeWHfm67iJm0j5OI9eCTiGApbbklZia9YpnceCo08FIOrpGm/Piaf42DjDTZHEcrmKNjzP6hEddAZ+wckZhbaXxUcQ64UFXGp+wckZhbW1vb6/4pd4onBYedHWAKSzQyQ+3cm6TV1FhBv9bjcf3eGF5posLv+W9yPBb32/nIO/lDgjrFHhf1rhEjEZjx6MAB4zf6l4zvyZ4/VwDJ/2Y4GWlV0X/5NKCeVpUFDiA1LLXu2rzEfn8aihNTpn3YFqBbS669Untxv4pvcY/w7DPzD4CtEBnYBSOl5it29OszajJYhoHhGbrHXzDtDu4P6H8Q0fdPykuonFAa7aua++1G3fzHSjUdDxKdDQZt7iUxuPGtRcYhKOzu2wpjIua0YtonHHiLr2PtkcH1WeCUsDvORma7OWsaKf3v1YqBVxn1YsArXXoE66VSq1x9+P0xNRD61u0qZcE6XjujT8lzCuJ2M4dQqepT/BlxD8dFPENpYC7lQlAbXa+psC07TzNJSIfJu++bhBY6k98SvB1Jz0FEdvW0+ClT0PU96Iipg5Trm0Z8p8UCqBBlM0JCTSx2gvSN7ifu/+7FeZPWAKthUTav5n08iG0+yMVvYGBcZkVoGs4ALr+1Vzn8ZQ6tf2FOLStID6Tv0uciLRvdFpEvUyqqkFRKVMP5gQbe/pVGHJd59o1/zUGAKyC9C3cc/4G4a/XeRFTDwaHxBUoX1pzMFuMlf+bQUGExQwRbIu1awcOR2pz0XwXywTtR40evsj3+28NeKBtaGrcUgAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle \\frac{h e^{- \\frac{h}{\\tau_{m}}}}{C_{m}}$" + ], + "text/plain": [ + " -h \n", + " ───\n", + " τₘ\n", + "h⋅ℯ \n", + "──────\n", + " Cₘ " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_32 = P.row(2).col(1)[0]\n", + "P_32_l = sp.limit(P_32, tau_s, tau_m)\n", + "P_32_l" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.simplify(P_32_l - P_s.row(2).col(1)[0]) == 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Approximation in the vicinity of the singularity\n", + "\n", + "Since the propagator elements converge to the solution for the singular case, we can approximate the matrix elements near the singularity by expanding around $\\tau_m$. We obtain" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{h^{2} e^{- \\frac{h}{\\tau_{m}}}}{2 C_{m}} + \\frac{h^{3} \\left(- \\tau_{m} + \\tau_{s}\\right) e^{- \\frac{h}{\\tau_{m}}}}{3 C_{m} \\tau_{m}^{2}} + O\\left(\\left(- \\tau_{m} + \\tau_{s}\\right)^{2}; \\tau_{s}\\rightarrow \\tau_{m}\\right)$" + ], + "text/plain": [ + " -h -h \n", + " ─── ─── \n", + " 2 τₘ 3 τₘ \n", + "h ⋅ℯ h ⋅(-τₘ + τₛ)⋅ℯ ⎛ 2 ⎞\n", + "─────── + ────────────────── + O⎝(-τₘ + τₛ) ; τₛ → τₘ⎠\n", + " 2⋅Cₘ 2 \n", + " 3⋅Cₘ⋅τₘ " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_31.series(x=tau_s, x0=tau_m, n=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{h e^{- \\frac{h}{\\tau_{m}}}}{C_{m}} + \\frac{h^{2} \\left(- \\tau_{m} + \\tau_{s}\\right) e^{- \\frac{h}{\\tau_{m}}}}{2 C_{m} \\tau_{m}^{2}} + O\\left(\\left(- \\tau_{m} + \\tau_{s}\\right)^{2}; \\tau_{s}\\rightarrow \\tau_{m}\\right)$" + ], + "text/plain": [ + " -h -h \n", + " ─── ─── \n", + " τₘ 2 τₘ \n", + "h⋅ℯ h ⋅(-τₘ + τₛ)⋅ℯ ⎛ 2 ⎞\n", + "────── + ────────────────── + O⎝(-τₘ + τₛ) ; τₛ → τₘ⎠\n", + " Cₘ 2 \n", + " 2⋅Cₘ⋅τₘ " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_32.series(x=tau_s, x0=tau_m, n=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We thus have \n", + "\n", + "\\begin{align}\n", + "P_{31} &= P_{s, 31} + \\frac{2h}{3\\tau_m^2}P_{s, 31}(\\tau_s-\\tau_m) + \\mathcal{O}((\\tau_s-\\tau_m)^2)\\\\ \n", + "P_{32} &= P_{s, 32} + \\frac{h}{2\\tau_m^2}P_{s, 32}(\\tau_s-\\tau_m) + \\mathcal{O}((\\tau_s-\\tau_m)^2)\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Focusing on $P_{32}$ and dropping the quadratic term, we obtain\n", + "$$\n", + "\\left|\\frac{P_{32}-P_{s, 32}}{P_{s, 32}}\\right|\\approx \\left|\\frac{h(\\tau_s-\\tau_m)}{2\\tau_m^2}\\right| \\ll 1\n", + "$$\n", + "where the inequality follows because $|\\tau_s-\\tau_m|\\ll \\tau_m$ by definition in the near-singular case and $h<\\tau_m$ for all practical purposes.\n", + "\n", + "Any violation of this inequality indicates numerical instability in the computation of $P_{32}$.\n", + "\n", + "The corresponding inequality for $P_{31}$ is\n", + "$$\n", + "\\left|\\frac{P_{31}-P_{s, 31}}{P_{s, 31}}\\right|\\approx \\left|\\frac{2h(\\tau_s-\\tau_m)}{3\\tau_m^2}\\right| \\ll 1\\;.\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Propagators rewritten as expressed in C++ implementation\n", + "\n", + "- Implementation uses `expm1(x)` function which returns $e^x-1$.\n", + "- Show that expressions for $P_{31}$ and $P_{32}$ in implemenation are equivalent to expressions above." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( \\frac{\\tau_{m} \\tau_{s}}{\\tau_{m} - \\tau_{s}}, \\ \\frac{\\tau_{m} \\tau_{s}}{C_{m} \\left(\\tau_{m} - \\tau_{s}\\right)}\\right)$" + ], + "text/plain": [ + "⎛ τₘ⋅τₛ τₘ⋅τₛ ⎞\n", + "⎜───────, ────────────⎟\n", + "⎝τₘ - τₛ Cₘ⋅(τₘ - τₛ)⎠" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta = (tau_m * tau_s) / (tau_m - tau_s)\n", + "gamma = beta / C_m\n", + "beta, gamma" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{\\tau_{m} \\tau_{s} \\left(e^{\\frac{h}{\\tau_{s}} - \\frac{h}{\\tau_{m}}} - 1\\right) e^{- \\frac{h}{\\tau_{s}}}}{C_{m} \\left(\\tau_{m} - \\tau_{s}\\right)}$" + ], + "text/plain": [ + " ⎛ h h ⎞ -h \n", + " ⎜ ── - ── ⎟ ───\n", + " ⎜ τₛ τₘ ⎟ τₛ\n", + "τₘ⋅τₛ⋅⎝ℯ - 1⎠⋅ℯ \n", + "─────────────────────────\n", + " Cₘ⋅(τₘ - τₛ) " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_32i = gamma * sp.exp(-h / tau_s) * (sp.exp(h / tau_s - h / tau_m) - 1)\n", + "P_32i" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.simplify(P_32 - P_32i) == 0" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{\\tau_{m} \\tau_{s} \\left(- h + \\frac{\\tau_{m} \\tau_{s} \\left(e^{\\frac{h}{\\tau_{s}} - \\frac{h}{\\tau_{m}}} - 1\\right)}{\\tau_{m} - \\tau_{s}}\\right) e^{- \\frac{h}{\\tau_{s}}}}{C_{m} \\left(\\tau_{m} - \\tau_{s}\\right)}$" + ], + "text/plain": [ + " ⎛ ⎛ h h ⎞⎞ \n", + " ⎜ ⎜ ── - ── ⎟⎟ -h \n", + " ⎜ ⎜ τₛ τₘ ⎟⎟ ───\n", + " ⎜ τₘ⋅τₛ⋅⎝ℯ - 1⎠⎟ τₛ\n", + "τₘ⋅τₛ⋅⎜-h + ────────────────────⎟⋅ℯ \n", + " ⎝ τₘ - τₛ ⎠ \n", + "──────────────────────────────────────\n", + " Cₘ⋅(τₘ - τₛ) " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P_31i = gamma * sp.exp(-h / tau_s) * (beta * (sp.exp(h / tau_s - h / tau_m) - 1) - h)\n", + "P_31i" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.simplify(P_31 - P_31i) == 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Numerical convergence experiments\n", + "\n", + "- Compute propagator elements as implemented in code\n", + "- Test convergence against singular value for $\\tau_s\\to\\tau_m$\n", + "- Test for different time steps $h$\n", + "- Very small time steps $\\mathcal{O}(1 \\mu{s})$ can occur in neurons with precise spike times and are thus relevant\n", + "- We set $C_m=1$ since it is just a scaling factor " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " -- N E S T --\n", + " Copyright (C) 2004 The NEST Initiative\n", + "\n", + " Version: stinebuu_propagator_class@79327cc82\n", + " Built: Nov 29 2022 17:36:40\n", + "\n", + " This program is provided AS IS and comes with\n", + " NO WARRANTY. See the file LICENSE for details.\n", + "\n", + " Problems or suggestions?\n", + " Visit https://www.nest-simulator.org\n", + "\n", + " Type 'nest.help()' to find out more about NEST.\n", + "\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import nest\n", + "\n", + "nest.set_verbosity(\"M_ERROR\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def calc_p(tau_m, tau_s, h):\n", + " beta = tau_s * tau_m / (tau_m - tau_s)\n", + " inv_beta = (tau_m - tau_s) / (tau_s * tau_m)\n", + " gamma = beta\n", + "\n", + " p31 = gamma * np.exp(-h / tau_s) * (beta * np.expm1(h * inv_beta) - h)\n", + " p31s = 0.5 * h**2 * np.exp(-h / tau_m)\n", + "\n", + " p32 = gamma * np.exp(-h / tau_s) * np.expm1(h * inv_beta)\n", + " p32s = h * np.exp(-h / tau_m)\n", + "\n", + " return p31, p31s, p32, p32s" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 1200x400 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tau_m = 10.0\n", + "tau_s = tau_m + np.logspace(-12, 0, 26)\n", + "h = np.array([[1, 0.1, 0.01, 0.001]]).T\n", + "p31, p31s, p32, p32s = calc_p(tau_m, tau_s, h)\n", + "\n", + "fig = plt.figure(figsize=(12, 4))\n", + "ax1 = fig.add_subplot(1, 2, 1)\n", + "ax1.loglog(np.abs(tau_s - tau_m), np.abs(p31 - p31s).T, \"o-\")\n", + "ax1.set_ylabel(\"$P - P_{singular}$\")\n", + "ax1.set_ylim([1e-20, 5e-2])\n", + "ax1.set_xlabel(r\"$\\tau_s - \\tau_m$ [ms]\")\n", + "ax1.set_title(\"$P_{31}$ difference from singular value\")\n", + "ax2 = fig.add_subplot(1, 2, 2)\n", + "ax2.loglog(np.abs(tau_s - tau_m), np.abs(p32 - p32s).T, \"o-\", label=[f\"h = {hv:.3f} ms\" for hv in h[:, 0]])\n", + "ax2.set_ylim([1e-20, 5e-2])\n", + "ax2.set_xlabel(r\"$\\tau_s - \\tau_m$ [ms]\")\n", + "ax2.set_title(\"$P_{32}$ difference from singular value\")\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- $P_{32}$ shows perfect convergence towards the singular value up to the limits of numerical accuracy\n", + " - This holds for all step sizes $h$\n", + " - This is plausible because $P_{32}$ contains multiplications only: `gamma * np.exp(-h/tau_s) * np.expm1(h*inv_beta)`\n", + " - The only difference is handled internally in `expm1()` and `inv_beta` goes to 0 in the limit\n", + " - Thus **no singularity handling is needed for $P_{32}$**.\n", + "- $P_{31}$ converges only up to a point, which depends on the size of the time step $h$\n", + " - Numerical instability occurs for smaller differences in time constants\n", + " - Instability occurs earlier for *smaller* time steps\n", + " - The instability arises from the difference `beta * np.expm1(h*inv_beta) - h`\n", + " - There seems to be no way to reformulate the propagator to avoid this \n", + " \n", + "#### $P_{31}$ instability and membrane time constant" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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mETkn1iWiYIDyzJR4GM5JvKugOr5T01NhVqttunlLysrsxkNQEREREREREQGAdX4Dw8PR2ZmJnJzcy3ez83NxYQJE3x0VkRERERERET+ze+G/Tc0NOD48eOm10VFRdi3bx+Sk5PRt29fZGdnY+7cuRg9ejTGjx+PNWvW4NSpU1iwYIEPz5qIiIiIiIjIf/ld43/Pnj2YPHmy6XV2djYAYN68eVi7di1uuukmVFZW4tlnn0VxcTEyMjKwefNm9OvXz1enTEREREREROTX/K7xP2nSJIiiaPcz999/P+6///5uOiMiIiIiIiKiwBZQc/6JiIiIiIiIyHls/BMREREREREFOTb+iYiIiIiIiIIcG/9EREREREREQY6NfyIiIiIiIqIgx8Y/ERERERERUZBj45+IiIiIiIgoyLHxT0RERERERBTk2PgnIiIiIiIiCnJs/BMREREREREFOTb+iYiIiIiIiIIcG/9EREREREREQY6NfyIiIiIiIqIgx8Y/ERERERERUZBj45+IiIiIiIgoyLHxT0RERERERBTk2PgnIiIiIiIiCnJs/BMREREREREFOTb+iYiIiIiIiIIcG/9EREREREREQY6NfyIiIiIiIqIgx8Y/ERERERERUZBj45+IiIiIiIgoyIVc4//06dOYNGkShgwZguHDh+PDDz+02P75559j8ODBGDRoEP71r3/56CyJiIiIiIiIPEfj6xPobhqNBitXrsTIkSNRVlaGUaNGYcaMGYiJiUFHRweys7PxzTffID4+HqNGjcL111+P5ORkX582ERERERERkctCrue/Z8+eGDlyJAAgLS0NycnJqKqqAgDk5eVh6NCh6N27N+Li4jBjxgzk5OT48GyJiIiIiIiI3Od3jf/t27fjmmuuQa9evSAIAj755BObz6xevRoDBgxAZGQkMjMzsWPHDpeOtWfPHuj1evTp0wcAcPbsWfTu3du0/ZxzzsGZM2dc2jcRERERERGRv/C7xn9jYyNGjBiB1157TXL7+vXrsXDhQvzpT3/C3r17cckllyArKwunTp0yfSYzMxMZGRk2P2fPnjV9prKyErfddhvWrFljek8URZvjCYLgwasjIiIiIiIi6n5+N+c/KysLWVlZsttXrFiB+fPn46677gIArFy5Ejk5OXj99dexbNkyAEBBQYHdY7S2tuK6667D4sWLMWHCBNP7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NDQ04Pjx46bXRUVF2LdvH5KTk9G3b19kZ2dj7ty5GD16NMaPH481a9bg1KlTWLBggQ/P2j285tC45lASqr/fULzuULzmUBKKv99QvGYgdK87VITi75fXHKDX7JU1BMhvffPNNyIAm5958+aZPvP3v/9d7NevnxgeHi6OGjVK/Pbbb313wh7Aaw6Naw4lofr7DcXrDsVrDiWh+PsNxWsWxdC97lARir9fXnNgXrMgiqLomTACEREREREREfkjzvknIiIiIiIiCnJs/BMREREREREFOTb+iYiIiIiIiIIcG/9EREREREREQY6NfyIiIiIiIqIgx8Y/ERERERERUZBj45+IiIiIiIgoyLHxT0RERERERBTk2PgnIiIiIiIiCnJs/BMREREREREFOTb+icxMmjQJgiBAEATs27fPa8e5/fbbTcf55JNPvHYcolDFskwUHFiWiQIfy7H/YOOfyMrdd9+N4uJiZGRkeO0Yq1atQnFxsdf2T0Qsy0TBgmWZKPCxHPsHja9PgMjfREdHIz093avHSEhIQEJCglePQRTqWJaJggPLMlHgYzn2D+z5J5fNnDnTNLTG+uezzz4LmuNOmjQJf/zjH7Fw4UIkJSVBq9VizZo1aGxsxB133IG4uDice+65+OKLLyy+99FHH2HYsGGIiopCSkoKpk6disbGRo+fH5G7WJZZlik4sCyzLFPgYzlmOfYmNv7JZW+//TaKi4tx7NgxAMDmzZtRXFyM4uJizJgxI6iOu27dOqSmpiIvLw9//OMfcd9992HOnDmYMGECCgsLMX36dMydOxdNTU0AgOLiYvzP//wP7rzzThw+fBjbtm3D9ddfD1EUvXJ+RO5gWWZZpuDAssyyTIGP5Zjl2KtEIjft2rVLFARBrKurC/jjXnbZZeJDDz1k897FF19set3R0SHGxMSIc+fONb1XXFwsAhC///57URRFsaCgQAQgnjhxwu7xAIgbNmzw2PkTuYNlmWWZggPLMssyBT6WY5Zjb2DPP7lt//796N+/P+Li4pz63jPPPCM7vMj4s2fPHo8f1xXDhw83/VutViMlJQXDhg0zvafVagEAZWVlAIARI0ZgypQpGDZsGObMmYN//vOfqK6u9vp5ErmDZZllmYIDyzLLMgU+lmOWY29g45/ctn//fovCa/TGG29g1KhRyMjIwC233GKz/YEHHsDhw4ft/tjLCCp3XADIyspCdnY2fve73+GCCy5Afn4+Zs6ciX79+mHNmjVOX2NYWJjFa0EQLN4TBAEAoNfrARgqsNzcXHzxxRcYMmQIXn31VQwePBhFRUVOH5uou7AssyxTcGBZZlmmwMdyzHLsDcz2T247ceKETSVSXV2NNWvWID8/H2q1GjU1NTbfS01NRWpqqkePa3Tw4EHcdNNNWLFiBW677TY88cQT2LhxI44dO4b77rsP99xzj8vHVUoQBEycOBETJ07E008/jX79+mHDhg3Izs72+rGJXMGyLI1lmQINy7I0lmUKJCzH0liO3cOef3KbXq/HyZMn8dtvv5kSbmg0GlRWVuKJJ57ATz/9hMTExG45LgDU1tYiPDwct99+OwAgMjISDz30EGJiYhAREdEtS4Ds3r0bzz//PPbs2YNTp07h448/Rnl5OS688EKvH5vIVSzLtliWKRCxLNtiWaZAw3Jsi+XYfWz8k9sefPBB7Ny5ExdccIGpkoiLi8OBAwcwYsQI3HDDDfj888+75biAISo5ZswY0+sDBw5g3Lhxpn/bG+rkKfHx8di+fTtmzJiB888/H0899RReeeUVZGVlef3YRK5iWbbFskyBiGXZFssyBRqWY1ssx+7jsH9yW1ZWFk6fPm3x3rFjxzBo0CDMnTsXO3bsQGtra7ccFzBUTsZkIaIoorS0FOnp6TbblNq2bZvNeydOnLB5z7yCvPDCC7FlyxanjkPkayzLMB3LiGWZAhHLMkzHMmJZpkDDcgzTsYxYjt3Hnn/yij//+c8YPHgwLrroIkRGRuK6667rtmP/9NNPpgroxIkT6N+/v2mbkspp9erViI2NxYEDB7x2jgsWLEBsbKzX9k/kKSzL9rEsU6BgWbaPZZkCAcuxfSzHjgmieTiFKMSdOXMGzc3NAIC+ffsiPDzcK8cpKytDXV0dAKBnz56IiYnxynGIQhXLMlFwYFkmCnwsx/6DjX8iIiIiIiKiIMdh/0RERERERERBjo1/IiIiIiIioiDHxj8RERERERFRkGPjn4iIiIiIiCjIsfFPREREREREFOTY+CciIiIiIiIKcmz8ExEREREREQU5Nv6JiIiIiIiIghwb/0RERERERERBjo1/IiIiIiIioiD3/50pU28RY75HAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1200x300 with 4 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "h = np.array([[1, 0.1, 0.01, 0.001]]).T\n", + "tau_ms = [0.1, 1, 10, 100]\n", + "delta_tau = np.logspace(-12, 0, 26)\n", + "\n", + "fig = plt.figure(figsize=(12, 3))\n", + "for ix, tau_m in enumerate(tau_ms):\n", + " tau_s = tau_m + delta_tau\n", + " p31, p31s, _, _ = calc_p(tau_m, tau_s, h)\n", + "\n", + " ax = fig.add_subplot(1, len(tau_ms), ix + 1)\n", + " l = ax.loglog(np.abs(tau_s - tau_m), np.abs(p31 - p31s).T, \"o-\", label=[f\"h = {hv:.3f} ms\" for hv in h[:, 0]])\n", + " ax.set_prop_cycle(None)\n", + " for hv in h[:, 0]:\n", + " ax.loglog(1e-8 * tau_m**2 / hv, 1e-16, \"^\")\n", + " ax.set_ylim([1e-20, 5e-2])\n", + " ax.set_xlabel(r\"$\\tau_s - \\tau_m$ [ms]\")\n", + " ax.set_title(f\"$\\\\tau_m = {tau_m}$ ms\")\n", + " if ix == 0:\n", + " ax.set_ylabel(\"$P - P_{singular}$\")\n", + " plt.legend(loc=\"upper left\")\n", + " else:\n", + " ax.set_yticklabels([]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- The point at which numerical instability occurs clearly depends on the membrane time constant\n", + "- As indicated by the markers, the breakdown point is located roughly at $$\\tau_s - \\tau_m < 10^{-8}\\times\\frac{\\tau_m^2}{h}$$\n", + "- We can thus use $$(\\tau_s - \\tau_m)h < 10^{-8}\\times \\tau_m^2$$ or \n", + " $$h < 10^{-8}\\times\\frac{\\tau_m^2}{|\\tau_s - \\tau_m|}$$ as criterium: use $P_{s, 31}$ if this condition is fulfilled.\n", + "- To ensure some margin of safety, we can set the limit at $10^{-7}\\times\\tau_m^2$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Algorithm for propagator computing\n", + "\n", + "1. Precompute values that can be precomputed independent of $h$, including useful inverses.\n", + "2. Compute $P_{32}$, which will always be stable; replace by singular limit only if a numerically non-normal or non-positive result occurs. \n", + "3. If $h$ is below stability limit (see inequality above), use singular $P_{s, 31}$, otherwise use $P_{31}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exploration\n", + "We will now show that the stability criterion explained above leads to a reasonable behavior for $\\tau_s\\rightarrow\\tau_m$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Simulation\n", + "\n", + "- Create one neuron for each value of `delta_tau`\n", + "- Drive neurons with a single spike\n", + "- Measure resulting membrane potential" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "tau_m = 10.0\n", + "h = 0.1\n", + "delta_tau = np.hstack(([0.0], np.logspace(-10, -1, 10)))\n", + "\n", + "nest.ResetKernel()\n", + "nest.resolution = h\n", + "\n", + "neurons = nest.Create(\"iaf_psc_alpha\", n=len(delta_tau), params={\"tau_m\": tau_m, \"tau_syn_ex\": tau_m + delta_tau})\n", + "spike_gen = nest.Create(\"spike_generator\", params={\"spike_times\": [1.0]})\n", + "vm = nest.Create(\"voltmeter\", params={\"interval\": h})\n", + "\n", + "nest.Connect(spike_gen, neurons, syn_spec={\"weight\": 100.0})\n", + "nest.Connect(vm, neurons)\n", + "\n", + "nest.Simulate(10 * tau_m)\n", + "\n", + "v = pd.DataFrame.from_records(vm.events).set_index(\"times\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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2HbHjRunVKpU6YFx79mzRwGUPXv2aMsKXutff/1Vp25QUJBSp04d7c/ffvutAih//vmnTr3XX39dAZSlS5dqy2bOnKn8+6sqNjZWMTExUd566y2dY1NTUxV3d3dl4MCB5RZ3dHS0Aiienp5KZmamtjwlJUVxdHRUnn/+eZ02vby8Cp3//utRFEWxtrZWXn755QfGXaAk703Bv7U+ffrolB86dEgBlI8++uiBcQLK2LFjldu3bytt2rRRKleurERFRWmff9T3oOB1nDdvnk55ST+zBdc3YsSIB56nwJQpUxSVSqVzDYqiKF26dCnys3D/69G+fXulQYMGhdr18vJSevTooVM2Z84cxcjISAkPD9cp/+233xRACQ0N1ZYBir29vXLnzh2duoGBgUqVKlWU5ORknfJx48YpFhYW2voFn+WgoCCder/++qsCKGFhYdqyHj16FPl5LE6DBg2U9u3bP7ReXl6ekpubq4wcOVLx9fXVlhe8x//+t1yguO+s4hS01aRJE53vw/nz5yuA0rt3b53677zzjgIUev0eRXh4eLHXc7+8vDwlLS1Nsba21vm9U9S/fUX5/89zdHR0ieOxsbFR3nnnnRLXF/qRYRXisWvZsiWmpqbY2trSrVs3HBwc2LRpEyYm+TcyLl++zF9//aUd35eXl6d9BAUFER8fr71l2KJFC/7880+mTp3K3r17yczMLPa8948XHDJkCJDfcwuwe/dugEI9tQMGDMDa2rrQbfOmTZtSrVo17c8WFhbUrl1b51baw+LT51r1kZ6eztGjR+nfvz82NjbacmNjY4YPH86NGzce2G6LFi24d+8eL730Eps2bSIpKanE51apVPTq1UunrHHjxjqvy759+7Tv/7+99NJLD21/27Zt5OXlMWLECJ3Xy8LCgvbt25d6FYqSxF2gb9++WFhYaH+2tbWlV69e7N+/H7VaXarzl5Q+7839n/lWrVrh5eWl/cw/SHR0NAEBAaSkpHDkyBGaNGmifa483oPSfGb79etXorb37NlDgwYNdK4B/v87oCz98ccfNGzYkKZNm+q8NoGBgUWuktKpUyedichZWVns2rWLPn36YGVlVeg7ISsriyNHjui00bt3b52fGzduDFDkZ7csrF27ltatW2NjY4OJiQmmpqaEhIRw/vz5cjlfgaCgIIyM/j9tqVevHoC2J/f+8tjY2GLb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\n", + "text/plain": [ + "<Figure size 800x300 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "v.groupby(\"senders\").V_m.plot(alpha=0.5, figsize=(8, 3))\n", + "plt.legend(delta_tau)\n", + "plt.xlabel(\"Time [ms]\")\n", + "plt.ylabel(\"Membrane voltage [mV]\")\n", + "plt.title(\"Response to single input spike for different tau_m - tau_s\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Maximum of membrane potential" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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UURE5Co5Ohg0aYpINaKv/UVEREREROyAkjsRERERERE7oORORERERETEDmjMXTVUOMdNRkaGjSMRkcLfQ809JSK1je5HRKqHityLKLmrhjIzMwEICgqycSQiUigzMxNvb29bhyEiUmV0PyJSvZTnXkRLIVRDRqORP/74A09PTwyGmj+dcEZGBkFBQRw/frxWTSVfW68b7OvaTSYTmZmZNGrUCActPSEitYi93Y9cyp7+VlmL3pPiqsN7UpF7EbXcVUMODg40adLE1mFYnZeXV638oKit1w32c+1qsROR2she70cuZS9/q6xJ70lxtn5Pynsvoq+hRURERERE7ICSOxERERERETug5E4qnaurKzNmzMDV1dXWoVSp2nrdULuvXUREagb9rSpO70lxNe090YQqIiIiIiIidkAtdyIiIiIiInZAyZ2IiIiIiIgdUHInIiIiIiJiB5TciYiIiIiI2AEld1LtvP7667Rr1462bdvyz3/+k9oy54+TkxPh4eGEh4fz4IMP2jqcKnH8+HFuuukm2rZtS1hYGGvWrLF1SCIiIsXU1nuTstTG+5ayVJd7Gs2WKdXK6dOn6dq1KwcOHMDZ2Zkbb7yRV199lW7dutk6tErn7+/PmTNnbB1GlUpKSuLUqVOEh4eTkpJChw4dSEhIoE6dOrYOTUREBKjd9yZlqY33LWWpLvc0TlV6NpFyyM/PJzs7G4C8vDwaNGhg44iksgQGBhIYGAhAgwYN8PX1JS0tTcmdiIhUK7o3kcupLvc06pYpFfL999/Tv39/GjVqhMFgYO3atcXKLFy4kObNm+Pm5kZkZCQ//PBDueuvX78+U6dOJTg4mEaNGnHLLbfQsmVLK17Blans6wbIyMggMjKS66+/nq1bt1op8qtTFdddaNeuXRiNRoKCgq4yahERqU1q671JWWrrfUtZass9jVrupEIuXLhA+/btGTNmDIMHDy62f/Xq1UyePJmFCxdy3XXXsWjRIvr160d8fDzBwcEAREZGkpOTU+zYb775Bnd3d9avX8/Ro0dxd3enX79+fP/999x4442Vfm1lqezrbtSoEUePHqVRo0bExcVx++23Exsbi5eXV6VfW1mq4roBUlNTue+++1iyZEnlXpCIiNid2npvUpbaet9SllpzT2MSuUKA6bPPPiuyrXPnzqbx48cX2damTRvTM888U646P/roI9OECRMsr1955RXT3LlzrzpWa6qM677Urbfeatq5c+eVhlgpKuu6s7OzTTfccINpxYoV1ghTRERqsdp6b1KW2nrfUhZ7vqdRt0yxmtzcXGJiYujTp0+R7X369GHbtm3lqiMoKIht27aRnZ1NQUEB3333Ha1bt66McK3GGtd99uxZyzdBJ06cID4+nhYtWlg9VmuyxnWbTCZGjx7NzTffzKhRoyojTBERqcVq671JWWrrfUtZ7OmeRt0yxWrOnDlDQUEBDRs2LLK9YcOGJCcnl6uOrl27cttttxEREYGDgwO9evViwIABlRGu1Vjjug8ePMjDDz+Mg4MDBoOBN954A19f38oI12qscd0//fQTq1evJiwszNL3feXKlYSGhlo7XBERqYVq671JWWrrfUtZ7OmeRsmdWJ3BYCjy2mQyFdtWlpdeeomXXnrJ2mFVuqu57u7duxMbG1sZYVW6q7nu66+/HqPRWBlhiYiIWNTWe5Oy1Nb7lrLYwz2NumWK1fj7++Po6FjsG46UlJRi34TYE1137bpuERGpOfS3qji9J8XZ03ui5E6sxsXFhcjISDZt2lRk+6ZNm+jevbuNoqp8uu7add0iIlJz6G9VcXpPirOn90TdMqVCzp8/z+HDhy2vExMT2bt3L76+vgQHBzNlyhRGjRpFx44d6datG4sXL+bYsWOMHz/ehlFfPV23WW25bhERqTn0t6o4vSfF1Zr3xGbzdEqN9O2335qAYo/777/fUubtt982NW3a1OTi4mLq0KGDaevWrbYL2Ep03bXrukVEpObQ36ri9J4UV1veE4PJZDJVRRIpIiIiIiIilUdj7kREREREROyAkjsRERERERE7oORORERERETEDii5ExERERERsQNK7kREREREROyAkjsRERERERE7oORORERERETEDii5ExERERERsQNK7kREREREROyAkjsRERERERE7oOROar0BAwZgMBhKfHzxxRd2d14RERGpXnQvItZiMJlMJlsHIWJLqamp5OXlcf78eVq1asXGjRuJiIgAwN/fHycnJ7s6r4iIiFQvuhcRa1FyJ/Kn7du3c91115Geno6np6fdn1dERESqF92LyNVSt0yRP+3fv59mzZpV+ENt5syZpXZpKHzs2rXL6ucVERER+6J7EblaamsV+dP+/fsJCwsrtn3RokUsWrSI3NxcwsLCeP/994vsnzhxInfffXeZdTdr1qzC5wXo168f1157Ldu2bePcuXOsXLmSF198kX379jF9+nQeeuihy1+YiIiI1Ai6F5GrpeRO5E9Hjx4lJCSkyLazZ8+yePFidu7ciaOjI+fOnSt2nL+/P/7+/lY9b6G4uDiGDx/O/Pnzue+++3j66adZt24dhw4d4pFHHtEHqoiIiB3RvYhcLXXLFPmT0Wjk999/58SJExQORXVyciI1NZWnn36aAwcO4OPjUyXnBUhPT8fFxYXRo0cD4ObmxqRJk6hTpw6urq54e3tbPRYRERGxHd2LyNVScifyp3/+85/89NNPtGnTxvLB5unpSWxsLO3bt2fIkCGsX7++Ss4L5m/KOnXqZHkdGxtLly5dLM9L+4ZNREREaibdi8jVUrdMkT/169eP48ePF9l26NAhWrVqxahRo/jhhx/IycmpkvOC+QM1NDQUAJPJxKlTpwgICCi2T0REROyD7kXkaqnlTqQML774Iq1btyYiIgI3NzfuuuuuKjv3gQMHLB+aR48eLTIQWh+oIiIitYPuRaQitM6diIiIiIiIHVDLnYiIiIiIiB1QciciIiIiImIHlNyJiIiIiIjYASV3IiIiIiIidkDJnYiIiIiIiB1QciciIiIiImIHlNyJiIiIiIjYASV3IiIiIiIidkDJnYiIiIiIiB1QciciIiIiImIHlNyJiIiIiIjYASV3IiIiIiIiduD/AdknuFGlcw3wAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1000x300 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "V_max = v.groupby(\"senders\").V_m.max()\n", + "plt.figure(figsize=(10, 3))\n", + "plt.subplot(1, 3, 1)\n", + "plt.semilogx([1e-10, 1], [V_max.iloc[0], V_max.iloc[0]], \"--\")\n", + "plt.semilogx(delta_tau[1:], V_max.iloc[1:], \"o-\", alpha=0.6)\n", + "plt.legend((\"Singular limit\", \"$tau_s > tau_m$\"))\n", + "plt.xlabel(r\"$\\tau_s - \\tau_m$\")\n", + "plt.ylabel(\"$V_{max} [mV]$\")\n", + "\n", + "plt.subplot(1, 3, 3)\n", + "plt.loglog(delta_tau[1:], V_max.iloc[1:] - V_max.iloc[0], \"o-\")\n", + "plt.xlabel(r\"$\\tau_s - \\tau_m$\")\n", + "plt.ylabel(\"$V_{max} - V_{max}^{singular} [mV]$\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The maximum membrane potential converges smoothly against the singular limit, indicating that no numerical instabilities occur." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------------------\n", + "### License\n", + "\n", + "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", + "\n", + "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", + "\n", + "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/htmldoc/model_details/aeif_models_implementation.ipynb b/doc/htmldoc/model_details/aeif_models_implementation.ipynb new file mode 100644 index 0000000000..38f1bce242 --- /dev/null +++ b/doc/htmldoc/model_details/aeif_models_implementation.ipynb @@ -0,0 +1,878 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NEST implementation of the `aeif` models\n", + "\n", + "#### Hans Ekkehard Plesser and Tanguy Fardet, 2016-09-09\n", + "#### Updated by Hans Ekkehard Plesser, 2023-08-25\n", + "\n", + "This notebook provides a reference solution for the _Adaptive Exponential Integrate and Fire_\n", + "(AEIF) neuronal model and compares it with several numerical implementations using simpler solvers.\n", + "In particular this justifies the change of implementation in September 2016 to make the simulation\n", + "closer to the reference solution.\n", + "\n", + "## Position of the problem\n", + "\n", + "### Basics\n", + "The equations governing the evolution of the AEIF model are\n", + "\n", + "$$\\left\\lbrace\\begin{array}{rcl}\n", + " C_m\\dot{V} &=& -g_L(V-E_L) + g_L \\Delta_T e^{\\frac{V-V_T}{\\Delta_T}} + I_e + I_s(t) -w\\\\\n", + " \\tau_s\\dot{w} &=& a(V-E_L) - w\n", + "\\end{array}\\right.$$\n", + "\n", + "when $V < V_{peak}$ (threshold/spike detection).\n", + "Once a spike occurs, we apply the reset conditions:\n", + "\n", + "$$V = V_r \\quad \\text{and} \\quad w = w + b$$\n", + "\n", + "### Divergence\n", + "In the AEIF model, the spike is generated by the exponential divergence. In practice, this means that just before threshold crossing (threshpassing), the argument of the exponential can become very large.\n", + "\n", + "This can lead to numerical overflow or numerical instabilities in the solver, all the more if $V_{peak}$ is large, or if $\\Delta_T$ is small.\n", + "\n", + "## Tested solutions\n", + "\n", + "### Old implementation (before September 2016)\n", + "The original solution was to bind the exponential argument to be smaller than 10 (ad hoc value to be close to the original implementation in BRIAN).\n", + "As will be shown in the notebook, this solution does not converge to the reference LSODAR solution.\n", + "\n", + "### New implementation\n", + "The new implementation does not bind the argument of the exponential, but the potential itself, since according to the theoretical model, $V$ should never get larger than $V_{peak}$.\n", + "We will show that this solution is not only closer to the reference solution in general, but also converges towards it as the timestep gets smaller.\n", + "\n", + "## Reference solution\n", + "\n", + "The reference solution is implemented using the LSODAR solver which is described and compared in the following references:\n", + "\n", + "* http://www.radford.edu/~thompson/RP/eventlocation.pdf (papers citing this one)\n", + "* http://www.sciencedirect.com/science/article/pii/S0377042712000684\n", + "* http://www.radford.edu/~thompson/RP/rootfinding.pdf\n", + "* https://computation.llnl.gov/casc/nsde/pubs/u88007.pdf\n", + "* http://www.cs.ucsb.edu/~cse/Files/SCE000136.pdf\n", + "* http://www.sciencedirect.com/science/article/pii/0377042789903348\n", + "* http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.455.2976&rep=rep1&type=pdf\n", + "* https://theses.lib.vt.edu/theses/available/etd-12092002-105032/unrestricted/etd.pdf" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Technical details and requirements\n", + "\n", + "### Implementation of the functions\n", + "\n", + "* The old and new implementations are reproduced using Scipy and are called by the ``scipy_aeif`` function\n", + "* The NEST implementations are not shown here, but keep in mind that for a given time resolution, they are closer to the reference result than the scipy implementation since the GSL implementation uses a RK45 adaptive solver.\n", + "* The reference solution using LSODAR, called ``reference_aeif``, is implemented through the [assimulo](http://www.jmodelica.org/assimulo) package.\n", + "\n", + "### Requirements\n", + "\n", + "To run this notebook, you need:\n", + "\n", + "* [numpy](http://www.numpy.org/) and [scipy](http://www.scipy.org/)\n", + "* [assimulo](http://www.jmodelica.org/assimulo)\n", + "* [matplotlib](http://matplotlib.org/)\n", + "\n", + "The assimulo package from PyPI is quite old and cannot be installed with current versions of Python distribution tools. If you use conda/mamba, you can install a current version of Assimulo from `conda-forge`. We have tested this notebook with assimulo 3.4.1." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from scipy.integrate import odeint\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams[\"figure.figsize\"] = (15, 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scipy functions mimicking the NEST code\n", + "### Right hand side functions" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def rhs_aeif_new(y, _, p):\n", + " \"\"\"\n", + " New implementation bounding V < V_peak\n", + "\n", + " Parameters\n", + " ----------\n", + " y : list\n", + " Vector containing the state variables [V, w]\n", + " _ : unused var\n", + " p : Params instance\n", + " Object containing the neuronal parameters.\n", + "\n", + " Returns\n", + " -------\n", + " dv : double\n", + " Derivative of V\n", + " dw : double\n", + " Derivative of w\n", + " \"\"\"\n", + " v = min(y[0], p.Vpeak)\n", + " w = y[1]\n", + " Ispike = 0.0\n", + "\n", + " if p.DeltaT != 0.0:\n", + " Ispike = p.gL * p.DeltaT * np.exp((v - p.vT) / p.DeltaT)\n", + "\n", + " dv = (-p.gL * (v - p.EL) + Ispike - w + p.Ie) / p.Cm\n", + " dw = (p.a * (v - p.EL) - w) / p.tau_w\n", + "\n", + " return dv, dw\n", + "\n", + "\n", + "def rhs_aeif_old(y, _, p):\n", + " \"\"\"\n", + " Old implementation bounding the argument of the\n", + " exponential function (e_arg < 10.).\n", + "\n", + " Parameters\n", + " ----------\n", + " y : list\n", + " Vector containing the state variables [V, w]\n", + " _ : unused var\n", + " p : Params instance\n", + " Object containing the neuronal parameters.\n", + "\n", + " Returns\n", + " -------\n", + " dv : double\n", + " Derivative of V\n", + " dw : double\n", + " Derivative of w\n", + " \"\"\"\n", + " v = y[0]\n", + " w = y[1]\n", + " Ispike = 0.0\n", + "\n", + " if p.DeltaT != 0.0:\n", + " e_arg = min((v - p.vT) / p.DeltaT, 10.0)\n", + " Ispike = p.gL * p.DeltaT * np.exp(e_arg)\n", + "\n", + " dv = (-p.gL * (v - p.EL) + Ispike - w + p.Ie) / p.Cm\n", + " dw = (p.a * (v - p.EL) - w) / p.tau_w\n", + "\n", + " return dv, dw" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Complete model" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def scipy_aeif(p, f, simtime, dt):\n", + " \"\"\"\n", + " Complete aeif model using scipy `odeint` solver.\n", + "\n", + " Parameters\n", + " ----------\n", + " p : Params instance\n", + " Object containing the neuronal parameters.\n", + " f : function\n", + " Right-hand side function (either `rhs_aeif_old`\n", + " or `rhs_aeif_new`)\n", + " simtime : double\n", + " Duration of the simulation (will run between\n", + " 0 and tmax)\n", + " dt : double\n", + " Time increment.\n", + "\n", + " Returns\n", + " -------\n", + " t : list\n", + " Times at which the neuronal state was evaluated.\n", + " y : list\n", + " State values associated to the times in `t`\n", + " s : list\n", + " Spike times.\n", + " vs : list\n", + " Values of `V` just before the spike.\n", + " ws : list\n", + " Values of `w` just before the spike\n", + " fos : list\n", + " List of dictionaries containing additional output\n", + " information from `odeint`\n", + " \"\"\"\n", + " t = np.arange(0, simtime, dt) # time axis\n", + " n = len(t)\n", + " y = np.zeros((n, 2)) # V, w\n", + " y[0, 0] = p.EL # Initial: (V_0, w_0) = (E_L, 5.)\n", + " y[0, 1] = 5.0 # Initial: (V_0, w_0) = (E_L, 5.)\n", + " s = [] # spike times\n", + " vs = [] # membrane potential at spike before reset\n", + " ws = [] # w at spike before step\n", + " fos = [] # full output dict from odeint()\n", + "\n", + " # imitate NEST: update time-step by time-step\n", + " for k in range(1, n):\n", + " # solve ODE from t_k-1 to t_k\n", + " d, fo = odeint(f, y[k - 1, :], t[k - 1 : k + 1], (p,), full_output=True)\n", + " y[k, :] = d[1, :]\n", + " fos.append(fo)\n", + "\n", + " # check for threshold crossing\n", + " if y[k, 0] >= p.Vpeak:\n", + " s.append(t[k])\n", + " vs.append(y[k, 0])\n", + " ws.append(y[k, 1])\n", + "\n", + " y[k, 0] = p.Vreset # reset\n", + " y[k, 1] += p.b # step\n", + "\n", + " return t, y, s, vs, ws, fos" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LSODAR reference solution\n", + "### Setting assimulo class" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from assimulo.solvers import LSODAR\n", + "from assimulo.problem import Explicit_Problem\n", + "\n", + "\n", + "class Extended_Problem(Explicit_Problem):\n", + " # need variables here for access\n", + " sw0 = [False]\n", + " ts_spikes = []\n", + " ws_spikes = []\n", + " Vs_spikes = []\n", + "\n", + " def __init__(self, p):\n", + " self.p = p\n", + " self.y0 = [self.p.EL, 5.0] # V, w\n", + " # reset variables\n", + " self.ts_spikes = []\n", + " self.ws_spikes = []\n", + " self.Vs_spikes = []\n", + "\n", + " # The right-hand-side function (rhs)\n", + "\n", + " def rhs(self, t, y, sw):\n", + " \"\"\"\n", + " This is the function we are trying to simulate (aeif model).\n", + " \"\"\"\n", + " V, w = y[0], y[1]\n", + " Ispike = 0.0\n", + "\n", + " if self.p.DeltaT != 0.0:\n", + " Ispike = self.p.gL * self.p.DeltaT * np.exp((V - self.p.vT) / self.p.DeltaT)\n", + " dotV = (-self.p.gL * (V - self.p.EL) + Ispike + self.p.Ie - w) / self.p.Cm\n", + " dotW = (self.p.a * (V - self.p.EL) - w) / self.p.tau_w\n", + " return np.array([dotV, dotW])\n", + "\n", + " # Sets a name to our function\n", + " name = \"AEIF_nosyn\"\n", + "\n", + " # The event function\n", + " def state_events(self, t, y, sw):\n", + " \"\"\"\n", + " This is our function that keeps track of our events. When the sign\n", + " of any of the events has changed, we have an event.\n", + " \"\"\"\n", + " event_0 = -5 if y[0] >= self.p.Vpeak else 5 # spike\n", + " if event_0 < 0:\n", + " if not self.ts_spikes:\n", + " self.ts_spikes.append(t)\n", + " self.Vs_spikes.append(y[0])\n", + " self.ws_spikes.append(y[1])\n", + " elif self.ts_spikes and not np.isclose(t, self.ts_spikes[-1], 0.01):\n", + " self.ts_spikes.append(t)\n", + " self.Vs_spikes.append(y[0])\n", + " self.ws_spikes.append(y[1])\n", + " return np.array([event_0])\n", + "\n", + " # Responsible for handling the events.\n", + " def handle_event(self, solver, event_info):\n", + " \"\"\"\n", + " Event handling. This functions is called when Assimulo finds an event as\n", + " specified by the event functions.\n", + " \"\"\"\n", + " ev = event_info\n", + " event_info = event_info[0] # only look at the state events information.\n", + " if event_info[0] > 0:\n", + " solver.sw[0] = True\n", + " solver.y[0] = self.p.Vreset\n", + " solver.y[1] += self.p.b\n", + " else:\n", + " solver.sw[0] = False\n", + "\n", + " def initialize(self, solver):\n", + " solver.h_sol = []\n", + " solver.nq_sol = []\n", + "\n", + " def handle_result(self, solver, t, y):\n", + " Explicit_Problem.handle_result(self, solver, t, y)\n", + " # Extra output for algorithm analysis\n", + " if solver.report_continuously:\n", + " h, nq = solver.get_algorithm_data()\n", + " solver.h_sol.extend([h])\n", + " solver.nq_sol.extend([nq])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### LSODAR reference model" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def reference_aeif(p, simtime):\n", + " \"\"\"\n", + " Reference aeif model using LSODAR.\n", + "\n", + " Parameters\n", + " ----------\n", + " p : Params instance\n", + " Object containing the neuronal parameters.\n", + " f : function\n", + " Right-hand side function (either `rhs_aeif_old`\n", + " or `rhs_aeif_new`)\n", + " simtime : double\n", + " Duration of the simulation (will run between\n", + " 0 and tmax)\n", + " dt : double\n", + " Time increment.\n", + "\n", + " Returns\n", + " -------\n", + " t : list\n", + " Times at which the neuronal state was evaluated.\n", + " y : list\n", + " State values associated to the times in `t`\n", + " s : list\n", + " Spike times.\n", + " vs : list\n", + " Values of `V` just before the spike.\n", + " ws : list\n", + " Values of `w` just before the spike\n", + " h : list\n", + " List of the minimal time increment at each step.\n", + " \"\"\"\n", + " # Create an instance of the problem\n", + " exp_mod = Extended_Problem(p) # Create the problem\n", + " exp_sim = LSODAR(exp_mod) # Create the solver\n", + "\n", + " exp_sim.atol = 1.0e-8\n", + " exp_sim.report_continuously = True\n", + " exp_sim.store_event_points = True\n", + "\n", + " exp_sim.verbosity = 30\n", + "\n", + " # Simulate\n", + " t, y = exp_sim.simulate(simtime) # Simulate 10 seconds\n", + "\n", + " return t, y, exp_mod.ts_spikes, exp_mod.Vs_spikes, exp_mod.ws_spikes, exp_sim.h_sol" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set the parameters and simulate the models\n", + "### Params (chose a dictionary)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Regular spiking\n", + "aeif_param = {\n", + " \"V_reset\": -58.0,\n", + " \"V_peak\": 0.0,\n", + " \"V_th\": -50.0,\n", + " \"I_e\": 420.0,\n", + " \"g_L\": 11.0,\n", + " \"tau_w\": 300.0,\n", + " \"E_L\": -70.0,\n", + " \"Delta_T\": 2.0,\n", + " \"a\": 3.0,\n", + " \"b\": 0.0,\n", + " \"C_m\": 200.0,\n", + " \"V_m\": -70.0, #! must be equal to E_L\n", + " \"w\": 5.0, #! must be equal to 5.\n", + " \"tau_syn_ex\": 0.2,\n", + "}\n", + "\n", + "# Bursting\n", + "aeif_param2 = {\n", + " \"V_reset\": -46.0,\n", + " \"V_peak\": 0.0,\n", + " \"V_th\": -50.0,\n", + " \"I_e\": 500.0,\n", + " \"g_L\": 10.0,\n", + " \"tau_w\": 120.0,\n", + " \"E_L\": -58.0,\n", + " \"Delta_T\": 2.0,\n", + " \"a\": 2.0,\n", + " \"b\": 100.0,\n", + " \"C_m\": 200.0,\n", + " \"V_m\": -58.0, #! must be equal to E_L\n", + " \"w\": 5.0, #! must be equal to 5.\n", + "}\n", + "\n", + "# Close to chaos (use resolution < 0.005 and simtime = 200)\n", + "aeif_param3 = {\n", + " \"V_reset\": -48.0,\n", + " \"V_peak\": 0.0,\n", + " \"V_th\": -50.0,\n", + " \"I_e\": 160.0,\n", + " \"g_L\": 12.0,\n", + " \"tau_w\": 130.0,\n", + " \"E_L\": -60.0,\n", + " \"Delta_T\": 2.0,\n", + " \"a\": -11.0,\n", + " \"b\": 30.0,\n", + " \"C_m\": 100.0,\n", + " \"V_m\": -60.0, #! must be equal to E_L\n", + " \"w\": 5.0, #! must be equal to 5.\n", + "}\n", + "\n", + "\n", + "class Params:\n", + " \"\"\"\n", + " Class giving access to the neuronal\n", + " parameters.\n", + " \"\"\"\n", + "\n", + " def __init__(self):\n", + " self.params = aeif_param\n", + " self.Vpeak = aeif_param[\"V_peak\"]\n", + " self.Vreset = aeif_param[\"V_reset\"]\n", + " self.gL = aeif_param[\"g_L\"]\n", + " self.Cm = aeif_param[\"C_m\"]\n", + " self.EL = aeif_param[\"E_L\"]\n", + " self.DeltaT = aeif_param[\"Delta_T\"]\n", + " self.tau_w = aeif_param[\"tau_w\"]\n", + " self.a = aeif_param[\"a\"]\n", + " self.b = aeif_param[\"b\"]\n", + " self.vT = aeif_param[\"V_th\"]\n", + " self.Ie = aeif_param[\"I_e\"]\n", + "\n", + "\n", + "p = Params()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Simulate the 3 implementations" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Run Statistics: AEIF_nosyn \n", + "\n", + " Number of steps : 2013\n", + " Number of function evaluations : 5590\n", + " Number of Jacobian evaluations : 0\n", + " Number of state function evaluations : 2042\n", + " Number of state events : 7\n", + "\n", + "Solver options:\n", + "\n", + " Solver : LSODAR \n", + " Absolute tolerances : [1.e-08 1.e-08]\n", + " Relative tolerances : 1e-06\n", + " Starter : classical\n", + "\n", + "Simulation interval : 0.0 - 100.0 seconds.\n", + "Elapsed simulation time: 0.06999148603063077 seconds.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/5k/0gyqhsf50418tc1x1l1t5lsw0000gn/T/ipykernel_86976/3648738050.py:44: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " t, y = exp_sim.simulate(simtime) # Simulate 10 seconds\n" + ] + } + ], + "source": [ + "# Parameters of the simulation\n", + "simtime = 100.0\n", + "resolution = 0.01\n", + "\n", + "t_old, y_old, s_old, vs_old, ws_old, fo_old = scipy_aeif(p, rhs_aeif_old, simtime, resolution)\n", + "t_new, y_new, s_new, vs_new, ws_new, fo_new = scipy_aeif(p, rhs_aeif_new, simtime, resolution)\n", + "t_ref, y_ref, s_ref, vs_ref, ws_ref, h_ref = reference_aeif(p, simtime)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the results\n", + "### Zoom out" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABRMAAAISCAYAAABfxFgCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3yV5f3/8ddZOdl7D5KwCXsosoMDxVFX1bpRam0RFz/rqG2FVqUWtVarVvsV0DprHdWqBVcY4kCG7BUySUL2ztn3749oBBmSEDhJeD/7OI/mvs91XedzhZjxPtd93SbDMAxEREREREREREREfoTZ3wWIiIiIiIiIiIhI96AwUURERERERERERI6IwkQRERERERERERE5IgoTRURERERERERE5IgoTBQREREREREREZEjojBRREREREREREREjojCRBERERERERERETkiChNFRERERERERETkiChMFBERERERERERkSOiMFFERERERERERESOSLcNE+fPn4/JZOK2225rO2cYBnPnziU5OZmgoCCys7PZvHmz/4oUEREREREREZETxvz58znppJMICwsjPj6eCy64gO3bt+/XprvnV90yTFy9ejXPPvssw4YN2+/8n//8Zx599FH+9re/sXr1ahITEznjjDNoaGjwU6UiIiIiIiIiInKiWLZsGTfddBNffPEFH374IR6Ph2nTptHU1NTWprvnVybDMAx/F9EejY2NjBo1iqeeeor777+fESNG8Nhjj2EYBsnJydx2223cddddADidThISEnjooYe48cYb/Vy5iIiIiIiIiIicSCoqKoiPj2fZsmVMnjy5R+RXVn8X0F433XQT55xzDqeffjr3339/2/m8vDzKysqYNm1a2zm73c6UKVNYtWrVIf8xnE4nTqez7djj8bB161bS0tIwm7vlwk0REREREREREekEPp+PwsJCsrKysFq/j9Hsdjt2u/1H+9fV1QEQHR0NdDy/6kq6VZj46quvsnbtWlavXn3Ac2VlZQAkJCTsdz4hIYGCgoJDjjl//nzmzZvXuYWKiIiIiIiIiEiPdd999zF37tzDtjEMgzlz5jBx4kSGDBkCdDy/6kq6TZhYVFTErbfeytKlSwkMDDxkO5PJtN+xYRgHnNvXPffcw5w5c/Z7nSFDhvDVV1+RlJR09IWLiIiIiIiIiEi3VFpayskn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p2/8NTRW+LsUEenhSo0YLnLOheuXgFn3DJCuTWGidLrm5mYuvvhiwsPDMZlM1NbW+rskEREREZGO0yohETnGPFhZa/SHXqf4uxSRH6UwsYc777zzOP300w/63Oeff47JZGLt2rWd+prPP/88K1asYNWqVZSWlhIREdGp44uIiIiIHA9TnI/y2rh3ICjK36WISI9nYMELXg8Yhr+LETkshYk93MyZM/nkk08oKCg44LmFCxcyYsQIRo0adURjuVyuI2qXm5vLoEGDGDJkCImJibqRioiIiIh0SwVGIg3BabrkUESOuUSqyQ28Gv4YAz6Pv8sROSyFiUfBMAyaXR6/PIwjfKfi3HPPJT4+nsWLF+93vrm5mddee42ZM2cesm9GRgb3338/M2bMICIightuuAGAVatWMXnyZIKCgkhLS+OWW26hqakJgOzsbB555BGWL1+OyWQiOzu7Q59bERERERF/MuHjBdt8zlr3K3DU+bscEenhQkwOf5cgcsSs/i6gO2txe8n6/RK/vPaWP5xJcMCP//NZrVauueYaFi9ezO9///u2VYKvv/46LpeLK6+88rD9FyxYwO9+9zt++9vfArBx40bOPPNM/vjHP/Lcc89RUVHB7NmzmT17NosWLeLNN9/k7rvvZtOmTbz55psEBAQc/WRFRERERPxgsmUjVNMaJgZq6x4RERHoYJiYn5/PihUryM/Pp7m5mbi4OEaOHMm4ceMIDAzs7BrlKF1//fUsWLCAnJwcpk6dCrRe4nzRRRcRFXX4/V9OPfVU7rjjjrbja665hiuuuILbbrsNgH79+vH4448zZcoUnn76aaKjowkODiYgIIDExMRjNicRERERkePG3eLvCkSkhzOhfRKl+2hXmPjyyy/z+OOP89VXXxEfH09KSgpBQUFUV1eTm5tLYGAgV155JXfddRfp6enHquYuI8hmYcsfzvTbax+pgQMHMn78eBYuXMjUqVPJzc1lxYoVLF269Ef7jhkzZr/jNWvWsGvXLl566aW2c4Zh4PP5yMvLY9CgQUc+CRERERGRLkq7fouIiBzcEYeJo0aNwmw2M2PGDP71r3/Rq1ev/Z53Op18/vnnvPrqq4wZM4annnqKSy65pNML7kpMJtMRXWrcFcycOZPZs2fz5JNPsmjRItLT0znttNN+tF9ISMh+xz6fjxtvvJFbbrnlgLY//JoQEREREekZFC2KiEj3U1dXx1tvvXXQq4vPPPNMxo8f36Fxj/gGLH/84x/5+uuvmT179kFDI7vdTnZ2Nn//+9/ZunUrGRkZHSpIjo1LL70Ui8XCyy+/zPPPP891113Xobssjxo1is2bN9O3b98DHtofUURERERERETEv0pLS7nhhhtISkriD3/4A01NTYwYMYLTTjuN1NRUPv30U8444wyysrJ47bXX2j3+ES+rO+ecc6ioqCAuLu5H28bGxhIbG9vuYuTYCQ0N5bLLLuM3v/kNdXV1zJgxo0Pj3HXXXZxyyincdNNN3HDDDYSEhLB161Y+/PBDnnjiiYP2ueeee9izZw8vvPDCUcxAREREROT40f5lIiLSXQ0fPpxrrrmGr776iiFDhhy0TUtLC2+//TaPPvooRUVF+90v48cc8cpEgJSUFH7605/ywQcfYBj64drdzJw5k5qaGk4//fQOX5I8bNgwli1bxs6dO5k0aRIjR47kd7/7HUlJSYfsU1paSmFhYUfLFhERERHxrw5c0SMiIuIvmzdv5uGHHz5kkAgQFBTE5Zdfzpdffsm1117brvHbteHf888/z6JFizjvvPNITEzkuuuuY8aMGfTp06ddLyr+MW7cuHaFwPn5+Qc9f9JJJx325i2PPfbYfseLFy8+4tcUEREREREREZGOO5Krir1eL++++y4XXHDBEbXfV7tWJl5++eUsXbqUvLw8brjhBl566SX69+/P1KlTeemll3A4HO16cRERERERERGRE53WP8vxsm3bNu68806Sk5O59NJLOzRGu8LE76SlpXHfffexe/duli5dSkpKCr/4xS9ISkpi1qxZHSpERERERESkq9CeiSIi0lM0NTWxcOFCJkyYwODBg1m7di0PPPAAJSUlHRqvQ2Hivk477TRefPFFXnjhBcxmM88888zRDikiIiIiItKFaM2QiIh0P59//jkzZ84kMTGRv/3tb1x00UWYTCYef/xxfv7zn3f45snt2jPxh/Lz81m0aBHPP/88xcXFTJ06lZkzZx7NkCIiIiIiIiIiJ5QmI/D7A5PFf4VIj5GVlUVzczNXXHEFX375JVlZWQDcfffdRz12u8NEh8PB66+/zqJFi1i+fDkpKSnMmDGD6667joyMjKMuSERERERExN+MfVcjWmz+K0RETgglxJLheJn8P53j71Kkh9i1axc/+9nP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", + "text/plain": [ + "<Figure size 1500x600 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax2 = ax.twinx()\n", + "\n", + "# Plot the potentials\n", + "ax.plot(t_ref, y_ref[:, 0], linestyle=\"-\", label=\"V ref.\")\n", + "ax.plot(t_old, y_old[:, 0], linestyle=\"-.\", label=\"V old\")\n", + "ax.plot(t_new, y_new[:, 0], linestyle=\"--\", label=\"V new\")\n", + "\n", + "# Plot the adaptation variables\n", + "ax2.plot(t_ref, y_ref[:, 1], linestyle=\"-\", c=\"k\", label=\"w ref.\")\n", + "ax2.plot(t_old, y_old[:, 1], linestyle=\"-.\", c=\"m\", label=\"w old\")\n", + "ax2.plot(t_new, y_new[:, 1], linestyle=\"--\", c=\"y\", label=\"w new\")\n", + "\n", + "# Show\n", + "ax.set_xlim([0.0, simtime])\n", + "ax.set_ylim([-65.0, 40.0])\n", + "ax.set_xlabel(\"Time (ms)\")\n", + "ax.set_ylabel(\"V (mV)\")\n", + "ax2.set_ylim([-20.0, 20.0])\n", + "ax2.set_ylabel(\"w (pA)\")\n", + "ax.legend(loc=6)\n", + "ax2.legend(loc=2)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zoom in" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABRUAAAISCAYAAABS2ihFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAADzcElEQVR4nOzdeXhU1f0/8Pedfc1k31dIyAZhF0E297rVpVWrKFKp2rpU4VsX1BZtVdpqraVVa1VAf2q1raW1tYtaBUVBlB2ykRAggYQA2WZf7++PSe7kMjMhkwQC4f16nnlm5t5z7j0zFZq8+ZxzBFEURRARERERERERERH1k2K4B0BERERERERERESnF4aKREREREREREREFBOGikRERERERERERBQThopEREREREREREQUE4aKREREREREREREFBOGikRERERERERERBQThopEREREREREREQUE4aKREREREREREREFBOGikRERERERERERBQThopEREREREREREQUk9M2VFy2bBkEQcB9990nHRNFEY899hgyMzOh1+sxd+5c7Nq1a/gGSURERERERERENAKdlqHiV199hT/84Q+oqKiQHf/lL3+JZ599Fr/73e/w1VdfIT09HRdeeCGsVuswjZSIiIiIiIiIiGjkOe1CRZvNhnnz5uHll19GQkKCdFwURTz33HN45JFHcM0112Ds2LF47bXX4HA48NZbbw3jiImIiIiIiIiIiEYW1XAPIFZ33XUXLrvsMlxwwQV44oknpOMNDQ1oaWnBRRddJB3TarWYM2cOvvjiC9xxxx0Rr+d2u+F2u6X3Pp8PVVVVyMnJgUJx2mWuREREREREREQ0RAKBAA4dOoSJEydCpTrtYrQT6rT6Nt5++21s3rwZX331Vdi5lpYWAEBaWprseFpaGvbt2xf1msuWLcPjjz8+tAMlIiIiIiIiIqIRY+PGjZg6depwD+OUctqEio2Njbj33nvxwQcfQKfTRW0nCILsvSiKYcd6W7JkCRYvXiy7z9ixY7Fx40ZkZGQMfuBERERERERERHRaam5uxllnnRVWxEanUai4adMmtLa2YvLkydIxv9+PTz/9FL/73e9QU1MDIFix2DsMbG1t7fN/eK1WC61WK723WCwAgIyMDGRnZw/1xyAiIiIiIiIiotMMl8gLd9p8I+effz527NiBrVu3So8pU6Zg3rx52Lp1K0aNGoX09HR8+OGHUh+Px4O1a9dixowZwzhyIiIiIiIiIiKikeW0qVQ0m80YO3as7JjRaERSUpJ0/L777sNTTz2FoqIiFBUV4amnnoLBYMCNN944HEMmIiIiIiIiIiIakU6bULE/HnjgATidTtx5551ob2/HtGnT8MEHH8BsNg/30IiIiIiIiIiIiEYMQRRFcbgHcSppampCTk4OGhsbo66p6Pf74fV6T/LIzkxKpRIqlarPzXaIiIiIiIiIiE6E/uREZ6oRVal4MthsNjQ1NYFZ7MljMBiQkZEBjUYz3EMhIiIiIiIiIiIwVIyJ3+9HU1MTDAYDUlJSWD13gomiCI/Hg8OHD6OhoQFFRUXcbYmIiIiIiIiI6BTAUDEGXq8XoigiJSUFer1+uIdzRtDr9VCr1di3bx88Hg90Ot1wD4mIiIiIiIiI6IzHsq8BYIXiycXqRCIiIiIiIiKiUwvTGiIiIiIiIiIiIooJQ0UiIiIiIiIiIiKKCUNFOmFaWlpw4YUXwmg0Ij4+friHQ0REREREREREQ4QbtdAJ8+tf/xrNzc3YunUrLBbLcA+HiIiIiIiIiIiGCENFipnX64VarT5uu/r6ekyePBlFRUUnYVRERERERERERHSycPrzIIiiCLvdPiwPURT7NcZ//OMfiI+PRyAQAABs3boVgiDg/vvvl9rccccduOGGG6JeQxAE/P73v8eVV14Jo9GIJ554Qrr25MmTodPpMGrUKDz++OPw+XwAgPz8fLz77rt4/fXXIQgCFixYMMBvmYiIiIiIiIiITjWsVBwEh8MBk8k0LPe22WwwGo3HbTd79mxYrVZs2bIFkydPxtq1a5GcnIy1a9dKbdasWYNFixb1eZ2lS5di2bJl+PWvfw2lUon//ve/uOmmm7B8+XLMmjUL9fX1uP3226W2X331FebPn4+4uDj85je/gV6vH9wHJiIiIiIiIiKiUwYrFUc4i8WCCRMmYM2aNQBCAeK2bdtgtVrR0tKC2tpazJ07t8/r3Hjjjbj11lsxatQo5OXl4cknn8RDDz2EW265BaNGjcKFF16In/3sZ3jppZcAACkpKdBqtdDr9UhPT+eaikREREREREREIwgrFQfBYDDAZrMN2737a+7cuVizZg0WL16Mzz77DE888QTeffddrFu3Dh0dHUhLS0NJSUmf15gyZYrs/aZNm/DVV1/hySeflI75/X64XC44HI6YxkdERERERERERKcXhoqDIAhCv6YgD7e5c+fi1VdfxbZt26BQKFBWVoY5c+Zg7dq1aG9vx5w5c457jWM/ZyAQwOOPP45rrrkmrK1OpxuysRMRERERERER0amHoeIZoGddxeeeew5z5syBIAiYM2cOli1bhvb2dtx7770xX3PSpEmoqalBYWHhCRgxERERERERERGdyhgqngF61lV844038Jvf/AZAMGi89tpr4fV6j7ueYiQ/+clPcPnllyMnJwfXXnstFAoFtm/fjh07dki7Qx9r/vz5yMrKwrJlywbzcYiIiIiIiIiIaJhxo5YzxLnnngu/3y8FiAkJCSgrK0NKSgpKS0tjvt7FF1+Mf/7zn/jwww8xdepUnH322Xj22WeRl5cXtc/+/fvR3Nw80I9ARERERERERESnCEEURXG4B3EqaWpqQk5ODhobG5GdnS0753K50NDQgIKCAq4beBLxeyciIiIiIiKi4dBXTnSmY6UiERERERERERERxYShIhEREREREREREcWEoSIRERERERERERHFhKEiERERERERERERxYShIhEREREREREREcWEoSIRERERERERERHFhKEiERERERERERERxYShIhEREREREREREcWEoSIRERERERERERHFhKEiDdpjjz2GCRMm9NlmwYIFuOqqq07KeIiIiIiIiIiI6MRiqEhEREREREREREQxYahIREREREREREREMWGoOAT8fnvMj0DAJ/UPBHzdx539um4s/vGPfyA+Ph6BQAAAsHXrVgiCgPvvv19qc8cdd+CGG26Ieo39+/fjyiuvhMlkQlxcHK677jocOnSoj+/Dj8WLFyM+Ph5JSUl44IEHIIpiTOMmIiIiIiIiIqJTl2q4BzASfPaZKeY+ZWV/QmrqtQCAI0dWo7LyOlgsczBx4hqpzYYN+fB6j4T1nTu3/wHd7NmzYbVasWXLFkyePBlr165FcnIy1q5dK7VZs2YNFi1aFLG/KIq46qqrYDQasXbtWvh8Ptx55524/vrrsWbNmoh9fvWrX2HFihV49dVXUVZWhl/96ldYvXo1zjvvvH6Pm4iIiIiIiIiITl2sVBzhLBYLJkyYIAWAPQHitm3bYLVa0dLSgtraWsydOzdi/48++gjbt2/HW2+9hcmTJ2PatGn4f//v/2Ht2rX46quvIvZ57rnnsGTJEnzrW99CaWkpfv/738NisZygT0hERERERERERCcbKxWHwKxZtpj7CIJWep2cfHX3NeQZ79ln7x3kyILmzp2LNWvWYPHixfjss8/wxBNP4N1338W6devQ0dGBtLQ0lJSUROxbVVWFnJwc5OTkSMfKysoQHx+PqqoqTJ06Vda+s7MTzc3NmD59unRMpVJhypQpnAJNRERERERERDRCMFQcAkqlcVD9FQoVIv1PMdjr9pg7dy5effVVbNu2DQqFAmVlZZgzZw7Wrl2L9vZ2zJkzJ2pfURQhCEK/jxMRERERERER0cjH6c9ngJ51FZ977jnMmTMHgiBgzpw5WLNmDdasWdNnqFhWVob9+/ejsbFROlZZWYnOzk6UlpaGtbdYLMjIyMCGDRukYz6fD5s2bRraD0VEREREREREdIr59NNPccUVVyAzMxOCIOBvf/ub7LzNZsPdd9+N7Oxs6PV6lJaW4sUXX+z39d9++20IgoCrrrpqaAc+AAwVzwA96yq+8cYb0tqJs2fPxubNm/tcTxEALrjgAlRUVGDevHnYvHkzNm7ciPnz52POnDmYMmVKxD733nsvfv7zn2P16tWorq7GnXfeiY6OjqH/YEREREREREREpxC73Y7x48fjd7/7XcTzixYtwn/+8x+88cYbqKqqwqJFi3DPPffg73//+3GvvW/fPvzoRz/CrFmzhnrYA8JQ8Qxx7rnnwu/3SwFiQkICysrKkJKSErHisEdPqp6QkIDZs2fjggsuwKhRo/DOO+9E7fN///d/mD9/PhYsWIDp06fDbDbj6quvHuqPRERERERERER0SrnkkkvwxBNP4Jprrol4fv369bjlllswd+5c5Ofn4/bbb8f48ePx9ddf93ldv9+PefPm4fHHH8eoUaNOxNBjJojcPUOmqakJOTk5aGxsRHZ2tuycy+VCQ0MDCgoKoNPphmmEZx5+70REREREREQ0HHpyosrKSmRlZUnHtVottFptHz2DhVqrV6+WTVX+/ve/j02bNuFvf/sbMjMzsWbNGnzzm9/Ev//9b8ycOTPqtZYuXYrt27dj9erVWLBgATo6OsKmVp9srFQkIiIiIiIiIiLqQ1lZGSwWi/RYtmzZgK6zfPlylJWVITs7GxqNBt/4xjfwwgsv9Bkofv7553j11Vfx8ssvD3T4JwR3fyYiIiIiIiIiIupDpErFgVi+fDk2bNiA9957D3l5efj0009x5513IiMjAxdccEFYe6vViptuugkvv/wykpOTBzz+E4GhIhERERERERERUR/MZjPi4uIGdQ2n04mHH34Yq1evxmWXXQYAqKiowNatW/HMM89EDBXr6+uxd+9eXHHFFdKxQCAAAFCpVKipqcHo0aMHNa6BYqhIRERERERERER0gnm9Xni9XigU8tUIlUqlFBQeq6SkBDt27JAde/TRR2G1WvGb3/wGOTk5J2y8x8NQkYiIiIiIiIiIaAjYbDbU1dVJ7xsaGrB161YkJiYiNzcXc+bMwf333w+9Xo+8vDysXbsWr7/+Op599lmpz/z585GVlYVly5ZBp9Nh7NixsnvEx8cDQNjxk42hIhERERERERER0RD4+uuvce6550rvFy9eDAC45ZZbsGrVKrz99ttYsmQJ5s2bh7a2NuTl5eHJJ5/E97//fanP/v37w6oZT0UMFYmIiIiIiIiIiIbA3LlzIYpi1PPp6elYuXJln9dYs2ZNn+dXrVo1gJENvVM/9iQiIiIiIiIiIqJTCkNFIiIiIiIiIiIiiglDRSIiIiIiIiIiIooJQ0UiIiIiIiIiIiKKCUNFIiIiIiIiIiIiiglDxSHgt/ujP1z+/rd19q9tLP7xj38gPj4egUAAALB161YIgoD7779fanPHHXfghhtuiHoNQRDwyiuv4Oqrr4bBYEBRURHee+89WZvKykpceumlMJlMSEtLw80334wjR44M2RiIiIiIiIiIiOjUoRruAYwEn5k+i3ou8dJEVLxfIb3/PPVzBByBiG0tcyyYuGai9H5D/gZ4j3jD2s0V5/Z7bLNnz4bVasWWLVswefJkrF27FsnJyVi7dq3UZs2aNVi0aFGf13n88cfxy1/+Ek8//TR++9vfYt68edi3bx8SExPR3NyMOXPm4LbbbsOzzz4Lp9OJBx98ENdddx0+/vjjIRsDERERERERERGdGlipOMJZLBZMmDABa9asARAK77Zt2war1YqWlhbU1tZi7ty5fV5nwYIFuOGGG1BYWIinnnoKdrsdGzduBAC8+OKLmDRpEp566imUlJRg4sSJWLFiBT755BPU1tYO2RiIiIiIiIiIiOjUwErFITDLNiv6SaX87Tmt50Rve0zEe/beswc+qF7mzp2LNWvWYPHixfjss8/wxBNP4N1338W6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ihOz2QwRERERnYZYqUhERCfQwoUL8eqrr+Kiiy4a8FTliooKrF27Fo888ghmzZoFURQxevToPivqmpubsX///oEOe0TZtWvXcQsD9Xo9brjhBtxwww19FqtFE1Oo+Nprr2HlypW44oorkJ6eju9+97tYsGABRo8eHfONT3WCKhSYGscZMePQjCGtOgwEAti3b1/EqsOWlpao/XQ6HcaMGRNWdThmzBiYTKYhGRsRERERjXAMFYmI6ASaPn16cA+Kftq7d2/E41OnTu1zk5fnnntO9n7VqlX9vudI15+Zxn6/H//4xz9w1VVX9av9sWIKFXvSy8bGRqxYsQKvvfYannrqKcyePRvf+9738K1vfWvEbOKRfEto+rZCrYAmVTOg69hsNtTU1IStdVhbWwuXyxW1X0ZGRtg6hyUlJcjNzWXVIRERERENTs5ZwPlLgZp/AU1fcaMWIiKiM0h1dbWU67W3t/c5K7YvA9o6KCcnB0uXLsXSpUvxv//9DytXrsTtt9+Ou+++GzfccANeeOGFAQ3mdBUIBNDU1BSx6vDAgQNR+2k0GhQVFYVNWR4zZgwsFstJ/AREREREdEbJnBh8qPXdoSIrFYmIiEYyu92Od955B6+++io2bNiAc889F08++SSuuuqqAV9z0PuRn3/++Tj//PPx7rvv4vbbb8dLL700YkNFh8OB2trasLUOa2pq4HA4ovZLTU2NuFFKfn4+lErlSfwERERERES9KNXBZ797eMdBREREJ8T69evxyiuv4E9/+hOKioowb948fPnll1i+fDnKysoGde1BhYp79+7FypUr8dprr6GpqQnnnnsuFi5cOKgBnSo+//xzHD16VFZ12NdinyqVCoWFhRE3SklISDiJIyciIiIiOo7DtYDPCXidwfec/kxERDTilJWVweFw4MYbb8SXX34phYgPPfTQkFw/5lDR5XLhz3/+M1auXIlPP/0UWVlZWLBgAb773e8iPz9/SAZ1KvjOd74T8XhiYqIUGPYOEAsKCqBWq0/yKImIiIiIBuDDnwC1/wbyZgbfc/ozERHRiFNXV4fvfOc7OPfcc1FaWjrk148pVLz99tvxpz/9CS6XC1deeSXef/99XHTRRUO2I/KppKCgAOXl5WHhYXJy8vE7ExERERGdyvTxgDkTMKcF37NSkYiIaMRpaGjAqlWr8IMf/ABOpxM33HAD5s2bN2Q5Xkyh4oYNG/D444/j5ptvRmJi4pAM4FT16aefIjs7e7iHQUREREQ09K7+ffB5/5eAxw6klQ/veIiIiGjIZWVl4ZFHHsEjjzyCjz/+GCtWrMA555wDn8+HVatW4Xvf+x7GjBkz4OvHFCpu3759wDciIiIiIqJTTO404MZ3hnsUREREdIKdd955OO+889DZ2Yk333wTK1aswDPPPIOxY8cOOO8b0EYtoijiL3/5Cz755BO0trYiEAjIzv/1r38d0GCIiIiIiIiIiIjoxLBYLLjzzjtx5513YuvWrVixYsWAr6UYSKd7770XN998MxoaGmAymWCxWGQPIiIiIiI6hb00B3j1YsB+ZLhHQkREdFyrVq1CfHx8n20ee+wxTJgw4aSM53TV2tqKzz77DOvWrUNraysmTJiA5cuXD/h6A6pUfOONN/DXv/4Vl1566YBvTEREREREw8DnBpq3Bl+37ADeuh6IywDu3TaswyIiotPbFVdcAafTiY8++ijs3Pr16zFjxgxs2rQJkyZNGobRndm6urpw11134e2334bf7wcAKJVKXH/99Xj++ecHXCA4oEpFi8WCUaNGDeiGREREREQ0jNy20GudBfC7g0EjERHRICxcuBAff/wx9u3bF3ZuxYoVmDBhwhkRKH766ae44oorkJmZCUEQ8Le//U123maz4e6770Z2djb0ej1KS0vx4osvHve67777LsrKyqDValFWVobVq1f3e0zf+9738OWXX+Kf//wnOjo60NnZiX/+85/4+uuvcdttt8X6ESUDChUfe+wxPP7443A6nQO+MRERERERDQN3V/BZbQTSxgKLdgF3fDa8YyIiov7x2GN/+H2h/n5f8JjX2b/rxuDyyy9HamoqVq1aJTvucDjwzjvvYOHChVH7tre3Y/78+UhISIDBYMAll1yC3bt393m/n//850hLS4PZbMbChQvhcrliGu+JYrfbMX78ePzud7+LeH7RokX4z3/+gzfeeANVVVVYtGgR7rnnHvz973+Pes3169fj+uuvx80334xt27bh5ptvxnXXXYcvv/yyX2N6//33sWLFClx88cWIi4uD2WzGxRdfjJdffhnvv//+gD4nMMDpz9deey3++Mc/IjU1Ffn5+VCr1bLzmzdvHvCAiIiIiIjoBHJbg89aM6DSAJbs4R0PERH131OZsfe5dhVQfnXw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a9aswaOPPorHH38cEyZMiFg2uX79eqjVaixZsgS33377CRkwERERERENQtmVwUePns1auFELERERxaDfoWJxcTH+/Oc/o6mpCX/+85/x6aef4osvvpCVTb788su49NJLw3axISIiIiKiU5RSG3xmqEhEREQxiHn35+zsbCxatAiLFi06EeMhIiIiIqIT6XBNsDoxLgtQaTj9mYiIiAaEJYVERERERGeS168Elk8ADlf///buPL6K6uD/+Gdm7pKbfYMsQNgEZFdAFNzABbVqbV1Ra7Fuj1Wr1m7aqtBf69KiPm3t8tTWrdrWpdpqRSu2Coi7CBYEkX1Lwhqy5y4z8/tjbm4SSICQhJDk+3695jV3Zs6cOTeMcfhyzhxvu374c0wTtYiIiMiBU6goIiIiItKT+EPgT2k0+7N6KoqIiEjrtXr4s4iIiIiIdGE3L266XTAGAo1CRhEREelWLr/8ck4++WSmTJnC0KFD261ehYoiIiIiIj3Zeb/p7BaIiIhIB0pNTeWhhx7i+uuvJz8/n5NPPjkRMh555JEHXW+rhj8vWbLkoC8kIiIiIiIiIiLd07nnnstpp53W7LH33nsPwzD45JNPDnGrBOD3v/89n3/+OcXFxTz00ENkZGTwy1/+kpEjR1JQUHDQ9bYqVBw3bhzjx4/nd7/7HeXl5Qd9URERERER6QQ718BjZ8IL13R2S0REpJu5+uqrefPNN9mwYcNexx577DGOOuooxo0b1wktk3ppaWlkZWWRlZVFZmYmPp+P/Pz8g66vVaHiO++8w7hx47j99tspKCjga1/7Gm+99dZBX1xERERERA6h6h2w8T3Y/FHDvpe/BbOHwOI/d167RESkyzvnnHPo3bs3TzzxRJP9NTU1PPvss1x99dUtnjtgwADuvfderrrqKtLS0igqKuKRRx5pUmbLli1ccsklZGVlkZOTw3nnncf69esBWLp0KaZpsmPHDgDKysowTZOLLroocf59993HpEmT2ufLdjE/+MEPOO6448jNzeXOO+8kEolwxx13sHXrVhYvXrz/ClrQqlBx0qRJ/OEPf6C0tJTf/e53bN68mdNOO43Bgwdzzz33sHnz5oNuiIiIiIiIdLBwpbduPClLuBKqt0GkqnPaJCIiB6wmWtPiErbDB1y2LlZ3QGVbw+fz8fWvf50nnngC13UT+59//nkikQiXX375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MOHuXQ37fUFvreHPIiKHDcMwKCgoYN26dWzYsKGzm9PtZWZmkp+f39nN6HI6NVScNWvWfgO9jz76iAkTJiS2i4uLOfPMM7nooou45pprmpQ16v+1tRHXdZvdX++OO+7gtttuS2xv2bKFESNGHOhXEBERERHpGiLV4AuBL9DQSxEahj+rp6KIyGElEAgwZMgQTUDbwfx+v3ooHqRODRVvuukmpk+fvs8yAwYMSHwuLi5m6tSpTJo0iUceeaRJufz8fD744IMm+8rKyohGo3v1YGwsGAwSDAYT2xUVFa34BiIiIiIiXUTOYLizFOxY0/3BdMgeDBl9O6ddIiLSItM0SUpK6uxmiDSrU0PF3NxccnNzD6jsli1bmDp1KuPHj+fxxx/f630CkyZN4p577qGkpISCggLAm7wlGAwyfvz4dm+7iIiIiEiXZO3xV4C+E+DmTzqnLSIiItJldYl3KhYXFzNlyhSKiop44IEH2L59e+JY/Zj3adOmMWLECK644gpmz57Nrl27+O53v8u1116rmZ9FRERERERERETaUZcIFefOncvq1atZvXo1ffs2HZbhui7gTbc+Z84cbrjhBo4//nhCoRCXXXYZDzzwQGc0WURERETk8LLq3/DhI9B/Epzw7c5ujYiIiHRxXSJUvPLKK7nyyiv3W66oqIhXXnml4xskIiIiItLV7FoDq14Hf6jp/t0b4a+XerNAX/tm57RNREREupwuESqKiIiIiEgbheMTEgbTmu53Hdi6DPzJh75NIiIi0mUpVBQRERER6QnCld46uMf7xlPz4Yq/gxU89G0SERGRLkuhooiIiIhIT5AIFffoqehPgsGnHPr2iIiISJdmdnYDRERERETkEGgpVBQRERE5COqpKCIiIiLSE7QUKjoOfPIk2FEYP8ObsEVERERkPxQqioiIiIj0BPvqqfjKrd561AUKFUVEROSAaPiziIiIiEhPkJj9eY+JWkwTzHhfAzt8aNskIiIiXZZCRRERERGRnmBfPRWtgLe2I4euPSIiItKlKVQUEREREekJ9hkq+r21HT107REREZEuTaGiiIiIiEhPoJ6KIiIi0o4UKoqIiIiIdHexcENg2GyoGGwoJyIiInIANPuziIiIiEh358Rg3Ayvt2Igde/jGv4sIiIiraRQUURERESkuwukwJd/1fJxDX8WERGRVtLwZxERERGR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JueWlZURjUb36sHYWDAYJBgMJrYrKipa/T1ERERERERERER6kk4NFXNzc8nNzd1vufHjxxMMBlm5ciUnnHACANFolPXr19O/f38AJk2axD333ENJSQkFBQWAN3lLMBhk/PjxHfclREREREREREREepguMftzeno6119/PTNnzqRfv37079+f2bNnA3DRRRcBMG3aNEaMGMEVV1zB7Nmz2bVrF9/97ne59tprNfOziIiIiIiIiIhIO+oSoSLA7Nmz8fl8XHHFFdTW1nLsscfy5ptvkpWVBYBlWcyZM4cbbriB448/nlAoxGWXXcYDDzzQyS0XERERERERERHpXgzXdd3ObsThZPPmzfTr149NmzbRt2/fzm6OiIiIiIiIiIh0EuVELevU2Z9FRERERERERESk61GoKCIiIiIiIiIiIq2iUFFERERERERERERaRaGiiIiIiIiIiIiItIpCRREREREREREREWkVhYoiIiIiIiIiIiLSKgoVRUREREREREREpFUUKoqIiIiIiIiIiEirKFQUERERERERERGRVlGoKCIiIiIiIiIiIq2iUFFERERERERERERaRaGiiIiIiIiIiIiItIpCRREREREREREREWkVhYoiIiIiIiIiIiLSKr7ObsDhxnEcAEpKSjq5JSIiIiIiIiIi0pnq86H6vEgaKFTcw6ZNmwCYOHFiJ7dEREREREREREQOB5s2baKoqKizm3FYMVzXdTu7EYeTXbt2kZOTw7Jly8jIyOjs5kgXVFlZyYgRI1i+fDlpaWmd3RzpgnQPSXvQfSRtpXtI2kr3kLQH3UfSVrqHpK3Ky8sZNWoUO3fuJDs7u7Obc1hRT8U9+Hzej6Rfv36kp6d3cmukK6qoqACgT58+uofkoOgekvag+0jaSveQtJXuIWkPuo+krXQPSVvV3zf1eZE00EQtIiIiIiIiIiIi0ioKFUVERERERERERKRVFCruIRgMMnPmTILBYGc3Rboo3UPSVrqHpD3oPpK20j0kbaV7SNqD7iNpK91D0la6h1qmiVpERERERERERESkVdRTUURERERERERERFpFoaKIiIiIiIiIiIi0ikJFERERERERERERaRWFiiIiIiIiIiIiItIq3SpUrKys5NZbb6V///6EQiEmT57MRx99lDjuui6zZs2isLCQUCjElClT+Oyzz/Zb7wsvvMCIESMI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Y8e6EydOdCORiOu6rnv//fe7GRkZ7osvvuguXbrUvfTSS92CggK3oqIiUccVV1zRZDaed955x7Usy73//vvdFStWuPfff7/r8/nc999/P1HmmWeecf1+v/voo4+6y5cvd2+99VY3JSXFXb9+/aH78tIuOuIe+tnPfuYGAgH3b3/7m1tSUpJYKisrE2W+853vuPPmzXPXrl3rvv/+++4555zjpqWl6R7qgjriHpo1a5b7r3/9y12zZo27ePFi9xvf+Ibr8/ncDz74IFFGv4e6l464j+qdcMIJ7iWXXNLsdfW7qPvY3z20c+dOd/Hixe6cOXNcwH3mmWfcxYsXuyUlJYk69EzUs3XEPaRnop6lI+4hPRP1PB1xH9XTM1HPsK97KBqNul/+8pfdvn37ukuWLGny/6ZwOJyoQ89ELetWoeKzzz7rDho0yA0EAm5+fr574403urt3704cdxzHnTlzppufn+8Gg0H3pJNOcpcuXdqkjpNPPtmdMWNGk33PP/+8O2zYMNfv97tHHnmk+8ILL+x17d/85jdu//793UAg4I4bN86dP39+h3xH6VgdcQ/179/fBfZaZs6cmShzySWXuAUFBa7f73cLCwvd888/3/3ss886+utKB+iIe+jWW291i4qK3EAg4Pbq1cudNm2a++677+51bf0e6j466v9nK1eudAF37ty5zV5Xv4u6j/3dQ48//vh+/9+kZ6KerSPuIT0T9SwdcQ/pmajn6aj/n+mZqOfY1z20bt26Zu8fwH3rrbcSdeiZqGWG67puR/WCFBERERERERERke6nW75TUURERERERERERDqOQkURERERERERERFpFYWKIiIiIiIiIiIi0ioKFUVERERERERERKRVFCqKiIiIiIiIiIhIqyhUFBERERERERERkVZRqCgiIiIiIiIiIiKtolBRREREREREREREWkWhooiIiEgXM2vWLI466qhOu/5dd93Fdddd12H1b9u2jV69erFly5YOu4aIiIiItI3huq7b2Y0QEREREY9hGPs8PmPGDH79618TDofJyck5RK1qsHXrVoYMGcJ///tfBgwY0GHXue2226ioqOCPf/xjh11DRERERA6eQkURERGRw0hpaWni87PPPsvdd9/NypUrE/tCoRAZGRmd0TQA7r33XubPn8/rr7/eoddZunQpEydOpLi4mKysrA69loiIiIi0noY/i4iIiBxG8vPzE0tGRgaGYey1b8/hz1deeSVf+cpXuPfee8nLyyMzM5Mf//jHxGIxvve975GdnU3fvn157LHHmlxry5YtXHLJJWRlZZGTk8N5553H+vXr99m+Z555hi9/+ctN9k2ZMoVvfetb3HrrrWRlZZGXl8cjjzxCdXU13/jGN0hLS2Pw4MG89tpriXPKysq4/PLL6dWrF6FQiCFDhvD4448njo8ePZr8/Hz+/ve/H/wPU0REREQ6jEJFERERkW7gzTffpLi4mAULFvDQQw8xa9YszjnnHLKysvjggw+4/vrruf7669m0aRMANTU1TJ06ldTUVBYsWMDChQtJTU3lzDPPJBKJNHuNsrIyli1bxoQJE/Y69uSTT5Kbm8uHH37It771Lb75zW9y0UUXMXnyZD755BPOOOMMrrjiCmpqagDvvYzLly/ntddeY8WKFfzud78jNze3SZ0TJ07k7bffbueflIiIiIi0B4WKIiIiIt1AdnY2v/rVrxg2bBhXXXUVw4YNo6amhh/+8IcMGTKEO+64g0AgwDvvvAN4PQ5N0+SPf/wjo0ePZvjw4Tz++ONs3LiRefPmNXuNDRs24LouhYWFex0bO3Ysd955Z+JaoVCI3Nxcrr32WoYMGcLdd9/Nzp07+e9//wvAxo0bOfroo5kwYQIDBgzgtNNO49xzz21SZ58+ffbbc1JEREREOoevsxsgIiIiIm03cuRITLPh34vz8vIYNWpUYtuyLHJycti2bRsAixYtYvXq1aSlpTWpp66ujjVr1jR7jdraWgCSkpL2OjZmzJi9rjV69Ogm7QES1//mN7/JBRdcwCeffMK0adP4yle+wuTJk5vUGQqFEj0bRUREROTwolBRREREpBvw+/1Ntg3DaHaf4zgAOI7D+PHj+fOf/7xXXb169Wr2GvXDk8vKyvYqs7/r189qXX/9s846iw0bNjBnzhz+/e9/c+qpp3LjjTfywAMPJM7ZtWtXi20RERERkc6l4c8iIiIiPdC4ceNYtWoVvXv35ogjjmiytDS79ODBg0lPT2f58uXt0oZevXpx5ZVX8vTTT/OLX/yCRx55pMnxZcuWcfTRR7fLtURERESkfSlUFBEREemBLr/8cnJzcznvvPN4++23WbduHfPnz+eWW25h8+bNzZ5jmiannXYaCxcubPP17777bl566SVWr17NZ599xiuvvMLw4cMTx2tqali0aBHTpk1r87VEREREpP0pVBQRERHpgZKTk1mwYAFFRUWcf/75DB8+nKuuuora2lrS09NbPO+6667jmWeeSQxjPliBQIA77riDMWPGcNJJJ2FZFs8880zi+EsvvURRUREnnnhim64jIiIiIh3DcF3X7exGiIiIiEjX4Louxx13HLfeeiuXXnpph11n4sSJ3HrrrVx22WUddg0REREROXjqqSgiIiIiB8wwDB555BFisViHXWPbtm1ceOGFHRpaioiIiEjbqKeiiIiIiIiIiIiItIp6KoqIiIiIiIiIiEirKFQUERERERERERGRVlGoKCIiIiIiIiIiIq2iUFFERERERERERERaRaGiiIiIiIiIiIiItIpCRREREREREREREWkVhYoiIiIiIiIiIiLSKgoVRUREREREREREpFUUKoqIiIiIiIiIiEir/H94/TP7hjaaswAAAABJRU5ErkJggg==", + "text/plain": [ + "<Figure size 1500x600 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax2 = ax.twinx()\n", + "\n", + "# Plot the potentials\n", + "ax.plot(t_ref, y_ref[:, 0], linestyle=\"-\", label=\"V ref.\")\n", + "ax.plot(t_old, y_old[:, 0], linestyle=\"-.\", label=\"V old\")\n", + "ax.plot(t_new, y_new[:, 0], linestyle=\"--\", label=\"V new\")\n", + "\n", + "# Plot the adaptation variables\n", + "ax2.plot(t_ref, y_ref[:, 1], linestyle=\"-\", c=\"k\", label=\"w ref.\")\n", + "ax2.plot(t_old, y_old[:, 1], linestyle=\"-.\", c=\"y\", label=\"w old\")\n", + "ax2.plot(t_new, y_new[:, 1], linestyle=\"--\", c=\"m\", label=\"w new\")\n", + "\n", + "ax.set_xlim([90.0, 92.0])\n", + "ax.set_ylim([-65.0, 40.0])\n", + "ax.set_xlabel(\"Time (ms)\")\n", + "ax.set_ylabel(\"V (mV)\")\n", + "ax2.set_ylim([17.5, 18.5])\n", + "ax2.set_ylabel(\"w (pA)\")\n", + "ax.legend(loc=5)\n", + "ax2.legend(loc=2)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compare properties at spike times" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "spike times:\n", + "-----------\n", + "ref [18.715 30.561 42.495 54.517 66.626 78.819 91.096]\n", + "old [18.73 30.59 42.54 54.58 66.71 78.92 91.22]\n", + "new [18.72 30.57 42.51 54.54 66.66 78.86 91.14]\n", + "\n", + "V at spike time:\n", + "---------------\n", + "ref [0.006 0.03 0.025 0.036 0.033 0.031 0.041]\n", + "old [ 6.128 5.615 6.107 10.186 17.895 4.997 20.766]\n", + "new [32413643.009 32591616.326 35974587.74 51016349.64 77907589.627\n", + " 37451353.635 11279320.152]\n", + "\n", + "w at spike time:\n", + "---------------\n", + "ref [ 7.359 9.328 11.235 13.08 14.864 16.589 18.256]\n", + "old [ 7.367 9.344 11.258 13.111 14.906 16.637 18.315]\n", + "new [ 7.362 9.334 11.244 13.093 14.883 16.611 18.278]\n" + ] + } + ], + "source": [ + "print(\"spike times:\\n-----------\")\n", + "print(\"ref\", np.around(s_ref, 3)) # ref lsodar\n", + "print(\"old\", np.around(s_old, 3))\n", + "print(\"new\", np.around(s_new, 3))\n", + "\n", + "print(\"\\nV at spike time:\\n---------------\")\n", + "print(\"ref\", np.around(vs_ref, 3)) # ref lsodar\n", + "print(\"old\", np.around(vs_old, 3))\n", + "print(\"new\", np.around(vs_new, 3))\n", + "\n", + "print(\"\\nw at spike time:\\n---------------\")\n", + "print(\"ref\", np.around(ws_ref, 3)) # ref lsodar\n", + "print(\"old\", np.around(ws_old, 3))\n", + "print(\"new\", np.around(ws_new, 3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Size of minimal integration timestep" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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feMb31CbNm2UlZWlSZMmad++fU3+7wYg+tFtH4ziAsxBcwefAUh8DuCOiM159sYbb2j06NHB30tKSiRJkydP1urVqzVhwgTt379fCxYs0J49e5Sfn69nn31WeXl5kSpCRB07UaveP1rn+PtuXTBWSfHNr5b3339fzz33nOLi4iRJjzzyiO68804tWbJEAwYM0JtvvqkbbrhBycnJmjx5svbs2aMLLrhAF110kW699Va1adNGR48e1ejRozVixAht3LhRPp9PP/7xj3XRRRfpb3/7m+Lj4yVJzz//vFJTU1VWVnYybGzk81588UV16NBBL774onbs2KEJEyaof//+uuGGGyRJ1157rV599VU9+OCD6tevn3bu3BkMx/bs2aNRo0bphhtu0KJFi3Ts2DHdfvvtuuqqq/TCCy+cyX96xAC6cJuNEAUAAHMwBx4AJ0UsPCssLDxtr6kZM2Y0aTghGud/n/0ftWnTRrW1tTp+/LgkadGiRZKku+++Ww888IDGjx8vSerSpYu2bt2q5cuXa/LkycrOzpbP51ObNm2UnZ0tSXr00Ufl8Xi0cuXK4EFp1apVSk9P10svvaSioiJJUnJyslauXBkMxRr7vLZt22rJkiXyer3q2bOnLr74Yj3//PO64YYbtH37dj311FMqKyvTBRdcIEnq2rVr8G9dtmyZBg4cqIULFwa3Pfroo+rUqZO2b98e7AEHAAAAAAAQCY6uthlNEuO82rpgrCvv21SjCgu1/OGHdfToUa1cuVLbt2/XTTfdpE8++US7d+/W1KlTg726JKmmpkZpaWlhX6+8vFw7duxQSkpKyPbjx4/rvffeC/7et2/fYHDWlOf16dNHXu+pv7NDhw7BlVQrKirk9Xo1atSosGV78cUX1aZNm3qPvffee4RnAAAAMYqORqC3GQC3EJ6FYVnWGQ2fdFJSUrK6d+8uSXrwwQc1evRozZ8/X7NmzZJ0cujm17/+9ZDn1A2vviwQCKigoECPPfZYvcfOOuus4M/JycnNet4XQ0q/YFmWAoGAJCkxMTFsub54j3Hjxunee++t91iHDh2+8rkAAAAAYgMxGgAnRUc6hCa58847VVxcrO985zs6++yz9f777+uaa65p9PMHDhyoNWvWqH379kpNTW3x59XVt29fBQIBbdiwIThs88vv8bvf/U6dO3eWz8fHF8ApnEQDABDb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", + "text/plain": [ + "<Figure size 1500x600 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.semilogy(t_ref, h_ref, label=\"Reference\")\n", + "plt.semilogy(t_old[1:], [d[\"hu\"] for d in fo_old], linewidth=2, label=\"Old\")\n", + "plt.semilogy(t_new[1:], [d[\"hu\"] for d in fo_new], label=\"New\")\n", + "\n", + "plt.legend(loc=6)\n", + "plt.show();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convergence towards LSODAR reference with step size\n", + "### Zoom out" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " lsoda-- warning..internal t (=r1) and h (=r2) are\u0000\u0000\n", + " such that in the machine, t + h = t on the next step \n", + " (h = step size). solver will continue anyway\u0000\u0000\n", + " in above, r1 = 0.6691731905434D+02 r2 = 0.4368716407574D-14\n", + " lsoda-- warning..internal t (=r1) and h (=r2) are\u0000\u0000\n", + " such that in the machine, t + h = t on the next step \n", + " (h = step size). solver will continue anyway\u0000\u0000\n", + " in above, r1 = 0.6691731905434D+02 r2 = 0.4368716407574D-14\n", + " lsoda-- warning..internal t (=r1) and h (=r2) are\u0000\u0000\n", + " such that in the machine, t + h = t on the next step \n", + " (h = step size). solver will continue anyway\u0000\u0000\n", + " in above, r1 = 0.6691731905434D+02 r2 = 0.4368716407574D-14\n", + " lsoda-- warning..internal t (=r1) and h (=r2) are\u0000\u0000\n", + " such that in the machine, t + h = t on the next step \n", + " (h = step size). solver will continue anyway\u0000\u0000\n", + " in above, r1 = 0.6691731905434D+02 r2 = 0.4368716407574D-14\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABOYAAAINCAYAAACar3BRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZfo+8PucaZmZ9IT0Rm9BCMESEAmCgAKiuIKLC7JEXGVRbLu6uCo2dBfbb13dtVEUWNCvrmtBBUsogiAIShMhEEJIQnqdTDvn/P4YCERSJgh5Z5L7c11zOTlzzuQeMiZnnvO+zytpmqaBiIiIiIiIiIiI2pUsOgAREREREREREVFnxMIcERERERERERGRACzMERERERERERERCcDCHBERERERERERkQAszBEREREREREREQnAwhwREREREREREZEALMwREREREREREREJwMIcERERERERERGRAHrRAXyNqqooKChAUFAQJEkSHYeIiIiIiIiIiATRNA01NTWIi4uDLJ//8W0szP1CQUEBEhMTRccgIiIiIiIiIiIfcezYMSQkJJz352Vh7heCgoIAeP7Bg4ODBachIiIiIiIiIiJRqqurkZiY2FAvOt9YmPuFU9NXg4ODWZgjIiIiIiIiIqIL1u6Miz8QEREREREREREJwMIcERERERERERGRACzMERERERERERERCcAec+dAURS4XC7RMagT0Ol00Ov1F2wuOxERERERERGJw8JcG9XW1iI/Px+apomOQp2ExWJBbGwsjEaj6ChEREREREREdB6xMNcGiqIgPz8fFosFXbp04SgmuqA0TYPT6URJSQmOHDmCnj17QpY5+5yIiIiIiIioo2Bhrg1cLhc0TUOXLl1gNptFx6FOwGw2w2Aw4OjRo3A6nQgICBAdiYiIiIiIiIjOEw6/OQccKUftiaPkiIiIiIiIiDomfuInIiIiIiIiIiISgIU5IiIiIiIiIiIiAViYo/POZrPhhhtuQHBwMCRJQmVlpehIREREREREREQ+h4W5Dm7ixIkYPXp0k49t2bIFkiTh+++/P6/fc9myZdi4cSM2b96MwsJChISEnNfnJyIiIiIiIiLqCFiY6+CysrLw1Vdf4ejRo2c9tnjxYgwaNAiDBw/26rmcTqdX++Xk5KBv375ITU1FTEwMF8sgIiIiIiIiImoCC3O/gqZp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IiIiIiLNYyrrkCFD2Lt37yHH7rrrLr766iv69esHQDAYZMyYMSQnJzN37lwKCwu55JJLsG2bJ5544he3mUEkAdtmZa8gp54/vl4eh4iIiIiIiIiIyHeaRTDndrtJTU2t+93v9zNlyhSuvfZaDMMA4Msvv2Tt2rXk5eWRnp4OwMMPP8yll17K/fffT0xMzC9q07ItlnSp4czzT6i/ByIiIiIiIiIiInJQs5jK+r+mTJnCgQMHuPTSS+uOLViwgB49etSFcgAnnngiNTU15Obm/ui1ampqKCsrO+QHYLVvEWdeplBOREREREREREQaRrMM5l588UVOPPFE2rZtW3csPz+flJSUQ86Lj4/H7XaTn5//o9d64IEHiI2Nrfv57pqj/3FjwxQvIiIiIiIiIiJCiIO5e++990c3dfjuZ8mSJYfcZ9euXXzxxRdcfvnl37ved9Na/z/btn/w+Hduv/12SktL637y8vJ++wMTERERERERERH5GSFdY+7aa6/l3HPP/clz2rVrd8jvL7/8MomJiZxyyimHHE9NTWXhwoWHHCsuLsbv939vJN3/5/F48Hg8v6xwERERERERERGR3yikwVxSUhJJSUmHfb5t27z88stcfPHFuFyuQ24bPHgw999/P3v37iUtLQ2o3RDC4/HQt2/feq1bRERERERERETkt2pWa8x98803bNu27QensY4aNYpu3bpx0UUXsWzZMr7++mtuvvlmrrjiil+8I6uIiIiIiIiIiEhDa1bB3IsvvsiQIUPIzs7+3m0Oh4NPP/2UsLAwhg4dytlnn81pp53GQw89FIJKRUREREREREREfpph27Yd6iKakrKyMmJjYyktLdVIOxERERERERGRI1hD50TNasSciIiIiIiIiIhIS6FgTkREREREREREJAQUzImIiIiIiIiIiISAgjkREREREREREZEQUDAnIiIiIiIiIiISAgrmREREREREREREQkDBnIiIiIiIiIiISAgomBMREREREREREQkBBXMiIiIiIiIiIiIhoGBOREREREREREQkBBTMiYiIiIiIiIiIhICCORERERERERERkRBQMCciIiIiIiIiIhICzlAX0NTYtg1AWVlZiCsREREREREREZFQ+i4f+i4vqm8K5v5HYWEhAG3btg1xJSIiIiIiIiIi0hQUFhYSGxtb79dVMPc/EhISANi5c2eD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+eabycnJ+d4GaT/rV+0l20I99dRTdmZmpu12u+2jjjrKnjVrVqhLEjniAD/48/LLL9edY1mWfc8999ipqam2x+Oxhw8fbq9atSp0RYscwY455hj7+uuvr/td/VMktD755BO7R48etsfjsbt27WpPmjTpkNvVR0VCp6yszL7++uvtjIwMOywszO7QoYN9xx132DU1NXXnqI+KNI4ZM2b84OfOSy65xLbtw+uLXq/Xvvbaa+2EhAQ7PDzcHjt2rL1z585fXIth27b9m6NGERERERERERER+UW0xpyIiIiIiIiIiEgIKJgTEREREREREREJAQVzIiIiIiIiIiIiIaBgTkREREREREREJAQUzImIiIiIiIiIiISAgjkREREREREREZEQUDAnIiIiIiIiIiISAgrmREREREREREREQkDBnIiIiEgzc++999K7d++QtX/XXXdx5ZVXNtj1CwoKSE5OZvfu3Q3WhoiIiEhTYNi2bYe6CBERERGpZRjGT95+ySWX8OSTT1JTU0NiYmIjVfVf+/btIysri5UrV9KuXbsGa+fGG2+krKyMF154ocHaEBEREQk1BXMiIiIiTUh+fn7df7/99tvcfffdbNiwoe5YeHg4sbGxoSgNgIkTJzJr1iy++OKLBm1n1apVDBgwgD179hAfH9+gbYmIiIiEiqayioiIiDQhqampdT+xsbEYhvG9Y/87lfXSSy/ltNNOY+LEiaSkpBAXF8d9991HIBDglltuISEhgTZt2vDSSy8d0tbu3bs555xziI+PJzExkVNPPZXt27f/ZH2TJ0/mlFNOOeTYiBEjuO6665gwYQLx8fGkpKQwadIkKisr+f3vf090dDQdO3bk888/r7tPcXExF1xwAcnJyYSHh5OVlcXLL79cd3tOTg6pqal8+OGHv/4fU0RERKSJUzAnIiIi0gJ888037Nmzh9mzZ/PII49w7733MnbsWOLj41m4cCHjx49n/Pjx5OXlAVBVVcWxxx5LVFQUs2fPZu7cuURFRXHSSSfh8/l+sI3i4mJWr15Nv379vnfbK6+8QlJSEosWLeK6667jqquu4qyzzmLIkCEsXbqUE088kYsuuoiqqiqgdp26tWvX8vnnn7Nu3TqeeeYZkpKSDrnmgAEDmDNnTj3/S4mIiIg0HQrmRERERFqAhIQEHn/8cbp06cJll11Gly5dqKqq4i9/+QtZWVncfvvtuN1u5s2bB9SOfDNNkxdeeIGcnByys7N5+eWX2blzJzNnzvzBNnbs2IFt26Snp3/vtl69enHnnXfWtRUeHk5SUhJXXHEFWVlZ3H333RQWFrJy5UoAdu7cSZ8+fejXrx/t2rVj5MiRjBs37pBrtm7d+mdH8ImIiIg0Z85QFyAiIiIiv1337t0xzf9+55qSkkKPHj3qfnc4HCQmJlJQUABAbm4umzdvJjo6+pDrVFdXs2XLlh9sw+v1AhAWFva923r27Pm9tnJycg6pB6hr/6qrruKMM85g6dKljBo1itNOO40hQ4Yccs3w8PC6EXYiIiIiLZGCOREREZEWwOVyHfK7YRg/eMyyLAAsy6Jv37688cYb37tWcnLyD7bx3VTT4uLi753zc+1/t9vsd+2PHj2aHTt28Omnn/LVV19x/PHHc8011/DQQw/V3aeoqOhHaxERERFpCTSVVUREROQIdNRRR7Fp0yZatWpFp06dDvn5sV1fO3bsSExMDGvXrq2XGpKTk7n00kt5/fXXefTRR5k0adIht69evZo+ffrUS1siIiIiTZGCOREREZEj0AUXXEBSUhKnnnoqc+bMYdu2bcyaNYvrr7+eXbt2/eB9TNNk5MiRzJ079ze3f/fdd/Pxxx+zefNm1qxZw9SpU8nOzq67vaqqitzcXEaNGvWb2xIRERFpqhTMiYiIiByBIiIimD17NhkZGZx++ulkZ2dz2WWX4fV6iYmJ+dH7XXnllUyePLluSuqv5Xa7uf322+nZsyfDhw/H4XAwefLkuts//vhjMjIyOProo39TOyIiIiJNmWHbth3qIkRERESkebBtm0GDBjFhwgTOO++8BmtnwIABTJgwgfPPP7/B2hAREREJNY2YExEREZHDZhgGkyZNIhAINFgbBQUFnHnmmQ0a/ImIiIg0BRoxJyIiIiIiIiIiEgIaMSciIiIiIiIiIhICCuZERERERERERERCQMGciIiIiIiIiIhICCiYExERERERERERCQEFcyIiIiIiIiIiIiGgYE5ERERERERERCQEFMyJiIiIiIiIiIiEgII5ERERERERERGREFAwJyIiIiIiIiIiEgL/B1dYGguviZxMAAAAAElFTkSuQmCC", + "text/plain": [ + "<Figure size 1500x600 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t_ref, y_ref[:, 0], label=\"V ref.\")\n", + "resolutions = (0.1, 0.01, 0.001)\n", + "di_res = {}\n", + "\n", + "for resolution in resolutions:\n", + " t_old, y_old, _, _, _, _ = scipy_aeif(p, rhs_aeif_old, simtime, resolution)\n", + " t_new, y_new, _, _, _, _ = scipy_aeif(p, rhs_aeif_new, simtime, resolution)\n", + " di_res[resolution] = (t_old, y_old, t_new, y_new)\n", + " plt.plot(t_old, y_old[:, 0], linestyle=\":\", label=\"V old, r={}\".format(resolution))\n", + " plt.plot(t_new, y_new[:, 0], linestyle=\"--\", linewidth=1.5, label=\"V new, r={}\".format(resolution))\n", + "plt.xlim(0.0, simtime)\n", + "plt.xlabel(\"Time (ms)\")\n", + "plt.ylabel(\"V (mV)\")\n", + "plt.legend(loc=2)\n", + "plt.show();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zoom in" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABO0AAAINCAYAAABiT4umAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXhU5fnG8e8s2TeyEAKBBJAdREKwGhAhgogKpWKBFgQpEauIotRWpa2iFbQF1F+tWjcWBQtarXVBBcWwCIogVPZNdghhCQkhy2zn98ckAyHrJBOSwP25rlzMnHPeM8+grZN7nvd9TYZhGIiIiIiIiIiIiEi9Ya7rAkRERERERERERKQkhXYiIiIiIiIiIiL1jEI7ERERERERERGRekahnYiIiIiIiIiISD2j0E5ERERERERERKSeUWgnIiIiIiIiIiJSzyi0ExERERERERERqWcU2omIiIiIiIiIiNQz1rouoL5xuVwcOXKEsLAwTCZTXZcjIiIiIiIiIiJ1xDAMzpw5Q7NmzTCbL27vm0K7Cxw5coQWLVrUdRkiIiIiIiIiIlJPHDx4kObNm1/U11Rod4GwsDDA/Q8jPDy8jqsREREREREREZG6kpOTQ4sWLTx50cWk0O4CxVNiw8PDFdqJiIiIiIiIiEidLKGmjShERERERERERETqGYV2IiIiIiIiIiIi9YxCOxERERERERERkXpGa9pVg9PpxG6313UZchmwWCxYrdY6mTsvIiIiIiIiInVHoZ2XcnNzOXToEIZh1HUpcpkIDg6madOm+Pv713UpIiIiIiIiInKRKLTzgtPp5NChQwQHB9O4cWN1P0mtMgwDm83G8ePH2bt3L23btsVs1ox2ERERERERkcuBQjsv2O12DMOgcePGBAUF1XU5chkICgrCz8+P/fv3Y7PZCAwMrOuSREREREREROQiuCTbdl5++WVatWpFYGAgycnJrFy50qf3V4edXEzqrhMRERERERG5/FxyacCiRYt48MEH+eMf/8iGDRvo3bs3N998MwcOHKjr0kRERERERERERKrkkgvtnnvuOdLS0rjrrrvo2LEjL7zwAi1atOCVV16p69JERERERERERESq5JIK7Ww2G+vXr2fAgAEljg8YMIDVq1eXOaawsJCcnJwSP1IzeXl53H777YSHh2MymTh9+nRdlyQiIiLi8f2+U9z0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", + "text/plain": [ + "<Figure size 1500x600 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t_ref, y_ref[:, 0], label=\"V ref.\")\n", + "for resolution in resolutions:\n", + " t_old, y_old = di_res[resolution][:2]\n", + " t_new, y_new = di_res[resolution][2:]\n", + " plt.plot(t_old, y_old[:, 0], linestyle=\"--\", label=\"V old, r={}\".format(resolution))\n", + " plt.plot(t_new, y_new[:, 0], linestyle=\"-.\", linewidth=2.0, label=\"V new, r={}\".format(resolution))\n", + "plt.xlim(90.0, 92.0)\n", + "plt.ylim([-62.0, 2.0])\n", + "plt.xlabel(\"Time (ms)\")\n", + "plt.ylabel(\"V (mV)\")\n", + "plt.legend(loc=2)\n", + "plt.show();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------------------\n", + "### License\n", + "\n", + "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", + "\n", + "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", + "\n", + "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/htmldoc/model_details/astrocyte_model_implementation.ipynb b/doc/htmldoc/model_details/astrocyte_model_implementation.ipynb new file mode 100644 index 0000000000..f75876799f --- /dev/null +++ b/doc/htmldoc/model_details/astrocyte_model_implementation.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "17ef5228", + "metadata": {}, + "source": [ + "# NEST implementation of the `astrocyte_lr_1994` model\n", + "\n", + "The purpose of this notebook is to provide a reference solution for the the _astrocyte_lr_1994_ model in NEST. The model is based on Li, Y. X., & Rinzel, J. (1994), De Young, G. W., & Keizer, J. (1992), and Nadkarni, S., & Jung, P. (2003).\n", + "\n", + "This notebook demonstrates how the dynamics of _astrocyte_lr_1994_ is implemented, and generates a recording of the dynamics (test_astrocyte.dat). This recording serves as a reference for the verification of _astrocyte_lr_1994_ using test_astrocyte.py in the PyNEST tests.\n", + "\n", + "## The problem\n", + "\n", + "The equations governing the evolution of the astrocyte model are\n", + "\n", + "$$\\left\\lbrace\\begin{array}{rcl}\n", + " \\frac{d[\\mathrm{Ca^{2+}}](t)}{dt} &=& J_{\\mathrm{channel}}(t) - J_{\\mathrm{pump}}(t) + J_{\\mathrm{leak}}(t) \\\\\n", + " J_{\\mathrm{channel}}(t) &=& \\mathrm{r_{ER,cyt}} \\cdot \\mathrm{v_{IP_3R}} \\cdot m_{\\infty}(t)^3 \\cdot n_{\\infty}(t)^3\\cdot h_{\\mathrm{\\mathrm{IP_3R}}}(t)^3 \\cdot \\left([\\mathrm{Ca^{2+}}]_{\\mathrm{ER}} - [\\mathrm{Ca^{2+}}](t)\\right) \\\\\n", + " J_{\\mathrm{pump},k}(t) &=& \\frac{\\mathrm{v_{SERCA}} \\cdot [\\mathrm{Ca^{2+}}](t)^2}{K_{\\mathrm{m,SERCA}}^2+[\\mathrm{Ca^{2+}}](t)^2} \\\\\n", + " J_{\\mathrm{leak}}(t) &=& \\mathrm{r_{ER,cyt}} \\cdot \\mathrm{v_L} \\cdot \\left( [\\mathrm{Ca^{2+}}]_{\\mathrm{ER}}(t) - [\\mathrm{Ca^{2+}}](t) \\right) \\\\\n", + " m_{\\infty}(t) &=& \\frac{[\\mathrm{IP_3}](t)}{[\\mathrm{IP_3}](t) + \\mathrm{K_{d,IP_3,1}}} \\\\\n", + " n_{\\infty}(t) &=& \\frac{[\\mathrm{Ca^{2+}}](t)}{[\\mathrm{Ca^{2+}}](t) + \\mathrm{K_{d,act}}} \\\\\n", + " [\\mathrm{Ca^{2+}}]_{\\mathrm{ER}}(t) &=& \\frac{[\\mathrm{Ca^{2+}}]_{\\mathrm{tot}}-[\\mathrm{Ca^{2+}}](t)}{\\mathrm{r_{ER,cyt}}} \\\\\n", + " \\frac{dh_{\\mathrm{IP_3}}(t)}{dt} &=& \\alpha_{h_{\\mathrm{IP_3}}}(t) \\cdot (1-h_{\\mathrm{IP_3}}(t)) - \\beta_{h_{\\mathrm{IP_3}}}(t) \\cdot h_{\\mathrm{IP_3}} (t) \\\\\n", + " \\alpha_{h_{\\mathrm{IP_3}}}(t) &=& \\mathrm{k_{IP_3R}} \\cdot \\mathrm{K_{d,inh}} \\cdot \\frac{[\\mathrm{IP_3}](t) + \\mathrm{K_{d,IP_3,1}}}{[\\mathrm{IP_3}](t)+\\mathrm{K_{d,IP_3,2}}} \\\\\n", + " \\beta_{h_{\\mathrm{IP_3}}}(t) &=& \\mathrm{k_{IP_3R}} \\cdot [\\mathrm{Ca^{2+}}](t) \\\\\n", + " \\frac{d[\\mathrm{IP_3}](t)}{dt} &=& \\frac{[\\mathrm{IP_3}]^{*} - [\\mathrm{IP_3}](t)}{\\tau_\\mathrm{IP_3}} + \\Delta_\\mathrm{IP3} \\cdot J_\\mathrm{syn}(t)\n", + "\\end{array}\\right.$$\n", + "\n", + "where $[\\mathrm{IP_3}]$, $[\\mathrm{Ca^{2+}}]$, and $h_{\\mathrm{IP_3}}$ are the state variables of interest." + ] + }, + { + "cell_type": "markdown", + "id": "622a93cb", + "metadata": {}, + "source": [ + "## Technical details and requirements\n", + "\n", + "### Implementation of the functions\n", + "\n", + "* The reference solution is implemented through [scipy](http://www.scipy.org/).\n", + "\n", + "### Requirements\n", + "\n", + "To run this notebook, you need:\n", + "\n", + "* [numpy](http://www.numpy.org/) and [scipy](http://www.scipy.org/)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "76d05384", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from scipy.integrate import odeint" + ] + }, + { + "cell_type": "markdown", + "id": "17cecb4d", + "metadata": {}, + "source": [ + "## Reference solution\n", + "### Right hand side function" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "967b18fb", + "metadata": {}, + "outputs": [], + "source": [ + "def rhs(y, _, p):\n", + " \"\"\"\n", + " Implementation of astrocyte dynamics.\n", + "\n", + " Parameters\n", + " ----------\n", + " y : list\n", + " Vector containing the state variables [IP3, Ca, h_IP3R]\n", + " _ : unused var\n", + " p : Params instance\n", + " Object containing the astrocyte parameters.\n", + "\n", + " Returns\n", + " -------\n", + " dCa : double\n", + " Derivative of Ca\n", + " dIP3 : double\n", + " Derivative of IP3\n", + " dh_IP3R : double\n", + " Derivative of h_IP3R\n", + " \"\"\"\n", + " IP3 = y[0]\n", + " Ca = y[1]\n", + " h_IP3R = y[2]\n", + "\n", + " Ca = max(0, min(Ca, p.Ca_tot * (1 + p.ratio_ER_cyt)))\n", + " alpha = p.k_IP3R * p.Kd_inh * (IP3 + p.Kd_IP3_1) / (IP3 + p.Kd_IP3_2)\n", + " beta = p.k_IP3R * Ca\n", + " Ca_ER = (p.Ca_tot - Ca) / p.ratio_ER_cyt\n", + " m_inf = IP3 / (IP3 + p.Kd_IP3_1)\n", + " n_inf = Ca / (Ca + p.Kd_act)\n", + " J_ch = p.ratio_ER_cyt * p.rate_IP3R * ((m_inf * n_inf * h_IP3R) ** 3) * (Ca_ER - Ca)\n", + " J_pump = p.rate_SERCA * (Ca**2) / (p.Km_SERCA**2 + Ca**2)\n", + " J_leak = p.ratio_ER_cyt * p.rate_L * (Ca_ER - Ca)\n", + "\n", + " dCa = J_ch - J_pump + J_leak\n", + " dIP3 = (p.IP3_0 - IP3) / p.tau_IP3\n", + " dh_IP3R = alpha * (1 - h_IP3R) - beta * h_IP3R\n", + "\n", + " return dIP3, dCa, dh_IP3R" + ] + }, + { + "cell_type": "markdown", + "id": "6f9246f9", + "metadata": {}, + "source": [ + "### Complete model" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6276334c", + "metadata": {}, + "outputs": [], + "source": [ + "def scipy_astrocyte(p, f, simtime, dt, spk_ts, spk_ws):\n", + " \"\"\"\n", + " Complete astrocyte model using scipy `odeint` solver.\n", + "\n", + " Parameters\n", + " ----------\n", + " p : Params instance\n", + " Object containing the astrocyte parameters.\n", + " f : function\n", + " Right-hand side function\n", + " simtime : double\n", + " Duration of the simulation (will run between\n", + " 0 and tmax)\n", + " dt : double\n", + " Time increment.\n", + " spk_ts, spk_ws : list\n", + " Times and weights of spike input to the astrocyte\n", + "\n", + " Returns\n", + " -------\n", + " t : list\n", + " Times at which the astrocyte state was evaluated.\n", + " y : list\n", + " State values associated to the times in `t`\n", + " fos : list\n", + " List of dictionaries containing additional output\n", + " information from `odeint`\n", + " \"\"\"\n", + " t = np.arange(0, simtime, dt) # time axis\n", + " n = len(t)\n", + " y = np.zeros((n, 3)) # state variables: IP3, Ca, h_IP3R\n", + " # for the state variables, assign the same initial values as in test_astrocyte.py\n", + " y[0, 0] = 1.0\n", + " y[0, 1] = 1.0\n", + " y[0, 2] = 1.0\n", + " fos = [] # full output dict from odeint()\n", + " delta_ip3 = 5.0 # parameter determining the increase in IP3 induced by synaptic input\n", + "\n", + " # update time-step by time-step\n", + " for k in range(1, n):\n", + " # solve ODE from t_k-1 to t_k\n", + " d, fo = odeint(f, y[k - 1, :], t[k - 1 : k + 1], (p,), full_output=True)\n", + " y[k, :] = d[1, :]\n", + "\n", + " # apply synaptic inputs (spikes)\n", + " if t[k] in spk_ts:\n", + " y[k, 0] += delta_ip3 * spk_ws[spk_ts.index(t[k])]\n", + "\n", + " fos.append(fo)\n", + "\n", + " return t, y, fos" + ] + }, + { + "cell_type": "markdown", + "id": "246ef086", + "metadata": {}, + "source": [ + "### Parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3fb81ba9", + "metadata": {}, + "outputs": [], + "source": [ + "astro_param = {\n", + " \"Ca_tot\": 2.0,\n", + " \"IP3_0\": 0.16,\n", + " \"Kd_act\": 0.08234,\n", + " \"Kd_inh\": 1.049,\n", + " \"Kd_IP3_1\": 0.13,\n", + " \"Kd_IP3_2\": 0.9434,\n", + " \"Km_SERCA\": 0.1,\n", + " \"ratio_ER_cyt\": 0.185,\n", + " \"delta_IP3\": 5.0,\n", + " \"k_IP3R\": 0.0002,\n", + " \"rate_L\": 0.00011,\n", + " \"tau_IP3\": 7142.0,\n", + " \"rate_IP3R\": 0.006,\n", + " \"rate_SERCA\": 0.0009,\n", + "}\n", + "\n", + "\n", + "class Params:\n", + " \"\"\"\n", + " Class giving access to the astrocyte parameters.\n", + " \"\"\"\n", + "\n", + " def __init__(self):\n", + " self.params = astro_param\n", + " self.Ca_tot = astro_param[\"Ca_tot\"]\n", + " self.IP3_0 = astro_param[\"IP3_0\"]\n", + " self.Kd_act = astro_param[\"Kd_act\"]\n", + " self.Kd_inh = astro_param[\"Kd_inh\"]\n", + " self.Kd_IP3_1 = astro_param[\"Kd_IP3_1\"]\n", + " self.Kd_IP3_2 = astro_param[\"Kd_IP3_2\"]\n", + " self.Km_SERCA = astro_param[\"Km_SERCA\"]\n", + " self.ratio_ER_cyt = astro_param[\"ratio_ER_cyt\"]\n", + " self.delta_IP3 = astro_param[\"delta_IP3\"]\n", + " self.k_IP3R = astro_param[\"k_IP3R\"]\n", + " self.rate_L = astro_param[\"rate_L\"]\n", + " self.tau_IP3 = astro_param[\"tau_IP3\"]\n", + " self.rate_IP3R = astro_param[\"rate_IP3R\"]\n", + " self.rate_SERCA = astro_param[\"rate_SERCA\"]\n", + "\n", + "\n", + "p = Params()" + ] + }, + { + "cell_type": "markdown", + "id": "854edc71", + "metadata": {}, + "source": [ + "### Simulate the implementation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c83f56f0", + "metadata": {}, + "outputs": [], + "source": [ + "# Parameters for the simulation\n", + "simtime = 100.0\n", + "resolution = 0.1\n", + "spike_times = [10.0]\n", + "spike_weights = [1.0]\n", + "\n", + "# Simulate and get the recording\n", + "t, y, fos = scipy_astrocyte(p, rhs, simtime, resolution, spike_times, spike_weights)\n", + "data = np.concatenate((np.array([t]).T, y), axis=1)\n", + "\n", + "# Save the recording (excluding the initial values)\n", + "np.savetxt(\n", + " \"test_astrocyte.dat\",\n", + " data[1:, :],\n", + " header=\"\"\"\\ntest_astrocyte.dat\\n\n", + "This file is part of NEST.\\n\n", + "This .dat file contains the recordings of the state variables of an\n", + "astrocyte, simulated using the ODEINT solver of SciPy, with the\n", + "implementation detailed in\n", + "``doc/htmldoc/model_details/astrocyte_model_implementation.ipynb``.\n", + "This data is used as reference for the tests in ``test_astrocyte.py``.\\n\n", + " Times IP3 Ca h_IP3R \"\"\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "df8ff655", + "metadata": {}, + "source": [ + "-----------------------------\n", + "### License\n", + "\n", + "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", + "\n", + "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", + "\n", + "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/doc/htmldoc/model_details/hh_details.rst b/doc/htmldoc/model_details/hh_details.rst new file mode 100644 index 0000000000..0c282c41ed --- /dev/null +++ b/doc/htmldoc/model_details/hh_details.rst @@ -0,0 +1,56 @@ +.. _hh_details: + +How NEST generates spikes in Hodgkin-Huxley style models +======================================================== + + + + +The way in which Hogkin-Huxley style neuron models in NEST generate outgoing spikes is not trivial. In particular when implementing new HH-style models, for example via NESTML, this can lead to confusing observations, where spikes recorded by a ``spike_recorder`` seem to disagree with membrane potential traces recorded with a ``voltmeter``. This document addresses the underlying challenges. + +The original Hodgkin-Huxley model is not a model of a neuron, but a model for spike propagation down the squid axon. +In this model, there is no such thing as a singular spike in the sense we commonly use it when discussing +integrate-and-fire point neuron models. + +In the HH model, under certain conditions, we have a rapidly rising sodium current depolarizing the membrane up to around +30 mV, +followed by a rapidly activating potassium current repolarizing the membrane again towards -70 mV. +The resulting membrane potential excursion looks like a spike, but the dynamics are entirely continuous and described by the +Hogkin-Huxley ordinary differential equations (ODEs). +These ODEs also incorporate the refractory mechanism. +If one creates a chain of HH-compartments, activation will thus travel one way, again as an entirely continuous process. +Only when the activation reaches an axon terminal will something new happen: exocytosis of transmitter substances into the synaptic cleft. + +In contrast, typical point-neuron models have, on one hand, the sub-threshold membrane potential dynamics, described by continuous ODEs, +and some threshold condition, on the other hand. When the threshold condition is met, +we say the neuron emits a spike (in the sense of a singular event causing exocytosis at axon terminals), +and typically some reset mechanism applies, followed by some refractory mechanism. + +When we now force the HH model into this point-neuron framework (subthreshold dynamics + threshold mechanism + reset + refractoriness), the modeler needs to make choices. +For the subthreshold dynamics, one will usually use the HH equations, since this is a HH model, after all. + +For the threshold mechanism, various choices would be possible, but somehow one needs to detect the fast rise followed by fast fall of the membrane potential. +In the built-in ``hh_psc_alpha model``, this is done by + +.. code-block:: cpp + + else if ( S_.y_[ State_::V_M ] >= 0 and U_old > S_.y_[ State_::V_M ] ) // ( threshold and maximum ) + +The first criterion makes sure that we are well into the rising flank of the Na-driven depolarization; the second criterion ensures that +we have just passed the maximum of that excursion. +For the reset, ``hh_psc_alpha`` does nothing, which makes sense, since the subthreshold HH dynamics have the reset built in—the `K` current. +For refractoriness, ``hh_psc_alpha`` has a fixed refractory time (2 ms by default). In this model, the only effect of refractoriness is that it prohibits spiking. +The subthreshold dynamics evolve freely during refractoriness. This again makes sense, since the HH dynamics have refractoriness built in. +This is different in iaf-models, where the membrane potential is typically clamped to a reset potential during refractoriness. + +Now the latter point raises the question of why ``hh_psc_alpha`` has an explicit refractory mechanism even though the HH-dynamics include refractory effects already. +The reason is technical. Given that the Na-current will push the membrane potential to around +30 mV, +it will take several time steps before the K-current will pull the potential to below 0 mV again. Then, if + +.. code-block:: cpp + + S_.y_[ State_::V_M ] >= 0 and U_old > S_.y_[ State_::V_M ] + +is the criterion for spike emission, a spike would be emitted for every time step during the downward flank of the membrane potential excursion until :math:`V_m < 0` again. +This might take the effect of the action potential shape showing one spike, but spike recorder showing several spikes with no synchronicity between them. +The refractory period in NEST's ``hh_psc_alpha`` simply suppresses these spikes during the downward flank. +A better criterion could be to not just compare V_m at two points in time but at three time steps to look for an actual maximum. diff --git a/doc/htmldoc/model_details/index.rst b/doc/htmldoc/model_details/index.rst new file mode 100644 index 0000000000..398dd7e95a --- /dev/null +++ b/doc/htmldoc/model_details/index.rst @@ -0,0 +1,10 @@ +:orphan: + +Model details +============= + +.. toctree:: + :hidden: + :glob: + + * diff --git a/doc/htmldoc/model_details/noise_generator.ipynb b/doc/htmldoc/model_details/noise_generator.ipynb new file mode 100644 index 0000000000..67e15bb667 --- /dev/null +++ b/doc/htmldoc/model_details/noise_generator.ipynb @@ -0,0 +1,964 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The NEST `noise_generator`\n", + "\n", + "#### Hans Ekkehard Plesser, 2015-06-25\n", + "\n", + "This notebook describes how the NEST `noise_generator` model works and what effect it has on model neurons.\n", + "\n", + "NEST needs to be in your `PYTHONPATH` to run this notebook.\n", + "\n", + "## Basics\n", + "\n", + "The `noise_generator` emits \n", + "\n", + "1. a piecewise constant current \n", + "1. that changes at fixed intervals $\\delta$. \n", + "1. For each interval, a new amplitude is chosen from the normal distribution.\n", + "1. Each target neuron receives a different realization of the current.\n", + "\n", + "To be precise, the output current of the generator is given by\n", + "\n", + "$$I(t) = \\mu + \\sigma N_j \\qquad\\text{with $j$ such that}\\quad j\\delta < t \\leq (j+1)\\delta$$\n", + "\n", + "where $N_j$ is the value drawn from the zero-mean unit-variance normal distribution for interval $j$ containing $t$. \n", + "\n", + "When using the generator with modulated variance, the noise current is given by\n", + "\n", + "$$I(t) = \\mu + \\sqrt{\\sigma^2 + \\sigma_m^2\\sin(2\\pi f j\\delta + \\frac{2\\pi}{360}\\phi_d)} N_j \\;.$$\n", + "\n", + "Mathematical symbols match model parameters as follows\n", + "\n", + "|Symbol|Parameter|Unit|Default|Description|\n", + "|------|:--------|:---|------:|:----------|\n", + "|$\\mu$|`mean`|pA|0 pA|mean of the noise current amplitude|\n", + "|$\\sigma$|`std`|pA|0 pA|standard deviation of the noise current amplitude|\n", + "|$\\sigma_m$|`std_mod`|pA|0 pA|modulation depth of the std. deviation of the noise current amplitude|\n", + "|$\\delta$|`dt`|ms|1 ms|interval between current amplitude changes|\n", + "|$f$|`frequency`|Hz|0 Hz| frequency of variance modulation|\n", + "|$\\phi_d$|`phase`|[deg]|0$^{\\circ}$| phase of variance modulation|\n", + "\n", + "For the remainder of this document, we will only consider the current at time points $t_j=j\\delta$ and define\n", + "\n", + "$$I_j = I(t_j+) = \\mu + \\sigma N_j $$\n", + "\n", + "and correspondingly for the case of modulated noise. Note that $I_j$ is thus the current emitted during $(t_j, t_{j+1}]$, following NEST's use of left-open, right-closed intervals. We also set $\\omega=2\\pi f$ and $\\phi=\\frac{2\\pi}{360}\\phi_d$ for brevity.\n", + "\n", + "### Properties of the noise current\n", + "\n", + "1. The noise current is a *piecewise constant* current. Thus, it is only an approximation to white noise and the properties of the noise will depend on the update interval $\\delta$. The default update interval is $\\delta = 1$ms. We chose this value so that the default would be independent from the time step $h$ of the simulation, assuming that time steps larger than 1 ms are rarely used. It also is plausible to assume that most time steps chosen will divide 1 ms evenly, so that changes in current amplitude will coincide with time steps. If this is not the case, the subsequent analysis does not apply exactly.\n", + "1. The currents to all targets of a noise generator have different amplitudes, but always change simultaneously at times $j\\delta$.\n", + "1. Across an ensemble of targets or realizations, we have\n", + "$$\\begin{align}\n", + "\\langle I_j\\rangle &= \\mu \\\\\n", + "\\langle \\Delta I_j^2\\rangle &= \\sigma^2 \\qquad \\text{without modulation} \\\\\n", + "\\langle \\Delta I_j^2\\rangle &= \\sigma^2 + \\sigma_m^2\\sin( \\omega j\\delta + \\phi) \\qquad \\text{with modulation.} \n", + "\\end{align}$$\n", + "1. Without modulation, the autocorrelation of the noise is given by\n", + "$$\\langle (I_j-\\mu) (I_k-\\mu)\\rangle = \\sigma^2\\delta_{jk}$$ \\\n", + "where $\\delta_{jk}$ is Kronecker's delta.\n", + "1. With modulation, the autocorrlation is\n", + "$$\\langle (I_j-\\mu) (I_k-\\mu)\\rangle = \\sigma_j^2\\delta_{jk}\\qquad\\text{where}\\; \\sigma_j = \\sqrt{\\sigma^2 + \\sigma_m^2\\sin( j\\delta\\omega + \\phi_d)}\\;.$$ \\\n", + "Note that it is currently not possible to record this noise current directly in NEST, since a `multimeter` cannot record from a `noise_generator`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Noise generators effect on a neuron\n", + "\n", + "Precisely how a current injected into a neuron will affect that neuron, will obviously depend on the neuron itself. We consider here the subthreshold dynamics most widely used in NEST, namely the leaky integrator. The analysis that follows is applicable directly to all `iaf_psc_*` models. It applies to conductance based neurons such as the `iaf_cond_*` models only as long as no synaptic input is present, which changes the membrane conductances.\n", + "\n", + "### Membrane potential dynamics\n", + "\n", + "We focus here only on subthreshold dynamics, i.e., we assume that the firing threshold of the neuron is $V_{\\text{th}}=\\infty$. We also ignore all synaptic input, which is valid for linear models, and set the resting potential $E_L=0$ mV for convenience. The membrane potential $V$ is then governed by\n", + "\n", + "$$\\dot{V} = - \\frac{V}{\\tau} + \\frac{I}{C}$$\n", + "\n", + "where $\\tau$ is the membrane time constant and $C$ the capacitance. We further assume $V(0)=0$ mV. We now focus on the membrane potential at times $t_j=j\\delta$. Let $V_j=V(j\\delta)$ be the membrane potential at time $t_j$. Then, a constant current $I_j$ will be applied to the neuron until $t_{j+1}=t_j+\\delta$, at which time the membrane potential will be\n", + "\n", + "$$V_{j+1} = V_j e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_j\\tau}{C} \\;.$$\n", + "\n", + "We can apply this backward in time towards $V_0=0$\n", + "\n", + "$$\\begin{align}\n", + "V_{j+1} &= V_j e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_j\\tau}{C} \\\\\n", + " &= \\left[V_{j-1} e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_{j-1}\\tau}{C}\\right]\n", + " e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_j\\tau}{C} \\\\\n", + " &= \\left(1-e^{-\\delta/\\tau}\\right)\\frac{\\tau}{C}\\sum_{k=0}^{j} I_k e^{-(j-k)\\delta/\\tau} \\\\\n", + " &= \\left(1-e^{-\\delta/\\tau}\\right)\\frac{\\tau}{C}\\sum_{k=0}^{j} I_{k} e^{-k\\delta/\\tau} \\;.\n", + "\\end{align}$$\n", + "\n", + "In the last step, we exploited the mutual independence of the random current amplitudes $I_k$, which allows us to renumber them arbitratily." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mean and variance of the membrane potential\n", + "\n", + "The mean of the membrane potential at $t_{j+1}$ is thus\n", + "\n", + "$$\\begin{align}\n", + "\\langle V_{j+1}\\rangle &= \\left(1-e^{-\\delta/\\tau}\\right)\\frac{\\tau}{C}\\sum_{k=0}^{j} \\langle I_{k} \\rangle e^{-k\\delta/\\tau}\\\\\n", + " &= \\frac{\\mu\\tau}{C}\\left(1-e^{-\\delta/\\tau}\\right)\\sum_{k=0}^{j} e^{-k\\delta/\\tau}\\\\\n", + " &= \\frac{\\mu\\tau}{C}\\left(1-e^{-(j+1)\\delta/\\tau}\\right)\\\\\n", + " &= \\frac{\\mu\\tau}{C}\\left(1-e^{-t_{j+1}/\\tau}\\right)\n", + "\\end{align}$$\n", + "\n", + "as expected; note that we used the geometric sum formula in the second step.\n", + "\n", + "To obtain the variance of the membrane potential at $t_{j+1}$, we first compute the second moment\n", + "\n", + "$$\\langle V_{j+1}^2 \\rangle = \\frac{\\tau^2}{C^2}\\left(1-e^{-\\delta/\\tau}\\right)^2 \\left\\langle\\left(\\sum_{k=0}^{j} I_{k} e^{-k\\delta/\\tau}\\right)^2\\right\\rangle$$\n", + "\n", + "Substituting $q = e^{-\\delta/\\tau}$ and $\\alpha = \\frac{\\tau^2}{C^2}\\left(1-e^{-\\delta/\\tau}\\right)^2= \\frac{\\tau^2}{C^2}\\left(1-q\\right)^2$ and , we have\n", + "\n", + "$$\\begin{align}\n", + "\\langle V_{j+1}^2 \\rangle &= \\alpha \\left\\langle\\left(\\sum_{k=0}^{j} I_{k} q^k\\right)^2\\right\\rangle \\\\\n", + " &= \\alpha \\sum_{k=0}^{j} \\sum_{m=0}^{j} \\langle I_k I_m \\rangle q^{k+m} \\\\\n", + " &= \\alpha \\sum_{k=0}^{j} \\sum_{m=0}^{j} (\\mu^2 + \\sigma_k^2 \\delta_{km}) q^{k+m} \\\\\n", + " &= \\alpha \\mu^2 \\left(\\sum_{k=0}^j q^k\\right)^2 + \\alpha \\sum_{k=0}^{j} \\sigma_k^2 q^{2k} \\\\\n", + " &= \\langle V_{j+1}\\rangle^2 + \\alpha \\sum_{k=0}^{j} \\sigma_k^2 q^{2k} \\;.\n", + "\\end{align}$$\n", + "\n", + "Evaluating the remaining sum for the modulated case will be tedious, so we focus for now on the unmodulated case, i.e., $\\sigma\\equiv\\sigma_k$, so that we again are left with a geometric sum, this time over $q^2$. We can now subtract the square of the mean to obtain the variance\n", + "\n", + "$$\\begin{align}\n", + "\\langle (\\Delta V_{j+1})^2 \\rangle &= \\langle V_{j+1}^2 \\rangle - \\langle V_{j+1}\\rangle^2 \\\\\n", + " &= \\alpha \\sigma^2 \\frac{q^{2(j+1)}-1}{q^2-1} \\\\\n", + " &= \\frac{\\sigma^2\\tau^2}{C^2} (1-q)^2 \\frac{q^{2(j+1)}-1}{q^2-1} \\\\\n", + " &= \\frac{\\sigma^2\\tau^2}{C^2} \\frac{1-q}{1+q}\\left(1-q^{2(j+1)}\\right) \\\\\n", + " &= \\frac{\\sigma^2\\tau^2}{C^2} \\frac{1-e^{-\\delta/\\tau}}{1+e^{-\\delta/\\tau}}\\left(1-e^{-2t_{j+1}/\\tau}\\right) \\;.\n", + "\\end{align}$$\n", + "\n", + "In the last step, we used that $1-q^2=(1-q)(1+q)$.\n", + "\n", + "The last term in this expression describes the approach of the variance of the membrane potential to its steady-state value. The fraction in front of it describes the effect of switching current amplitudes at intervals $\\delta$ instead of instantenously as in real white noise. \n", + "\n", + "We now have in the long-term limit\n", + "\n", + "$$\\langle (\\Delta V)^2 \\rangle = \\lim_{j\\to\\infty} \\langle (\\Delta V_{j+1})^2 \\rangle \n", + " = \\frac{\\sigma^2\\tau^2}{C^2} \\frac{1-e^{-\\delta/\\tau}}{1+e^{-\\delta/\\tau}} \\;. $$\n", + " \n", + "We expand the fraction:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{x}{2} - \\frac{x^{3}}{24} + \\frac{x^{5}}{240} + O\\left(x^{6}\\right)$" + ], + "text/plain": [ + " 3 5 \n", + "x x x ⎛ 6⎞\n", + "─ - ── + ─── + O⎝x ⎠\n", + "2 24 240 " + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import sympy\n", + "\n", + "sympy.init_printing()\n", + "x = sympy.Symbol(\"x\")\n", + "sympy.series((1 - sympy.exp(-x)) / (1 + sympy.exp(-x)), x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We thus have for $\\delta \\ll \\tau$ and $t\\gg\\tau$\n", + "\n", + "$$\\langle (\\Delta V)^2 \\rangle \n", + " \\approx \\frac{\\delta\\tau \\sigma^2 }{2 C^2} \\;.$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How to obtain a specific mean and variance of the potential\n", + "\n", + "In order to obtain a specific mean membrane potential $\\bar{V}$ with standard deviation $\\Sigma$ for given neuron parameters $\\tau$ and $C$ and fixed current-update interval $\\delta$, we invert the expressions obtained above.\n", + "\n", + "For the mean, we have for $t\\to\\infty$\n", + "\n", + "$$\\langle V\\rangle = \\frac{\\mu\\tau}{C} \\qquad\\Rightarrow\\qquad \\mu = \\frac{C}{\\tau} \\bar{V}$$\n", + "\n", + "and for the standard deviation\n", + "\n", + "$$\\langle (\\Delta V)^2 \\rangle \\approx \\frac{\\delta\\tau \\sigma^2 }{2 C^2}\n", + "\\qquad\\Rightarrow\\qquad \\sigma = \\sqrt{\\frac{2}{\\delta\\tau}}C\\Sigma \\;.$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tests and examples\n", + "\n", + "We will now test the expressions derived above against NEST. We first define some helper functions." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import numpy as np\n", + "import scipy\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def noise_params(V_mean, V_std, dt=1.0, tau_m=10.0, C_m=250.0):\n", + " \"Returns mean and std for noise generator for parameters provided; defaults for iaf_psc_alpha.\"\n", + "\n", + " return C_m / tau_m * V_mean, math.sqrt(2 / (tau_m * dt)) * C_m * V_std" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def V_asymptotic(mu, sigma, dt=1.0, tau_m=10.0, C_m=250.0):\n", + " \"Returns asymptotic mean and std of V_m\"\n", + "\n", + " V_mean = mu * tau_m / C_m\n", + " V_std = (sigma * tau_m / C_m) * np.sqrt((1 - math.exp(-dt / tau_m)) / (1 + math.exp(-dt / tau_m)))\n", + "\n", + " return V_mean, V_std" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def V_mean(t, mu, tau_m=10.0, C_m=250.0):\n", + " \"Returns predicted voltage for given times and parameters.\"\n", + "\n", + " vm, _ = V_asymptotic(mu, sigma, tau_m=tau_m, C_m=C_m)\n", + " return vm * (1 - np.exp(-t / tau_m))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def V_std(t, sigma, dt=1.0, tau_m=10.0, C_m=250.0):\n", + " \"Returns predicted variance for given times and parameters.\"\n", + "\n", + " _, vms = V_asymptotic(mu, sigma, dt=dt, tau_m=tau_m, C_m=C_m)\n", + " return vms * np.sqrt(1 - np.exp(-2 * t / tau_m))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " -- N E S T --\n", + " Copyright (C) 2004 The NEST Initiative\n", + "\n", + " Version: 3.3\n", + " Built: Mar 23 2022 13:33:55\n", + "\n", + " This program is provided AS IS and comes with\n", + " NO WARRANTY. See the file LICENSE for details.\n", + "\n", + " Problems or suggestions?\n", + " Visit https://www.nest-simulator.org\n", + "\n", + " Type 'nest.help()' to find out more about NEST.\n", + "\n" + ] + } + ], + "source": [ + "import nest\n", + "\n", + "\n", + "def simulate(mu, sigma, dt=1.0, tau_m=10.0, C_m=250.0, N=1000, t_max=50.0):\n", + " \"\"\"\n", + " Simulate an ensemble of N iaf_psc_alpha neurons driven by noise_generator.\n", + "\n", + " Returns\n", + " - voltage matrix, one column per neuron\n", + " - time axis indexing matrix rows\n", + " - time shift due to delay, time at which first current arrives\n", + " \"\"\"\n", + "\n", + " resolution = 0.1\n", + " delay = 1.0\n", + "\n", + " nest.ResetKernel()\n", + " nest.resolution = resolution\n", + " ng = nest.Create(\"noise_generator\", params={\"mean\": mu, \"std\": sigma, \"dt\": dt})\n", + " vm = nest.Create(\"voltmeter\", params={\"interval\": resolution})\n", + " nrns = nest.Create(\"iaf_psc_alpha\", N, params={\"E_L\": 0.0, \"V_m\": 0.0, \"V_th\": 1e6, \"tau_m\": tau_m, \"C_m\": C_m})\n", + " nest.Connect(ng, nrns, syn_spec={\"delay\": delay})\n", + " nest.Connect(vm, nrns)\n", + "\n", + " nest.Simulate(t_max)\n", + "\n", + " # convert data into time axis vector and matrix with one column per neuron\n", + " t, s, v = vm.events[\"times\"], vm.events[\"senders\"], vm.events[\"V_m\"]\n", + " tix = np.array(np.round((t - t.min()) / resolution), dtype=int)\n", + " sx = np.unique(s)\n", + " assert len(sx) == N\n", + " six = s - s.min()\n", + " V = np.zeros((tix.max() + 1, N))\n", + " for ix, vm in enumerate(v):\n", + " V[tix[ix], six[ix]] = vm\n", + "\n", + " # time shift due to delay and onset after first step\n", + " t_shift = delay + resolution\n", + " return V, np.unique(t), t_shift" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A first test simulation" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mu = 0.00, sigma = 111.80\n", + "\n", + "Dec 01 11:25:56 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:56 NodeManager::prepare_nodes [Info]: \n", + " Preparing 1002 nodes for simulation.\n", + "\n", + "Dec 01 11:25:56 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 1002\n", + " Simulation time (ms): 50\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:56 SimulationManager::run [Info]: \n", + " Simulation finished.\n" + ] + }, + { + "data": { + "image/png": "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swf27Qu14MsHEZmvqu0j+owHDJer1FS7iH31lU2XX25N/VavhvPOs+aFJ58Mp5wCCQnW/DMv999vzf8efDDn8pEjrRlrSkqoSSJYE9F77rFAUr8+/N//wZtvwrJloSaNzrmI5SdgFKfnMFxxkJYGAwZYe/Hdu+3i3a6dtaUHywkE24rnZu1aexZg2LCsF/4dOywoANxwAxx5pL1PSQnlFNLSrHPAM88Mfe722+GLL2y/p51m/ffceacHC+diwHurLet++QUefdQuwmB3+fHxlqN47z17SGruXLj44vD2d+ml9nDWzJlZlwe7FQd48snQ+xdftIe6PvzQHqJ67LHQunnzLFi0bWvFVmPH2kNo2XMozrki4UVSZdEff1gZ81tvhboA79zZegbNnCs4lFmz7Kng+PjQstRUe2J371576nbCBFu+f789CXvYYVZ+P2mSledXqWL76NDBAsPo0ZajGD/eir06d7Zg8ssvUKGCPZ1dt26hngrnyqr8FEnFvJVTQSdvJRWm1NRQk7vgw1pt2qj++9+hNujh+v57+/w//pF1+bvv2vKWLa2J5k8/2fLnnrPlkyZZf0nHHGOthSpWtIe/gu3xU1PtwTwRa3parlzWh+6cc4UGbyXlcli3zoYlfekleP556N3b7tq3bbO7/vwYOtT68qlb1/YVF2cNQzt1svkffrB+hWrVgmuuscFkTj3V+jISsTQ99pjlPG6/3epFgv78E/71L1izxj7buXPhnAfnXBaew3AhP/1kDyzFxdkde8+eljPIbt26g9/FX3yxjb+Q2Z499mBW8KGy4HgT77+vWbotmDkz1Dtn27ahHkudc8UCnsNwgPWkeuyx1jvnNddYqyQRe34hu4QE6zUzOTlrW/nExFBLpC1bQu29X3jBnpf45hvLOSxaZKO9/ec/1uZ+7txQvcbOnZabaN48vGa3zrkik58chreSKi3mzoVLLrGHecqVg3fftaaojz9uF/8mTUJjEAft2mXBAkIV1EHjxoXe//vf9rpzp3XV3bEjdOlix2jc2LoUP/JIa06buRK8enUr9vJg4Vyp4AGjpFuxwvr979ABPv7Ynp8AG1+hVi17P3GivWYegxhC4w6L2INx6ek2v3On1Xf07w+XXWZB57nnrOXThg02foOI5UgWLrQmr4sWQdOm0f62zrlYirQMq7hNZbYOY+9e66OpXDnr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Oeey6dOnD1OmTOHnn3+mefOsl7bKlSsjIuzatevA/L59+w6s37JlC3PmzKFHYPiEQYMGHXhCHEI5jKeeeopLLrmEehE8PJySkkKlSpVyXbdmzRqaNGmS67poiCSHkSwiNYHJwDQR2UbO8SyKr7vugq1b4bvvoFq1WKfGOZebQ+UIqlQ59Po6dcLKURxMr169GDBgAJUrV+bKK6/Msb579+589tlnDBw4kFq1arF//3727dtHpUqVmDRpEj179qRixYoANGnShCOPPJJZs2bRuXNnEhISGDVqFF9++WWWoqoNGzYwaNAgevXqxdKlSzn11FOZNm0aI0eOpGXLlmzZsoW6desSHyxOz2bKlClZ6lGiLawchljebKiqblfVkcC9wCtA3+glrRCpQkaGPYNxxBHej5RzLodatWpRrlw5fv/9dypXrpxjffb6gnPOOYdZs2YBVhw1depUGjdufGBavnw548ePB6zoaPHixQwZMiTLk+M//vgj/fv354477mDHjh0MHjyYCy64gDVrrAHqN998Q8/ciuECpk6dSu/evQvj64clrByGqqqITAbaBeZnRDNRhW7VKhuStWVLL45yzh3Ueeedd9Cnu9u1a8fixYtJT0+nfPny3HjjjTzxxBN069aN6XnkbCpWrHjgeYrMFi5cSL9+/UhLS6N27dqUK1eOJUuWMHjwYADGjx/Po48+mus+t23bRkpKCkcddVRkX7IAIimSmi0iJ6nq3KilJlp++w3S02H3bjj22FinxjlXTF122WVZnqvI7qeffjrw/sQTT+TMM89k//79h/zMoSQmJtKsWTMWLVpEQkICAElJSTRs2JDU1FT69u2boz4lqFatWsycOTNfx80vCbcbXBFZhlVyJwG7AcEyH62jlrowtG/fXufNm3fojSZMgIsvhiOPhO7d4bXXiiRtzrlDW758+YELpYue3M6ziMxX1faR7CeSHMa5key4WPntN3vdts2LpJxzLp8iCRh/ANdjnRAqMAt4LhqJKnS//WYtLPbs8WcwnHMunyJ5DuMN4K/AM8CzQALwZjQSVeg6dbIHe8BzGM45l0+R5DCaq+oJmea/EZGfDrp1cTJgANSvD2PHeg7DuWJGVUvsuNklQWEO1xpJDuNHETk5OCMiHYHvCi0l0bRxI/zxh72vUye2aXHOHVCpUiW2bNkStTGoyzpVZcuWLQd9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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "dt = 1.0\n", + "mu, sigma = noise_params(0.0, 1.0, dt=dt)\n", + "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", + "\n", + "V, t, ts = simulate(mu, sigma, dt=dt)\n", + "V_mean_th = V_mean(t, mu)\n", + "V_std_th = V_std(t, sigma, dt=dt)\n", + "\n", + "plt.plot(t, V.mean(axis=1), \"b-\", label=r\"$\\bar{V_m}$\")\n", + "plt.plot(t + ts, V_mean_th, \"b--\", label=r\"$\\langle V_m \\rangle$\")\n", + "plt.plot(t, V.std(axis=1), \"r-\", label=r\"$\\sqrt{\\bar{\\Delta V_m^2}}$\")\n", + "plt.plot(t + ts, V_std_th, \"r--\", label=r\"$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$\")\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"Time $t$ [ms]\")\n", + "plt.ylabel(\"Membrane potential $V_m$ [mV]\")\n", + "plt.xlim(0, 50);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Theory and simulation are in excellent agreement. The regular \"drops\" in the standard deviation are a consquence of the piecewise constant current and the synchronous switch in current for all neurons. It is discussed in more detail below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A case with non-zero mean\n", + "\n", + "We repeat the previous simulation, but now with non-zero mean current." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mu = 50.00, sigma = 111.80\n", + "\n", + "Dec 01 11:25:57 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:57 NodeManager::prepare_nodes [Info]: \n", + " Preparing 1002 nodes for simulation.\n", + "\n", + "Dec 01 11:25:57 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 1002\n", + " Simulation time (ms): 50\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:57 SimulationManager::run [Info]: \n", + " Simulation finished.\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABKsklEQVR4nO3dd3hUZfbA8e8JXUR6hwislLCAiBE7TVcpStBFRVGxLKwuirp2f/bV1XXXVXRRRGVtNEUBEQQsVFmkS0cCglRBQDqBJOf3x5lJJiSBGVIm5Xye5z4zc9u8cwP33LeLquKcc86drJhoJ8A551zh5oHEOedcjnggcc45lyMeSJxzzuWIBxLnnHM54oHEOedcjpSMdgLyUrVq1bRBgwbRToZzzhUaCxYs+FVVq0dyTJEOJA0aNGD+/PnRToZzzhUaIrIh0mO8aMs551yOeCBxzjmXIx5InHPO5YgHEueccznigcQ551yOeCBxzjmXI0W6+a9zzuW33bth1SrYvx+aNIH69SGmiD+y51sgEZH6wAdALSAVGKKqA4/ZR4CBQFfgIHCLqi4MbOsc2FYCeEdVX8yvtDvniq6kJPj4Y/j5Z2jTBuLjofoJuuOpwqZNsHKlBY2VK9Pf//JLxn3LlYOmTSEuDpo1s6V5c1uKSoDJzxxJMnC/qi4UkQrAAhH5SlVXhOzTBWgcWM4F3gTOFZESwCDgD8AmYJ6IfH7Msc65KDp6FDZuhLJl4ZRTbClVCkSinbKsbdsGgwfDm2/C9u0Zt8XGWkCJj7fgcuBAxmCxapWtC6pUyQJFt27pAePUU+HHH9P3nzMHRo60IARQs6btf8UVcOmlUKFCvv30XJdvgURVtwJbA+/3ichKoC4QGgwSgA/Upm2cIyKVRKQ20ABIVNV1ACIyMrCvBxLnomz5cvjvf+HDDzPfkGNi0oNK+fJQrx40bAiNGtkSfF+rVv49nS9cCAMH2k39yBG7md9zD7RtC4sWwfz5sGCBvX72WcZjY2MtSPzpT/YaDBo1amQdMDt0yPj50CELLj/8ABMnwqefwtChULq07Xv55ZaDOXQo8yJi1+t3v7OlUSMLVgVBVOpIRKQBcBbw/TGb6gIbQz5vCqzLav252Zy7H9APIDY2NncS7JzL4Lff7Eb83//C3LlQsiR07w5dukBKit34Dh60Jfh+3z4rPvr2Wws6obN8lywJVapA1ar2Gs77qlXDu5Hu3w8zZ8I338BXX8GSJRbU+vWDu++2eoygDh0y3vx377ab/mmn2X45vXGXKwdnnmnLzTdbLu677+CLL2y5//6M+8fE2DHlykFysl33UDVrWlCpUMGu8+HDmV9TUqBixYzLqafC9dfDlVfab5w1y4LqkSMn97vyPZCIyKnAp8C9qrr32M1ZHKLHWZ95peoQYAhAfHy8T0jvXA6kpMCWLbBhA6xfb69Ll8K4cXaTatkSXnkFevc+cb1CqKQkO9e6dfDTT1YktnMn7Nply8aNsHixvQ8tQjpWrVrQooUtLVvaa5Mmlkv6+msLHv/7n92ES5eGCy+09N5yixVHnUjlyplzFScjKcmC6YED6QG2YkXLYbRrZ9e4aVMrbjt0yK77RRdZsdfBg9C/v13vffssmPz2m+WGKlWCFStg2jQLzKqQmmrLOefA2WdboBg5MnOaYmIskPz4oz0E5ES+BhIRKYUFkWGq+lkWu2wC6od8rgdsAUpns945lwtU7ca+eHH6snSp5SCSkzPuW7s23HabLW3anFwdSJkydsMPzQ1kJykpPcDs2pUecHbssLqHZcvgrbfsBhxKxG6k998Pl1xiQeSUU078fSkpdsM+ejQ9OM6cacV2e/fasm+ftcbq08e233yzVb4Hg8SBA9C5MwwaZNurVbOcUag//QneftvSeeONGXNowXRceaVtnzrV6p6CS9WqFmRuucWCyoABtr5MmfR9unSBCy6w7Z062bbSpdOXVq3se1q0sGK80qWtTisu7sTX6Fiix6Y+jwRaZL0P7FLVe7PZpxtwF9Zq61zgNVVtKyIlgR+BS4DNwDzgBlVdfrzvjI+PVx/917nMVO0pdty49MCxZ49tE7Gn41atrNikQQM4/XRbYmPDuxnnt5QUy9ksW2YV4rGx0Lo1/P73tn3GDFizxp7Od+2y10qV4IUXbPu111rxzt696Tmg88+H2bPtfcuWdu5QnTvDl1/a++7d7Zyh9UEXXAB/+Yttf+UVu67BbaecYtc2eDNfs8aKr8qXTw8I0WrRJSILVDU+kmPyM0dyIXATsFREFgfWPQbEAqjqYGAiFkQSsea/twa2JYvIXcBkrPnv0BMFEedcZqpWT/Dss1Y2f8opdjO7/nq78bZubU+o5ctHO6UZ/fqrFXdt3245kR077Kb/1FO2/cknYfRoCxK//Wa5qJo1ragI4OWX4fPP7X2JElZk1bJl+vnPPNMCS4UKVh9SoYIFzqBhwywQBLdVqGBP70HBc2fnvvuOv71x43CuQsGVbzmSaPAciXNGFSZNsgAyZ461nnrkEbj9dnsCzm+pqRYMqlWzG/ucOTBlitUVbN2aHjCWLrUn9XvvtZZWoUqXttxDyZLw+uuWo6hSxYJElSpWLBUsetq40a5B5cpW0VxQmyQXBAU9R+Kcy2d79lhF61tvWdPW2FjrO3HLLVZ8kheOHIHNm63OpU0be4r/5ht47bX0QLFtmxVHrV1rzVhnzbLcRfXqVgdTo4atT0qyQNKnD7Rvb9tr1LDXSpXSA8Ldd9uSnfr1s9/mcs4DiXNFjKpVDr/7LnzyiVVCt2gBQ4bYDbl06Zyd/8ABa221YQOcdRbUrWsto+6/39Zt3ZpecTx1qrV62r/f6jDq1LG01KljS8WKtl///lZhnF3azjrLFlcweSBxrojYuhXef986uK1ZY+X4N91kxVfnnBNZcc5vv1luoXp1y8X8+KOdJzExvd4BrD/IjTemtxS67DLbP1g537q17ZeQYEt2ypU7mV/sCgoPJM4VcCkp1mJo9mx74j98OONy6JDd+L/7zva9+GL4v/+Dnj2PX2mekmJNVStUsCKwAQMsYCQmWuU2wPPPw2OPWfFUTAx07QpnnGHFTqefnt5U9KyzrKOhK548kDhXwBw+bJXP06ZZ8Jgzx/otgBX9lCuXngMIvi9XDh54wPp2ZNc3Y/Ro66i3cqV1YvvxR9v/jTcs4MycaU19r77agsUZZ1g/DLCOf9On58evd4WRBxLnoiw52cZ2+uYbe6r/7jsLJjEx1kT1ppusT8IFF9iN/nhFVHv2WEBYvNiG9qhSBV56ybY98IB1MGzY0HISl19uHdXAWj6tW5fXv9QVVR5InIuCLVusOe6XX1q/jmBnwFat4I477Abfrl16ZXRWdu+2XMW5gVHneva0QQCDqlWzoqigb7+1nEVB7FDoCjcPJM7lg6NHrZjqyy9tWbLE1tepA3/8o1VSd+xoTVuzs3KlBZ25c20J9obeu9dyFF26WHPb1q2tg12dOhlzL40a5elPdMWYBxLn8si2bTai68SJNoDgvn12w7/oInjxRbvxt2yZdVHV9u1WRDVzJjzzjOVMRo+2Hty1a1su5NZbbejzoNtvz7/f5lwo79nuXC5aswbGjrXlf/+z/hT161vQ6NzZBg887bSsj121Cv71LwseP/5o68qVs74Y555rM+8lJ1u/Defyivdsdy6fqVpFeTB4LA+MANemjeUkEhKyznVs3Wq5lK+/trqNK6+0CvZPP7Ucy+23Wx1JmzbpnfRq1szPX+Zc+DyQOHeSli2z0V1nzrTxotq1s8mSEhIyDvgXlJRk41t9/XX6SLJVq1rgAKvX2Lmz6Mzj7YoPDyTORejwYfjb36xZbcWK8J//QK9eFhRCJSbC+PFWHPXgg5azmDTJBky86Sabp7t16/TAIeKDCbrCyQOJcxGYOhX+/GerC7nlFqvTCA0g8+bBxx9bAFm92tZ16GCBRMSKvjzH4Yoa/yftXBh27bJ6i06dbAj0r7+2+cpPOcXmokhNtf0++siGO4+NtdFu162z4BPkQcQVRfk5Q+JQ4Apgu6q2yGL7g0DvwMeSQBxQXVV3ich6YB+QAiSH26LAW225nNi/33qbT5wIn31mHQAfeAAeesiGC/nkE8t57N9vM/BdfLG1rCpXLvuWWc4VdAW91dZ7wH+AD7LaqKr/BP4JICJXAvep6q6QXTqq6q95nUhXvCUmwoQJFjymTbO5NSpUsA6Djz9uxVOnn27Bo2pVm1nwmmvgvPPseG9Z5YqjfAskqjpDRBqEufv1wIg8TI5zGXz7reU2Fi2yz82awV132bzaS5faa+vW1kP91lttju4OHayDoXPF3Qn/G4hIlTDOk6qqv+U8OSAipwCdgbtCViswRUQUeEtVhxzn+H5AP4DY2NjcSJIrwtatswAyZowNiPjaazYk+syZ8MEH1kmwTBlr5gs2T/drr0U1yc4VOOE8T20JLMdrmFgCyK279pXAd8cUa12oqltEpAbwlYisUtUZWR0cCDJDwOpIcilNrojZtw/+/nf4978tOPztbxZQypaFa6+1+o+LL7ZZ/3r2tGldnXNZCyeQrFTV405yKSKLcik9AL04plhLVbcEXreLyBigLZBlIHHueFJS4L33rL5j2zabeyM2Ft580wJIkybw7LM2FpYPcuhceMIJJOfn0j4nJCIVgfbAjSHrygMxqrov8P4y4Nnc+D5XvHz1leU6liyxOpDf/c6GNVG1sbCSkmy/Zs2imkznCp1wWrX/S0QuPN4Oqnr4RCcRkRHA/4CmIrJJRG4XkTtE5I6Q3a4CpqjqgZB1NYFZIvIDMBeYoKqTwki3cwDMn2+9yC+7zIq03nkH1q+3FlqPPmr1JBMm2JhYzrnIhZMjWYMFk9rAKGCEqi6O9ItU9fow9nkPayYcum4dcGak3+fcmjU2d/knn1jfjt//3gZYLFMGmje3aWSDAyI6507eCXMkqjpQVc/Hipx2Af8VkZUi8qSIZDM7tHPRs2MH3HmnFVGNGWMDKh4+bEVZycm2z/nnexBxLreEPWCDqm5Q1X8EKt5vwIqhVuZZypyLUGoqDBkCTZvaq6oFkT//2ca9GjcOypePdiqdK3rCDiQiUkpErhSRYcCXwI/AH/MsZc5FYOFCm+/8z3+24djnzYPHHrO6kEGDoHHjaKfQuaIrnA6Jf8B6mnfDKrtHAv2OqRB3Lip++w3694fhw+1zgwbWS13EJoVyzuW9cHIkj2GtreJU9UpVHeZBxEXb3r3WWbBGDQsipUtbDmTRIp/Tw7n8dsIciap2zI+EOBeOffvg9dfh5ZdtaPeYGJsX5OWXoUo4g/k453Jd2EPOiUg88H/A6YHjBFBVbZVHaXMuzf798Mor8MILcOgQdOsGTz5pvdJr1Yp26pwr3iIZu3QY8CCwFEjNm+Q4l9GBA1ZZ/txzlhsBCyJffBHddDnn0kUSSHao6ud5lhLnQhw6BIMHWwDZFRi+s3FjePttaN8+umlzzmUUSSB5SkTeAb4BkoIrVfWzXE+VK7aOHIF337UAsmULxMdb5fk//mF1ISVKRDuFzrljRRJIbgWaAaVIL9pSwAOJy7HkZPjwQ3jmGdiwAerVs7nOO3SwwRTLlIl2Cp1z2YkkkJypqj6snct1CxfalLU//mjT2oJNZ3vBBfbeg4hzBVvYPduBOSLSPM9S4oqlhQuhUyebG6RkSSu6GjIEZszwsbCcKywiyZFcBPQRkZ+wOhJv/uty5IcfbHj38uVh926bWOqVV6yToXOu8IgkkHTOs1S4YmfZMpvKtmJFy32UKGF9QpxzhU+ko/9mWsI9XkSGish2EVmWzfYOIrJHRBYHlidDtnUWkdUikigij4T7na5gmjzZxsHat886GDZs6EHEucLshIFERBbmxj7YhFUnytXMVNXWgeXZwLlLAIOALkBz4HqvqymcVG0+9M6drZXWv/8NN9544uOccwVbOEVbcSKy5DjbBah4opOo6gwRaRBuwkK0BRIDMyUiIiOBBGDFSZzLRdH118OoUVaM9cUXFlCcc4VfOIGkWRj7pOQ0IQHnB+Zm3wI8oKrLgbrAxpB9NgHn5tL3uXyydq1Nc1uyJHz5pVWyO+eKhnBG/w27HiSHFgKnq+p+EekKjAUaYzmeTMnK7iQi0g/oBxDrBe9RdfSozZm+fLnNEVKqlE1960HEuaIlklZbeUpV94a8nygib4hINSwHUj9k13pYjiW78wwBhgDEx8dnG3Bc3tq6Fa64wvqJAFx5Jbz5JtStG910OedyXyQdEvOUiNQSsSmJRKQtlradwDygsYg0FJHSQC/AB48swKZNs3nTFy60PiLDh9t86R5EnCuaTipHEmg1dTqwVFU3hXnMCKADUE1ENgFPYeN2oaqDgZ7AnSKSDBwCeqmqAskichcwGSgBDA3UnbgCaPp066muCpdcAh995POFOFfUid2rIzxI5BPgE6AFVq/RJ7cTlhvi4+N1/vz50U5GsXD0KAwcCI8/bkObDBxoo/X6tLfOFS4iskBV4yM55mTrSL5S1Y+Bj0/yeFeEfPedNeXdvx969LB5RGrWjHaqnHP55WTrSC4Qkc9E5G0R+WuupsgVGqmp8MgjNtTJ/v1w333w2WceRJwrbk42R7JMVf8lIiWB3+dmglzhsGWL5UKWLoWyZeHzz+EPf4h2qpxz0XCygeQKEUkCJqvqD7mZIFfwffml9VLfs8fGyZo92yvUnSvOwhlrK6ue7dcBa4CrReTtXE+VK5BU4W9/g65dbZDF556DFSs8iDhX3IWTI5koItOAp1X1ZwBV/QWYFFhcMXDgANx8s9WBXHEFfPwxlCsX7VQ55wqCcCrbmwGLgOki8qqIVM/jNLkC5uefbdrbzz6zz1de6UHEOZfuhIFEVY+o6utAHDZcyfci8qyIVMjz1Lmomz3b5g5ZtswGXBw2DPr1i3aqnHMFSSQTWx1W1X8BLYHDwEIReSDPUuaibuxY6NgR9u61llkTJ8INN0Q7Vc65gibsQCIiDUSkM/AnIBbYB/w9rxLmouvtt+GPf4Qzz7Rmvt984817nXNZO2Fle2BSq3rAz8AqYCXwLTZr4eo8TZ2Lin/+Ex56yIZ7HzvWBl50zrnshNNq6ypgnZ7MoFyu0HnpJXj4YShTxoqzPIg4504knImt1uZHQlz0BYNI6dJQtarlTJxz7kQKzMRWLrpCcyLVqtlw8L/7XbRT5ZwrDDyQuLQgUrWqNfH99lsPIs658BWYGRJddLz9tgWR666D77+31llNmkQ7Vc65wiScVlv7gKwq2gVQVT0tnC8SkaHAFcB2VW2RxfbewMOBj/uBO4MDQorIeqy5cQqQHOmkKy5rkyfDHXdY7uODD6xuxDnnIhVOZXtu9WB/D/gP8EE2238C2qvqbhHpAgwBzg3Z3lFVf82ltBR7K1ZAz55QqhRs3w4bNkDjxtFOlXOuMIqojkREKgONgbLBdao6I5xjVXWGiDQ4zvbZIR/nYH1XXB7YswcSEiApCWJiYPx4DyLOuZMXdiARkT8B92A3+MXAecD/gE55kK7bgS9DPiswRUQUeEtVhxwnnf2AfgCxsbF5kLTCLTUVbroJEhMtiIwcCe3bRztVzrnCLJLK9nuAc4ANqtoROAvYkdsJEpGOWCB5OGT1haraBugC9BeRdtkdr6pDVDVeVeOrV/eBio/14ouWAylVCgYNgquvjnaKnHOFXSSB5LCqHgYQkTKqugpompuJEZFWwDtAgqruDK5X1S2B1+3AGKBtbn5vcTFlCjz+OPTqBWvWWEW7c87lVCR1JJtEpBIwFvhKRHYDW3IrISISC3wG3KSqP4asLw/EqOq+wPvLgGdz63uLi/Xr4aqroE4deOcdH/rEOZd7wg4kqnpV4O3TIjIVqEgEMySKyAigA1BNRDYBTwGlAuceDDwJVAXeEBFIb+ZbExgTWFcSGK6qPjNjBA4dspF7Dx6Etm3hlFOinSLnXFFyUj3bVXX6SRxz/Qm2/wkbov7Y9euAMyP9PmdUoXdvq1w//XQYNw4sJjvnXO4Ip0PiLFW9KIuOiRF1SHTR8fLLMGaM5UKmTYPT/K/lnMtl4XRIvCjw6lPrFjLffw+PPGLNfCdNggYNop0i51xRFMkMif8IZ50rGHbtgmuvhfr1YeFCuPjiaKfIOVdURdL8N6uJVrvkVkJc7lGFSy6BzZvh449tulznnMsr4dSR3An8BWgUmHY3qAIwO+ujXDTdcw8sXgytWsE550Q7Nc65oi6cVlvDseFKXgAeCVm/T1V35Umq3En78kt4/XXrJzJtWrRT45wrDsKpbN8D7BGRW4GrgQbB40QEVfXOgQXE9u3W6VDEKtcrV452ipxzxUEk/UjGAnuABUBSnqTG5Ui3bjai71NPwUUXRTs1zrniIpJAUk9VO+dZSlyOfPopzJ9vI/s+/XS0U+OcK04iabU1W0Ra5llK3EmbNw/69YOzz4ahQ6OdGudccRNJjuQi4FYRWYcVbQV7trfKk5S5sCQlweWXw+7dNt96yZMa9MY5505eJLcd7zNSAF1zjQWR3r2hdetop8Y5VxxFUrT1M3Ax0EdVN2DjbtXMk1S5sHz8sU1SVbUq/Pe/0U6Nc664iiSQvAGcDwRH8d0HDMr1FLmwbN4MffrY+88+sxkPnXMuGiIJJOeqan/gMICq7gZK50mq3AklJsLhwzbbYbtsJx52EZk502YAc85FJJJAclREShAYSl5EqgOp4R4sIkNFZLuILMtmu4jIayKSKCJLRKRNyLbOIrI6sO2RrI4vTpKT4YEHoGZNePPNaKemEErN4p/tV19Bhw7QqRPs3ZvvSXJZUIVff412Kk7O669bx66DBzNvGzUKFi3K/zTloUgCyWvYfOk1ROR5YBY2bEq43gOO1w+lC9A4sPQD3gQIBK9Bge3NgetFpHkE31ukLF0KTZpYn5FXX4VKlaKdokLmL3+Bpk0z5jyWLbOs3emnw4YNto+GTL2TkgJTp1oEL6hC0xvqxx9t8LVdhXA0o/vug+rVrX37sVavhjVr8j9N4Zg5EwYMgIkT4eab4cgRW68KL71k/9bi42HPnszHZvd3zE0pKXDnnbB8ea6dMpKpdoeJyALgEqzpbw9VXRnB8TNEpMFxdkkAPlBVBeaISCURqY0NyZIYmCkRERkZ2HdFuN9dVCQl2b/B9euhY0e47rpop6gA27ABYmMzTgf53nvpWbhzzoH+/eHAAXjjDahYEaZMgZEj4YknLNfy1FM2T/Gjj9qYMw88AP/8Z8bv2b/f/iAtWuTXL8ts0ybLSfXubWkO2rzZcllbt9oTyGefQZkytq1ECXjwQSsj/fBDq2RTTb+RlS9vbcmTkuwaBbcdPQrTp0NCApQrZ9v27bNj1q+HlSutPXrNmvYde/ak3zBDzx8baxPl7NxpzQ6P3f7TTzBwoL3v3h0++gjq1rXPixbBDTfY8XPnZp47OjERLrvMfuvPP9vfKFTp0nDGGelpPnAAhg+HbdsseJUrB7/7nW1fu9Z+X2i7+lNOgUaNYMsWu969ekGNGun79+ljT3u9esGzz8Lvf29/h0WLYMECm9th40a48UbbHhN4np82zc73j3/An/9s6xYvTv9N339vv7tGDbsWKSmwZIk94IjY9QaoVQtq17a/1bIsCoCGDYPBg21U16RcGqREVcNagH+Es+4E52gALMtm2xfARSGfvwHigZ7AOyHrbwL+E873nX322VqUPPyw/U8rU0Z17dpop6YAe+89u1APPqianGzrhg9XLVVK9cILVb/9VvWCC2yfmBjVDh1UP/lEdfJk1XHjVK+/3tYHb22lSqW/v+oq1ccfV50wQXX7dtUmTWx9QoLqrbeq3nSTHT9qlOqjj6r+/e+qnTurXnKJavv29v1t26o++aTqoUOqP/2k2rKl6u9/rxoXp9qwoWqVKqoffGDpXrJEtV491Tp1VGvVUq1eXbVqVdXRo237t99mTKuIfX7wQdXYWNWyZdO3hS4tWmS9PrhceKHqwIGqb72V9fZevVRTU1X/9a+st2/ebOl76qmst+/da9v/+test1esqNqqlWr37sdPZ6VKWa/v2dPSd+WVmbc1apT+b6VDh8zbzzorfXvz5pm3t2unumePpS+r7y5dWnXdOju+SpXM26+7TvWNN+x9iRKZt5csqbpggR2f1fnvu8+27duX9fYnn7TtW7Zkf91uvll19eostwHzNYz7a+gSST+SPwAPH7OuSxbrTlZWM4nrcdZnfRKRfljRGLGxsbmTsgJg9mzLFYM9TDRqFN305LnU1PQntZUr7Wnxt9/Sl6pVrdgALMewdq09We7ZY0+pYLmH0aPtif3oUVv33Xf29H7ddVYXUrKkPT1fc03G77/2WvjDH+zp9dZb09ePGQNjx1rRxMaNli6wdtg1atjTbMmStn7qVNvWpAlUq2ZP/WXLWrn/s8/CDz/Af/5jT8cxMZbGKVOsFcWYMTbezWmn2dN1cjJMmGDFJAkJ9kR/8KDNpZyaCl27WvHV99/b53/+04rwhg2z67diBXz+efrT+ebNlkObPt3ajrdubbOf7dljRTLffWfLww/DK6/Y0+8XX6QPKT1ypI0KesUVVowzfLjlLlShQgX7jXXqWG4iORleeMGu85NP2jUI5oyCOcZ69ex3/fabXd/SpWHcONixw1qTvP++PV2XKmXp/PhjK9/t3t1yCK1b299j40Y73+jRNj3oAw/Yk//PP8Pf/265nzJlLMdTt65N1jNzJjRubOmeN8/SPWOG5R5++in9b9+uHfTsae87drRretttdg3XrrX1rVvD449Dw4b2+cMP7e8Z+u+5Xj1o29b+tn/5i/07jImxf5fdu8Pzz9tvvOMO+zx5sl2z006z33f0qP2dfvjBfsPmzXbenj3ttzZtap+/+spemzWzf8tr19rw4C1bWi5c1a7xsRISMq87kRNFGuBOYClwAFgSWJYCPwEfRRK1OH6O5C3g+pDPq4HaWJPjySHrHwUeDef7ilKO5MIL7YHh6qvtQatQSUlR3blTdeVK1enT7Wl62LD07U8/bU/rLVqo1q+vWqGCPaUHnX9+5ientm3Tt3fubE/z8fH21A6qffuqfvyxPZE2bqzapYvq88+rvvqq6uDBqt98k378V1+pfv216qxZqvPmWS5gy5b07bt3qx44YE+hDz6oWrmyPfV36qS6cKHtX6WKpfvmm1XbtLE09OljT7dlytiT++zZqnfemfF3XH+96po1qlOnqjZrZjmIs8+2bXfdpbpxo+rMmRlzEGXLql52mf1WEdWXXkpP68aNdn2nTVM9ejTj3+HQITvXzJn2XtX+Mf3tb/YUHfrE/tVX6U/zdeqkP1nffbfl8u6/P+PvqF9f9X//s79x1aq2/xNPqN5zT8Zc0SWXqP7yi6Xtn/+09Jcokf53A9WLL846y52UZP+WQi1fbk/4DRvav5P337d9/vxnO1dcnP37KFVKtWZN1cceUz3llPScA9i13LXLzn/vvRlzCR07qm7YYDmr0PVVqqiOH5+ejm3b7ByROnJEddUq1d9+S1+3ZYvlfEuUsOXqqy0Nhw6pXnttxuteq5b9rW+7zT7fdpvql1/a30dEM+TaSpa0/xfB3GA2OIkcSTg3/4qBADACOD1kqRLxlx0/kHTD5j0R4DxgbmB9SWAd0BBrbvwD8Ptwvq+oBJK9e1UbNFCtXdvuaQXOjh2q339vN7BXX1V94AEr5gm64YbMgaBKlfTt995rN48ePey4e+9VfeUV2zZ6tJ1v2jTVxYtV16+3i3DsTVJVdcQIO/ejj+blr7Wb77E3tLVr7T957doWSD74wPbbscOCWPB3x8TYzfXIESv2Cr05BW8Kycm2T+j1qlFDdcoU1Z9/tptkmzZ2g5kxI3d+07ZtqmPH2vcfOWLrUlIs4N9wg92gQoOvqt3E33jDigWDgUlV9ccfVS+91G5kpUpZsPzlFytyLFXKlgoV0p+MDh2ym/iCBRZUc0NqqhVntm+veuaZdj1/+cW2bdyo+uKLqg89ZEWUxz6ZbdmiOmmS/b7QbYmJqkOG2L+zPXtyJ53Hc/iwXZdQqan2N3/xRbuewXQkJ1vZd8mSdl1F7G924ICd49hgdRwnE0jEjguPiJyJ9W4HmKmqP0Rw7AigA1AN+AV4CigFoKqDRUSA/2Atuw4Ct6rq/MCxXYFXgRLAUFV9PpzvjI+P1/nz54ebxAJpzRqrfxs1ynLQURkePjXViocSEzMuH31kxQoPPGBFLEFly1r2fdkyK0b48ktrPZSaCs2bW2VgjRpWIQhWLPTEE/Yjg9lysKKhTp3s/YQJVnwTtGOHZcHbtLEirilTbNjjCy6wLH2w6KSgWLLEGgCcdZZdm6C1a22QtIoVrZiofPn0bcuWWVFSlSpw5ZVW9FKY7N9vxXxly6avW7XKiqn27YPOna2JrGRVeu1Oyo4dVpR5xhlWRHcSRGSBqsZHdFC4EQcYACwDng0sS4G7I41c+bkU9hzJ4cOqdetqhvqzPLdtmxXzvPqqvVe198dWJsbFWXZbVXXpUsvmL1qkunVr+hNtqClT7NhgJWjQ6tWq5cppWpHKihW2/ptvLNfSsKEtp51mxS2q9mR45pmZczk9e54w2+6cOz7yomgrbUerGykf8rk8sCTSL8zPpbAHkgED7C/UrFnWJTk5FryhL11qxUp16mS8MU+YYNtXrEivV9iwIb0l1LEOHrTy/bZt7X3Qtm1WPh087+2323kmTrSioOrVVUeOtLL1mJj06Nm4sRUZ/fyzBS6wlkglSljRyOTJ1urp00/tNzjncuxkAkkkrbYESAn5nELWLapcLli40DrHlipljWhyZXj4LVusuGjqVJg1C+6/H/r2tS9Zvtxaopx9trUvb9TIiq5atYK4OFuCxoyxpmPDhllrpKB777WWLmDFTm++aa13br3VWqb88IO19nnhBXj3Xdvvd7+zVjotWlhb+zfesOKec86xtAX7CMybB2+/ba+NGlmLlmC/ggYNcuHiOOdOViS3p/8C34vImMDnHsC7uZ4iR0qKFYmrWjAJtiSMWLDJ4cGDVjb/44+2vlIla15Yo4Z1HmvWLH1b0F13waBB1mR09uz0USFXroSrr7b3XbrAJ5/YeZ54AoYMseaiTZtaz9lgp6/q1S0atmplS+/eFsxq1bJ6gWAZes2a8MwzWf+W8uUtULli4ejRo2zatInDhw9HOylFVtmyZalXrx6lcmPE10iyL0AbrK7kHuCsSLM/+b0U1qKtCROsFOeii07i4NWrVV9+2Zot9uxp6x5/3OoYnnnGmqsGi6ZCO4u99lr6OQYOtHXB4qgePaw1TbAoqmZN1UGD0ptRBluK9O+ffu6ffrJ93nuvgDY1cwXZunXrdMeOHZpa6Nq6Fw6pqam6Y8cOXRfsOBmCvKwjKYxLYQwkycnWZeD008NurWcefTRjX4AWLax/wIwZ6esuvthOmppqzRhFrGlnsPdwp062TzB4HD1qQSW0iWqjRqrLltl3btig+txzqo88Yn0TnMslK1as8CCSx1JTU3VFsHFLiDwNJEBZ4K/AZ8CnwH1A2Ui/MD+XwhhIgl0uPv44mx0OHrRA8Ouvqq+/bk279u1L73R06qk2bIaq6g8/WP+DM85Qffttq8iuVs2G4wh2xDp4ML1PQ/Pm1hHw5Zcz1u6vXav65puWqND+As7lkaxucC735VYgCbsfiYh8jE1m9VFg1fVAZVW9Jvujoquw9SOZONGa1detayMhZGpe/+uvVp9xyimwfbsNuPbll/DBBzBihA23ERxoMD4e5syxoUSmTrV6i7lzbcjgXbusEubPf/ZJ3l2BtHLlSuJCG3i4PJHVdT6ZfiSR3EWaquqZIZ+nikjYHRLd8SUlpc94OHRoFkFk82YbRXTPHhvTqE4dO+CFF2xcoL//3UazveIKG8dp+XLo18/G/akZmBG5bVsbE8k553JRJIFkkYicp6pzAETkXOC7vElW8fPMM5bhaNsWLjtvL2zaa72dFy+2FlbjxlkQ6d7degQ/+aQFkerV4Z134Pbb7USnn57etNY5lycuvvhi9u3bR8mSJSlMpR55JZJAci5ws4j8HPgcC6wUkaWAqmqrXE9dMbFhQ/o0F+++C/zxj/D111aEVbKkjWL6xBMWQMaMsSa9ffvaCLO1annxlHP5bObMmdFOQoESyR3oeLMbuhzYt8+aRPVMOEqLT56zIALp03Q+9pjVaQwfnj4UdcmSGcdscs65KIlkhsQNeZmQ4uytt+z1lRsXwDXPWgXJuHEWXdassd7m7dv74HbO5aPExESuuuoqli5dmrYuKSmJZs2aMWHCBJo3L7YzfmfiZSJRlJICd1+1icMTvuG22/tQ77x6NmrtDTdYDsQ5FzWNGjVi48aNpKamEhMoCRgyZAjt27f3IHIMDyTRosp3tw3lxfH3EUMqe/p3syIssIp051xUxcTEEBsby/r162nUqBGHDh3i5ZdfZlpwlkiXJuxAEpgvpDfQSFWfFZFYoJaqzs2z1BVVW7dy9Na+tJs8gW/pyIyb3+XpAz/atJyPPOKDEDoX4t57rfFibmrd2rpUnUhcXByrVq2iUaNGDBo0iO7du9PA/39mEkmO5A0gFeiEzUeyD+vhfk4epKvo2r/fJmP69TcGMJB3ytzFhr+sh57X2eiMjz4a7RQ65wLi4uJYvXo17dq1Y9CgQcyZMyfaSSqQImr+q6ptRGQRgKruFpHSkXyZiHQGBmIzHb6jqi8es/1BLNcTTFscUF1Vd4nIeix4pQDJkfa8jDpVqyw/9VR++b/XeHzAHl7hXu6uNZ7qf/jeWmFNnQqnnRbtlDpXoISTc8grcXFxfPvttwwcOJDevXtTs2ZNtm3bxnXXXUe3bt1Yvnw5F1xwAV999RVPP/00LVq0iF5ioygmgn2PikgJQAFEpDqWQwlL4NhBQBegOXC9iGSosVLVf6pqa1VtDTwKTFfVXSG7dAxsL1xBZOdO6wMyejQAZW/syZ0l3+FUDtCw/C9WsT5vHpx55glO5JzLT3FxccydO5ehQ4fy4IMPArBo0SKuvvpqHnroIfbs2UPfvn255ppr2LCh+DZsjSSQvAaMAWqKyPPALODvERzfFkhU1XWqegQYCSQcZ//rgRERnL9gWrMGzj3X5t7evx+AcffPoM3R71n0p0GUXL7EJoj63e+im07nXCZNmzZl6dKl9OvXj4oVKwKwePFiLr/8co4ePUrVqlWJiYlh2bJltGzZMsqpjZ5I+pEME5EFwCWBVT1UdWUE31UX2BjyeRPWWz4TETkF6wB5V2gSgCkiosBbqjokm2P7Af0AYmNjI0heHpgzJ70Z7/Tp6LnncXUP5b5xT7KnTHXOeu3W6KbPOXdcZcqUITk5OcO6xMREmjRpwpIlS9IGPFy/fn307zdRFEmrrTLYxFYVA8ddIyKo6rPhniKLddkNPXwl8N0xxVoXquoWEakBfCUiq1R1RqYTWoAZAjb6b5hpy31r1tjUtRUqWGus885j4gSoOu5d2jGD/c8PhnLlopY859zJeTcwll3r1q1p3bo1AB9++GEUUxR9kRRtjcOKopKBAyFLuDYB9UM+1wO2ZLNvL44p1lLVLYHX7VgRW9sIvjv/nXGGTVe7Ywd07kzKt9OZ0vt9/sNdbP39pZx675+inULnnMsVkbTaqqeqORlvax7QWEQaApuxYHHDsTuJSEWgPXBjyLryQIyq7gu8vwxrglzwTJxoY2C1amWjMQJUrEiJSzowEPih/Pm0mj4KSpSIajKdcy63RJIjmS0iJ12bpKrJWJ3HZGAl8LGqLheRO0TkjpBdrwKmqGpobqcmMCsw/8lcYIKqTjrZtOSZb7+FHj2sU+GyZdZK69FHObRyPX1KDecKmUDlpTORqlWinVLnnMs1keRILgJuEZGfgCSsziOi4eNVdSIw8Zh1g4/5/B7w3jHr1gEFu23sDz9YEGnSxFph9e1r9SMPPMDIcZX44Oj1/PWvENsw2gl1zrncFUkg6ZJnqSjs1q+HLl1sIqpJk2D+fPj0U3j6abYnV+H+++HCC9PnHHHOuaLEh5HPDddfb/Ogz55trzfcAHFx8NBDXHWpTWz41lvpU4k451xREtHovyJSGWgMlA2uy6oJbrFy6JD1FwHo1MlmqapZEz7/nFkLyjF7ts1++/vfRzeZzjmXVyLpR/In4B6s2e5i4Dzgf9ggjsXTmDE2/AlYBfuOHTb17d13ozVqctMfbJNPoe6cK8oiKWy5Bxvpd4OqdgTOAnbkSaoKg1mz4Jpr4LnnoG5de33nHXutWZMPP7Sqk5Yt4ZJLTng251wB1alTJxITEzMNgZKUlETDhg1ZsWJFtsfu3r2bq666Kq+TGHWRBJLDqnoYrJe7qq4CmuZNsgq4vXvhxhutv8imTdC7d4Z+IcnJ8Ne/2vt33olSGp1zObZ8+XKqVq2aYbbEoHBmS6xcuTK7du1iZ7DkooiKJJBsEpFKwFhsiJJxZN8zvWgbMAA2brSmWAB33JFh8wcfWIlXr17QtmD3v3fOHce4cePo0aNHhtkSgbTZEp9++ukTnqNbt26MHz8+bxMaZWHVkQRmRxygqr8BT4vIVGzMrYLXKTCvjRsH778PDzxgTbGuvdYmpAo4fBieesoCyPDhUUync0VIhw6Z1117LfzlL3DwIHTtmnn7LbfY8uuv0LNnxm3hzpY7ceJEvvjiC+DkZ0tMSEjg4Ycf5pZbbgnvSwuhsAKJqqqIjAXODnyenpeJKtDOOQcC8xKwbx889FCGza++aqVd//qXzWPlnCucDh06xJEjR6hUqRJw8rMlNm3alNWrV+dhSqMvkua/c0TkHFWdl2epKchSUmD1amje3Capuvxye9wJjP4JVnXyt7/Ze5/W2bncc7wcxCmnHH97tWrh50BClStXDhFh//79nHrqqVnOlgiccMbEDRs20LBh0R7SIpI6ko5YMFkrIktEZKmILMmrhBU4jzxinUFatrRA0qRJpjlAX3rJstnnnGNzWTnnCrfLL7+cSZOsBD+r2RLhxDMmjhs3joSE483hV/hFEki6AI2wfiNXAlcEXos+1fTOIGXLwq23wowZNiRKwI4dVpwFFlCcc4VfQkICY8eOBbKeLRFOPGPi+PHj6d69ezSSn28iKdr6BfgLNnijYlPtvpkXiSpwPvsMdu+G9u2zzSO//DIkJcFZZ9luzrnC7+yzz2bp0qUkJydnOVsiHH/GxN27d5OUlETt2rXzO+n5SlTDm0RQRD4G9gEfBVZdD1RW1WvyKG05Fh8fr/Pnz8/ZSY4etfnUN260YeH/+MdMuxw8aH0STzvNGnJ1zsmsLc45Vq5cmXZTdnknq+ssIgtUNT6S80SSI2mqqqFDuU8NzA9StL3/vgWRkiWtgj0LH30Ev/1mLYPbtcvf5DnnXLRFUkeySETOC34QkXOB7yL5MhHpLCKrRSRRRB7JYnsHEdkjIosDy5PhHptnrr0Wate2huynnpppsyq88ILVvV98cb6lyjnnCowT5khEZClWJ1IKuFlEfg58Ph3IfpCZzOcpAQwC/oDN3z5PRD5X1WPPMVNVrzjJY3Pfzp2wdWum/iJBkyfbmFrVq0Nqqs+g65wrfsIp2rrixLuEpS2QGJjtEBEZCSQQXjDKybEnJyXFBmUMtBWnS9bzej31lL0+9pgHEedc8XTCQJKLE1rVBTaGfN4EZNXb4vxA3csW4AFVXR7BsYhIP6AfQGxs7MmnduxYGya+cWPrO9I08/iUy5fD3LlQrpzNrOucc8VR2HUkIhIvImNEZOFJdkjMasCQY5uMLQROD1Tqv44NEBnusbZSdYiqxqtqfPXq1SNI3jFefx3q14c1a2x03yw8+6y93nknlC9/8l/lnHOFWSSttoYBDwJLgdQT7JuVTUD9kM/1OGb0YFXdG/J+ooi8ISLVwjk2Vy1fDtOnwx/+YC22brgh0y6//moZlnLlsq0+cc65YiGSQLJDVT/PwXfNAxqLSENgM9ALyHCHFpFawC+BQSLbYjmmncBvJzo2V735JpQpA6tWWWut+vUz7TJ4sHUxmTcvvRrFOeeKo0gCyVMi8g7wDZAUXKmqn4VzsKomi8hdwGSgBDBUVZeLyB2B7YOBnsCdIpIMHAJ6qfWYzPLYCNIemYsuspZan30G//lPps1HjsDAgXDZZXDmmVkc75xzxUgkgeRWoBnWDDhYtKVAWIEErLgKmHjMusEh7/8DZL5zZ3NsnmnfHu67D+Lj4YrMjdY+/NCKtkqXzpfUOOcKKMmnuSLCHYEkWiIJJGeqassT71aI7d9vWYxffrHPb78NMRnbI6imV7Lfd18+p885V6A8/PDDPP/885Qo5m3/I+nZPkdEsp+cuCiYNAnWrbPgMW1ahrlGgqZPh59/hjp1oGPHfE+hc66AUFVUtdgHEYgsR3IR0EdEfsLqSASbPLFVnqQsGoYNs9eJE61YKwtPPGGvjz3mMyA6V5zNnTuXc845J+LjLr74Yvbt20fJkiXJ8aCyBUQkgaToj2k7a5blRi64IMvNa9faLsEpSZxzxdeUKVO49957Iz5u5syZuZ+YKIukaOtn4GKgT6C3uwJFp+HrTz9ZDXqdOpnqRYJee80GAR4/3qb3dM4VX/v27aNChQrRTkaBEEkgeQM4H5uHBGxukkG5nqJomTXLXrMp0tqzxyZJ7NULLr00H9PlnCtwNmzYQIMGDXJ8nrFjx9K3b18SEhKYMmVKzhMWJZEEknNVtT9wGEBVdwNFpwFscE7lbCZbf/NNOHDAht1yzhVv48eP58orM880PmbMGESEVatWpa1LTExMm3Y3KCkpiYYNG9KkSRPefvtt3nvvPUaNGpXn6c4rkQSSo4Hh3BVARKpzckOlFEwrV9prFrOyJSenz8eeTYbFOVdEHT16NNO6n3/+mfpZjHgxYsQI4uPjGTlyZNq6Ro0asXHjRlJT02+XQ4YMoX379jRvbg1hn3vuOfr3758Hqc8fkQSS14AxQE0ReR6bs/2FPElVfps4Ee64w943z9zCecwYm5akfn1v8utccTJjxgyaNGnC/v3709bt3buXihUrZtp3//79TJ8+nXfffZcRI0akrY+JiSE2Npb169cDcOjQIV5++WWefvppVJWHH36YLl260KZNmzz/PXkl7ECiqsOAh4C/YwMmJqjqx3mVsHw1caIN1Fi6NDRsmGnz3/5mrw8/7E1+nStO6tSpQ7NmzZg0aVLaukmTJtG5c+ZGrGPHjuXSSy+lVatWlC9fnoULF6Zti4uLSyvuGjRoEN27d6dBgwa8/vrrfP3114wePZrBgwdnOmdhEc4MiccO1Bi8lV4uIqhq99xPVj779luoVMmm1C2Z8ZLMnQtLl9oYjjffHJ3kOVes3XsvLF6cu+ds3RpeffWEu51xxhncfPPNjBs3jp49ewKwcOFCrr322kz7jhgxgn79+gFw7bXXMmLEiLRcRlxcHKtXr6Zdu3YMGjSIOXPmADBgwAAGDBiQO78pisLJkZyPDds+E/hXyPJyYCnctmyx+pGUlCyLtV591Zr6vvQSeEs/54qfrl27MmXKFJKTk0lJSaFkyczP3zt37mTu3LlpOZXrrruOUaNGpY2RFcyRDBw4kN69e1OziA0ZHk6HxFrYXOnXY0O3TwBG5Onou/lp6lR73bUrU0X75s3wySdw991QBB4anCucwsg55KWKFSvSsmVLZsyYQYkSJbjwwgsz7TN69Gi6du1KmTJlAGjYsCG1atVi1qxZXHzxxcTFxfHiiy/y9ddfZyjyKipOmCNR1RRVnaSqfYDzgERgmojcneepyw9ly8J559n7Y3Ikgwdbi63uhb/wzjmXAwkJCYwbN46pU6fSqVOnTNtHjBjB+PHjadCgQdqycuVKhg8fDkDTpk1ZunQp/fr1S6uo37ZtG+3bt+ell16iT58+vPXWW/Ts2ZNly5bl62/LDWENkSIiZYBuWK6kAdaCK+zh4wu0P/4RDh+GOXMyBJIjR2BQoLvl2rU2v5Vzrnjq3r07HTp0oFevXmm5jlDTpk077vFlypQhOTk5w7pFixZx9dVXc88999CjRw/69u1LpUqV2LBhAy1atMjN5Oe5E+ZIROR9YDbQBnhGVc9R1b+p6uZIv0xEOovIahFJFJFHstjeOzAf/BIRmS0iZ4ZsWx+YJ36xiOTOSGcpKRYxVqywSvYzzkjb9OmnsHu31Y/06pUr3+acK6ROP/10TjvtNJo1a5Zr51y8eDGXX345R48epWrVqsTExLBs2bJMnRcLg3ByJDcBB4AmwICQiVyCo/+eFs4XBTozDsLqWzYB80Tkc1VdEbLbT0B7Vd0tIl2AIUBoV/OOqvprON8XliVLrFjr7LMtiITMVPXKK9bUt08fKF8+177ROVdI9e3bl27duuXa+RITE2nSpAlLliwhLlA/u379emJjY3PtO/LLCQOJqkbSafF42gKJqroOQERGAglAWiBR1dkh+8/BWovlnXnzLEfyyy8Z5sxdtMg2QXo/Redc8XbXXXfl6vneffddAFq3bk3rwNxHH374Ya5+R37JrSARjrrAxpDPmwLrsnM78GXIZwWmiMgCEemXKymaPx8qV4YNGzK02Bo0yEq6LroIWhWd2Vaccy5P5GcgyapPeJYTEYtIRyyQPByy+kJVbQN0AfqLSLtsju0nIvNFZP6OHTuOn6IFCyyApKRA06aAtQIeNgxuu81mQ3TOOXd8+RlINgGho5zVw4ZayUBEWgHvYEOw7AyuV9Utgdft2JhfbbP6ElUdoqrxqhpfvXr17FOTmgqrVkHVqvY5UIk2dKg14urfP9tpSZxzzoXIz1vlPKCxiDQUkdJALyDD8CsiEos1K75JVX8MWV9eRCoE3wOXATlrbH30KDz+ONSqZZ+bNiU11Yq1SpSAsWNzdHbnnCs28i2QqGoycBcwGVgJfKyqy0XkDhEJVmk/CVQF3jimmW9NYJaI/ADMBSao6iRyokwZePRR63FYuzZUrMjMmbB+vZV0+Si/zjkXnkjmbM8xVZ0ITDxm3eCQ938C/pTFceuAM49dnyNbt1rEWLkyrX5k9Ghr8tuokVW0O+ecO7HiWwvwj39YRfuqVdCsGampMGoUqMKtt/pw8c45F67iG0g2bIC6deG336BZM777DnbssADiw8U751z4im8g+flnm4MEoFkzRo+2ju2jRtlMiM4558KTr3UkBcqGDRAYGC21STNG3wZdu8I110Q5Xc65QkEKafl3cI6U3FQ8cyQHDtgk7CkpUK4cczbXZ8sWqFEj2glzzhUGGzduTJu4qrAteaF4BpKYGPjgA6sQadKEj4bbZUhJiXK6nHOFwuTJk7n88sujnYwCo3gGknLl4KabYPNmtFkzRo2y1X37RjdZzrnCYc+ePWkTVLniGkjAxkH56Se2VWzGrl1WrNU2y0FXnHMu3f79+6lQoUK0k1GgFN9AkpgIqkzZYJ0Rb7nF+444505s8uTJXHbZZdFORpqxY8fSt29fEhISmDJlSlTSUHwDyapVAHy6vBkVK8KfMvWnd865zH766ScaNGiQYV2nTp3SptI9dOgQ7du3JyWk0nXMmDGICKsC9x2wia2OnQ0xKSmJhg0bsmLFCrJz5MgR2rVrl/Z9PXr04O233+a9995j1KhR7N69m6uuuiqnPzMixT6QfLOpCc88A40bRzk9zrkCKTU1Ne19SkoKJUtm7DWxfPlyqlatmrZ+6NChXH311ZQoUSJtnxEjRhAfH8/IkSPT1jVq1IiNGzdmOP+QIUNo3749zZs3zzY9pUuX5pJLLmFUsHI34LnnnqN///5UrlyZXbt2sXPnzmzOkPuKdSD5rWIsBylPjx7RToxzrqBJTU3lmWee4YknnkhbN3v2bC644IIM+40bN44eITeRYcOGkZCQkPZ5//79TJ8+nXfffZcRI0akrY+JiSE2Npb169cDlpN5+eWXefrpp0+Yth49ejBs2DDA+oU8/PDDdOnShTZt2gDQrVs3xo8fH+lPPmnFOpD8cLgpIjZJonOuAOvQIfPyxhu27eDBrLe/955t//XXzNvCICLcd999fPPNN2nr5s+fzznnnJNhv4kTJ6bN5X7kyBHWrVuXoehr7NixXHrppbRq1Yry5cuzcOHCtG1xcXFpxV2DBg2ie/fumYrNstKiRQvmBeYDf/311/n6668ZPXo0gwfbGLgJCQmMzce5MIpnz3ZVUlet5oekW/ndGXDaadFOkHOuoBERTjvtNOrXr09iYiJnnHEGqampGXq0Hzp0iCNHjlApMNzSr7/+mvY+aMSIEfTrZ7ODX3vttYwYMSIt5xAXF8fq1atp164dgwYNYs6cOWGlrUSJEpQuXZp9+/YxYMAABgwYkGF706ZNWb169Un+8sgVz0CyZQsxB/azimbcfnu0E+OcO6Fp07Lfdsopx99erdrxt59AQkIC48aN48orr6RpYMqJoHLlyiEi7N+/n1NPPZVy5cpx+PDhtO07d+5k7ty5fPbZZwBcd911tG/fnpdeegkRIS4ujm+//ZaBAwfSu3dvatasGXa6kpKSKFu2bJbbNmzYQMOGDU/i156c4lm0FchKrqYZ/ftHOS3OuQKtW7duTJgwga+//ppLLrkk0/bLL7+cSZNsnr3KlSuTkpKSFkxGjx5N165dKVOmDAANGzakVq1azJo1C7Acydy5cxk6dCgPPvhg2jm3bduWFnD69OnDW2+9Rc+ePVm2zCaG3blzJ9WrV6dUqVJZpnncuHEZ6mnyWr4GEhHpLCKrRSRRRB7JYruIyGuB7UtEpE24x0biwAILJClnNMX7FTnnjqdy5crExMSwdetWypUrl2n7sfURl112WVqgGDFiBOPHj6dBgwZpy8qVKxk+fDhgRVBLly6lX79+GXrKL1q0iKuvvpqHHnqIPXv20LdvX6655ho2bNgAwNSpU+natWu2aR4/fjzdu3fPjZ8flnwr2hKREsAg4A/AJmCeiHyuqqENprsAjQPLucCbwLlhHhu2zd+sojancsezdU7+Bznnio0rrrgi297sZ599NkuXLiU5OZmSJUty11138e9//5tLL72UaScoUitTpkxaf5BQixcv5qqrruLo0aNUrVqVmJgYli1bRt/AOE7Dhw/nhRdeyPKcu3fvJikpidq1a0f2I3MgP+tI2gKJgWlzEZGRQAIQGgwSgA/UhqicIyKVRKQ20CCMYzPZv/QnvmvQO9P6RptnsLZkM6651ruyO+dO7Oabb87QL+RYP/zwQ9r7s846i44dO5KSknLcY44nMTGRJk2asGTJEuLi4gBYv349sbGxHDlyhB49emSqrwmqXLkyM2bMOKnvPVn5GUjqAhtDPm/Cch0n2qdumMcCICL9gH4ALShN3S1zM+2TJGXZ3fkGTvJv7JwrZqpUqRLR/rfddluOvu/dd98FoHXr1rRu3RqADz/8ELAOiTcXsGlc8zOQZPX4f+zg+NntE86xtlJ1CDAEID4+XhvMn59lYhpkl0rnnHMRyc9AsgkIncS2HrAlzH1Kh3Gsc865KMjPVlvzgMYi0lBESgO9gM+P2edz4OZA663zgD2qujXMY51zRUhezebnTG5e33zLkahqsojcBUwGSgBDVXW5iNwR2D4YmAh0BRKBg8Ctxzs2v9LunMtfZcuWZefOnVStWrXQzo1ekKkqO3fuzLZDY6SkKEf9+Ph4nZ9NHYlzruA6evQomzZtytBL3OWusmXLUq9evUydGkVkgarGR3Ku4jlEinOuQCtVqlS+DvHhcqZ4DpHinHMu13ggcc45lyMeSJxzzuVIka5sF5F9QP4Nyl+wVQN+jXYiCgC/Dun8WqTza5GuqapGNJxtUa9sXx1p64OiSkTm+7Xw6xDKr0U6vxbpRCTipq5etOWccy5HPJA455zLkaIeSIZEOwEFiF8L49chnV+LdH4t0kV8LYp0Zbtzzrm8V9RzJM455/KYBxLnnHM5UiQDiYh0FpHVIpIoIo9EOz35SUSGish2EVkWsq6KiHwlImsCr5Wjmcb8IiL1RWSqiKwUkeUick9gfbG7HiJSVkTmisgPgWvxTGB9sbsWACJSQkQWicgXgc/F8joAiMh6EVkqIouDTX8jvR5FLpCISAlgENAFaA5cLyLNo5uqfPUe0PmYdY8A36hqY+CbwOfiIBm4X1XjgPOA/oF/C8XxeiQBnVT1TKA10Dkw509xvBYA9wArQz4X1+sQ1FFVW4f0pYnoehS5QAK0BRJVdZ2qHgFGAglRTlO+UdUZwK5jVicA7wfevw/0yM80RYuqblXVhYH3+7AbR12K4fVQsz/wsVRgUYrhtRCRekA34J2Q1cXuOpxARNejKAaSusDGkM+bAuuKs5qBmSYJvNaIcnrynYg0AM4CvqeYXo9Acc5iYDvwlaoW12vxKvAQkBqyrjhehyAFpojIAhHpF1gX0fUoikOkZDWdmrdxLsZE5FTgU+BeVd1bXGfcU9UUoLWIVALGiEiLKCcp34nIFcB2VV0gIh2inJyC4kJV3SIiNYCvRGRVpCcoijmSTUD9kM/1gC1RSktB8YuI1AYIvG6PcnryjYiUwoLIMFX9LLC62F4PAFX9DZiG1aUVt2txIdBdRNZjxd6dROQjit91SKOqWwKv24ExWPVARNejKAaSeUBjEWkoIqWBXsDnUU5TtH0O9Am87wOMi2Ja8o1Y1uNdYKWq/jtkU7G7HiJSPZATQUTKAZcCqyhm10JVH1XVeqraALs3fKuqN1LMrkOQiJQXkQrB98BlwDIivB5Fsme7iHTFykFLAENV9fnopij/iMgIoAM2LPYvwFPAWOBjIBb4GbhGVY+tkC9yROQiYCawlPTy8MewepJidT1EpBVWaVoCe4D8WFWfFZGqFLNrERQo2npAVa8ortdBRBphuRCwqo7hqvp8pNejSAYS55xz+acoFm0555zLRx5InHPO5YgHEueccznigcQ551yOeCBxzjmXIx5InHPO5YgHElesiUjVwPDZi0Vkm4hsDvlcWkRm59H31hOR67JY30BEDgXGxMrpd5QL/I4jIlItp+dzLjtFcawt58KmqjuxYdURkaeB/ar6r5BdLsijr74Em+ZgVBbb1qpq65x+gaoewsbWWp/Tczl3PJ4jce44RGR/IJewSkTeEZFlIjJMRC4Vke8CE/+0Ddn/xsAEUotF5K3A/DjHnvMi4N9Az8B+DY/z/Sf87sAwFxMCk1Ytyyqn41xe8kDiXHjOAAYCrYBmwA3ARcAD2LAriEgccB02mmprIAXofeyJVHUWNiZcQmAyoZ9y+N2dgS2qeqaqtgAm5eiXOhchL9pyLjw/qepSABFZjs0epyKyFGgQ2OcS4GxgXmCo+nJkP2pqU2B1Ln33UuBfIvIP4AtVnRnpj3MuJzyQOBeepJD3qSGfU0n/fyTA+6r66PFOFBgQb4+qHs2N71bVH0XkbKAr8IKITFHVZ8M8t3M55kVbzuWeb7B6jxoAIlJFRE7PYr+G5OIcOSJSBzioqh8B/wLa5Na5nQuH50icyyWqukJEHsemLY0BjgL9gQ3H7LoKqCYiy4B+qprTJsYtgX+KSGrgO+/M4fmci4gPI+9cARKYW/6LQKV5bp1zPRCvqr/m1jmdC+VFW84VLClAxdzskAiUIn1iL+dynedInHPO5YjnSJxzzuWIBxLnnHM54oHEOedcjnggcc45lyMeSJxzzuWIBxLnnHM54oHEOedcjnggcc45lyP/D1GHxU+FguyvAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "dt = 1.0\n", + "mu, sigma = noise_params(2.0, 1.0, dt=dt)\n", + "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", + "\n", + "V, t, ts = simulate(mu, sigma, dt=dt)\n", + "V_mean_th = V_mean(t, mu)\n", + "V_std_th = V_std(t, sigma, dt=dt)\n", + "\n", + "plt.plot(t, V.mean(axis=1), \"b-\", label=r\"$\\bar{V_m}$\")\n", + "plt.plot(t + ts, V_mean_th, \"b--\", label=r\"$\\langle V_m \\rangle$\")\n", + "plt.plot(t, V.std(axis=1), \"r-\", label=r\"$\\sqrt{\\bar{\\Delta V_m^2}}$\")\n", + "plt.plot(t + ts, V_std_th, \"r--\", label=r\"$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$\")\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"Time $t$ [ms]\")\n", + "plt.ylabel(\"Membrane potential $V_m$ [mV]\")\n", + "plt.xlim(0, 50);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We again observe excellent agreement between theory and simulation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Shorter and longer switching intervals\n", + "\n", + "We now repeat the previous simulation for zero mean with shorter ($\\delta=0.1$ ms) and longer ($\\delta=10$ ms) switching intervals." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mu = 0.00, sigma = 353.55\n", + "\n", + "Dec 01 11:25:57 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:57 NodeManager::prepare_nodes [Info]: \n", + " Preparing 1002 nodes for simulation.\n", + "\n", + "Dec 01 11:25:57 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 1002\n", + " Simulation time (ms): 50\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:57 SimulationManager::run [Info]: \n", + " Simulation finished.\n" + ] + }, + { + "data": { + "image/png": "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l+AjVgmLuoQESEqKdyqcc6VMZmYm99xzD3fdddeBdbNmzeL000/Ptt+UKVPo37//geUJEybQr19o0tBdu3Yxc+ZMxo0bx8SJEw+sr1SpEk2aNGH16tWA5Uwef/xxRo4cWWja+vfvz4QJEwDrV3H77bdz7rnnctJJJwHQp08fpk6dGulHLrJI+mH8BfgSG232nsDzyNgkK8pUrUjKW0g553IQEf7617/y6aefHlg3d+5cTj45+7iq06ZNOzB1a1paGqtWrcpWZDV58mR69OhBu3btOPjgg5kfHIoISExMPFBMNXr0aPr27ZuruCsvbdu2Zc6cOQD897//ZcaMGUyaNIkxY2zM1n79+jF58uSifOwiiaRZ7U3YyLTfqeqZItIGCxyl3++/w8aN9uycK73ymjp5yBC49lrYswd69869/Yor7LFpEwwalH1bcITqAogItWvX5qijjiI5OZljjjmGzMzMbD289+7dS1paGnXq1AFg06ZNB14HTZw4keHDhweSPISJEyceyAkkJiayYsUKunTpwujRo/nuu+8KTRdAQkICVatWZefOndx4443ceOON2ba3bt2aFcEGPSUgkiKpfaq6D6zXt6ouB1rHJllRtnChPXuFt3MuH/369WPKlCmsXLmS1q2z39pq1KiBiLBr164Dy/v27TuwffPmzcyePZtevayr2tChQw/0EIdQDuOpp57ikksuoVGjRmGnKzU1lerVq+e5bc2aNTRr1izPbbEQSQ4jRUTqAJOBT0RkK7mnWC2dFi+251at4psO51zBCsoRHHRQwdsPPTSsHEV++vTpwwUXXECNGjW48sorc23v2bMn06dPZ9CgQdStW5eMjAz27dtH9erVmTRpEr1796ZatWoANGvWjMMOO4yvv/6azp07k5iYyMMPP8yMGTOyFVX98ccfDB06lD59+rB06VJOP/10PvnkE0aOHEnbtm3ZvHkzDRo0oEqVKnmmecqUKdnqUWItrByGWN7sRlXdpqojgbuAcUD/2CUtioJZNp84yTmXj7p161KpUiV+//13atSokWt7zvqCc845h6+//hqw4qipU6fStGnTA49ly5bx2muvAVZ0tHjxYoYPH56t5/iCBQsYOHAgt912G9u3b2fYsGEMHjyYNWusAernn39O77yK4QKmTp1K3759o/HxwxJWDkNVVUQmAx0CyzNjmaioC1x8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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "dt = 0.1\n", + "mu, sigma = noise_params(0.0, 1.0, dt=dt)\n", + "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", + "\n", + "V, t, ts = simulate(mu, sigma, dt=dt)\n", + "V_mean_th = V_mean(t, mu)\n", + "V_std_th = V_std(t, sigma, dt=dt)\n", + "\n", + "plt.plot(t, V.mean(axis=1), \"b-\", label=r\"$\\bar{V_m}$\")\n", + "plt.plot(t + ts, V_mean_th, \"b--\", label=r\"$\\langle V_m \\rangle$\")\n", + "plt.plot(t, V.std(axis=1), \"r-\", label=r\"$\\sqrt{\\bar{\\Delta V_m^2}}$\")\n", + "plt.plot(t + ts, V_std_th, \"r--\", label=r\"$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$\")\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"Time $t$ [ms]\")\n", + "plt.ylabel(\"Membrane potential $V_m$ [mV]\")\n", + "plt.xlim(0, 50);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, agreement is fine and the slight drooping artefacts are invisible, since the noise is now updated on every time step. Note also that the noise standard deviation $\\sigma$ is larger (by $\\sqrt{10}$) than for $\\delta=1$ ms." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mu = 0.00, sigma = 35.36\n", + "\n", + "Dec 01 11:25:57 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:57 NodeManager::prepare_nodes [Info]: \n", + " Preparing 1002 nodes for simulation.\n", + "\n", + "Dec 01 11:25:57 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 1002\n", + " Simulation time (ms): 50\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:57 SimulationManager::run [Info]: \n", + " Simulation finished.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "dt = 10.0\n", + "mu, sigma = noise_params(0.0, 1.0, dt=dt)\n", + "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", + "\n", + "V, t, ts = simulate(mu, sigma, dt=dt)\n", + "V_mean_th = V_mean(t, mu)\n", + "V_std_th = V_std(t, sigma, dt=dt)\n", + "\n", + "plt.plot(t, V.mean(axis=1), \"b-\", label=r\"$\\bar{V_m}$\")\n", + "plt.plot(t + ts, V_mean_th, \"b--\", label=r\"$\\langle V_m \\rangle$\")\n", + "plt.plot(t, V.std(axis=1), \"r-\", label=r\"$\\sqrt{\\bar{\\Delta V_m^2}}$\")\n", + "plt.plot(t + ts, V_std_th, \"r--\", label=r\"$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$\")\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"Time $t$ [ms]\")\n", + "plt.ylabel(\"Membrane potential $V_m$ [mV]\")\n", + "plt.xlim(0, 50);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For $\\delta=10$, i.e., a noise switching time equal to $\\tau_m$, the drooping artefact becomes clearly visible. Note that our theory developed above only applies to the points at which the input current switches, i.e., at multiples of $\\delta$, beginning with the arrival of the first current at the neuron (at delay plus one time step). At those points, agreement with theory is good.\n", + "\n", + "#### Why does the standard deviation dip between current updates?\n", + "\n", + "In the last case, where $\\delta = \\tau_m$, the dips in the membrane potential between changes in the noise current become quite large. They can be explained as follows. For large $\\delta$, we have at the end of a $\\delta$-interval for neuron $n$ membrane potential $V_n(t_{j})\\approx I_{n,j-1}\\tau/C$ and these values will be distributed across neurons with standard deviation $\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$. Then, input currents of all neurons switch to new values $I_{n,j}$ and the membrane potential of each neuron now evolves towards $V_n(t_{j+1})\\approx I_{n,j}\\tau/C$. Since current values are independent of each other, this means that membrane-potential trajectories criss-cross each other, constricting the variance of the membrane potential before they approach their new steady-state values, as illustrated below.\n", + "\n", + "You should therefore use short switching times $\\delta$." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t, V[:, :25], lw=3, alpha=0.5)\n", + "plt.plot([31.1, 31.1], [-3, 3], \"k--\", lw=2)\n", + "plt.plot([41.1, 41.1], [-3, 3], \"k--\", lw=2)\n", + "plt.xlabel(\"Time $t$ [ms]\")\n", + "plt.ylabel(\"Membrane potential $V_m$ [mV]\")\n", + "plt.xlim(30, 42)\n", + "plt.ylim(-2.1, 2.1);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Autocorrelation\n", + "\n", + "We briefly look at the autocorrelation of the membrane potential for three values of $\\delta$." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from scipy.signal import fftconvolve\n", + "from statsmodels.tsa.stattools import acf\n", + "\n", + "\n", + "def V_autocorr(V_mean, V_std, dt=1.0, tau_m=10.0):\n", + " \"Returns autocorrelation of membrane potential and pertaining time axis.\"\n", + "\n", + " mu, sigma = noise_params(V_mean, V_std, dt=dt, tau_m=tau_m)\n", + " V, t, ts = simulate(mu, sigma, dt=dt, tau_m=tau_m, t_max=5000.0, N=20)\n", + "\n", + " # drop the first second\n", + " V = V[t > 1000.0, :]\n", + "\n", + " # compute autocorrelation columnwise, then average over neurons\n", + " nlags = 1000\n", + " nt, nn = V.shape\n", + " acV = np.zeros((nlags + 1, nn))\n", + " for c in range(V.shape[1]):\n", + " acV[:, c] = acf(V[:, c], adjusted=True, nlags=1000, fft=True)\n", + " # fftconvolve(V[:, c], V[::-1, c], mode='full') / V[:, c].std()**2\n", + " acV = acV.mean(axis=1)\n", + "\n", + " # time axis\n", + " dt = t[1] - t[0]\n", + " acT = np.arange(0, nlags + 1) * dt\n", + "\n", + " return acV, acT" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dec 01 11:25:58 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:58 NodeManager::prepare_nodes [Info]: \n", + " Preparing 22 nodes for simulation.\n", + "\n", + "Dec 01 11:25:58 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 22\n", + " Simulation time (ms): 5000\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:59 SimulationManager::run [Info]: \n", + " Simulation finished.\n", + "\n", + "Dec 01 11:25:59 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:59 NodeManager::prepare_nodes [Info]: \n", + " Preparing 22 nodes for simulation.\n", + "\n", + "Dec 01 11:25:59 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 22\n", + " Simulation time (ms): 5000\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:59 SimulationManager::run [Info]: \n", + " Simulation finished.\n", + "\n", + "Dec 01 11:25:59 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:25:59 NodeManager::prepare_nodes [Info]: \n", + " Preparing 22 nodes for simulation.\n", + "\n", + "Dec 01 11:25:59 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 22\n", + " Simulation time (ms): 5000\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:25:59 SimulationManager::run [Info]: \n", + " Simulation finished.\n" + ] + } + ], + "source": [ + "acV_01, acT_01 = V_autocorr(0.0, 1.0, 0.1)\n", + "acV_10, acT_10 = V_autocorr(0.0, 1.0, 1.0)\n", + "acV_50, acT_50 = V_autocorr(0.0, 1.0, 5.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(acT_01, acV_01, label=r\"$\\delta = 0.1$ms\")\n", + "plt.plot(acT_10, acV_10, label=r\"$\\delta = 1.0$ms\")\n", + "plt.plot(acT_50, acV_50, label=r\"$\\delta = 5.0$ms\")\n", + "\n", + "plt.xlim(0, 50)\n", + "plt.ylim(-0.1, 1.05)\n", + "plt.legend()\n", + "plt.xlabel(r\"Delay $\\tau$ [ms]\")\n", + "plt.ylabel(r\"$\\langle V(t)V(t+\\tau)\\rangle$\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that the autocorrelation is clearly dominated by the membrane time constant of $\\tau_m=10$ ms. The switching time $\\delta$ has a lesser effect, although it is noticeable for $\\delta=5$ ms." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Different membrane time constants\n", + "\n", + "To document the influence of the membrane time constant, we compute the autocorrelation function for three different $\\tau_m$." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dec 01 11:26:00 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:26:00 NodeManager::prepare_nodes [Info]: \n", + " Preparing 22 nodes for simulation.\n", + "\n", + "Dec 01 11:26:00 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 22\n", + " Simulation time (ms): 5000\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:26:00 SimulationManager::run [Info]: \n", + " Simulation finished.\n", + "\n", + "Dec 01 11:26:00 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:26:00 NodeManager::prepare_nodes [Info]: \n", + " Preparing 22 nodes for simulation.\n", + "\n", + "Dec 01 11:26:00 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 22\n", + " Simulation time (ms): 5000\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:26:00 SimulationManager::run [Info]: \n", + " Simulation finished.\n", + "\n", + "Dec 01 11:26:01 SimulationManager::set_status [Info]: \n", + " Temporal resolution changed from 0.1 to 0.1 ms.\n", + "\n", + "Dec 01 11:26:01 NodeManager::prepare_nodes [Info]: \n", + " Preparing 22 nodes for simulation.\n", + "\n", + "Dec 01 11:26:01 SimulationManager::start_updating_ [Info]: \n", + " Number of local nodes: 22\n", + " Simulation time (ms): 5000\n", + " Number of OpenMP threads: 1\n", + " Not using MPI\n", + "\n", + "Dec 01 11:26:01 SimulationManager::run [Info]: \n", + " Simulation finished.\n" + ] + } + ], + "source": [ + "acV_t01, acT_t01 = V_autocorr(0.0, 1.0, 0.1, 1.0)\n", + "acV_t05, acT_t05 = V_autocorr(0.0, 1.0, 0.1, 5.0)\n", + "acV_t10, acT_t10 = V_autocorr(0.0, 1.0, 0.1, 10.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(acT_t01, acV_t01, label=r\"$\\tau_m = 1$ms\")\n", + "plt.plot(acT_t05, acV_t05, label=r\"$\\tau_m = 5$ms\")\n", + "plt.plot(acT_t10, acV_t10, label=r\"$\\tau_m = 10$ms\")\n", + "\n", + "plt.xlim(0, 50)\n", + "plt.ylim(-0.1, 1.05)\n", + "plt.legend()\n", + "plt.xlabel(r\"Delay $\\tau$ [ms]\")\n", + "plt.ylabel(r\"$\\langle V(t)V(t+\\tau)\\rangle$\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------------------\n", + "#### License\n", + "\n", + "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", + "\n", + "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", + "\n", + "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/htmldoc/model_details/post_trace_computation.ipynb b/doc/htmldoc/model_details/post_trace_computation.ipynb new file mode 100644 index 0000000000..68710aaecc --- /dev/null +++ b/doc/htmldoc/model_details/post_trace_computation.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Postsynaptic trace computation\n", + "==============================\n", + "\n", + "Pre- and postsynaptic traces are used to calculate STDP weight updates, but are computed differently: postsynaptic traces are stored and maintained in the NEST C++ `ArchivingNode` class. Following [nest-simulator#1034](https://github.com/nest/nest-simulator/issues/1034), this notebook (and corresponding unit test in `test_regression_issue-1034.py`) was created to specifically test the postsynaptic trace value, by comparing the NEST-obtained samples to a Python-generated reference timeseries.\n", + "\n", + "Construct a network of the form:\n", + "- pre_spike_gen connects via static_synapse to pre_parrot\n", + "- pre_parrot connects via stdp_synapse to post_parrot\n", + "- post_spike_gen connects via static_synapse to post_parrot\n", + "\n", + "The spike times of the spike generators are defined in\n", + "`pre_spike_times` and `post_spike_times`. From the perspective of the\n", + "STDP synapse, spikes arrive with the following delays (with respect to\n", + "the values in these lists):\n", + "\n", + "- for the presynaptic neuron: one synaptic delay in the static synapse\n", + "- for the postsynaptic neuron: one synaptic delay in the static synapse\n", + "- for the synapse itself: one dendritic delay between the post_parrot\n", + " node and the synapse itself (see the C++ variable `dendritic_delay`)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.ticker as plticker\n", + "import nest\n", + "import numpy as np\n", + "import os\n", + "import scipy as sp\n", + "import scipy.stats\n", + "import unittest" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "NEST simulation\n", + "---------------\n", + "\n", + "Construct and run the NEST network." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def run_post_trace_test_nest_(\n", + " pre_spike_times,\n", + " post_spike_times,\n", + " resolution,\n", + " delay,\n", + " sim_time,\n", + " tau_minus,\n", + " show_all_nest_trace_samples=False,\n", + " debug=False,\n", + "):\n", + " if debug:\n", + " print(\"Pre spike times: [\" + \", \".join([str(t) for t in pre_spike_times]) + \"]\")\n", + " print(\"Post spike times: [\" + \", \".join([str(t) for t in post_spike_times]) + \"]\")\n", + "\n", + " nest.set_verbosity(\"M_WARNING\")\n", + "\n", + " nest.ResetKernel()\n", + " nest.resolution = resolution\n", + "\n", + " wr = nest.Create(\"weight_recorder\")\n", + " nest.CopyModel(\"stdp_synapse\", \"stdp_synapse_rec\", {\"weight_recorder\": wr, \"weight\": 1.0})\n", + "\n", + " # create spike_generators with these times\n", + " pre_sg_ps = nest.Create(\"spike_generator\", params={\"spike_times\": pre_spike_times, \"precise_times\": True})\n", + " post_sg_ps = nest.Create(\"spike_generator\", params={\"spike_times\": post_spike_times, \"precise_times\": True})\n", + "\n", + " # create parrot neurons and connect spike_generators\n", + " pre_parrot_ps = nest.Create(\"parrot_neuron_ps\")\n", + " post_parrot_ps = nest.Create(\"parrot_neuron_ps\", params={\"tau_minus\": tau_minus})\n", + "\n", + " nest.Connect(pre_sg_ps, pre_parrot_ps, syn_spec={\"delay\": delay})\n", + " nest.Connect(post_sg_ps, post_parrot_ps, syn_spec={\"delay\": delay})\n", + "\n", + " # create spike recorder --- debugging only\n", + " spikes = nest.Create(\"spike_recorder\")\n", + " nest.Connect(pre_parrot_ps + post_parrot_ps, spikes)\n", + "\n", + " # connect both parrot neurons with a stdp synapse onto port 1\n", + " # so spikes transmitted through the stdp connection are\n", + " # not repeated postsynaptically.\n", + " nest.Connect(\n", + " pre_parrot_ps,\n", + " post_parrot_ps,\n", + " syn_spec={\"synapse_model\": \"stdp_synapse_rec\", \"receptor_type\": 1, \"delay\": delay},\n", + " )\n", + "\n", + " if debug:\n", + " print(\"[py] Total simulation time: \" + str(sim_time) + \" ms\")\n", + "\n", + " n_steps = int(np.ceil(sim_time / delay))\n", + " trace_nest = []\n", + " trace_nest_t = []\n", + "\n", + " t = nest.biological_time\n", + " trace_nest_t.append(t)\n", + "\n", + " post_tr = post_parrot_ps.post_trace\n", + " trace_nest.append(post_tr)\n", + "\n", + " for step in range(n_steps):\n", + " if debug:\n", + " print(\"\\n[py] simulating for \" + str(delay) + \" ms\")\n", + " nest.Simulate(delay)\n", + " t = nest.biological_time\n", + " nearby_pre_spike = np.any(np.abs(t - np.array(pre_spike_times) - delay) < resolution / 2.0)\n", + " if show_all_nest_trace_samples or nearby_pre_spike:\n", + " trace_nest_t.append(t)\n", + " post_tr = post_parrot_ps.post_trace\n", + " trace_nest.append(post_tr)\n", + " if debug:\n", + " print(\"[py] Received NEST trace: \" + str(post_tr) + \" at time t = \" + str(t))\n", + "\n", + " return trace_nest_t, trace_nest" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python simulation\n", + "-----------------\n", + "\n", + "Generate the Python reference timeseries." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def run_post_trace_test_python_reference_(\n", + " pre_spike_times, post_spike_times, resolution, dendritic_delay, sim_time, tau_minus, debug=False\n", + "):\n", + " \"\"\"\n", + " compute Python known-good reference of postsynaptic trace\n", + " \"\"\"\n", + "\n", + " n_timepoints = 1000 * int(np.ceil(sim_time))\n", + " trace_python_ref = np.zeros(n_timepoints)\n", + "\n", + " n_spikes = len(post_spike_times)\n", + " for sp_idx in range(n_spikes):\n", + " t_sp = post_spike_times[sp_idx] + 2 * dendritic_delay\n", + " for i in range(n_timepoints):\n", + " t = (i / float(n_timepoints - 1)) * sim_time\n", + " if t > t_sp:\n", + " trace_python_ref[i] += np.exp(-(t - t_sp) / tau_minus)\n", + "\n", + " n_spikes = len(pre_spike_times)\n", + " for sp_idx in range(n_spikes):\n", + " t_sp = pre_spike_times[sp_idx] + dendritic_delay\n", + " i = int(np.round(t_sp / sim_time * float(len(trace_python_ref) - 1)))\n", + " if debug:\n", + " print(\"* At t_sp = \" + str(t_sp) + \", post_trace should be \" + str(trace_python_ref[i]))\n", + "\n", + " return trace_python_ref" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the test\n", + "------------\n", + "\n", + "First, define some pre/post spike patterns." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# spike test pattern: generate some random integer spike times\n", + "t_sp_min = 1.0\n", + "t_sp_max = 50\n", + "\n", + "# pre spikes\n", + "n_spikes = 10\n", + "pre_spike_times = np.sort(np.unique(np.ceil(sp.stats.uniform.rvs(t_sp_min, t_sp_max - t_sp_min, n_spikes))))\n", + "\n", + "# post spikes\n", + "n_spikes = 50\n", + "post_spike_times = np.sort(np.unique(np.ceil(sp.stats.uniform.rvs(t_sp_min, t_sp_max - t_sp_min, n_spikes))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define a function that will validate equality between the Python-generated and the NEST-generated timeseries." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "trace_match_atol = 1e-3\n", + "trace_match_rtol = 1e-3\n", + "\n", + "\n", + "def nest_trace_matches_ref_trace(\n", + " trace_nest_t,\n", + " trace_nest,\n", + " trace_python_ref,\n", + " pre_spike_times,\n", + " post_spike_times,\n", + " resolution,\n", + " dendritic_delay,\n", + " trace_match_atol,\n", + " trace_match_rtol,\n", + " sim_time,\n", + " debug=False,\n", + "):\n", + " \"\"\"\n", + " Trace values are returned from NEST at regular intervals, but only\n", + " updated at presynaptic spike times.\n", + "\n", + " To match the NEST samples with the continuous reference trace, step\n", + " backwards in time from the sampled value, to find the last time at\n", + " which the trace value was updated, namely the time of occurrence of\n", + " the last presynaptic spike.\n", + " \"\"\"\n", + "\n", + " n_timepoints = len(trace_nest_t)\n", + " for i in range(n_timepoints)[1:]:\n", + " t = trace_nest_t[i]\n", + " if debug:\n", + " print(\"* Finding ref for NEST timepoint t = \" + str(t) + \", NEST trace = \" + str(trace_nest[i]))\n", + "\n", + " traces_match = False\n", + " for i_search, t_search in enumerate(reversed(np.array(pre_spike_times) + dendritic_delay)):\n", + " if t_search <= t:\n", + " _trace_at_t_search = trace_python_ref[\n", + " int(np.round(t_search / sim_time * float(len(trace_python_ref) - 1)))\n", + " ]\n", + " traces_match = np.allclose(\n", + " _trace_at_t_search, trace_nest[i], atol=trace_match_atol, rtol=trace_match_rtol\n", + " )\n", + " post_spike_occurred_at_t_search = np.any(\n", + " (t_search - (np.array(post_spike_times) + 2 * dendritic_delay)) ** 2 < resolution / 2.0\n", + " )\n", + "\n", + " if debug:\n", + " print(\"\\t* Testing \" + str(t_search) + \"...\")\n", + " print(\"\\t traces_match = \" + str(traces_match))\n", + " print(\"\\t post_spike_occurred_at_t_search = \" + str(post_spike_occurred_at_t_search))\n", + "\n", + " if (not traces_match) and post_spike_occurred_at_t_search:\n", + " traces_match = np.allclose(\n", + " _trace_at_t_search + 1, trace_nest[i], atol=trace_match_atol, rtol=trace_match_rtol\n", + " )\n", + " if debug:\n", + " print(\n", + " \"\\t traces_match = \"\n", + " + str(traces_match)\n", + " + \" (nest trace = \"\n", + " + str(trace_nest[i])\n", + " + \", ref trace = \"\n", + " + str(_trace_at_t_search + 1)\n", + " + \")\"\n", + " )\n", + " if traces_match:\n", + " _trace_at_t_search += 1.0\n", + "\n", + " if (not traces_match) and post_spike_occurred_at_t_search:\n", + " traces_match = np.allclose(\n", + " _trace_at_t_search - 1, trace_nest[i], atol=trace_match_atol, rtol=trace_match_rtol\n", + " )\n", + " if debug:\n", + " print(\n", + " \"\\t traces_match = \"\n", + " + str(traces_match)\n", + " + \" (nest trace = \"\n", + " + str(trace_nest[i])\n", + " + \", ref trace = \"\n", + " + str(_trace_at_t_search - 1)\n", + " + \")\"\n", + " )\n", + " if traces_match:\n", + " _trace_at_t_search -= 1.0\n", + "\n", + " break\n", + "\n", + " if (not traces_match) and i_search == len(pre_spike_times) - 1:\n", + " if debug:\n", + " print(\"\\tthe time before the first pre spike\")\n", + " # the time before the first pre spike\n", + " traces_match = trace_nest[i] == 0.0\n", + "\n", + " if not traces_match:\n", + " return False\n", + "\n", + " return True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting function:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_run(\n", + " trace_nest_t,\n", + " trace_nest,\n", + " trace_python_ref,\n", + " pre_spike_times,\n", + " post_spike_times,\n", + " resolution,\n", + " dendritic_delay,\n", + " trace_match_atol,\n", + " trace_match_rtol,\n", + " sim_time,\n", + " title_snip=\"\",\n", + " debug=False,\n", + "):\n", + " fig, ax = plt.subplots(nrows=3, dpi=120)\n", + " ax1, ax2, ax3 = ax\n", + "\n", + " #\n", + " # pre spikes\n", + " #\n", + "\n", + " ax1.set_ylim([0.0, 1.0])\n", + " ax1.set_ylabel(\"Pre spikes\")\n", + " n_spikes = len(pre_spike_times)\n", + " for i in range(n_spikes):\n", + " ax1.plot(2 * [pre_spike_times[i] + dendritic_delay], ax1.get_ylim(), linewidth=2, color=\"blue\", alpha=0.4)\n", + "\n", + " #\n", + " # post spikes\n", + " #\n", + "\n", + " ax2.set_ylim([0.0, 1.0])\n", + " ax2.set_ylabel(\"Post spikes\")\n", + " n_spikes = len(post_spike_times)\n", + " for i in range(n_spikes):\n", + " ax2.plot(2 * [post_spike_times[i] + 2 * dendritic_delay], [0, 1], linewidth=2, color=\"red\", alpha=0.4)\n", + "\n", + " #\n", + " # traces\n", + " #\n", + "\n", + " ax3.set_ylabel(\"Synaptic trace\")\n", + " ax3.set_ylim([0.0, np.amax(trace_python_ref)])\n", + " ax3.plot(\n", + " np.linspace(0.0, sim_time, len(trace_python_ref)), trace_python_ref, label=\"Expected\", color=\"cyan\", alpha=0.6\n", + " )\n", + " ax3.scatter(trace_nest_t, trace_nest, marker=\".\", alpha=0.5, color=\"orange\", label=\"NEST\")\n", + " ax3.legend()\n", + "\n", + " #\n", + " # Trace values are returned from NEST at regular intervals, but only\n", + " # updated at presynaptic spike times.\n", + " #\n", + " # Step backwards in time from the sampled value, to find the last\n", + " # time at which the trace value was updated, namely the time of\n", + " # occurrence of the last presynaptic spike.\n", + " #\n", + "\n", + " pre_spike_times = np.array(pre_spike_times)\n", + " n_timepoints = len(trace_nest_t)\n", + " for i in range(n_timepoints):\n", + " t = trace_nest_t[i]\n", + " if debug:\n", + " print(\"* Finding ref for NEST timepoint t = \" + str(t) + \", trace = \" + str(trace_nest[i]))\n", + " for t_search in reversed(pre_spike_times + dendritic_delay):\n", + " if t_search <= t:\n", + " if debug:\n", + " print(\"\\t* Testing \" + str(t_search) + \"...\")\n", + " _idx = int(np.round(t_search / sim_time * float(len(trace_python_ref) - 1)))\n", + " _trace_at_t_search = trace_python_ref[_idx]\n", + " traces_match = np.allclose(\n", + " _trace_at_t_search, trace_nest[i], atol=trace_match_atol, rtol=trace_match_rtol\n", + " )\n", + " if debug:\n", + " print(\"\\t traces_match = \" + str(traces_match))\n", + " if not traces_match:\n", + " post_spike_occurred_at_t_search = np.any(\n", + " (t_search - (np.array(post_spike_times) + 2 * dendritic_delay)) ** 2 < resolution / 2.0\n", + " )\n", + " if debug:\n", + " print(\"\\t post_spike_occurred_at_t_search = \" + str(post_spike_occurred_at_t_search))\n", + " if post_spike_occurred_at_t_search:\n", + " traces_match = np.allclose(\n", + " _trace_at_t_search + 1, trace_nest[i], atol=trace_match_atol, rtol=trace_match_rtol\n", + " )\n", + " if debug:\n", + " print(\n", + " \"\\t traces_match = \"\n", + " + str(traces_match)\n", + " + \" (nest trace = \"\n", + " + str(trace_nest[i])\n", + " + \", ref trace = \"\n", + " + str(_trace_at_t_search + 1)\n", + " + \")\"\n", + " )\n", + "\n", + " if traces_match:\n", + " _trace_at_t_search += 1.0\n", + "\n", + " if not traces_match:\n", + " traces_match = np.allclose(\n", + " _trace_at_t_search - 1, trace_nest[i], atol=trace_match_atol, rtol=trace_match_rtol\n", + " )\n", + "\n", + " if debug:\n", + " print(\n", + " \"\\t traces_match = \"\n", + " + str(traces_match)\n", + " + \" (nest trace = \"\n", + " + str(trace_nest[i])\n", + " + \", ref trace = \"\n", + " + str(_trace_at_t_search - 1)\n", + " + \")\"\n", + " )\n", + "\n", + " if traces_match:\n", + " _trace_at_t_search -= 1.0\n", + "\n", + " ax3.scatter(t_search, _trace_at_t_search, 100, marker=\".\", color=\"#A7FF00FF\", facecolor=\"none\")\n", + " ax3.plot(\n", + " [trace_nest_t[i], t_search], [trace_nest[i], _trace_at_t_search], linewidth=0.5, color=\"#0000007F\"\n", + " )\n", + " break\n", + "\n", + " for _ax in ax:\n", + " _ax.xaxis.set_major_locator(plticker.MultipleLocator(base=10 * dendritic_delay))\n", + " _ax.xaxis.set_minor_locator(plticker.MultipleLocator(base=dendritic_delay))\n", + " _ax.grid(which=\"major\", axis=\"both\")\n", + " _ax.grid(which=\"minor\", axis=\"x\", linestyle=\":\", alpha=0.4)\n", + " _ax.set_xlim(0.0, sim_time)\n", + "\n", + " ax3.set_xlabel(\"Time [ms]\")\n", + " fig.suptitle(title_snip)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, run the test and make the plots while we go.\n", + "\n", + "The plots should be interpreted as follows. Pre- and postsynaptic spikes are shown in the top two subplots, at the time at which they arrive at the synapse (i.e. from the perspective of the synapse, taking dendritic and axonal delays into account).\n", + "\n", + "The bottom subplot shows the reference/known-good timeseries generated (numerically) in Python (**cyan colour**). The values returned from NEST are shown using **orange circles**. They are plotted as points rather than as a continuous line, because we can only retrieve the value at the resolution of the minimum synaptic delay (i.e. fetch trace value; simulate for a timestep `delay`; repeat). Moreover, the postsynaptic trace value is only updated in NEST during the processing of a presynaptic spike, so unless a presynaptic spike was processed in the last delay interval, the value will remain unchanged. To allow comparison between the Python- and NEST-generated values, we thus search for the previous time at which NEST would have updated the trace value, which is the time of arrival of the last presynaptic spike. This value is marked by an **open green circle**. If all is well, all green circles should always overlap an orange circle, and all **black lines** (which simply connect subsequent postsynaptic trace values returned by NEST) should be perfectly horizontal." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 720x480 with 3 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "resolution = 0.1 # [ms]\n", + "dendritic_delay = 1.0 # [ms]\n", + "tau_minus = 2.0 # [ms]\n", + "\n", + "# settings for plotting debug information\n", + "show_all_nest_trace_samples = True\n", + "\n", + "max_t_sp = max(np.amax(pre_spike_times), np.amax(post_spike_times))\n", + "sim_time = max_t_sp + 5 * dendritic_delay\n", + "trace_nest_t, trace_nest = run_post_trace_test_nest_(\n", + " pre_spike_times, post_spike_times, resolution, dendritic_delay, sim_time, tau_minus, show_all_nest_trace_samples\n", + ")\n", + "trace_python_ref = run_post_trace_test_python_reference_(\n", + " pre_spike_times, post_spike_times, resolution, dendritic_delay, sim_time, tau_minus\n", + ")\n", + "\n", + "title_snip = \"Dendritic delay = \" + str(dendritic_delay)\n", + "plot_run(\n", + " trace_nest_t,\n", + " trace_nest,\n", + " trace_python_ref,\n", + " pre_spike_times,\n", + " post_spike_times,\n", + " resolution,\n", + " dendritic_delay,\n", + " trace_match_atol,\n", + " trace_match_rtol,\n", + " sim_time,\n", + " title_snip,\n", + ")\n", + "assert nest_trace_matches_ref_trace(\n", + " trace_nest_t,\n", + " trace_nest,\n", + " trace_python_ref,\n", + " pre_spike_times,\n", + " post_spike_times,\n", + " resolution,\n", + " dendritic_delay,\n", + " trace_match_atol,\n", + " trace_match_rtol,\n", + " sim_time,\n", + " debug=False,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "License\n", + "-------\n", + "\n", + "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", + "\n", + "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", + "\n", + "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/htmldoc/neurons/model_details/siegert_neuron_integration.ipynb b/doc/htmldoc/model_details/siegert_neuron_integration.ipynb similarity index 98% rename from doc/htmldoc/neurons/model_details/siegert_neuron_integration.ipynb rename to doc/htmldoc/model_details/siegert_neuron_integration.ipynb index 295ffedcb7..be78c36fe7 100644 --- a/doc/htmldoc/neurons/model_details/siegert_neuron_integration.ipynb +++ b/doc/htmldoc/model_details/siegert_neuron_integration.ipynb @@ -65,10 +65,10 @@ ], "source": [ "s = np.linspace(-10, 10, 1001)\n", - "plt.plot(s, np.exp(s**2) * (1 + erf(s)), c='black')\n", + "plt.plot(s, np.exp(s**2) * (1 + erf(s)), c=\"black\")\n", "plt.xlim(s[0], s[-1])\n", - "plt.yscale('log')\n", - "plt.title(r'$e^{s^{2}}(1+\\mathrm{erf}(s))$')\n", + "plt.yscale(\"log\")\n", + "plt.title(r\"$e^{s^{2}}(1+\\mathrm{erf}(s))$\")\n", "plt.show()" ] }, @@ -103,10 +103,10 @@ ], "source": [ "s = np.linspace(0, 100, 1001)\n", - "plt.plot(s, erfcx(s), c='black')\n", + "plt.plot(s, erfcx(s), c=\"black\")\n", "plt.xlim(s[0], s[-1])\n", - "plt.yscale('log')\n", - "plt.title(r'$\\mathrm{erfcx}(s)$')\n", + "plt.yscale(\"log\")\n", + "plt.title(r\"$\\mathrm{erfcx}(s)$\")\n", "plt.show()" ] }, @@ -204,13 +204,13 @@ ], "source": [ "s = np.linspace(0.1, 100, 1000)\n", - "plt.plot(s, erfcx(s), c='black', label=r'$\\mathrm{erfcx}(s)$')\n", - "plt.plot(s, 1/(np.sqrt(np.pi)*s), ls='--', label=r'$1/\\sqrt{\\pi}s$')\n", + "plt.plot(s, erfcx(s), c=\"black\", label=r\"$\\mathrm{erfcx}(s)$\")\n", + "plt.plot(s, 1 / (np.sqrt(np.pi) * s), ls=\"--\", label=r\"$1/\\sqrt{\\pi}s$\")\n", "plt.xlim(s[0], s[-1])\n", - "plt.xscale('log')\n", - "plt.yscale('log')\n", + "plt.xscale(\"log\")\n", + "plt.yscale(\"log\")\n", "plt.legend()\n", - "plt.title(r'First order asymptotics of $\\mathrm{erfcx}(s)$')\n", + "plt.title(r\"First order asymptotics of $\\mathrm{erfcx}(s)$\")\n", "plt.show()" ] }, @@ -234,26 +234,26 @@ ], "source": [ "s = np.linspace(0.1, 100, 1000)\n", - "plt.plot(s, 1/(np.sqrt(np.pi)*s)-erfcx(s), c='black')\n", + "plt.plot(s, 1 / (np.sqrt(np.pi) * s) - erfcx(s), c=\"black\")\n", "plt.xlim(s[0], s[-1])\n", - "plt.xscale('log')\n", - "plt.yscale('log')\n", - "plt.title(r'Absolute error of first order asymptotics of $\\mathrm{erfcx}(s)$')\n", + "plt.xscale(\"log\")\n", + "plt.yscale(\"log\")\n", + "plt.title(r\"Absolute error of first order asymptotics of $\\mathrm{erfcx}(s)$\")\n", "plt.show()" ] }, - { + { "cell_type": "markdown", "metadata": {}, "source": [ - "-----------------------------\n", - "### License\n", - "\n", - "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", - "\n", - "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", - "\n", - "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." + "-----------------------------\n", + "### License\n", + "\n", + "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", + "\n", + "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", + "\n", + "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." ] } ], diff --git a/doc/htmldoc/models/.gitignore b/doc/htmldoc/models/.gitignore new file mode 100644 index 0000000000..944b838d33 --- /dev/null +++ b/doc/htmldoc/models/.gitignore @@ -0,0 +1,7 @@ +# The UserDocExtractor preprocesses `/models/*.h` and `/nestkernel/*.h` files into +# .rst and .json files to be picked up during the Sphinx build. +*.rst +*.json +# Only these files should be tracked. +!models-main.rst +!models-toc.rst diff --git a/doc/htmldoc/models/models-main.rst b/doc/htmldoc/models/models-main.rst index d8fa3d5a6b..d8d9830d7e 100644 --- a/doc/htmldoc/models/models-main.rst +++ b/doc/htmldoc/models/models-main.rst @@ -1,12 +1,109 @@ +.. _modelsmain: + Models in NEST ============== +What we mean by `models` +------------------------ + +The term `models` in the context of NEST (and the field of computational neuroscience as a whole) is used with two different meanings: + +1. **Neuron and synapse models**. These consist of a set of mathematical + equations and algorithmic components that describe the + characteristics and behavior of biological neurons and synapses. In + NEST, the terms neuron and synapse models are also used for the C++ + implementations of these conceptual entities. Most of the models in + NEST are based on either peer-reviewed publications or text books + like [1]_. +2. **Network models**. These models are created from individual neuron + and synapse models using the different commands provided by the + :ref:`PyNEST API <pynest_api>`. Examples for such network models + are the :doc:`microcircuit model + <../auto_examples/Potjans_2014/index>` or the `multi-area model + <https://inm-6.github.io/multi-area-model/>`_). In the following + description, we focus on neuron and synapse models and not on + network models. + +Find a model +------------ + +By default, NEST comes with a ton of models! Textbook standards like +integrate-and-fire and Hodgkin-Huxley-type models are available +alongside high-quality implementations of models published by the +neuroscience community. The model directory is organized by keywords +(e.g., :doc:`adaptive threshold <index_adaptive threshold>`, +:doc:`conductance-based <index_conductance-based>`, etc.). Models +that contain a specific keyword will be listed under that word. + +In many modeling situations, the full set of models that ship with +NEST by default is not needed. To only include a subset of the models +with NEST, please have a look at the :ref:`modelset configuration +options <modelset_config>`. + +.. seealso:: + + Discover :doc:`all the models in our directory <index>`. + +Create and customize models with NESTML +--------------------------------------- + +Check out :doc:`NESTML <nestml:index>`, a domain-specific language for neuron and synapse models. +NESTML enables fast prototyping of new models using an easy to understand, yet powerful syntax. This is achieved by a combination of a flexible processing toolchain +written in Python with high simulation performance through the automated generation of C++ code, suitable for use in NEST Simulator. + +.. seealso:: + + See the :doc:`NESTML docs for installation details <nestml:index>`. + +.. note:: + + NESTML is also available as part of NEST's official :ref:`docker image <docker>`. + +Model naming +------------ + +Neuron models +~~~~~~~~~~~~~ + +Neuron model names in NEST combine abbreviations that describe the dynamics and synapse specifications for that model. +They may also include the author's name of a model based on a specific paper. + +For example, the neuron model name + +``iaf_cond_beta`` + + corresponds to an implementation of a spiking neuron using + integrate-and-fire dynamics with conductance-based + synapses. Incoming spike events induce a postsynaptic change of + conductance modeled by a beta function. + +As an example for a neuron model name based on specific paper, + +``hh_cond_exp_traub`` + + implements a modified version of the Hodgkin Huxley neuron model + based on Traub and Miles (1991) + +Synapse models +~~~~~~~~~~~~~~ + +Synapse models include the word synapse as the last word in the model name. + +Synapse models may begin with the author name (e.g., ``clopath_synapse``) or process (e.g., ``stdp_synapse``). + +Devices +~~~~~~~ -NEST provides a ton of models! Textbook standards like integrate-and-fire and Hodgkin-Huxley type models are available -alongside high quality implementations of models published by the neuroscience community. +A device name should represent its physical counterpart - like a multimeter is ``multimeter``. In general, the term ``recorder`` is used for devices +that store the output (e.g., spike times or synaptic strengths over time) of other nodes and make it accessible to the user. The term ``generator`` is used for devices that provide input into the simulation. -* Discover :doc:`all the models in our directory <index>` +.. seealso:: -Need to create your own? + See our glossary section on :ref:`common abbreviations used for model terms <model_terms>`. It includes alternative terms commonly used in the literature. -* Check out :doc:`NESTML <nestml:index>`, a domain-specific language supporting neuron and synapse models with a code generation backend that generates model code in C++ for NEST. +References +~~~~~~~~~~ + +.. [1] Dayan P and Abbott L (2001). Theoretical Neuroscience: Computational + and Mathematical Modeling of Neural Systems. Cambridge, MA: MIT Press. + https://pure.mpg.de/pubman/faces/ViewItemOverviewPage.jsp?itemId=item_300 diff --git a/doc/htmldoc/models/models-toc.rst b/doc/htmldoc/models/models-toc.rst index bb7d77adc6..21c55cc3b7 100644 --- a/doc/htmldoc/models/models-toc.rst +++ b/doc/htmldoc/models/models-toc.rst @@ -1,3 +1,7 @@ +:orphan: + +.. _models_contents: + Models contents =============== @@ -6,7 +10,7 @@ Models contents :maxdepth: 1 :hidden: -{% for item in nest_models %} + {% for item in nest_models %} {{ item }} -{% endfor %} + {% endfor %} diff --git a/doc/htmldoc/nest_behavior/index.rst b/doc/htmldoc/nest_behavior/index.rst index b61a74fcdd..5611de281a 100644 --- a/doc/htmldoc/nest_behavior/index.rst +++ b/doc/htmldoc/nest_behavior/index.rst @@ -1,3 +1,5 @@ +:orphan: + .. _behavior_index: How NEST works @@ -9,5 +11,3 @@ How NEST works built-in_timers random_numbers running_simulations - nest_server - using_nest_with_music diff --git a/doc/htmldoc/nest_behavior/random_numbers.rst b/doc/htmldoc/nest_behavior/random_numbers.rst index 0718917c3a..f8b2ba88f3 100644 --- a/doc/htmldoc/nest_behavior/random_numbers.rst +++ b/doc/htmldoc/nest_behavior/random_numbers.rst @@ -99,7 +99,7 @@ set it in the following way: It is a good idea to cross-check your simulation results using a different random number generator type. Even though generators and our understanding of them has become much better in recent years, -there always remains a risk of RNG artifacts affecting simulations. +there always remains a risk of :hxt_ref:`RNG` artifacts affecting simulations. Seed the random number generator @@ -118,7 +118,7 @@ You can use any number :math:`s` with :math:`1\leq s \leq 2^{31}-1` as seed: As long as you use different seed values, NEST will ensure that all random number streams in a simulation are seeded properly; see :ref:`Random number internals <random_internals>` for details. -You can inspect the RNG type and seed value used with +You can inspect the :hxt_ref:`RNG` type and seed value used with :: @@ -136,11 +136,11 @@ The NEST random module The ``nest.random`` module provides a range of random distributions that can be used to specify parameters for neurons, synapses, and connection rules. See :ref:`below for examples <random_examples>` on how to use them in -practice. +practice and :ref:`some details on randomizing delays <random_delays>`. .. automodule:: nest.random.hl_api_random :members: - + :noindex: .. _random_examples: @@ -151,7 +151,7 @@ Examples of using randomness Randomize the membrane potential ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To set the membrane potential at creation, just pass a random distribution as the ``V_m`` value. +To set the membrane potential at creation, just pass a random distribution as the :hxt_ref:`V_m` value. :: @@ -185,6 +185,49 @@ Likewise, synapse parameters can be specified using the random distributions. nest.Connect(n, n, syn_spec={'weight': nest.random.normal(mean=0., std=1.), 'delay': nest.random.uniform(min=0.5, max=1.5)}) +.. _random_delays: + +Rounding effects when randomizing delays +........................................ + +Connection delays in NEST are rounded to the nearest multiple of the simulation resolution, +even if delays are drawn from a continuous distribution. This will work as expected if the +distribution has infinite support, for example, the normal distribution. For the uniform distribution, +though, this rounding will usually lead to lower probabilities for the delays at the edges of +the distribution. This then also applies to a truncated normal distribution. +Consider the following case: + +:: + + nest.resolution = 0.1 + n = nest.Create('iaf_psc_alpha', 100) + nest.Connect(n, n, syn_spec={'delay': nest.random.uniform(min=1, max=2)}) + +This will create 10000 connections in total with delay values 1.0, 1.1, ..., 2.0. But while +the interior delay values 1.1, ..., 1.9 will occur approximately 1000 times each, the first and last +cases, 1.0 and 2.0, will occur only approximately 500 times each. This happens because NEST +first draws the delay uniformly from :math:`[1, 2)` and then rounds to a fixed delay. Thus, +any number from :math:`[1.05, 1.15)` will be rounded to 1.1, but only numbers in +:math:`[1.0, 1.05)` will be rounded to 1.0. + +To achieve equal probabilities of the first and last values, you can either extend the interval +of the uniform distribution by half the resolution: + +:: + + nest.Connect(n, n, syn_spec={'delay': nest.random.uniform(min=1 - 0.5 * nest.resolution, + max=2 + 0.5 * nest.resolution)}) + +or use the uniform integer distribution. Since it always draws numbers beginning with zero, +this is slightly more cumbersome: + +:: + + nest.Connect(n, n, syn_spec={'delay': 1 + 0.1 * nest.random.uniform_int(11)}) + +An in-depth analysis of delay rounding is available in a +`master thesis <https://hdl.handle.net/11250/3012689>`_. + Randomize spatial positions ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -241,7 +284,7 @@ before continuing. A key principle of parallel simulation in NEST is that a simulation performed with a fixed number of virtual processes :math:`N_{\text{vp}} = M \times T` shall produce identical results -independent of the number of MPI processes :math:`M` and threads :math:`T` that go into each virtual process. +independent of the number of :hxt_ref:`MPI` processes :math:`M` and threads :math:`T` that go into each virtual process. To observe this principle when also randomizing from the Python level, it is essential to create one Python random number generator per virtual process and use the random number generator for the virtual process to which a node belongs (for synapses: the VP of the target @@ -347,7 +390,7 @@ NEST therefore provides three kinds of random number streams This results in a total of :math:`N_{\text{vp}}+2` random number streams. To avoid unnecessary complications in the code using random numbers, serial simulations also use all three kinds. The generators for all streams -are of the same type. If the RNG type is changed, the change +are of the same type. If the :hxt_ref:`RNG` type is changed, the change applies to all generators. NEST regularly checks during a simulation that the rank- and VP-synchronized @@ -380,7 +423,7 @@ estimate the number of random numbers required per stream as follows: Collision risk of parallel random number streams ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`L’Ecuyer et al (2017) <https://dx.doi.org/10.1016/j.matcom.2016.05.005>`__ provide a +`L'Ecuyer et al (2017) <https://dx.doi.org/10.1016/j.matcom.2016.05.005>`__ provide a recent account of random number generation in highly parallel settings. The main approach to providing independent random number streams in parallel simulations is to use a high-quality random number generator @@ -395,29 +438,29 @@ different seeds will overlap is given by We have -.. math :: +.. math:: s = N_{\text{vp}} = 10^7 \sim 2^{23}\quad\text{and}\quad l = 10^{11} \sim 2^{37}\;, -so assuming an RNG period of :math:`r = 2^{128}` we obtain +so assuming an :hxt_ref:`RNG` period of :math:`r = 2^{128}` we obtain -.. math :: +.. math:: p_{\text{overlap}} \sim \left(2^{23}\right)^2 \times 2^{37} / 2^{128} = 2^{-45} \sim 3 \times 10^{-14} while for a period of :math:`r = 2^{256}` we obtain -.. math :: +.. math:: p_{\text{overlap}} \sim 2^{-173} \sim 10^{-52}\; . The probability of stream collisions is thus negligibly small, provided we use random number generators with a period of at least :math:`2^{128}`. -`L’Ecuyer (2012, Ch 3.6) <https://doi.org/10.1007/978-3-642-21551-3_3>`__ points out +`L'Ecuyer (2012, Ch 3.6) <https://doi.org/10.1007/978-3-642-21551-3_3>`__ points out that certain random number generator classes will show too much regularity in their output if more than :math:`r^{1/3}` numbers are used (this -relation is based on exercises in Knuth, TAOCP vol 2, see `L’Ecuyer and +relation is based on exercises in Knuth, TAOCP vol 2, see `L'Ecuyer and Simard (2001) <https://doi.org/10.1016/S0378-4754(00)00253-6>`__). While it is not certain that that analysis also applies to (short) subsequences of the period of an RNG, one might still re-consider the diff --git a/doc/htmldoc/nest_behavior/running_simulations.rst b/doc/htmldoc/nest_behavior/running_simulations.rst index af7ee87736..069f61b65c 100644 --- a/doc/htmldoc/nest_behavior/running_simulations.rst +++ b/doc/htmldoc/nest_behavior/running_simulations.rst @@ -17,7 +17,7 @@ kernel attribute: nest.resolution = 0.1 Even though a neuron model can use smaller time steps internally, the -membrane potential will only be visible to a ``multimeter`` on the +membrane potential will only be visible to a :hxt_ref:`multimeter` on the outside at time points that are multiples of the simulation resolution. In contrast to the update of nodes, an event-driven approach is used for @@ -35,7 +35,7 @@ following figure shows the basic loop that is run upon a call to Simulation Loop The simulation loop. Light gray boxes denote thread parallel parts, dark -gray boxes denote MPI parallel parts. U(St) is the update operator that +gray boxes denote :hxt_ref:`MPI` parallel parts. U(St) is the update operator that propagates the internal state of a neuron or device. .. _simulation_resolution: @@ -61,7 +61,7 @@ Two major optimizations in NEST are built on this decoupling: always for *dmin* time in one go, as to keep neurons in cache as long as possible. -2. MPI processes only communicate in intervals of *dmin* as to minimize +2. :hxt_ref:`MPI` processes only communicate in intervals of *dmin* as to minimize communication costs. These optimizations mean that the sizes of spike buffers in nodes and @@ -82,7 +82,7 @@ In linear simulation scripts that build a network, simulate it, carry out some post-processing and exit, the user does not have to worry about the delay extrema *dmin* and *dmax* as they are set automatically to the correct values. However, NEST also allows subsequent calls -to\ :py:func:`.Simulate`, which only work correctly if the content of the spike +to :py:func:`.Simulate`, which only work correctly if the content of the spike buffers is preserved over the simulations. As mentioned above, the size of that buffer depends on *dmin+dmax* and @@ -103,6 +103,14 @@ extrema too wide without need leads to decreased performance due to more update calls and communication cycles (small *dmin*), or increased memory consumption of NEST (large *dmax*). +Delays after changes in resolution +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you change the resolution, then *dmin*, *dmax*, as well as the time-based model defaults (e.g., neuronal refractory times, synaptic delays) are adjusted to match the new resolution. In case the precision of these delays cannot be matched with the new resolution (e.g., *dmin=1.6*, *dmax=5.3* and *new_resolution=1.0*), *dmin* is rounded down (*dmin=1.0*), *dmax* is rounded up (*dmax=6.0*), and the time-based model defaults are rounded mathematically. When the new resolution value is larger than a time-based model default, this value is set to the new resolution. + +.. note:: + + Delays cannot be smaller than the resolution. Further, the resolution cannot be changed once model defaults have been changed or connections have been created. + Spike generation and precision ------------------------------ @@ -117,7 +125,7 @@ also means that the membrane potential recording will never show values above the threshold. The time of the spike is always the time at *the end of the interval* during which the threshold was crossed. -NEST also has a some models that determine the precise time of the +NEST also has some models that determine the precise time of the threshold crossing during the interval. Please see the documentation on :ref:`precise spike time neurons <sim_precise_spike_times>` for details about neuron update in continuous time and the @@ -251,7 +259,7 @@ instances in parallel; don't forget to use different :ref:`random seeds <random_numbers>`! The following example performs simulations of a single neuron driven by -a Poisson spike train using different seeds and output files for each run: +a Poisson :hxt_ref:`spike train` using different seeds and output files for each run: :: diff --git a/doc/htmldoc/nest_sonata/nest_sonata_guide.rst b/doc/htmldoc/nest_sonata/nest_sonata_guide.rst new file mode 100644 index 0000000000..40a718a6dc --- /dev/null +++ b/doc/htmldoc/nest_sonata/nest_sonata_guide.rst @@ -0,0 +1,304 @@ +.. _nest_sonata: + +NEST SONATA guide +================= + +NEST supports building and simulating networks of point neurons described by the +`SONATA <https://github.com/AllenInstitute/sonata>`_ format [1]_. +This guide provides the details about how a SONATA network must be specified to be supported natively by NEST. + +.. _sec:sonata_configure: + +Configure NEST for SONATA +------------------------- + +To use SONATA with NEST, both `HDF5 <https://hdfgroup.org/>`_ and `h5py <https://www.h5py.org/>`_ must be installed on +the system and NEST must be configured properly. + +If you install NEST from a pre-built package, NEST will automatically be configured for SONATA support. + +If you install NEST from source, the following configuration option must be added to +your CMake invocation: + +.. code-block:: sh + + -Dwith-hdf5=ON + +For further details, see :ref:`cmake_options`. + +.. _sec:sonata_overview: + +Overview of the SONATA format +----------------------------- + +The SONATA (Scalable Open Network Architecture TemplAte) format provides a framework for storage and exchange of +network models and simulation configurations. A network is considered as a graph made of nodes and edges. Nodes of a +network can be arranged into multiple populations. There are two categories of nodes: explicitly simulated nodes +and virtual nodes that only provide inputs to the simulated system. Nodes within and between populations are connected +through edges (synapses). The SONATA format explicitly tabulates information about nodes and edges in the table-based +file formats HDF5 and CSV. + +The cell and synapse properties of the nodes and edges, respectively, can be described either individually or for +whole subsets. Nodes that share a global set of properties constitute a node type. Similarly, a subset of edges +that share a global set of properties constitute an edge type. Whether a property is stored individually or on a +per-type basis is up to the modeler. The number of node or edge types in a network model is typically small compared +to the number of nodes or edges. Therefore, the node and edge type files are stored in the CSV format such that a +particular node or edge type can be easily accessed by its node or edge type id. + +Each node and edge in the network is explicitly tabulated in the binary format HDF5. Populations are hierarchically +organized by utilizing HDF5 groups and datasets. The SONATA format requires certain HDF5 datasets, for instance, +a dataset containing all the node type ids. Properties that are +stored on an individual basis, for instance, synaptic weights, are also stored in HDF5 datasets. + +Simulation parameters and the locations of the HDF5 and CSV files specifying the network are stored in JSON +configuration files. + +.. _sec:sonata_examples: + +NEST SONATA Example +------------------- + +Here is a minimal example of how to build and simulate from SONATA specifications: + +.. code-block:: python + + # Instantiate SonataNetwork + sonata_net = nest.SonataNetwork("path/to/config.json") + + # Create and connect nodes + node_collections = sonata_net.BuildNetwork() + + # Connect spike recorder to a population + s_rec = nest.Create("spike_recorder") + nest.Connect(node_collections["name_of_population_to_record"], s_rec) + + # Simulate the network + sonata_net.Simulate() + +For more detailed examples, see + +* :doc:`../auto_examples/sonata_example/sonata_network` + +.. _sec:sonata_nodes: + +NEST support of SONATA nodes +---------------------------- + +In the SONATA format, node populations are serialized in node HDF5 files and have a single associated node type +CSV file that assigns properties to all nodes with a given node type id. A node type CSV file may be shared by +multiple node population HDF5 files. + +NEST assumes the following structure of the node HDF5 files: + +:: + + <nodes_file.h5> Filename + ├─ nodes Group - required + │ ├─ <population_name> Group - required - usually only one but can be more population groups per file + │ │ ├─ node_type_id Dataset {N_total_nodes} - required + + +.. note:: + + NEST assumes that the implicit row numbers in the ``node_type_id`` dataset correspond to the ``node_id``\s. + +NEST supports the following SONATA node ``model_type``\s: + +* ``point_neuron`` +* ``point_process`` +* ``virtual`` + +Both ``point_neuron`` and ``point_process`` mean that the node is a neuron model (explicitly simulated; the two terms +can be used interchangeably) whereas ``virtual`` means that the node only provide inputs to the simulated system. +``virtual`` nodes are modeled as ``spike_train_injector``\s (see :doc:`the model documentation for spike_train_injector <../models/spike_train_injector>`\). NEST requires +that only one ``model_type`` is present per node type CSV file. + +The required headers for node type CSV files that describe neuron models are: + +* ``node_type_id`` +* ``model_type`` +* ``model_template`` +* ``dynamics_params`` + +For a given ``node_type_id``, the ``model_template`` entry is the name of the NEST neuron model with prefix ``nest:``. +NEST does not require the ``model_template`` entries to be the same, but the creation of the nodes described in a +single node type CSV file is faster if the neuron models are the same. + +For a given ``node_type_id``, the ``dynamics_params`` entry is expected to be a reference to a JSON file that describes +the parametrization of the neuron model. Below is an example of a JSON file describing the parametrization of a given +node type: + +.. code-block:: json + + { + "I_e": 0.0, + "tau_m": 44.9, + "C_m": 239.0, + "t_ref": 3.0, + "E_L": -78.0, + "V_th": -43.0, + "V_reset": -55.0 + } + + +NEST does not support node properties stored on an individual basis in HDF5 datasets. This restriction can be +circumvented by assigning a single node its own node type id. + +Below is an example of a node type CSV file with the required headers for neuron nodes: + ++--------------+---------------+--------------------+-----------------+ +| node_type_id | model_type | model_template | dynamics_params | ++==============+===============+====================+=================+ +| 1 | point_process | nest:iaf_psc_alpha | params_1.json | ++--------------+---------------+--------------------+-----------------+ +| 2 | point_process | nest:iaf_psc_alpha | params_2.json | ++--------------+---------------+--------------------+-----------------+ + +The only required CSV header for ``virtual`` nodes is ``model_type``. The ``spike_train_injector``\s spike-time arrays +are expected to be provided in HDF5 datasets with the configuration details specified in the JSON configuration file. + + +.. _sec:sonata_edges: + +The NEST support of SONATA edges +-------------------------------- + +Analogous to nodes, edge populations are serialized in edge HDF5 files and have a single associated edge types +CSV file that assigns properties to all edges with a given edge type id. + +NEST assumes the following structure of the edge HDF5 files: + +:: + + <edges_file.h5> Filename + ├─ edges Group - required + │ ├─ <population_name> Group - required - usually only one but can be more population groups per file + │ │ ├─ source_node_id Dataset {N_total_edges} - required - with attribute specifying source population name + │ │ ├─ edge_group_id Dataset {N_total_edges} - required + │ │ ├─ edge_group_index Dataset {N_total_edges} - required + │ │ ├─ target_node_id Dataset {N_total_edges} - required - with attribute specifying target population name + │ │ ├─ edge_type_id Dataset {N_total_edges} - required + │ │ ├─ indices Group - optional - currently not utilized + │ │ │ ├─ source_to_target Group + │ │ │ │ ├─ node_id_to_range Dataset {N_source_nodes x 2} + │ │ │ │ ├─ range_to_edge_id Dataset {N_source_nodes x 2} + │ │ │ ├─ target_to_source Group + │ │ │ │ ├─ node_id_to_range Dataset {N_target_nodes x 2} + │ │ │ │ ├─ range_to_edge_id Dataset {N_target_nodes x 2} + │ │ ├─ <edge_id1> Group - required + │ │ │ ├─ delay Dataset {M_edges} - optional + │ │ │ ├─ syn_weight Dataset {M_edges} - optional + │ │ │ ├─ dynamics_params Group - currently not supported + │ │ ├─ <edge_id2> Group - optional - currently no support for more than one edge group + │ │ │ ├─ delay Dataset {K_edges} - optional + │ │ │ ├─ syn_weight Dataset {K_edges} - optional + │ │ │ ├─ dynamics_params Group + + +Together the ``source_node_id`` and ``target_node_id`` datasets explicitly tabulate all individual connections. +The ``edge_type_id`` dataset attributes each edge its edge type id, which is used to assign synaptic properties from the +edge types CSV file. + +In the SONATA format, edges within a population can be organized into one or more edge groups. Synaptic properties that +are specified on an individual basis are stored in these edge groups. The groups are identified by an ``edge_id`` key. +NEST assumes the ``edge_id``\s are contiguous numeric keys starting from zero, that is, 0, 1, 2, ... + +.. note:: + + NEST currently only supports one edge group per edge population. Furthermore, NEST only reads the ``delay`` + and ``syn_weight`` datasets, given that they are provided. This means that only connection delays and synaptic weights + can be stored on an individual basis in the HDF5 format. Other synaptic properties must be given in the edge type + CSV file(s). + +Below is an example of a edge type CSV file: + ++--------------+----------------+-------+-----------------+ +| edge_type_id | model_template | delay | dynamics_params | ++==============+================+=======+=================+ +| 1 | static_synapse | 2.0 | params_1.json | ++--------------+----------------+-------+-----------------+ +| 2 | static_synapse | 2.5 | params_2.json | ++--------------+----------------+-------+-----------------+ + +.. note:: + + Only the synaptic properties ``delay`` and ``syn_weight`` can be provided as headers in the edge types CSV file. + Other synaptic properties must be given in the JSON file under ``dynamics_params``. + + +.. _sec:sonata_config: + +The SONATA configuration files +------------------------------ + +Model metadata, such as the relative location of the network files and simulation parameters, are stored in the +SONATA configuration ("config") file(s) in the JSON format. Below is an example SONATA config with the components NEST +expects to be included: + +.. code-block:: json + + { + "target_simulator": "NEST", + "manifest": { + "$BASE_DIR": "${configdir}", + "$NETWORK_DIR": "$BASE_DIR/network", + "$COMPONENTS_DIR": "$BASE_DIR/components", + "$INPUT_DIR": "$BASE_DIR/inputs" + }, + "components": { + "point_neuron_models_dir": "$COMPONENTS_DIR/cell_models", + "synaptic_models_dir": "$COMPONENTS_DIR/synaptic_models" + }, + "networks": { + "nodes": [ + { + "nodes_file": "$NETWORK_DIR/internal_nodes.h5", + "node_types_file": "$NETWORK_DIR/internal_node_types.csv" + }, + { + "nodes_file": "$NETWORK_DIR/external_nodes.h5", + "node_types_file": "$NETWORK_DIR/external_node_types.csv" + } + ], + "edges": [ + { + "edges_file": "$NETWORK_DIR/internal_internal_edges.h5", + "edge_types_file": "$NETWORK_DIR/internal_internal_edge_types.csv", + }, + { + "edges_file": "$NETWORK_DIR/external_internal_edges.h5", + "edge_types_file": "$NETWORK_DIR/external_internal_edge_types.csv" + } + ] + }, + "inputs": { + "external_spike_trains": { + "input_file": "$INPUT_DIR/external_spike_trains.h5", + "node_set": "external" + } + }, + "run": { + "tstop": 1500, + "dt": 0.01 + } + } + +.. note:: + + NEST supports the use of two config files, that is, one network and one simulation config. NEST does not currently + support SONATA Spike Train Reports or utilize other ``output`` components in the SONATA config. + +.. _sec:sonata_refs: + +More about SONATA +----------------- + +For a full specification of the SONATA format, see [1]_ and the `SONATA GitHub page <https://github.com/AllenInstitute/sonata>`_. + + +References +~~~~~~~~~~ + +.. [1] Dai K, Hernando J, Billeh YN, Gratiy SL, Planas J, et al. (2020). + The SONATA data format for efficient description of large-scale network models. + PLOS Computational Biology 16(2): e1007696. https://doi.org/10.1371/journal.pcbi.1007696 diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn1.png b/doc/htmldoc/networks/figures/conn1.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn1.png rename to doc/htmldoc/networks/figures/conn1.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn2.png b/doc/htmldoc/networks/figures/conn2.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn2.png rename to doc/htmldoc/networks/figures/conn2.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn2_a.png b/doc/htmldoc/networks/figures/conn2_a.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn2_a.png rename to doc/htmldoc/networks/figures/conn2_a.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn2_b.png b/doc/htmldoc/networks/figures/conn2_b.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn2_b.png rename to doc/htmldoc/networks/figures/conn2_b.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn2_c.png b/doc/htmldoc/networks/figures/conn2_c.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn2_c.png rename to doc/htmldoc/networks/figures/conn2_c.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn3.png b/doc/htmldoc/networks/figures/conn3.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn3.png rename to doc/htmldoc/networks/figures/conn3.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn4.png b/doc/htmldoc/networks/figures/conn4.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn4.png rename to doc/htmldoc/networks/figures/conn4.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn5.png b/doc/htmldoc/networks/figures/conn5.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn5.png rename to doc/htmldoc/networks/figures/conn5.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn6.png b/doc/htmldoc/networks/figures/conn6.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn6.png rename to doc/htmldoc/networks/figures/conn6.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/conn_3d.png b/doc/htmldoc/networks/figures/conn_3d.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/conn_3d.png rename to doc/htmldoc/networks/figures/conn_3d.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer1.png b/doc/htmldoc/networks/figures/layer1.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer1.png rename to doc/htmldoc/networks/figures/layer1.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer2.png b/doc/htmldoc/networks/figures/layer2.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer2.png rename to doc/htmldoc/networks/figures/layer2.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer3.png b/doc/htmldoc/networks/figures/layer3.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer3.png rename to doc/htmldoc/networks/figures/layer3.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer3a.png b/doc/htmldoc/networks/figures/layer3a.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer3a.png rename to doc/htmldoc/networks/figures/layer3a.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer4.png b/doc/htmldoc/networks/figures/layer4.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer4.png rename to doc/htmldoc/networks/figures/layer4.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer4_3d.png b/doc/htmldoc/networks/figures/layer4_3d.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer4_3d.png rename to doc/htmldoc/networks/figures/layer4_3d.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer4_3d_b.png b/doc/htmldoc/networks/figures/layer4_3d_b.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer4_3d_b.png rename to doc/htmldoc/networks/figures/layer4_3d_b.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/layer4b.png b/doc/htmldoc/networks/figures/layer4b.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/layer4b.png rename to doc/htmldoc/networks/figures/layer4b.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/player.png b/doc/htmldoc/networks/figures/player.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/player.png rename to doc/htmldoc/networks/figures/player.png diff --git a/doc/htmldoc/networks/spatially_structured_networks/figures/vislayer.png b/doc/htmldoc/networks/figures/vislayer.png similarity index 100% rename from doc/htmldoc/networks/spatially_structured_networks/figures/vislayer.png rename to doc/htmldoc/networks/figures/vislayer.png diff --git a/doc/htmldoc/networks/scripts/connections.py b/doc/htmldoc/networks/scripts/connections.py new file mode 100644 index 0000000000..ae96d82c27 --- /dev/null +++ b/doc/htmldoc/networks/scripts/connections.py @@ -0,0 +1,707 @@ +# -*- coding: utf-8 -*- +# +# connections.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see <http://www.gnu.org/licenses/>. + +# create connectivity figures for spatial manual + +import matplotlib.pyplot as plt +import nest +import numpy as np + +# seed NumPy RNG to ensure identical results for runs with random placement +np.random.seed(7654321) + + +def beautify_layer( + layer, fig=plt.gcf(), xlabel=None, ylabel=None, xlim=None, ylim=None, xticks=None, yticks=None, dx=0, dy=0 +): + """Assume either x and ylims/ticks given or none""" + ctr = layer.spatial["center"] + ext = layer.spatial["extent"] + + if xticks is None: + if "shape" in layer.spatial: + dx = float(ext[0]) / layer.spatial["shape"][0] + dy = float(ext[1]) / layer.spatial["shape"][1] + xticks = ctr[0] - ext[0] / 2.0 + dx / 2.0 + dx * np.arange(layer.spatial["shape"][0]) + yticks = ctr[1] - ext[1] / 2.0 + dy / 2.0 + dy * np.arange(layer.spatial["shape"][1]) + + if xlim is None: + xlim = [ctr[0] - ext[0] / 2.0 - dx / 2.0, ctr[0] + ext[0] / 2.0 + dx / 2.0] # extra space so extent is visible + ylim = [ctr[1] - ext[1] / 2.0 - dy / 2.0, ctr[1] + ext[1] / 2.0 + dy / 2.0] + else: + ext = [xlim[1] - xlim[0], ylim[1] - ylim[0]] + + ax = fig.gca() + ax.set_xlim(xlim) + ax.set_ylim(ylim) + ax.set_aspect("equal", "box") + ax.set_xticks(xticks) + ax.set_yticks(yticks) + ax.grid(True) + ax.set_axisbelow(True) + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + return + + +def conn_figure( + fig, + layer, + connd, + targets=None, + showmask=True, + kern=None, + xticks=range(-5, 6), + yticks=range(-5, 6), + xlim=[-5.5, 5.5], + ylim=[-5.5, 5.5], +): + if targets is None: + targets = ((nest.FindCenterElement(layer), "red"),) + + nest.PlotLayer(layer, fig=fig, nodesize=60) + for src, clr in targets: + if showmask: + mask = connd["mask"] + else: + mask = None + nest.PlotTargets( + src, + layer, + fig=fig, + mask=mask, + probability_parameter=kern, + src_size=250, + tgt_color=clr, + tgt_size=20, + mask_color="red", + probability_cmap="Greens", + ) + + beautify_layer(layer, fig, xlim=xlim, ylim=ylim, xticks=xticks, yticks=yticks, xlabel="", ylabel="") + fig.gca().grid(False) + + +# ----------------------------------------------- + +# Simple connection + +# { conn1 #} +spatial_nodes = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11], extent=[11.0, 11.0])) +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-2.0, -1.0], "upper_right": [2.0, 1.0]}}, +} +nest.Connect(spatial_nodes, spatial_nodes, conndict) +# { end #} + +fig = plt.figure() +fig.add_subplot(121) +conn_figure( + fig, + spatial_nodes, + conndict, + targets=( + (nest.FindCenterElement(spatial_nodes), "red"), + (nest.FindNearestElement(spatial_nodes, [4.0, 5.0])[0], "yellow"), + ), +) + +# same another time, with periodic bcs +lpbc = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11], extent=[11.0, 11.0], edge_wrap=True)) +nest.Connect(lpbc, lpbc, conndict) +fig.add_subplot(122) +conn_figure( + fig, + lpbc, + conndict, + showmask=False, + targets=((nest.FindCenterElement(lpbc), "red"), (nest.FindNearestElement(lpbc, [4.0, 5.0])[0], "yellow")), +) + +plt.savefig("../user_manual_figures/conn1.png", bbox_inches="tight") + + +# ----------------------------------------------- + +# free masks + + +def free_mask_fig(fig, loc, cdict): + nest.ResetKernel() + spatial_nodes = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11], extent=[11.0, 11.0])) + nest.Connect(spatial_nodes, spatial_nodes, cdict) + + fig.add_subplot(loc) + conn_figure(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2)) + + +fig = plt.figure() + +# { conn2r #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-2.0, -1.0], "upper_right": [2.0, 1.0]}}, +} +# { end #} +free_mask_fig(fig, 221, conndict) + +# { conn2c #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"circular": {"radius": 2.0}}} +# { end #} +free_mask_fig(fig, 222, conndict) + +# { conn2d #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"doughnut": {"inner_radius": 1.5, "outer_radius": 3.0}}} +# { end #} +free_mask_fig(fig, 223, conndict) + +# { conn2e #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"elliptical": {"major_axis": 7.0, "minor_axis": 4.0}}} +# { end #} +free_mask_fig(fig, 224, conndict) + +plt.savefig("../user_manual_figures/conn2_a.png", bbox_inches="tight") + +# -----------------------------------------------------------------------------# + +fig = plt.figure() + +# { conn2ro #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-2.0, -1.0], "upper_right": [2.0, 1.0]}, "anchor": [-1.5, -1.5]}, +} +# { end #} +free_mask_fig(fig, 221, conndict) + +# { conn2co #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"circular": {"radius": 2.0}, "anchor": [-2.0, 0.0]}} +# { end #} +free_mask_fig(fig, 222, conndict) + +# { conn2do #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"doughnut": {"inner_radius": 1.5, "outer_radius": 3.0}, "anchor": [1.5, 1.5]}, +} +# { end #} +free_mask_fig(fig, 223, conndict) + +# { conn2eo #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"elliptical": {"major_axis": 7.0, "minor_axis": 4.0}, "anchor": [2.0, -1.0]}, +} +# { end #} +free_mask_fig(fig, 224, conndict) + +plt.savefig("../user_manual_figures/conn2_b.png", bbox_inches="tight") + +# -----------------------------------------------------------------------------# + +fig = plt.figure() + +# { conn2rr #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-2.0, -1.0], "upper_right": [2.0, 1.0], "azimuth_angle": 120.0}}, +} +# { end #} +free_mask_fig(fig, 121, conndict) + +# { conn2er #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"elliptical": {"major_axis": 7.0, "minor_axis": 4.0, "azimuth_angle": 45.0}}, +} +# { end #} +free_mask_fig(fig, 122, conndict) + +plt.savefig("../user_manual_figures/conn2_c.png", bbox_inches="tight") + +# ----------------------------------------------- + +# 3d masks + + +def conn_figure_3d( + fig, + layer, + connd, + targets=None, + showmask=True, + xticks=range(-5, 6), + yticks=range(-5, 6), + xlim=[-5.5, 5.5], + ylim=[-5.5, 5.5], +): + if targets is None: + targets = ((nest.FindCenterElement(layer), "red"),) + + nest.PlotLayer(layer, fig=fig, nodesize=20, nodecolor=(0.5, 0.5, 1.0)) + for src, clr in targets: + if showmask: + mask = connd["mask"] + else: + mask = None + nest.PlotTargets( + src, + layer, + fig=fig, + mask=mask, + probability_parameter=None, + src_size=250, + tgt_color=clr, + tgt_size=60, + probability_cmap="Greens", + ) + + ax = fig.gca() # noqa: F841 + # ax.set_aspect('equal', 'box') + plt.draw() + + +def free_mask_3d_fig(fig, loc, cdict): + nest.ResetKernel() + spatial_nodes = nest.Create( + "iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11, 11], extent=[11.0, 11.0, 11.0]) + ) + nest.Connect(spatial_nodes, spatial_nodes, cdict) + + fig.add_subplot(loc, projection="3d") + conn_figure_3d(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2)) + + +fig = plt.figure() + +# { conn_3d_a #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"box": {"lower_left": [-2.0, -1.0, -1.0], "upper_right": [2.0, 1.0, 1.0]}}, +} +# { end #} +# free_mask_3d_fig(fig, 121, conndict) + +# { conn_3d_b #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"spherical": {"radius": 2.5}}} +# { end #} +# free_mask_3d_fig(fig, 122, conndict) + +# { conn_3d_c #} +conndict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"ellipsoidal": {"major_axis": 7.0, "minor_axis": 4.0, "polar_axis": 4.5}}, +} +# { end #} + +# plt.savefig('../user_manual_figures/conn_3d.png', bbox_inches='tight') + + +# ----------------------------------------------- + +# grid masks + + +def grid_mask_fig(fig, loc, cdict): + nest.ResetKernel() + spatial_nodes = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11], extent=[11.0, 11.0])) + nest.Connect(spatial_nodes, spatial_nodes, cdict) + + fig.add_subplot(loc) + conn_figure(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2), showmask=False) + + +fig = plt.figure() + +# { conn3 #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"grid": {"shape": [5, 3]}}} +# { end #} +grid_mask_fig(fig, 131, conndict) + +# { conn3c #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"grid": {"shape": [5, 3]}, "anchor": [2, 1]}} +# { end #} +grid_mask_fig(fig, 132, conndict) + +# { conn3x #} +conndict = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"grid": {"shape": [3, 5]}, "anchor": [2, -1]}} +# { end #} +grid_mask_fig(fig, 133, conndict) + +plt.savefig("../user_manual_figures/conn3.png", bbox_inches="tight") + + +# ----------------------------------------------- + +# free masks + + +def kernel_fig(fig, loc, cdict, kern=None): + nest.ResetKernel() + spatial_nodes = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11], extent=[11.0, 11.0])) + nest.Connect(spatial_nodes, spatial_nodes, cdict) + + fig.add_subplot(loc) + conn_figure(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2), kern=kern) + + +fig = plt.figure() + +# { conn4cp #} +conndict = {"rule": "pairwise_bernoulli", "p": 0.5, "mask": {"circular": {"radius": 4.0}}} +# { end #} +kernel_fig(fig, 231, conndict) + +# { conn4g #} +conndict = { + "rule": "pairwise_bernoulli", + "p": nest.spatial_distributions.gaussian(nest.spatial.distance, std=1.0), + "mask": {"circular": {"radius": 4.0}}, +} +# { end #} +kernel_fig(fig, 232, conndict, kern=nest.spatial_distributions.gaussian(nest.spatial.distance, std=1.0)) + +# { conn4cut #} +distribution = nest.spatial_distributions.gaussian(nest.spatial.distance, std=1.0) +conndict = { + "rule": "pairwise_bernoulli", + "p": nest.logic.conditional(distribution > 0.5, distribution, 0), + "mask": {"circular": {"radius": 4.0}}, +} +# { end #} +kernel_fig(fig, 234, conndict) + +# { conn42d #} +conndict = { + "rule": "pairwise_bernoulli", + "p": nest.spatial_distributions.gaussian2D(nest.spatial.distance.x, nest.spatial.distance.y, std_x=1.0, std_y=3.0), + "mask": {"circular": {"radius": 4.0}}, +} +# { end #} +kernel_fig(fig, 235, conndict) + +# { conn42d #} +conndict = { + "rule": "pairwise_bernoulli", + "p": nest.spatial_distributions.gaussian2D(nest.spatial.distance.x, nest.spatial.distance.y, std_x=1.0, std_y=3.0), + "mask": {"circular": {"radius": 4.0}}, +} +# { end #} +# { conn4gab #} +conndict = { + "rule": "pairwise_bernoulli", + "p": nest.spatial_distributions.gabor( + nest.spatial.target_pos.x - nest.spatial.source_pos.x, + nest.spatial.target_pos.y - nest.spatial.source_pos.y, + theta=np.pi / 4, + gamma=0.7, + ), +} +# { end #} +kernel_fig(fig, 236, conndict) + +plt.savefig("../user_manual_figures/conn4.png", bbox_inches="tight") + +# ----------------------------------------------- + + +def wd_fig( + fig, + loc, + pos, + cdict, + sdict, + what, + rpos=None, + xlim=[-1, 51], + ylim=[0, 1], + xticks=range(0, 51, 5), + yticks=np.arange(0.0, 1.1, 0.2), + clr="blue", + label="", +): + nest.ResetKernel() + spatial_nodes = nest.Create("iaf_psc_alpha", positions=pos) + nest.Connect(spatial_nodes, spatial_nodes, cdict, sdict) + + ax = fig.add_subplot(loc) + + if rpos is None: + rn = spatial_nodes[0] # first node + else: + rn = nest.FindNearestElement(spatial_nodes, rpos) + + conns = nest.GetConnections(rn) + vals = np.array([c.get(what) for c in conns]) + tgts = [c.get("target") for c in conns] + locs = np.array([nest.GetPosition(spatial_nodes[spatial_nodes.index(t)]) for t in tgts]) + ax.plot(locs[:, 0], vals, "o", mec="none", mfc=clr, label=label) + ax.set_xlim(xlim) + ax.set_ylim(ylim) + ax.set_xticks(xticks) + ax.set_yticks(yticks) + + +fig = plt.figure() + +# { conn5lin #} +pos = nest.spatial.grid(shape=[51, 1], extent=[51.0, 1.0], center=[25.0, 0.0]) +spatial_nodes = nest.Create("iaf_psc_alpha", positions=pos) + +cdict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-25.5, -0.5], "upper_right": [25.5, 0.5]}}, +} +sdict = {"weight": nest.math.max(1.0 - 0.05 * nest.spatial.distance, 0.0), "delay": 0.1 + 0.02 * nest.spatial.distance} + +nest.Connect(spatial_nodes, spatial_nodes, cdict, sdict) +# { end #} +wd_fig(fig, 311, pos, cdict, sdict, "weight", label="Weight") +wd_fig(fig, 311, pos, cdict, sdict, "delay", label="Delay", clr="red") +fig.gca().legend() + +ppos = nest.spatial.grid(shape=[51, 1], extent=[51.0, 1.0], center=[25.0, 0.0], edge_wrap=True) +# { conn5linpbc #} +cdict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-25.5, -0.5], "upper_right": [25.5, 0.5]}}, +} +sdict = {"weight": nest.math.max(1.0 - 0.05 * nest.spatial.distance, 0.0), "delay": 0.1 + 0.02 * nest.spatial.distance} +# { end #} +wd_fig(fig, 312, ppos, cdict, sdict, "weight", label="Weight") +wd_fig(fig, 312, ppos, cdict, sdict, "delay", label="Delay", clr="red") +fig.gca().legend(loc=1) + +cdict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-25.5, -0.5], "upper_right": [25.5, 0.5]}}, +} +sdict = {"weight": nest.math.max(1.0 - 0.05 * nest.spatial.distance, 0.0)} +wd_fig(fig, 313, pos, cdict, sdict, "weight", label="Linear", rpos=[25.0, 0.0], clr="orange") + +# { conn5exp #} +cdict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-25.5, -0.5], "upper_right": [25.5, 0.5]}}, +} +sdict = {"weight": nest.spatial_distributions.exponential(nest.spatial.distance, beta=5.0)} +# { end #} +wd_fig(fig, 313, pos, cdict, sdict, "weight", label="Exponential", rpos=[25.0, 0.0]) + +# { conn5gauss #} +cdict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-25.5, -0.5], "upper_right": [25.5, 0.5]}}, +} +sdict = {"weight": nest.spatial_distributions.gaussian(nest.spatial.distance, std=5.0)} +# { end #} +wd_fig(fig, 313, pos, cdict, sdict, "weight", label="Gaussian", clr="green", rpos=[25.0, 0.0]) + +# { conn5uniform #} +cdict = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-25.5, -0.5], "upper_right": [25.5, 0.5]}}, +} +sdict = {"weight": nest.random.uniform(min=0.2, max=0.8)} +# { end #} +wd_fig(fig, 313, pos, cdict, sdict, "weight", label="Uniform", clr="red", rpos=[25.0, 0.0]) + +fig.gca().legend() + +plt.savefig("../user_manual_figures/conn5.png", bbox_inches="tight") + + +# -------------------------------- +# { conn_param_design #} +parameter = 0.5 + nest.spatial.distance.x + 2.0 * nest.spatial.distance.y +# { end #} + +# { conn_param_design_ex #} +spatial_nodes = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[11, 11], extent=[1.0, 1.0])) +nest.Connect( + spatial_nodes, spatial_nodes, {"rule": "pairwise_bernoulli", "p": parameter, "mask": {"circular": {"radius": 0.5}}} +) +# { end #} + +# -------------------------------- + + +def pn_fig( + fig, + loc, + spatial_nodes, + cdict, + xlim=[0.0, 0.5], + ylim=[0, 3.5], + xticks=range(0, 51, 5), + yticks=np.arange(0.0, 1.1, 0.2), + clr="blue", + label="", +): + nest.Connect(spatial_nodes, spatial_nodes, cdict) + + ax = fig.add_subplot(loc) + + conns = nest.GetConnections(spatial_nodes) + dist = np.array( + [ + nest.Distance(spatial_nodes[spatial_nodes.index(s)], spatial_nodes[spatial_nodes.index(t)]) + for s, t in zip(conns.sources(), conns.targets()) + ] + ) + ax.hist(dist, bins=50, histtype="stepfilled", density=True) + r = np.arange(0.0, 0.51, 0.01) + + plt.plot(r, 2 * np.pi * r * (1 - 2 * r) * 12 / np.pi, "r-", lw=3, zorder=-10) + + ax.set_xlim(xlim) + ax.set_ylim(ylim) + """ax.set_xticks(xticks) + ax.set_yticks(yticks)""" + # ax.set_aspect(100, 'box') + ax.set_xlabel("Source-target distance d") + ax.set_ylabel("Connection probability pconn(d)") + + +fig = plt.figure() + +nest.ResetKernel() + + +# { conn6 #} +pos = nest.spatial.free(nest.random.uniform(-1.0, 1.0), extent=[2.0, 2.0], edge_wrap=True) +spatial_nodes = nest.Create("iaf_psc_alpha", 1000, positions=pos) + +cdict = { + "rule": "fixed_outdegree", + "p": nest.math.max(1.0 - 2 * nest.spatial.distance, 0.0), + "mask": {"circular": {"radius": 1.0}}, + "outdegree": 50, + "allow_multapses": True, + "allow_autapses": False, +} +nest.Connect(spatial_nodes, spatial_nodes, cdict) +# { end #} +pn_fig(fig, 111, spatial_nodes, cdict) + +plt.savefig("../user_manual_figures/conn6.png", bbox_inches="tight") + +# { conn7 #} +cdict_random_in = { + "rule": "fixed_indegree", + "p": nest.spatial_distributions.gaussian(nest.spatial.distance, std=0.5), + "mask": {"circular": {"radius": 1.0}}, + "indegree": nest.random.normal(mean=20.0, std=2.0), + "allow_multapses": True, + "allow_multapses": True, +} + +cdict_dist_out = { + "rule": "fixed_outdegree", + "p": nest.spatial_distributions.gaussian(nest.spatial.distance, std=0.5), + "mask": {"circular": {"radius": 1.0}}, + "outdegree": nest.spatial_distributions.gaussian(nest.spatial.distance, std=0.5), + "allow_multapses": True, + "allow_multapses": True, +} +# { end #} + + +# ---------------------------- + +# { conn8 #} +nest.ResetKernel() +nest.CopyModel("static_synapse", "exc", {"weight": 2.0}) +nest.CopyModel("static_synapse", "inh", {"weight": -8.0}) + +pos = nest.spatial.grid(shape=[10, 10]) +ex_nodes = nest.Create("iaf_psc_alpha", positions=pos) +in_nodes = nest.Create("iaf_psc_alpha", positions=pos) + +nest.Connect( + ex_nodes, + in_nodes, + {"rule": "pairwise_bernoulli", "p": 0.8, "mask": {"circular": {"radius": 0.5}}}, + {"synapse_model": "exc"}, +) +nest.Connect( + in_nodes, + ex_nodes, + { + "rule": "pairwise_bernoulli", + "p": 1.0, + "mask": {"rectangular": {"lower_left": [-0.2, -0.2], "upper_right": [0.2, 0.2]}}, + }, + {"synapse_model": "inh"}, +) +# { end #} + + +# ---------------------------- + +# { conn9 #} +nrn_layer = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[20, 20])) + +stim = nest.Create("poisson_generator", positions=nest.spatial.grid(shape=[1, 1])) + +cdict_stim = {"rule": "pairwise_bernoulli", "p": 1.0, "mask": {"circular": {"radius": 0.1}, "anchor": [0.2, 0.2]}} + +nest.Connect(stim, nrn_layer, cdict_stim) +# { end #} + + +# ---------------------------- + +# { conn10 #} +rec = nest.Create("spike_recorder", positions=nest.spatial.grid(shape=[1, 1])) + +cdict_rec = { + "rule": "pairwise_bernoulli", + "p": 1.0, + "use_on_source": True, + "mask": {"circular": {"radius": 0.1}, "anchor": [-0.2, 0.2]}, +} + +nest.Connect(nrn_layer, rec, cdict_rec) +# { end #} + +# ---------------------------- + +# { conn11 #} +rec = nest.Create("spike_recorder") +nest.Connect(nrn_layer, rec) +# { end #} diff --git a/doc/htmldoc/networks/scripts/layers.py b/doc/htmldoc/networks/scripts/layers.py new file mode 100644 index 0000000000..642a83af36 --- /dev/null +++ b/doc/htmldoc/networks/scripts/layers.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +# +# layers.py +# +# This file is part of NEST. +# +# Copyright (C) 2004 The NEST Initiative +# +# NEST is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# NEST is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NEST. If not, see <http://www.gnu.org/licenses/>. + +# Run as python3 layers.py > layers.log + +import matplotlib.pyplot as plt +import nest +import numpy as np + +# seed NumPy RNG to ensure identical results for runs with random placement +np.random.seed(1234567) + + +def beautify_layer( + layer, fig=plt.gcf(), xlabel=None, ylabel=None, xlim=None, ylim=None, xticks=None, yticks=None, dx=0, dy=0 +): + """Assume either x and ylims/ticks given or none""" + ctr = layer.spatial["center"] + ext = layer.spatial["extent"] + + if xticks is None: + if "shape" in layer.spatial: + dx = float(ext[0]) / layer.spatial["shape"][0] + dy = float(ext[1]) / layer.spatial["shape"][1] + xticks = ctr[0] - ext[0] / 2.0 + dx / 2.0 + dx * np.arange(layer.spatial["shape"][0]) + yticks = ctr[1] - ext[1] / 2.0 + dy / 2.0 + dy * np.arange(layer.spatial["shape"][1]) + + if xlim is None: + xlim = [ctr[0] - ext[0] / 2.0 - dx / 2.0, ctr[0] + ext[0] / 2.0 + dx / 2.0] # extra space so extent is visible + ylim = [ctr[1] - ext[1] / 2.0 - dy / 2.0, ctr[1] + ext[1] / 2.0 + dy / 2.0] + else: + ext = [xlim[1] - xlim[0], ylim[1] - ylim[0]] + + ax = fig.gca() + ax.set_xlim(xlim) + ax.set_ylim(ylim) + ax.set_aspect("equal", "box") + ax.set_xticks(xticks) + ax.set_yticks(yticks) + ax.grid(True) + ax.set_axisbelow(True) + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + return + + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer1 #} +layer = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[5, 5])) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=50) +beautify_layer(layer, fig, xlabel="x-axis (columns)", ylabel="y-axis (rows)") +ax = fig.gca() +tx = [] +for r in range(5): + tx.append(ax.text(0.65, 0.4 - r * 0.2, str(r), horizontalalignment="center", verticalalignment="center")) + tx.append(ax.text(-0.4 + r * 0.2, 0.65, str(r), horizontalalignment="center", verticalalignment="center")) + +# For bbox_extra_artists, see +# https://github.com/matplotlib/matplotlib/issues/351 +# plt.savefig('../user_manual_figures/layer1.png', bbox_inches='tight', +# bbox_extra_artists=tx) + +print("#{ layer1s.log #}") +# { layer1s #} +print(layer.spatial) +# { end #} +print("#{ end.log #}") + +print("#{ layer1p.log #}") +# { layer1p #} +nest.PrintNodes() +# { end #} +print("#{ end.log #}") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer2 #} +layer = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[5, 5], extent=[2.0, 0.5])) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=50) +beautify_layer(layer, fig, xlabel="x-axis (columns)", ylabel="y-axis (rows)") +ax = fig.gca() +tx = [] + +for r in range(5): + tx.append(fig.gca().text(1.25, 0.2 - r * 0.1, str(r), horizontalalignment="center", verticalalignment="center")) + tx.append(fig.gca().text(-0.8 + r * 0.4, 0.35, str(r), horizontalalignment="center", verticalalignment="center")) + +# See https://github.com/matplotlib/matplotlib/issues/351 +plt.savefig("../user_manual_figures/layer2.png", bbox_inches="tight", bbox_extra_artists=tx) + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer3 #} +layer1 = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[5, 5])) +layer2 = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[5, 5], center=[-1.0, 1.0])) +layer3 = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[5, 5], center=[1.5, 0.5])) +# { end #} + +fig = nest.PlotLayer(layer1, nodesize=50) +nest.PlotLayer(layer2, nodesize=50, nodecolor="g", fig=fig) +nest.PlotLayer(layer3, nodesize=50, nodecolor="r", fig=fig) +beautify_layer( + layer1, + fig, + xlabel="x-axis (columns)", + ylabel="y-axis (rows)", + xlim=[-1.6, 2.1], + ylim=[-0.6, 1.6], + xticks=np.arange(-1.4, 2.05, 0.2), + yticks=np.arange(-0.4, 1.45, 0.2), +) + +plt.savefig("../user_manual_figures/layer3.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer3a #} +nx, ny = 5, 3 +d = 0.1 +layer = nest.Create( + "iaf_psc_alpha", positions=nest.spatial.grid(shape=[nx, ny], extent=[nx * d, ny * d], center=[nx * d / 2.0, 0.0]) +) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=100) +plt.plot(0, 0, "x", markersize=20, c="k", mew=3) +plt.plot(nx * d / 2, 0, "o", markersize=20, c="k", mew=3, mfc="none", zorder=100) +beautify_layer( + layer, + fig, + xlabel="x-axis (columns)", + ylabel="y-axis (rows)", + xticks=np.arange(0.0, 0.501, 0.05), + yticks=np.arange(-0.15, 0.151, 0.05), + xlim=[-0.05, 0.55], + ylim=[-0.2, 0.2], +) + +plt.savefig("../user_manual_figures/layer3a.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer4 #} +pos = nest.spatial.free(pos=nest.random.uniform(min=-0.5, max=0.5), num_dimensions=2) +layer = nest.Create("iaf_psc_alpha", 50, positions=pos) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=50) +beautify_layer( + layer, + fig, + xlabel="x-axis (columns)", + ylabel="y-axis (rows)", + xlim=[-0.55, 0.55], + ylim=[-0.55, 0.55], + xticks=[-0.5, 0.0, 0.5], + yticks=[-0.5, 0.0, 0.5], +) + +plt.savefig("../user_manual_figures/layer4.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer4b #} +pos = nest.spatial.free(pos=[[-0.5, -0.5], [-0.25, -0.25], [0.75, 0.75]]) +layer = nest.Create("iaf_psc_alpha", positions=pos) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=50) +beautify_layer( + layer, + fig, + xlabel="x-axis (columns)", + ylabel="y-axis (rows)", + xlim=[-0.55, 0.80], + ylim=[-0.55, 0.80], + xticks=[-0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0], + yticks=[-0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0], +) + +plt.savefig("../user_manual_figures/layer4b.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer4_3d #} +pos = nest.spatial.free(nest.random.uniform(min=-0.5, max=0.5), num_dimensions=3) +layer = nest.Create("iaf_psc_alpha", 200, positions=pos) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=50) + +plt.savefig("../user_manual_figures/layer4_3d.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer4_3d_b #} +pos = nest.spatial.grid(shape=[4, 5, 6]) +layer = nest.Create("iaf_psc_alpha", positions=pos) +# { end #} + +fig = nest.PlotLayer(layer, nodesize=50) + +plt.savefig("../user_manual_figures/layer4_3d_b.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { player #} +layer = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[5, 1], extent=[5.0, 1.0], edge_wrap=True)) +# { end #} + +# fake plot with layer on line and circle +clist = [(0, 0, 1), (0.35, 0, 1), (0.6, 0, 1), (0.8, 0, 1), (1.0, 0, 1)] +fig = plt.figure() +ax1 = fig.add_subplot(221) +ax1.plot([0.5, 5.5], [0, 0], "k-", lw=2) +ax1.scatter(range(1, 6), [0] * 5, s=200, c=clist) +ax1.set_xlim([0, 6]) +ax1.set_ylim([-0.5, 1.25]) +ax1.set_aspect("equal", "box") +ax1.set_xticks([]) +ax1.set_yticks([]) +for j in range(1, 6): + ax1.text(j, 0.5, str("(%d,0)" % (j - 3)), horizontalalignment="center", verticalalignment="bottom") + +ax1a = fig.add_subplot(223) +ax1a.plot([0.5, 5.5], [0, 0], "k-", lw=2) +ax1a.scatter(range(1, 6), [0] * 5, s=200, c=[clist[0], clist[1], clist[2], clist[2], clist[1]]) +ax1a.set_xlim([0, 6]) +ax1a.set_ylim([-0.5, 1.25]) +ax1a.set_aspect("equal", "box") +ax1a.set_xticks([]) +ax1a.set_yticks([]) +for j in range(1, 6): + ax1a.text(j, 0.5, str("(%d,0)" % (j - 3)), horizontalalignment="center", verticalalignment="bottom") + +ax2 = fig.add_subplot(122) +phic = np.arange(0.0, 2 * np.pi + 0.5, 0.1) +r = 5.0 / (2 * np.pi) +ax2.plot(r * np.cos(phic), r * np.sin(phic), "k-", lw=2) +phin = np.arange(0.0, 4.1, 1.0) * 2 * np.pi / 5 +ax2.scatter(r * np.sin(phin), r * np.cos(phin), s=200, c=[clist[0], clist[1], clist[2], clist[2], clist[1]]) +ax2.set_xlim([-1.3, 1.3]) +ax2.set_ylim([-1.2, 1.2]) +ax2.set_aspect("equal", "box") +ax2.set_xticks([]) +ax2.set_yticks([]) +for j in range(5): + ax2.text( + 1.4 * r * np.sin(phin[j]), + 1.4 * r * np.cos(phin[j]), + str("(%d,0)" % (j + 1 - 3)), + horizontalalignment="center", + verticalalignment="center", + ) + +plt.savefig("../user_manual_figures/player.png", bbox_inches="tight") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { layer6 #} +layer1 = nest.Create("iaf_cond_alpha", positions=nest.spatial.grid(shape=[2, 1])) +layer2 = nest.Create("poisson_generator", positions=nest.spatial.grid(shape=[2, 1])) +# { end #} + +print("# { layer6 #}") +nest.PrintNodes() +print("# { end #}") + +# -------------------------------------------------- + +nest.ResetKernel() + +# { vislayer #} +layer = nest.Create("iaf_psc_alpha", positions=nest.spatial.grid(shape=[21, 21])) +probability_param = nest.spatial_distributions.gaussian(nest.spatial.distance, std=0.15) +conndict = {"rule": "pairwise_bernoulli", "p": probability_param, "mask": {"circular": {"radius": 0.4}}} +nest.Connect(layer, layer, conndict) +fig = nest.PlotLayer(layer, nodesize=80) + +ctr = nest.FindCenterElement(layer) +nest.PlotTargets( + ctr, + layer, + fig=fig, + mask=conndict["mask"], + probability_parameter=probability_param, + src_size=250, + tgt_color="red", + tgt_size=20, + mask_color="red", + probability_cmap="Greens", +) +# { end #} +plt.savefig("../user_manual_figures/vislayer.png", bbox_inches="tight") diff --git a/doc/htmldoc/networks/spatially_structured_networks.rst b/doc/htmldoc/networks/spatially_structured_networks.rst index 80d0c096d2..2148e063c5 100644 --- a/doc/htmldoc/networks/spatially_structured_networks.rst +++ b/doc/htmldoc/networks/spatially_structured_networks.rst @@ -33,7 +33,7 @@ particular, classes in an extension module. The Python scripts used throughout this manual are found in the NEST -sources under ``doc/guides/spatially_structured_networks/scripts``. +sources under ``doc/htmldoc/networks/scripts``. There may be a number of undocumented features, which you may discover by browsing the code. These features are highly experimental and @@ -73,12 +73,12 @@ A very simple example We create a first, grid-based simple NodeCollection with the following command: .. literalinclude:: scripts/layers.py - :start-after: #{ layer1 #} - :end-before: #{ end #} + :start-after: # { layer1 #} + :end-before: # { end #} .. _fig_layer1: -.. figure:: spatially_structured_networks/figures/layer1.png +.. figure:: figures/layer1.png :name: fig:layer1 Simple grid-based NodeCollection centered about the origin. Blue circles mark @@ -142,12 +142,12 @@ different extent of a layer, i.e., its size in :math:`x`- and :math:`y`-direction by passing the ``extent`` argument to ``nest.spatial.grid()``: .. literalinclude:: scripts/layers.py - :start-after: #{ layer2 #} - :end-before: #{ end #} + :start-after: # { layer2 #} + :end-before: # { end #} .. _fig_layer2: -.. figure:: spatially_structured_networks/figures/layer2.png +.. figure:: figures/layer2.png :name: fig:layer2 Same layer as in :numref:`fig_layer1`, but with different extent. @@ -172,12 +172,12 @@ The following code creates layers centered about :math:`(0,0)`, :math:`(-1,1)`, and :math:`(1.5,0.5)`, respectively: .. literalinclude:: scripts/layers.py - :start-after: #{ layer3 #} - :end-before: #{ end #} + :start-after: # { layer3 #} + :end-before: # { end #} .. _fig_layer3: -.. figure:: spatially_structured_networks/figures/layer3.png +.. figure:: figures/layer3.png :name: fig:layer3 Three layers centered, respectively, about :math:`(0,0)` (blue), @@ -185,7 +185,7 @@ The following code creates layers centered about :math:`(0,0)`, The center is given as a two-element list of floats. Changing the center does not affect grid indices: For each of the three layers in - :numref:`fig_layer3`, grid indices run from 0 to 4 through columns and +:numref:`fig_layer3`, grid indices run from 0 to 4 through columns and rows, respectively, even though elements in these three layers have different positions in the global coordinate system. @@ -218,12 +218,12 @@ are :math:`(n_x d/2, 0)`. The layer is created with the following code and shown in :numref:`fig_layer3a`: .. literalinclude:: scripts/layers.py - :start-after: #{ layer3a #} - :end-before: #{ end #} + :start-after: # { layer3a #} + :end-before: # { end #} .. _fig_layer3a: -.. figure:: spatially_structured_networks/figures/layer3a.png +.. figure:: figures/layer3a.png :name: fig:layer3a NodeCollection with :math:`n_x=5` columns and :math:`n_y=3` rows, spacing @@ -244,12 +244,12 @@ extent :math:`1\times 1`, i.e., spanning the square :math:`[-0.5,0.5]\times[-0.5,0.5]`: .. literalinclude:: scripts/layers.py - :start-after: #{ layer4 #} - :end-before: #{ end #} + :start-after: # { layer4 #} + :end-before: # { end #} .. _fig_layer4: -.. figure:: spatially_structured_networks/figures/layer4.png +.. figure:: figures/layer4.png :name: fig:layer4 A free layer with 50 elements uniformly distributed in an extent of @@ -274,19 +274,19 @@ Note the following points: - The extent is automatically set when using ``nest.spatial.free``, however, it is still possible to set the extent yourself by passing the ``extent`` variable to the object. -- All element positions must be *within* the layer’s extent. Elements +- All element positions must be *within* the layer's extent. Elements may be placed on the perimeter of the extent as long as no periodic boundary conditions are used; see the section :ref:`sec_periodic`. To create a spatially distributed NodeCollection from a list, do the following: .. literalinclude:: scripts/layers.py - :start-after: #{ layer4b #} - :end-before: #{ end #} + :start-after: # { layer4b #} + :end-before: # { end #} .. _fig_layer4b: -.. figure:: spatially_structured_networks/figures/layer4b.png +.. figure:: figures/layer4b.png :name: fig:layer4b A free layer with 3 elements freely distributed space. The extent is given by the gray lines. @@ -298,17 +298,17 @@ are specified. Furthermore, the extent is calculated from the node positions, an 3D layers ~~~~~~~~~ -Although the term “layer” suggests a 2-dimensional structure, the layers +Although the term "layer" suggests a 2-dimensional structure, the layers in NEST may in fact be 3-dimensional. The example from the previous section may be easily extended by updating number of dimensions for the positions: .. literalinclude:: scripts/layers.py - :start-after: #{ layer4_3d #} - :end-before: #{ end #} + :start-after: # { layer4_3d #} + :end-before: # { end #} .. _fig_layer4_3d: -.. figure:: spatially_structured_networks/figures/layer4_3d.png +.. figure:: figures/layer4_3d.png :name: fig:layer4_3d A free 3D layer with 200 elements uniformly distributed in an extent @@ -319,12 +319,12 @@ space. Another possibility is to create a 3D grid-layer, with 3 elements passed the shape argument, ``shape=[nx, ny, nz]``: .. literalinclude:: scripts/layers.py - :start-after: #{ layer4_3d_b #} - :end-before: #{ end #} + :start-after: # { layer4_3d_b #} + :end-before: # { end #} .. _fig_layer4_3d_b: -.. figure:: spatially_structured_networks/figures/layer4_3d_b.png +.. figure:: figures/layer4_3d_b.png :name: fig:layer4_3d_b A grid 3D NodeCollection with 120 elements distributed on a grid with 4 elements in the x-direction, @@ -356,12 +356,12 @@ You specify periodic boundary conditions for a NodeCollection using the entry ``edge_wrap``: .. literalinclude:: scripts/layers.py - :start-after: #{ player #} - :end-before: #{ end #} + :start-after: # { player #} + :end-before: # { end #} .. _fig_player: -.. figure:: spatially_structured_networks/figures/player.png +.. figure:: figures/player.png :name: fig:player Top left: Layer with single row and five columns without periodic @@ -400,13 +400,8 @@ be of interest: of this guide): .. literalinclude:: scripts/layers.py - :start-after: #{ layer1s #} - :end-before: #{ end #} - -.. literalinclude:: scripts/layers.log - :start-after: #{ layer1s.log #} - :end-before: #{ end.log #} - + :start-after: # { layer1s #} + :end-before: # { end #} The ``spatial`` property is read-only; changing any value will @@ -420,12 +415,8 @@ not change properties of the spatially distributed NodeCollection. only be used on NodeCollections created with spatial distribution. .. literalinclude:: scripts/layers.py - :start-after: #{ layer1p #} - :end-before: #{ end #} - -.. literalinclude:: scripts/layers.log - :start-after: #{ layer1p.log #} - :end-before: #{ end.log #} + :start-after: # { layer1p #} + :end-before: # { end #} .. _sec_connections: @@ -540,12 +531,12 @@ targets. Here is a simple example, cf. :numref:`fig_conn1` .. literalinclude:: scripts/connections.py - :start-after: #{ conn1 #} - :end-before: #{ end #} + :start-after: # { conn1 #} + :end-before: # { end #} .. _fig_conn1: -.. figure:: spatially_structured_networks/figures/conn1.png +.. figure:: figures/conn1.png :name: fig:conn1 Left: Minimal connection example from a layer onto itself using a @@ -602,7 +593,7 @@ grid-based masks for grid-based NodeCollections. If no mask is specified, all nodes in the pool layer will be searched. Note that the mask size should not exceed the size of the layer when -using periodic boundary conditions, since the mask would “wrap around” +using periodic boundary conditions, since the mask would "wrap around" in that case and pool nodes would be considered multiple times as targets. @@ -626,16 +617,16 @@ Rectangular same unit as element coordinates. Example: .. literalinclude:: scripts/connections.py - :start-after: #{ conn2r #} - :end-before: #{ end #} + :start-after: # { conn2r #} + :end-before: # { end #} Circular All nodes within a circle are connected. The area is specified by its radius. .. literalinclude:: scripts/connections.py - :start-after: #{ conn2c #} - :end-before: #{ end #} + :start-after: # { conn2c #} + :end-before: # { end #} Doughnut All nodes between an inner and outer circle are connected. Note that @@ -643,20 +634,20 @@ Doughnut by the radii of the inner and outer circles. .. literalinclude:: scripts/connections.py - :start-after: #{ conn2d #} - :end-before: #{ end #} + :start-after: # { conn2d #} + :end-before: # { end #} Elliptical All nodes within an ellipsis are connected. The area is specified by its major and minor axis. .. literalinclude:: scripts/connections.py - :start-after: #{ conn2e #} - :end-before: #{ end #} + :start-after: # { conn2e #} + :end-before: # { end #} .. _fig_conn2_a: -.. figure:: spatially_structured_networks/figures/conn2_a.png +.. figure:: figures/conn2_a.png :name: fig:conn2_a Masks for 2D layers. For all mask types, the driver node is marked by @@ -673,24 +664,24 @@ of the mask center relative to the driver node, as in the following examples (cf. :numref:`fig_conn2_b`). .. literalinclude:: scripts/connections.py - :start-after: #{ conn2ro #} - :end-before: #{ end #} + :start-after: # { conn2ro #} + :end-before: # { end #} .. literalinclude:: scripts/connections.py - :start-after: #{ conn2co #} - :end-before: #{ end #} + :start-after: # { conn2co #} + :end-before: # { end #} .. literalinclude:: scripts/connections.py - :start-after: #{ conn2do #} - :end-before: #{ end #} + :start-after: # { conn2do #} + :end-before: # { end #} .. literalinclude:: scripts/connections.py - :start-after: #{ conn2eo #} - :end-before: #{ end #} + :start-after: # { conn2eo #} + :end-before: # { end #} .. _fig_conn2_b: -.. figure:: spatially_structured_networks/figures/conn2_b.png +.. figure:: figures/conn2_b.png :name: fig:conn2_b The same masks as in :numref:`fig_conn2_a`, but centered about @@ -704,22 +695,21 @@ add an ``'azimuth_angle'`` entry in the specific mask dictionary. The from the x-axis to the y-axis. .. literalinclude:: scripts/connections.py - :start-after: #{ conn2rr #} - :end-before: #{ end #} + :start-after: # { conn2rr #} + :end-before: # { end #} .. literalinclude:: scripts/connections.py - :start-after: #{ conn2er #} - :end-before: #{ end #} + :start-after: # { conn2er #} + :end-before: # { end #} .. _fig_conn2_c: -.. figure:: spatially_structured_networks/figures/conn2_c.png +.. figure:: figures/conn2_c.png :name: fig:conn2_c Rotated rectangular and elliptical mask from :numref:`fig_conn2_a` and - :numref:`fig_conn2_b`, where the rectangular mask is rotated - :math:`120^\circ` and the elliptical mask is rotated - :math:`45^\circ`. + :numref:`fig_conn2_b`, where the rectangular mask is rotated + :math:`120^\circ` and the elliptical mask is rotated :math:`45^\circ`. .. _sec_3d_masks: @@ -734,24 +724,24 @@ Box as element coordinates. Example: .. literalinclude:: scripts/connections.py - :start-after: #{ conn_3d_a #} - :end-before: #{ end #} + :start-after: # { conn_3d_a #} + :end-before: # { end #} Spherical All nodes within a sphere are connected. The area is specified by its radius. .. literalinclude:: scripts/connections.py - :start-after: #{ conn_3d_b #} - :end-before: #{ end #} + :start-after: # { conn_3d_b #} + :end-before: # { end #} Ellipsoidal All nodes within an ellipsoid are connected. The area is specified by its major, minor, and polar axis. .. literalinclude:: scripts/connections.py - :start-after: #{ conn_3d_c #} - :end-before: #{ end #} + :start-after: # { conn_3d_c #} + :end-before: # { end #} As in the 2D case, you can change the location of the mask relative to the driver node by specifying a 3D vector in the ``'anchor'`` entry in @@ -768,7 +758,7 @@ the (possibly rotated) x-axis is missing. .. _fig_conn_3d: -.. figure:: spatially_structured_networks/figures/conn_3d.png +.. figure:: figures/conn_3d.png :name: fig:conn3d Masks for 3D NodeCollections. For all mask types, the driver node is marked by @@ -785,8 +775,8 @@ right corner coordinates, but give their size in x and y direction, as in this example: .. literalinclude:: scripts/connections.py - :start-after: #{ conn3 #} - :end-before: #{ end #} + :start-after: # { conn3 #} + :end-before: # { end #} The resulting connections are shown in :numref:`fig_conn3`. By default the top-left corner of a grid mask, i.e., the grid mask element with @@ -795,20 +785,20 @@ aligned with the driver node. You can change this alignment by specifying an *anchor* for the mask: .. literalinclude:: scripts/connections.py - :start-after: #{ conn3c #} - :end-before: #{ end #} + :start-after: # { conn3c #} + :end-before: # { end #} You can even place the anchor outside the mask: .. literalinclude:: scripts/connections.py - :start-after: #{ conn3x #} - :end-before: #{ end #} + :start-after: # { conn3x #} + :end-before: # { end #} The resulting connection patterns are shown in :numref:`fig_conn3`. .. _fig_conn3: -.. figure:: spatially_structured_networks/figures/conn3.png +.. figure:: figures/conn3.png :name: fig:conn3 Grid masks for connections between grid-based layers. Left: @@ -924,6 +914,16 @@ parameters drawing values from random distributions. | | | rho | {2(1-\rho^2)}} | | | | | +----------------------------------------------+--------------------+------------------------------------------------------+ + | | | .. math:: | + | | | x, | | + | | | y, | p(x) = \big[\cos(360^{\circ} | + | | | theta, | \frac{y^{\prime}}{\lambda} | + | ``nest.spatial_distributions.gabor()`` | | gamma, | + \psi)\big]^{+} e^{-\frac{ | + | | | std, | \gamma^{2}x^{\prime 2}+y^{\prime 2}}{ | + | | | lam, | 2\text{std}^{2}}} | + | | | psi | \\ x^{\prime} = x\cos\theta + y\sin\theta | + | | | \\ y^{\prime} = -x\sin\theta + y\cos\theta | + +----------------------------------------------+--------------------+------------------------------------------------------+ | | | .. math:: p(x) = \frac{x^{\kappa-1}e^{-\frac{x} | | ``nest.spatial_distributions.gamma()`` | | x, | {\theta}}}{\theta^\kappa\Gamma(\kappa)} | | | | kappa | | @@ -947,7 +947,7 @@ parameters drawing values from random distributions. .. _fig_conn4: -.. figure:: spatially_structured_networks/figures/conn4.png +.. figure:: figures/conn4.png :name: fig:conn4 Illustration of various connection probabilities. Top left: constant probability, @@ -962,18 +962,18 @@ Constant Fixed connection probability: .. literalinclude:: scripts/connections.py - :start-after: #{ conn4cp #} - :end-before: #{ end #} + :start-after: # { conn4cp #} + :end-before: # { end #} Gaussian The connection probability is a Gaussian distribution based on the distance between neurons. In the example, connection - probability is 1 for :math:`d=0` and falls off with a “standard - deviation” of :math:`\sigma=1`: + probability is 1 for :math:`d=0` and falls off with a "standard + deviation" of :math:`\sigma=1`: .. literalinclude:: scripts/connections.py - :start-after: #{ conn4g #} - :end-before: #{ end #} + :start-after: # { conn4g #} + :end-before: # { end #} Cut-off Gaussian In this example we have a distance-dependent Gaussian distributon, @@ -982,18 +982,27 @@ Cut-off Gaussian .. TODO: Reference to full Parameter table with nest.logic.conditional(). .. literalinclude:: scripts/connections.py - :start-after: #{ conn4cut #} - :end-before: #{ end #} + :start-after: # { conn4cut #} + :end-before: # { end #} 2D Gaussian - We conclude with an example using a two-dimensional Gaussian - distribution, i.e., a Gaussian with different widths in :math:`x`- and - :math:`y`- directions. This probability depends on displacement, not - only on distance: + Here we use a two-dimensional Gaussian distribution, i.e., a Gaussian with + different widths in :math:`x`- and :math:`y`- directions. This probability + depends on displacement, not only on distance: + +.. literalinclude:: scripts/connections.py + :start-after: # { conn42d #} + :end-before: # { end #} + +Rectified Gabor Function + We conclude with an example of a rectified Gabor distribution, i.e., a + two-dimensional Gaussian distribution modulated with a spatial oscillation + perpendicular to :math:`\theta`. This probability depends on the + displacement along the coordinates axes, not the distance: .. literalinclude:: scripts/connections.py - :start-after: #{ conn42d #} - :end-before: #{ end #} + :start-after: # { conn4gab #} + :end-before: # { end #} Note that for pool layers with periodic boundary conditions, NEST always uses the shortest possible displacement vector from driver to @@ -1013,7 +1022,7 @@ passed along in a synapse dictionary to the ``Connect()`` call. Figure :numref:`fig_conn5` illustrates weights and delays generated using these -parameters. The code examples used to generate the spatially_structured_networks/figures are shown below. +parameters. The code examples used to generate the figures are shown below. All examples use a spatially distributed NodeCollection of 51 nodes placed on a line; the line is centered about :math:`(25,0)`, so that the leftmost node has coordinates :math:`(0,0)`. The distance @@ -1023,8 +1032,8 @@ entire NodeCollection and is centered about the driver node. Linear example .. literalinclude:: scripts/connections.py - :start-after: #{ conn5lin #} - :end-before: #{ end #} + :start-after: # { conn5lin #} + :end-before: # { end #} Results are shown in the top panel of :numref:`fig_conn5`. Connection weights and delays are shown for the leftmost neuron as driver. Weights @@ -1037,8 +1046,8 @@ Linear example Linear example with periodic boundary conditions .. literalinclude:: scripts/connections.py - :start-after: #{ conn5linpbc #} - :end-before: #{ end #} + :start-after: # { conn5linpbc #} + :end-before: # { end #} Results are shown in the middle panel of :numref:`fig_conn5`. This example is identical to the previous, except that the (pool) layer has periodic @@ -1049,12 +1058,12 @@ Linear example with periodic boundary conditions Various spatially dependent distributions .. literalinclude:: scripts/connections.py - :start-after: #{ conn5exp #} - :end-before: #{ end #} + :start-after: # { conn5exp #} + :end-before: # { end #} .. literalinclude:: scripts/connections.py - :start-after: #{ conn5gauss #} - :end-before: #{ end #} + :start-after: # { conn5gauss #} + :end-before: # { end #} Results are shown in the bottom panel of :numref:`fig_conn5`. It shows linear, exponential and Gaussian distributions of the distance between @@ -1064,8 +1073,8 @@ Various spatially dependent distributions Randomized weights and delays .. literalinclude:: scripts/connections.py - :start-after: #{ conn5uniform #} - :end-before: #{ end #} + :start-after: # { conn5uniform #} + :end-before: # { end #} By using the ``nest.random.uniform()`` parameter for weights or delays, one can obtain randomized values for weights and delays, as shown by the red @@ -1073,7 +1082,7 @@ Randomized weights and delays .. _fig_conn5: -.. figure:: spatially_structured_networks/figures/conn5.png +.. figure:: figures/conn5.png :name: fig:conn5 Distance-dependent and randomized weights and delays. See text for @@ -1097,14 +1106,14 @@ linear (actually affine) with respect to the displacement between the nodes, of target neuron on the x and y axis, respectively. The parameter is then simply: .. literalinclude:: scripts/connections.py - :start-after: #{ conn_param_design #} - :end-before: #{ end #} + :start-after: # { conn_param_design #} + :end-before: # { end #} This can be directly plugged into the :py:func:`.Connect` function: .. literalinclude:: scripts/connections.py - :start-after: #{ conn_param_design_ex #} - :end-before: #{ end #} + :start-after: # { conn_param_design_ex #} + :end-before: # { end #} Periodic boundary conditions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1203,12 +1212,12 @@ The resulting distribution of distances between connected nodes is shown in :numref:`fig_conn6`. .. literalinclude:: scripts/connections.py - :start-after: #{ conn6 #} - :end-before: #{ end #} + :start-after: # { conn6 #} + :end-before: # { end #} .. _fig_conn6: -.. figure:: spatially_structured_networks/figures/conn6.png +.. figure:: figures/conn6.png :name: fig:conn6 Distribution of distances between source and target for a network of @@ -1221,17 +1230,24 @@ Functions determining weight and delay as function of distance/displacement work in just the same way as before when the number of connections is prescribed. +It is also possible to use a random parameter or spatially dependent parameter +to set the number of incoming or outgoing connections. + +.. literalinclude:: scripts/connections.py + :start-after: # { conn7 #} + :end-before: # { end #} + Synapse models and properties ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ By default, :py:func:`.Connect` creates connections using the default synapse -model in NEST, ``static_synapse``. You can specify a different model by +model in NEST, :hxt_ref:`static_synapse`. You can specify a different model by adding a ``'synapse_model'`` entry to the synapse specification dictionary, as in this example: .. literalinclude:: scripts/connections.py - :start-after: #{ conn8 #} - :end-before: #{ end #} + :start-after: # { conn8 #} + :end-before: # { end #} You have to use synapse models if you want to set, e.g., the receptor type of connections or parameters for plastic synapse models. These can @@ -1251,15 +1267,15 @@ center of the mask. As demonstrated in the following example, stimulation devices have to be connected as the source layer. .. literalinclude:: scripts/connections.py - :start-after: #{ conn9 #} - :end-before: #{ end #} + :start-after: # { conn9 #} + :end-before: # { end #} While recording devices, on the other hand, have to be connected as the target layer (see also the following section): .. literalinclude:: scripts/connections.py - :start-after: #{ conn10 #} - :end-before: #{ end #} + :start-after: # { conn10 #} + :end-before: # { end #} Spatially distributed NodeCollections and recording devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1270,13 +1286,13 @@ create a single spike recorder and connect all neurons in the spatially distributed NodeCollection to that spike recorder: .. literalinclude:: scripts/connections.py - :start-after: #{ conn11 #} - :end-before: #{ end #} + :start-after: # { conn11 #} + :end-before: # { end #} Connecting a layer of neurons to a layer of recording devices as described in the section on :ref:`sec_dev_subregions`, is only possible using the ``pairwise_bernoulli`` rule. Note that voltmeter -and multimeter do not suffer from this restriction, since they are +and :hxt_ref:`multimeter` do not suffer from this restriction, since they are connected as sources, not as targets. .. _sec_inspection: @@ -1308,9 +1324,15 @@ The following table presents some query functions provided by NEST. +---------------------------------+-----------------------------------------------------+ | ``nest.GetPosition()`` | Return the spatial locations of nodes. | +---------------------------------+-----------------------------------------------------+ +| ``nest.GetSourceNodes()`` | Obtain sources of targets in a | +| | given source layer. | ++---------------------------------+-----------------------------------------------------+ | ``nest.GetTargetNodes()`` | Obtain targets of sources in a | | | given target layer. | +---------------------------------+-----------------------------------------------------+ +| ``nest.GetSourcePositions()`` | Obtain positions of sources of | +| | targets in a given source layer. | ++---------------------------------+-----------------------------------------------------+ | ``nest.GetTargetPositions()`` | Obtain positions of targets of | | | sources in a given target layer. | +---------------------------------+-----------------------------------------------------+ @@ -1350,6 +1372,9 @@ NEST provides three functions to visualize networks: | :py:func:`.PlotLayer` | Plot nodes in a spatially distributed | | | NodeCollection. | +--------------------------------------+------------------------------------------+ +| :py:func:`.PlotSources` | Plot all sources of a node in a given | +| | NodeCollection. | ++--------------------------------------+------------------------------------------+ | :py:func:`.PlotTargets` | Plot all targets of a node in a given | | | NodeCollection. | +--------------------------------------+------------------------------------------+ @@ -1361,7 +1386,7 @@ NEST provides three functions to visualize networks: .. _fig_vislayer: -.. figure:: spatially_structured_networks/figures/vislayer.png +.. figure:: figures/vislayer.png :name: fig:vislayer :math:`21\times 21` grid with divergent Gaussian projections onto @@ -1376,8 +1401,8 @@ is shown in :numref:`fig_vislayer`. All elements and the targets of the center neuron are shown, as well as mask and connection probability. .. literalinclude:: scripts/layers.py - :start-after: #{ vislayer #} - :end-before: #{ end #} + :start-after: # { vislayer #} + :end-before: # { end #} .. _sec_custom_masks: diff --git a/doc/htmldoc/networks/spatially_structured_networks/scripts/connections.py b/doc/htmldoc/networks/spatially_structured_networks/scripts/connections.py deleted file mode 100644 index cbf102e062..0000000000 --- a/doc/htmldoc/networks/spatially_structured_networks/scripts/connections.py +++ /dev/null @@ -1,637 +0,0 @@ -# -*- coding: utf-8 -*- -# -# connections.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see <http://www.gnu.org/licenses/>. - -# create connectivity figures for spatial manual - -import nest -import matplotlib.pyplot as plt -from mpl_toolkits.mplot3d.axes3d import Axes3D -import numpy as np - -# seed NumPy RNG to ensure identical results for runs with random placement -np.random.seed(7654321) - - -def beautify_layer(layer, fig=plt.gcf(), xlabel=None, ylabel=None, - xlim=None, ylim=None, xticks=None, yticks=None, dx=0, dy=0): - """Assume either x and ylims/ticks given or none""" - ctr = layer.spatial['center'] - ext = layer.spatial['extent'] - - if xticks is None: - if 'shape' in layer.spatial: - dx = float(ext[0]) / layer.spatial['shape'][0] - dy = float(ext[1]) / layer.spatial['shape'][1] - xticks = ctr[0] - ext[0] / 2. + dx / 2. + dx * np.arange( - layer.spatial['shape'][0]) - yticks = ctr[1] - ext[1] / 2. + dy / 2. + dy * np.arange( - layer.spatial['shape'][1]) - - if xlim is None: - xlim = [ctr[0] - ext[0] / 2. - dx / 2., ctr[0] + ext[ - 0] / 2. + dx / 2.] # extra space so extent is visible - ylim = [ctr[1] - ext[1] / 2. - dy / 2., ctr[1] + ext[1] / 2. + dy / 2.] - else: - ext = [xlim[1] - xlim[0], ylim[1] - ylim[0]] - - ax = fig.gca() - ax.set_xlim(xlim) - ax.set_ylim(ylim) - ax.set_aspect('equal', 'box') - ax.set_xticks(xticks) - ax.set_yticks(yticks) - ax.grid(True) - ax.set_axisbelow(True) - ax.set_xlabel(xlabel) - ax.set_ylabel(ylabel) - return - - -def conn_figure(fig, layer, connd, targets=None, showmask=True, kern=None, - xticks=range(-5, 6), yticks=range(-5, 6), - xlim=[-5.5, 5.5], ylim=[-5.5, 5.5]): - if targets is None: - targets = ((nest.FindCenterElement(layer), 'red'),) - - nest.PlotLayer(layer, fig=fig, nodesize=60) - for src, clr in targets: - if showmask: - mask = connd['mask'] - else: - mask = None - nest.PlotTargets(src, layer, fig=fig, mask=mask, probability_parameter=kern, - src_size=250, tgt_color=clr, tgt_size=20, mask_color='red', - probability_cmap='Greens') - - beautify_layer(layer, fig, - xlim=xlim, ylim=ylim, xticks=xticks, yticks=yticks, - xlabel='', ylabel='') - fig.gca().grid(False) - - -# ----------------------------------------------- - -# Simple connection - -#{ conn1 #} -spatial_nodes = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[11, 11], extent=[11., 11.])) -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-2., -1.], - 'upper_right': [2., 1.]}}} -nest.Connect(spatial_nodes, spatial_nodes, conndict) -#{ end #} - -fig = plt.figure() -fig.add_subplot(121) -conn_figure(fig, spatial_nodes, conndict, - targets=((nest.FindCenterElement(spatial_nodes), 'red'), - (nest.FindNearestElement(spatial_nodes, [4., 5.])[0], 'yellow'))) - -# same another time, with periodic bcs -lpbc = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[11, 11], extent=[11., 11.], - edge_wrap=True)) -nest.Connect(lpbc, lpbc, conndict) -fig.add_subplot(122) -conn_figure(fig, lpbc, conndict, showmask=False, - targets=((nest.FindCenterElement(lpbc), 'red'), - (nest.FindNearestElement(lpbc, [4., 5.])[0], 'yellow'))) - -plt.savefig('../user_manual_figures/conn1.png', bbox_inches='tight') - - -# ----------------------------------------------- - -# free masks - -def free_mask_fig(fig, loc, cdict): - nest.ResetKernel() - spatial_nodes = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[11, 11], extent=[11., 11.])) - nest.Connect(spatial_nodes, spatial_nodes, cdict) - - fig.add_subplot(loc) - conn_figure(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2)) - - -fig = plt.figure() - -#{ conn2r #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-2., -1.], - 'upper_right': [2., 1.]}}} -#{ end #} -free_mask_fig(fig, 221, conndict) - -#{ conn2c #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'circular': {'radius': 2.0}}} -#{ end #} -free_mask_fig(fig, 222, conndict) - -#{ conn2d #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'doughnut': {'inner_radius': 1.5, - 'outer_radius': 3.}}} -#{ end #} -free_mask_fig(fig, 223, conndict) - -#{ conn2e #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'elliptical': {'major_axis': 7., - 'minor_axis': 4.}}} -#{ end #} -free_mask_fig(fig, 224, conndict) - -plt.savefig('../user_manual_figures/conn2_a.png', bbox_inches='tight') - -#-----------------------------------------------------------------------------# - -fig = plt.figure() - -#{ conn2ro #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-2., -1.], - 'upper_right': [2., 1.]}, - 'anchor': [-1.5, -1.5]}} -#{ end #} -free_mask_fig(fig, 221, conndict) - -#{ conn2co #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'circular': {'radius': 2.0}, - 'anchor': [-2.0, 0.0]}} -#{ end #} -free_mask_fig(fig, 222, conndict) - -#{ conn2do #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'doughnut': {'inner_radius': 1.5, - 'outer_radius': 3.}, - 'anchor': [1.5, 1.5]}} -#{ end #} -free_mask_fig(fig, 223, conndict) - -#{ conn2eo #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'elliptical': {'major_axis': 7., - 'minor_axis': 4.}, - 'anchor': [2.0, -1.0]}} -#{ end #} -free_mask_fig(fig, 224, conndict) - -plt.savefig('../user_manual_figures/conn2_b.png', bbox_inches='tight') - -#-----------------------------------------------------------------------------# - -fig = plt.figure() - -#{ conn2rr #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-2., -1.], - 'upper_right': [2., 1.], - 'azimuth_angle': 120.}}} -#{ end #} -free_mask_fig(fig, 121, conndict) - -#{ conn2er #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'elliptical': {'major_axis': 7., - 'minor_axis': 4., - 'azimuth_angle': 45.}}} -#{ end #} -free_mask_fig(fig, 122, conndict) - -plt.savefig('../user_manual_figures/conn2_c.png', bbox_inches='tight') - -# ----------------------------------------------- - -# 3d masks - - -def conn_figure_3d(fig, layer, connd, targets=None, showmask=True, - xticks=range(-5, 6), yticks=range(-5, 6), - xlim=[-5.5, 5.5], ylim=[-5.5, 5.5]): - if targets is None: - targets = ((nest.FindCenterElement(layer), 'red'),) - - nest.PlotLayer(layer, fig=fig, nodesize=20, nodecolor=(.5, .5, 1.)) - for src, clr in targets: - if showmask: - mask = connd['mask'] - else: - mask = None - nest.PlotTargets(src, layer, fig=fig, mask=mask, probability_parameter=None, - src_size=250, tgt_color=clr, tgt_size=60, - probability_cmap='Greens') - - ax = fig.gca() - # ax.set_aspect('equal', 'box') - plt.draw() - - -def free_mask_3d_fig(fig, loc, cdict): - nest.ResetKernel() - spatial_nodes = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[11, 11, 11], - extent=[11., 11., 11.])) - nest.Connect(spatial_nodes, spatial_nodes, cdict) - - fig.add_subplot(loc, projection='3d') - conn_figure_3d(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), - yticks=range(-5, 6, 2)) - - -fig = plt.figure() - -#{ conn_3d_a #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'box': {'lower_left': [-2., -1., -1.], - 'upper_right': [2., 1., 1.]}}} -#{ end #} -# free_mask_3d_fig(fig, 121, conndict) - -#{ conn_3d_b #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'spherical': {'radius': 2.5}}} -#{ end #} -# free_mask_3d_fig(fig, 122, conndict) - -#{ conn_3d_c #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'ellipsoidal': {'major_axis': 7., - 'minor_axis': 4., - 'polar_axis': 4.5}}} -#{ end #} - -# plt.savefig('../user_manual_figures/conn_3d.png', bbox_inches='tight') - - -# ----------------------------------------------- - -# grid masks - -def grid_mask_fig(fig, loc, cdict): - nest.ResetKernel() - spatial_nodes = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[11, 11], - extent=[11., 11.])) - nest.Connect(spatial_nodes, spatial_nodes, cdict) - - fig.add_subplot(loc) - conn_figure(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2), - showmask=False) - - -fig = plt.figure() - -#{ conn3 #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'grid': {'shape': [5, 3]}}} -#{ end #} -grid_mask_fig(fig, 131, conndict) - -#{ conn3c #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'grid': {'shape': [5, 3]}, - 'anchor': [2, 1]}} -#{ end #} -grid_mask_fig(fig, 132, conndict) - -#{ conn3x #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'grid': {'shape': [3, 5]}, - 'anchor': [2, -1]}} -#{ end #} -grid_mask_fig(fig, 133, conndict) - -plt.savefig('../user_manual_figures/conn3.png', bbox_inches='tight') - - -# ----------------------------------------------- - -# free masks - -def kernel_fig(fig, loc, cdict, kern=None): - nest.ResetKernel() - spatial_nodes = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[11, 11], - extent=[11., 11.])) - nest.Connect(spatial_nodes, spatial_nodes, cdict) - - fig.add_subplot(loc) - conn_figure(fig, spatial_nodes, cdict, xticks=range(-5, 6, 2), yticks=range(-5, 6, 2), - kern=kern) - - -fig = plt.figure() - -#{ conn4cp #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': 0.5, - 'mask': {'circular': {'radius': 4.}}} -#{ end #} -kernel_fig(fig, 231, conndict) - -#{ conn4g #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': nest.spatial_distributions.gaussian(nest.spatial.distance, std=1.0), - 'mask': {'circular': {'radius': 4.}}} -#{ end #} -kernel_fig(fig, 232, conndict, kern=nest.spatial_distributions.gaussian(nest.spatial.distance, std=1.0)) - -#{ conn4cut #} -distribution = nest.spatial_distributions.gaussian(nest.spatial.distance, std=1.0) -conndict = {'rule': 'pairwise_bernoulli', - 'p': nest.logic.conditional(distribution > 0.5, - distribution, - 0), - 'mask': {'circular': {'radius': 4.}}} -#{ end #} -kernel_fig(fig, 234, conndict) - -#{ conn42d #} -conndict = {'rule': 'pairwise_bernoulli', - 'p': nest.spatial_distributions.gaussian2D(nest.spatial.distance.x, - nest.spatial.distance.y, - std_x=1., - std_y=3.), - 'mask': {'circular': {'radius': 4.}}} -#{ end #} -kernel_fig(fig, 235, conndict) - -plt.savefig('../user_manual_figures/conn4.png', bbox_inches='tight') - -# ----------------------------------------------- - - -def wd_fig(fig, loc, pos, cdict, sdict, what, rpos=None, - xlim=[-1, 51], ylim=[0, 1], xticks=range(0, 51, 5), - yticks=np.arange(0., 1.1, 0.2), clr='blue', - label=''): - nest.ResetKernel() - spatial_nodes = nest.Create('iaf_psc_alpha', positions=pos) - nest.Connect(spatial_nodes, spatial_nodes, cdict, sdict) - - ax = fig.add_subplot(loc) - - if rpos is None: - rn = spatial_nodes[0] # first node - else: - rn = nest.FindNearestElement(spatial_nodes, rpos) - - conns = nest.GetConnections(rn) - vals = np.array([c.get(what) for c in conns]) - tgts = [c.get('target') for c in conns] - locs = np.array([nest.GetPosition(spatial_nodes[spatial_nodes.index(t)]) for t in tgts]) - ax.plot(locs[:, 0], vals, 'o', mec='none', mfc=clr, label=label) - ax.set_xlim(xlim) - ax.set_ylim(ylim) - ax.set_xticks(xticks) - ax.set_yticks(yticks) - - -fig = plt.figure() - -#{ conn5lin #} -pos = nest.spatial.grid(shape=[51, 1], extent=[51., 1.], center=[25., 0.]) -spatial_nodes = nest.Create('iaf_psc_alpha', positions=pos) - -cdict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-25.5, -0.5], - 'upper_right': [25.5, 0.5]}}} -sdict = {'weight': nest.math.max(1.0 - 0.05 * nest.spatial.distance, 0.), - 'delay': 0.1 + 0.02 * nest.spatial.distance} - -nest.Connect(spatial_nodes, spatial_nodes, cdict, sdict) -#{ end #} -wd_fig(fig, 311, pos, cdict, sdict, 'weight', label='Weight') -wd_fig(fig, 311, pos, cdict, sdict, 'delay', label='Delay', clr='red') -fig.gca().legend() - -ppos = nest.spatial.grid(shape=[51, 1], - extent=[51., 1.], - center=[25., 0.], - edge_wrap=True) -#{ conn5linpbc #} -cdict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-25.5, -0.5], - 'upper_right': [25.5, 0.5]}}} -sdict = {'weight': nest.math.max(1.0 - 0.05 * nest.spatial.distance, 0.), - 'delay': 0.1 + 0.02 * nest.spatial.distance} -#{ end #} -wd_fig(fig, 312, ppos, cdict, sdict, 'weight', label='Weight') -wd_fig(fig, 312, ppos, cdict, sdict, 'delay', label='Delay', clr='red') -fig.gca().legend(loc=1) - -cdict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-25.5, -0.5], - 'upper_right': [25.5, 0.5]}}} -sdict = {'weight': nest.math.max(1.0 - 0.05 * nest.spatial.distance, 0.)} -wd_fig(fig, 313, pos, cdict, sdict, 'weight', label='Linear', - rpos=[25., 0.], clr='orange') - -#{ conn5exp #} -cdict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-25.5, -0.5], - 'upper_right': [25.5, 0.5]}}} -sdict = {'weight': nest.spatial_distributions.exponential(nest.spatial.distance, beta=5.)} -#{ end #} -wd_fig(fig, 313, pos, cdict, sdict, 'weight', label='Exponential', - rpos=[25., 0.]) - -#{ conn5gauss #} -cdict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-25.5, -0.5], - 'upper_right': [25.5, 0.5]}}} -sdict = {'weight': nest.spatial_distributions.gaussian(nest.spatial.distance, std=5.)} -#{ end #} -wd_fig(fig, 313, pos, cdict, sdict, 'weight', label='Gaussian', clr='green', - rpos=[25., 0.]) - -#{ conn5uniform #} -cdict = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-25.5, -0.5], - 'upper_right': [25.5, 0.5]}}} -sdict = {'weight': nest.random.uniform(min=0.2, max=0.8)} -#{ end #} -wd_fig(fig, 313, pos, cdict, sdict, 'weight', label='Uniform', clr='red', - rpos=[25., 0.]) - -fig.gca().legend() - -plt.savefig('../user_manual_figures/conn5.png', bbox_inches='tight') - - -# -------------------------------- -#{ conn_param_design #} -parameter = 0.5 + nest.spatial.distance.x + 2. * nest.spatial.distance.y -#{ end #} - -#{ conn_param_design_ex #} -spatial_nodes = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[11, 11], - extent=[1., 1.])) -nest.Connect(spatial_nodes, spatial_nodes, {'rule': 'pairwise_bernoulli', - 'p': parameter, - 'mask': {'circular': {'radius': 0.5}}}) -#{ end #} - -# -------------------------------- - - -def pn_fig(fig, loc, spatial_nodes, cdict, - xlim=[0., .5], ylim=[0, 3.5], xticks=range(0, 51, 5), - yticks=np.arange(0., 1.1, 0.2), clr='blue', - label=''): - nest.Connect(spatial_nodes, spatial_nodes, cdict) - - ax = fig.add_subplot(loc) - - conns = nest.GetConnections(spatial_nodes) - dist = np.array([nest.Distance(spatial_nodes[spatial_nodes.index(s)], - spatial_nodes[spatial_nodes.index(t)]) - for s, t in zip(conns.sources(), conns.targets())]) - ax.hist(dist, bins=50, histtype='stepfilled', density=True) - r = np.arange(0., 0.51, 0.01) - - plt.plot(r, 2 * np.pi * r * (1 - 2 * r) * 12 / np.pi, 'r-', lw=3, - zorder=-10) - - ax.set_xlim(xlim) - ax.set_ylim(ylim) - """ax.set_xticks(xticks) - ax.set_yticks(yticks)""" - # ax.set_aspect(100, 'box') - ax.set_xlabel('Source-target distance d') - ax.set_ylabel('Connection probability pconn(d)') - - -fig = plt.figure() - -nest.ResetKernel() - - -#{ conn6 #} -pos = nest.spatial.free(nest.random.uniform(-1., 1.), - extent=[2., 2.], edge_wrap=True) -spatial_nodes = nest.Create('iaf_psc_alpha', 1000, positions=pos) - -cdict = {'rule': 'fixed_outdegree', - 'p': nest.math.max(1. - 2 * nest.spatial.distance, 0.), - 'mask': {'circular': {'radius': 1.0}}, - 'outdegree': 50, - 'allow_multapses': True, 'allow_autapses': False} -nest.Connect(spatial_nodes, spatial_nodes, cdict) -#{ end #} -pn_fig(fig, 111, spatial_nodes, cdict) - -plt.savefig('../user_manual_figures/conn6.png', bbox_inches='tight') - -# ---------------------------- - -#{ conn8 #} -nest.ResetKernel() -nest.CopyModel('static_synapse', 'exc', {'weight': 2.0}) -nest.CopyModel('static_synapse', 'inh', {'weight': -8.0}) - -pos = nest.spatial.grid(shape=[10, 10]) -ex_nodes = nest.Create('iaf_psc_alpha', positions=pos) -in_nodes = nest.Create('iaf_psc_alpha', positions=pos) - -nest.Connect(ex_nodes, in_nodes, {'rule': 'pairwise_bernoulli', - 'p': 0.8, - 'mask': {'circular': {'radius': 0.5}}}, - {'synapse_model': 'exc'}) -nest.Connect(in_nodes, ex_nodes, {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'rectangular': {'lower_left': [-0.2, -0.2], - 'upper_right': [0.2, 0.2]}}}, - {'synapse_model': 'inh'}) -#{ end #} - - -# ---------------------------- - -#{ conn9 #} -nrn_layer = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[20, 20])) - -stim = nest.Create('poisson_generator', - positions=nest.spatial.grid(shape=[1, 1])) - -cdict_stim = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'mask': {'circular': {'radius': 0.1}, - 'anchor': [0.2, 0.2]}} - -nest.Connect(stim, nrn_layer, cdict_stim) -#{ end #} - - -# ---------------------------- - -#{ conn10 #} -rec = nest.Create('spike_recorder', - positions=nest.spatial.grid(shape=[1, 1])) - -cdict_rec = {'rule': 'pairwise_bernoulli', - 'p': 1.0, - 'use_on_source': True, - 'mask': {'circular': {'radius': 0.1}, - 'anchor': [-0.2, 0.2]}} - -nest.Connect(nrn_layer, rec, cdict_rec) -#{ end #} - -# ---------------------------- - -#{ conn11 #} -rec = nest.Create('spike_recorder') -nest.Connect(nrn_layer, rec) -#{ end #} diff --git a/doc/htmldoc/networks/spatially_structured_networks/scripts/layers.py b/doc/htmldoc/networks/spatially_structured_networks/scripts/layers.py deleted file mode 100644 index 90dbe26cc0..0000000000 --- a/doc/htmldoc/networks/spatially_structured_networks/scripts/layers.py +++ /dev/null @@ -1,341 +0,0 @@ -# -*- coding: utf-8 -*- -# -# layers.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see <http://www.gnu.org/licenses/>. - -# Run as python3 layers.py > layers.log - -import matplotlib.pyplot as plt -import nest -import numpy as np - -# seed NumPy RNG to ensure identical results for runs with random placement -np.random.seed(1234567) - - -def beautify_layer(layer, fig=plt.gcf(), xlabel=None, ylabel=None, - xlim=None, ylim=None, xticks=None, yticks=None, dx=0, dy=0): - """Assume either x and ylims/ticks given or none""" - ctr = layer.spatial['center'] - ext = layer.spatial['extent'] - - if xticks is None: - if 'shape' in layer.spatial: - dx = float(ext[0]) / layer.spatial['shape'][0] - dy = float(ext[1]) / layer.spatial['shape'][1] - xticks = ctr[0] - ext[0] / 2. + dx / 2. + dx * np.arange( - layer.spatial['shape'][0]) - yticks = ctr[1] - ext[1] / 2. + dy / 2. + dy * np.arange( - layer.spatial['shape'][1]) - - if xlim is None: - xlim = [ctr[0] - ext[0] / 2. - dx / 2., ctr[0] + ext[ - 0] / 2. + dx / 2.] # extra space so extent is visible - ylim = [ctr[1] - ext[1] / 2. - dy / 2., ctr[1] + ext[1] / 2. + dy / 2.] - else: - ext = [xlim[1] - xlim[0], ylim[1] - ylim[0]] - - ax = fig.gca() - ax.set_xlim(xlim) - ax.set_ylim(ylim) - ax.set_aspect('equal', 'box') - ax.set_xticks(xticks) - ax.set_yticks(yticks) - ax.grid(True) - ax.set_axisbelow(True) - ax.set_xlabel(xlabel) - ax.set_ylabel(ylabel) - return - - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer1 #} -layer = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[5, 5])) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=50) -beautify_layer(layer, fig, xlabel='x-axis (columns)', ylabel='y-axis (rows)') -ax = fig.gca() -tx = [] -for r in range(5): - tx.append(ax.text(0.65, 0.4 - r * 0.2, str(r), - horizontalalignment='center', - verticalalignment='center')) - tx.append(ax.text(-0.4 + r * 0.2, 0.65, str(r), - horizontalalignment='center', - verticalalignment='center')) - -# For bbox_extra_artists, see -# https://github.com/matplotlib/matplotlib/issues/351 -# plt.savefig('../user_manual_figures/layer1.png', bbox_inches='tight', -# bbox_extra_artists=tx) - -print("#{ layer1s.log #}") -#{ layer1s #} -print(layer.spatial) -#{ end #} -print("#{ end.log #}") - -print("#{ layer1p.log #}") -#{ layer1p #} -nest.PrintNodes() -#{ end #} -print("#{ end.log #}") - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer2 #} -layer = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[5, 5], - extent=[2.0, 0.5])) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=50) -beautify_layer(layer, fig, xlabel='x-axis (columns)', ylabel='y-axis (rows)') -ax = fig.gca() -tx = [] - -for r in range(5): - tx.append(fig.gca().text(1.25, 0.2 - r * 0.1, str(r), - horizontalalignment='center', - verticalalignment='center')) - tx.append(fig.gca().text(-0.8 + r * 0.4, 0.35, str(r), - horizontalalignment='center', - verticalalignment='center')) - -# See https://github.com/matplotlib/matplotlib/issues/351 -plt.savefig('../user_manual_figures/layer2.png', bbox_inches='tight', - bbox_extra_artists=tx) - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer3 #} -layer1 = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[5, 5])) -layer2 = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[5, 5], - center=[-1., 1.])) -layer3 = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[5, 5], - center=[1.5, 0.5])) -#{ end #} - -fig = nest.PlotLayer(layer1, nodesize=50) -nest.PlotLayer(layer2, nodesize=50, nodecolor='g', fig=fig) -nest.PlotLayer(layer3, nodesize=50, nodecolor='r', fig=fig) -beautify_layer(layer1, fig, xlabel='x-axis (columns)', ylabel='y-axis (rows)', - xlim=[-1.6, 2.1], ylim=[-0.6, 1.6], - xticks=np.arange(-1.4, 2.05, 0.2), - yticks=np.arange(-0.4, 1.45, 0.2)) - -plt.savefig('../user_manual_figures/layer3.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer3a #} -nx, ny = 5, 3 -d = 0.1 -layer = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[nx, ny], - extent=[nx * d, ny * d], - center=[nx * d / 2., 0.])) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=100) -plt.plot(0, 0, 'x', markersize=20, c='k', mew=3) -plt.plot(nx * d / 2, 0, 'o', markersize=20, c='k', mew=3, mfc='none', - zorder=100) -beautify_layer(layer, fig, xlabel='x-axis (columns)', ylabel='y-axis (rows)', - xticks=np.arange(0., 0.501, 0.05), - yticks=np.arange(-0.15, 0.151, 0.05), - xlim=[-0.05, 0.55], ylim=[-0.2, 0.2]) - -plt.savefig('../user_manual_figures/layer3a.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer4 #} -pos = nest.spatial.free(pos=nest.random.uniform(min=-0.5, max=0.5), - num_dimensions=2) -layer = nest.Create('iaf_psc_alpha', 50, - positions=pos) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=50) -beautify_layer(layer, fig, xlabel='x-axis (columns)', ylabel='y-axis (rows)', - xlim=[-0.55, 0.55], ylim=[-0.55, 0.55], - xticks=[-0.5, 0., 0.5], yticks=[-0.5, 0., 0.5]) - -plt.savefig('../user_manual_figures/layer4.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer4b #} -pos = nest.spatial.free(pos=[[-0.5, -0.5], [-0.25, -0.25], [0.75, 0.75]]) -layer = nest.Create('iaf_psc_alpha', positions=pos) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=50) -beautify_layer(layer, fig, xlabel='x-axis (columns)', ylabel='y-axis (rows)', - xlim=[-0.55, 0.80], ylim=[-0.55, 0.80], - xticks=[-0.75, -0.5, -0.25, 0., 0.25, 0.5, 0.75, 1.], - yticks=[-0.75, -0.5, -0.25, 0., 0.25, 0.5, 0.75, 1.]) - -plt.savefig('../user_manual_figures/layer4b.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer4_3d #} -pos = nest.spatial.free(nest.random.uniform(min=-0.5, max=0.5), - num_dimensions=3) -layer = nest.Create('iaf_psc_alpha', 200, positions=pos) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=50) - -plt.savefig('../user_manual_figures/layer4_3d.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer4_3d_b #} -pos = nest.spatial.grid(shape=[4, 5, 6]) -layer = nest.Create('iaf_psc_alpha', positions=pos) -#{ end #} - -fig = nest.PlotLayer(layer, nodesize=50) - -plt.savefig('../user_manual_figures/layer4_3d_b.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ player #} -layer = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid( - shape=[5, 1], - extent=[5., 1.], - edge_wrap=True)) -#{ end #} - -# fake plot with layer on line and circle -clist = [(0, 0, 1), (0.35, 0, 1), (0.6, 0, 1), (0.8, 0, 1), (1.0, 0, 1)] -fig = plt.figure() -ax1 = fig.add_subplot(221) -ax1.plot([0.5, 5.5], [0, 0], 'k-', lw=2) -ax1.scatter(range(1, 6), [0] * 5, s=200, c=clist) -ax1.set_xlim([0, 6]) -ax1.set_ylim([-0.5, 1.25]) -ax1.set_aspect('equal', 'box') -ax1.set_xticks([]) -ax1.set_yticks([]) -for j in range(1, 6): - ax1.text(j, 0.5, str('(%d,0)' % (j - 3)), - horizontalalignment='center', verticalalignment='bottom') - -ax1a = fig.add_subplot(223) -ax1a.plot([0.5, 5.5], [0, 0], 'k-', lw=2) -ax1a.scatter(range(1, 6), [0] * 5, s=200, - c=[clist[0], clist[1], clist[2], clist[2], clist[1]]) -ax1a.set_xlim([0, 6]) -ax1a.set_ylim([-0.5, 1.25]) -ax1a.set_aspect('equal', 'box') -ax1a.set_xticks([]) -ax1a.set_yticks([]) -for j in range(1, 6): - ax1a.text(j, 0.5, str('(%d,0)' % (j - 3)), - horizontalalignment='center', verticalalignment='bottom') - -ax2 = fig.add_subplot(122) -phic = np.arange(0., 2 * np.pi + 0.5, 0.1) -r = 5. / (2 * np.pi) -ax2.plot(r * np.cos(phic), r * np.sin(phic), 'k-', lw=2) -phin = np.arange(0., 4.1, 1.) * 2 * np.pi / 5 -ax2.scatter(r * np.sin(phin), r * np.cos(phin), s=200, - c=[clist[0], clist[1], clist[2], clist[2], clist[1]]) -ax2.set_xlim([-1.3, 1.3]) -ax2.set_ylim([-1.2, 1.2]) -ax2.set_aspect('equal', 'box') -ax2.set_xticks([]) -ax2.set_yticks([]) -for j in range(5): - ax2.text(1.4 * r * np.sin(phin[j]), 1.4 * r * np.cos(phin[j]), - str('(%d,0)' % (j + 1 - 3)), - horizontalalignment='center', verticalalignment='center') - -plt.savefig('../user_manual_figures/player.png', bbox_inches='tight') - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ layer6 #} -layer1 = nest.Create('iaf_cond_alpha', - positions=nest.spatial.grid(shape=[2, 1])) -layer2 = nest.Create('poisson_generator', - positions=nest.spatial.grid(shape=[2, 1])) -#{ end #} - -print("#{ layer6 #}") -nest.PrintNodes() -print("#{ end #}") - -# -------------------------------------------------- - -nest.ResetKernel() - -#{ vislayer #} -layer = nest.Create('iaf_psc_alpha', - positions=nest.spatial.grid(shape=[21, 21])) -probability_param = nest.spatial_distributions.gaussian(nest.spatial.distance, std=0.15) -conndict = {'rule': 'pairwise_bernoulli', - 'p': probability_param, - 'mask': {'circular': {'radius': 0.4}}} -nest.Connect(layer, layer, conndict) -fig = nest.PlotLayer(layer, nodesize=80) - -ctr = nest.FindCenterElement(layer) -nest.PlotTargets(ctr, layer, fig=fig, - mask=conndict['mask'], probability_parameter=probability_param, - src_size=250, tgt_color='red', tgt_size=20, mask_color='red', - probability_cmap='Greens') -#{ end #} -plt.savefig('../user_manual_figures/vislayer.png', bbox_inches='tight') diff --git a/doc/htmldoc/neurons/exact-integration.rst b/doc/htmldoc/neurons/exact-integration.rst index 01d66999ce..cd282325d8 100644 --- a/doc/htmldoc/neurons/exact-integration.rst +++ b/doc/htmldoc/neurons/exact-integration.rst @@ -9,9 +9,10 @@ The simple integrate-and fire model For the simple integrate-and-fire model the voltage :math:`V` is given as a solution of the equation: .. math:: + C\frac{dV}{dt}=I. -This is just the derivate of the law of capacitance :math:`Q=CV`. When an input current is applied, the membrane voltage increases with time until it reaches a constant threshold :math:`V_{\text{th}}`, at which point a delta function spike occurs. +This is just the derivative of the law of capacitance :math:`Q=CV`. When an input current is applied, the membrane voltage increases with time until it reaches a constant threshold :math:`V_{\text{th}}`, at which point a delta function spike occurs. A shortcoming of the simple integrate-and-fire model is that it implements no time-dependent memory. If the model receives a below-threshold signal at some time, it will retain that voltage boost until it fires again. This characteristic is not in line with observed neuronal behavior. @@ -21,6 +22,7 @@ The leaky integrate-and fire model In the leaky integrate-and-fire model, the memory problem is solved by adding a "leak" term :math:`\frac{-1}{R}V` (:math:`R` is the resistance and :math:`\tau=RC`) to the membrane potential: .. math:: + \frac{dV}{dt}=\frac{-1}{\tau}V+\frac{1}{C}I. :label: membrane @@ -32,25 +34,29 @@ Solving a homogeneous linear differential equation To solve :math:numref:`membrane` we start by looking at a simpler differential equation: .. math:: + \frac{df}{dt}=af\text{, where } f:\mathbb{R}\to\mathbb{R} \text{ and } a\in\mathbb{R}. Here the solution is given by :math:`f(t)=e^{at}`. Solving a non-homogeneous linear differential equation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + When you add another function :math:`g` to the right hand side of our linear differential equation, .. math:: + \frac{df}{dt}=af+g this is now a non-homogeneous differential equation. Things (can) become more complicated. Solving it with variation of constants -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This kind of differential equation is usually solved with "variation of constants" which gives us the following solution: .. math:: + f(t)=e^{ct}\int_{0}^t g(s)e^{-cs}ds. This is obviously not a particularly handy solution since calculating the integral in every step is very costly. @@ -61,10 +67,11 @@ Solving it with exact integration With exact integration, these costly computations can be avoided. Restrictions to :math:`g` ------------------------- +------------------------- But only for certain functions :math:`g`! I.e. if :math:`g` satisfies (is a solution of): .. math:: + \left(\frac{d}{dt}\right)^n g= \sum_{i=1}^{n}a_i\left(\frac{d}{dt}\right)^{i-1} g for some :math:`n\in \mathbb{N}` and a sequence :math:`(a_i)_{i\in\mathbb{N}}\subset \mathbb{R}`. @@ -77,11 +84,13 @@ Reformulating the problem The non-homogeneous differential equation is reformulated as a multidimensional homogeneous linear differential equation: .. math:: + \frac{d}{dt}y=Ay where .. math:: + A=\begin{pmatrix} a_{n} & a_{n-1} & \cdots & \cdots & a_1 & 0 \\ 1 & 0 & \cdots & 0 & 0 & 0 \\ @@ -94,6 +103,7 @@ where by choosing :math:`y_1,...,y_n` canonically as: .. math:: + \begin{align*} y_1 &= \left(\frac{d}{dt}\right)^{n-1}g\\ \vdots &= \vdots\\ @@ -105,11 +115,13 @@ by choosing :math:`y_1,...,y_n` canonically as: This makes ist very easy to determine the solution as .. math:: + y(t)= e^{At}y_0 and .. math:: + y_{t+h}=y(t+h)=e^{A(t+h)}\cdot y_0=e^{Ah}\cdot e^{At}\cdot y_0=e^{Ah}\cdot y_t. This means that once we have calculated :math:`A`, propagation consists of multiplications only. @@ -120,6 +132,7 @@ Example: The leaky integrate and fire model with alpha-function shaped inputs (i The dynamics of the membrane potential :math:`V` is given by: .. math:: + \frac{dV}{dt}=\frac{-1}{\tau}V+\frac{1}{C}I where :math:`\tau` is the membrane time constant and :math:`C` is the capacitance. :math:`I` is the sum of the synaptic currents and any external input: @@ -127,11 +140,13 @@ where :math:`\tau` is the membrane time constant and :math:`C` is the capacitanc Postsynaptic currents are alpha-shaped, i.e. the time course of the synaptic current :math:`\iota` due to one incoming spike is .. math:: + \iota (t)= \frac{e}{\tau_{syn}}t e^{-t/\tau_{\text{syn}}}. The total input :math:`I` to the neuron at a certain time :math:`t` is the sum of all incoming spikes at all grid points in time :math:`t_i\le t` plus an additional piecewise constant external input :math:`I_{\text{ext}}`: .. math:: + I(t)=\sum_{i\in\mathbb{N}, t_i\le t }\sum_{k\in S_{t_i}}\hat{\iota}_k \frac{e}{\tau_{\text{syn}}}(t-t_i) e^{-(t-t_i)/\tau_{\text{syn}}}+I_{\text{ext}} :math:`S_t` is the set of indices that deliver a spike to the neuron at time :math:`t`, :math:`\tau_{\text{syn}}` is the rise time and :math:`\iota_k` represents the "weight" of synapse :math:`k`. @@ -142,6 +157,7 @@ Exact integration for the iaf_psc_alpha model First we make the substitutions: .. math:: + \begin{align*} y_1 &= \frac{d}{dt}\iota+\frac{1}{\tau_{syn}}\iota \\ y_2 &= \iota \\ @@ -151,11 +167,13 @@ First we make the substitutions: for the equation .. math:: + \frac{dV}{dt}=\frac{-1}{Tau}V+\frac{1}{C}\iota we get the homogeneous differential equation (for :math:`y=(y_1,y_2,y_3)^t`) .. math:: + \frac{d}{dt}y= Ay= \begin{pmatrix} \frac{1}{\tau_{syn}}& 0 & 0\\ @@ -167,29 +185,37 @@ we get the homogeneous differential equation (for :math:`y=(y_1,y_2,y_3)^t`) The solution of this differential equation is given by :math:`y(t)=e^{At}y(0)` and can be solved stepwise for a fixed time step :math:`h`: .. math:: + y_{t+h}=y(t+h)=e^{A(t+h)}y(0)=e^{Ah}e^{At}y(0)=e^{Ah}y(t)=e^{Ah}y_t. The complete update for the neuron can be written as .. math:: + y_{t+h}=e^{Ah}y_t + x_{t+h} where .. math:: + x_{t+h}+\begin{pmatrix}\frac{e}{\tau_{\text{syn}}}\\0\\0\end{pmatrix}\sum_{k\in S_{t+h}}\hat{\iota}_k as the linearity of the system permits the initial conditions for all spikes arriving at a given grid point to be lumped together in the term :math:`x_{t+h}`. :math:`S_{t+h}` is the set of indices :math:`k\in 1,....,K` of synapses that deliver a spike to the neuron at time :math:`t+h`. -The matrix :math:`e^{Ah}` in the C++ implementation of the model in NEST is constructed `here <https://github.com/nest/nest-simulator/blob/b3fc263e073f46f0732c10efb34fcc90f3b6771c/models/iaf_psc_alpha.cpp#L243>`_. +The matrix :math:`e^{Ah}` is constructed `in the C++ implementation of the iaf_psc_alpha model <https://github.com/nest/nest-simulator/blob/b3fc263e073f46f0732c10efb34fcc90f3b6771c/models/iaf_psc_alpha.cpp#L243>`_ in NEST. Every matrix entry is calculated twice. For inhibitory postsynaptic inputs (with a time constant :math:`\tau_{syn_{in}}`) and excitatory postsynaptic inputs (with a time constant :math:`\tau_{syn_{ex}}`). -And the update is performed `here <https://github.com/nest/nest-simulator/blob/b3fc263e073f46f0732c10efb34fcc90f3b6771c/models/iaf_psc_alpha.cpp#L305>`_. The first multiplication evolves the external input. The others are the multiplication of the matrix :math:`e^{Ah}` with :math:`y`. (For inhibitory and excitatory inputs) +The update is performed `here <https://github.com/nest/nest-simulator/blob/b3fc263e073f46f0732c10efb34fcc90f3b6771c/models/iaf_psc_alpha.cpp#L305-L307>`_. The first multiplication evolves the external input. The others are the multiplication of the matrix :math:`e^{Ah}` with :math:`y` (for inhibitory and excitatory inputs). + +If synaptic and membrane time constants become very close, :math:`\tau_m\approx \tau_{syn}`, the matrix :math:`e^{Ah}` becomes numerically unstable. NEST handles this gracefully as described in the `IAF Integration Singularity notebook <model_details/IAF_Integration_Singularity.ipynb>`_. + + +For more information see [1]_. References ~~~~~~~~~~ -.. [1] RotterV S & Diesmann M (1999) Exact simulation of time-invariant linear - systems with applications to neuronal modeling. Biologial Cybernetics - 81:381-402. DOI: https://doi.org/10.1007/s004220050570 +.. [1] Rotter V S, Diesmann M (1999). Exact simulation of time-invariant linear + systems with applications to neuronal modeling. Biologial Cybernetics + 81:381-402. DOI: https://doi.org/10.1007/s004220050570 diff --git a/doc/htmldoc/neurons/index.rst b/doc/htmldoc/neurons/index.rst index 7dd53e6c8f..cc89b966e7 100644 --- a/doc/htmldoc/neurons/index.rst +++ b/doc/htmldoc/neurons/index.rst @@ -8,3 +8,4 @@ All about neurons in NEST :glob: * + diff --git a/doc/htmldoc/neurons/model_details/IAF_neurons_singularity.ipynb b/doc/htmldoc/neurons/model_details/IAF_neurons_singularity.ipynb deleted file mode 100644 index 2cd9062a86..0000000000 --- a/doc/htmldoc/neurons/model_details/IAF_neurons_singularity.ipynb +++ /dev/null @@ -1,538 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# IAF neurons singularity\n", - "\n", - "This notebook describes how NEST handles the singularities appearing in the ODE's of integrate-and-fire model neurons with alpha- or exponentially-shaped current, when the membrane and the synaptic time-constants are identical.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import sympy as sp\n", - "sp.init_printing(use_latex=True)\n", - "from sympy.matrices import zeros\n", - "tau_m, tau_s, C, h = sp.symbols('tau_m, tau_s, C, h')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For alpha-shaped currents we have:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "A = sp.Matrix([[-1/tau_s,0,0],[1,-1/tau_s,0],[0,1/C,-1/tau_m]])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Non-singular case ($\\tau_m\\neq \\tau_s$) \n", - "The propagator is: " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}e^{- \\frac{h}{\\tau_{s}}} & 0 & 0\\\\h e^{- \\frac{h}{\\tau_{s}}} & e^{- \\frac{h}{\\tau_{s}}} & 0\\\\\\frac{\\tau_{m} \\tau_{s} \\left(- h \\left(\\tau_{m} - \\tau_{s}\\right) e^{\\frac{h \\left(\\tau_{m} + \\tau_{s}\\right)}{\\tau_{m} \\tau_{s}}} + \\tau_{m} \\tau_{s} e^{\\frac{2 h}{\\tau_{s}}} - \\tau_{m} \\tau_{s} e^{\\frac{h \\left(\\tau_{m} + \\tau_{s}\\right)}{\\tau_{m} \\tau_{s}}}\\right) e^{- \\frac{h \\left(2 \\tau_{m} + \\tau_{s}\\right)}{\\tau_{m} \\tau_{s}}}}{C \\left(\\tau_{m} - \\tau_{s}\\right)^{2}} & \\frac{\\tau_{m} \\tau_{s} \\left(- e^{\\frac{h}{\\tau_{m}}} + e^{\\frac{h}{\\tau_{s}}}\\right) e^{- \\frac{h \\left(\\tau_{m} + \\tau_{s}\\right)}{\\tau_{m} \\tau_{s}}}}{C \\left(\\tau_{m} - \\tau_{s}\\right)} & e^{- \\frac{h}{\\tau_{m}}}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ -h \n", - "⎢ ─── \n", - "⎢ τₛ \n", - "⎢ ℯ \n", - "⎢ \n", - "⎢ -h \n", - "⎢ ─── \n", - "⎢ τₛ \n", - "⎢ h⋅ℯ \n", - "⎢ \n", - "⎢ ⎛ h⋅(τₘ + τₛ) 2⋅h h⋅(τₘ + τₛ)⎞ -h⋅(2⋅τ\n", - "⎢ ⎜ ─────────── ─── ───────────⎟ ───────\n", - "⎢ ⎜ τₘ⋅τₛ τₛ τₘ⋅τₛ ⎟ τₘ\n", - "⎢τₘ⋅τₛ⋅⎝- h⋅(τₘ - τₛ)⋅ℯ + τₘ⋅τₛ⋅ℯ - τₘ⋅τₛ⋅ℯ ⎠⋅ℯ \n", - "⎢─────────────────────────────────────────────────────────────────────────────\n", - "⎢ 2 \n", - "⎣ C⋅(τₘ - τₛ) \n", - "\n", - " ⎤\n", - " ⎥\n", - " ⎥\n", - " 0 0 ⎥\n", - " ⎥\n", - " -h ⎥\n", - " ─── ⎥\n", - " τₛ ⎥\n", - " ℯ 0 ⎥\n", - " ⎥\n", - "ₘ + τₛ) ⎛ h h ⎞ -h⋅(τₘ + τₛ) ⎥\n", - "──────── ⎜ ── ──⎟ ───────────── -h ⎥\n", - "⋅τₛ ⎜ τₘ τₛ⎟ τₘ⋅τₛ ───⎥\n", - " τₘ⋅τₛ⋅⎝- ℯ + ℯ ⎠⋅ℯ τₘ⎥\n", - "──────── ────────────────────────────────── ℯ ⎥\n", - " C⋅(τₘ - τₛ) ⎥\n", - " ⎦" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "PA = sp.simplify(sp.exp(A*h))\n", - "PA" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that the entry in the third line and the second column $A_{32}$ would also appear in the propagator matrix in case of an exponentially shaped current" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Singular case ($\\tau_m = \\tau_s$) \n", - "We have" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}- \\frac{1}{\\tau_{m}} & 0 & 0\\\\1 & - \\frac{1}{\\tau_{m}} & 0\\\\0 & \\frac{1}{C} & - \\frac{1}{\\tau_{m}}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡-1 ⎤\n", - "⎢─── 0 0 ⎥\n", - "⎢ τₘ ⎥\n", - "⎢ ⎥\n", - "⎢ -1 ⎥\n", - "⎢ 1 ─── 0 ⎥\n", - "⎢ τₘ ⎥\n", - "⎢ ⎥\n", - "⎢ 1 -1 ⎥\n", - "⎢ 0 ─ ───⎥\n", - "⎣ C τₘ⎦" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "As = sp.Matrix([[-1/tau_m,0,0],[1,-1/tau_m,0],[0,1/C,-1/tau_m]])\n", - "As" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The propagator is" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}e^{- \\frac{h}{\\tau_{m}}} & 0 & 0\\\\h e^{- \\frac{h}{\\tau_{m}}} & e^{- \\frac{h}{\\tau_{m}}} & 0\\\\\\frac{h^{2} e^{- \\frac{h}{\\tau_{m}}}}{2 C} & \\frac{h e^{- \\frac{h}{\\tau_{m}}}}{C} & e^{- \\frac{h}{\\tau_{m}}}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ -h ⎤\n", - "⎢ ─── ⎥\n", - "⎢ τₘ ⎥\n", - "⎢ ℯ 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢ -h -h ⎥\n", - "⎢ ─── ─── ⎥\n", - "⎢ τₘ τₘ ⎥\n", - "⎢h⋅ℯ ℯ 0 ⎥\n", - "⎢ ⎥\n", - "⎢ -h -h ⎥\n", - "⎢ ─── ─── -h ⎥\n", - "⎢ 2 τₘ τₘ ───⎥\n", - "⎢h ⋅ℯ h⋅ℯ τₘ⎥\n", - "⎢─────── ────── ℯ ⎥\n", - "⎣ 2⋅C C ⎦" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "PAs = sp.simplify(sp.exp(As*h))\n", - "PAs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Numeric stability of propagator elements\n", - "For the lines $\\tau_s\\rightarrow\\tau_m$ the entry $PA_{32}$ becomes numerically unstable, since denominator and enumerator go to zero.\n", - "\n", - "**1.** We show that $PAs_{32}$ is the limit of $PA_{32}(\\tau_s)$ for $\\tau_s\\rightarrow\\tau_m$.:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF0AAAAaCAYAAADVLFAXAAAABHNCSVQICAgIfAhkiAAABMNJREFUaIHt2VuIVlUUB/CfmjKa0kOWSZYllVmmjlJa2J2kLBnH7j2oFD0kJBJdqB6yh+iCkUpFSERmVFTeMruYRUhlNxXtImVm9GKpPXTVSrOHtQ/f6cz5ZubT0Wlg/nBY395n7b3XXmfd9v66zJw5UycOLrq2twCtwIN4vb2FaEt0BKWPwPpW8D2JRw6wLG2CjqD04VpWeldchqUHXpz9R5nSb8FeXHeQZSnDUeiHv/EGfsdmXFDgG43ueC+1l4g9lD2TD7jULaBM6SMTXXswBamC+kSnY5aw+i/wcIGvAcuxO7VvQH8ch39wZWr3x/P7IU8/7MHckncn4n6swXZhKNuxEtPQK2M8pGTwSGFRX++HcG2FEfgFV2Nr6luI+wp8Dbg71/4p0XphWKuwrQ3kaUjzLc71dcG9uAM98AFexs8YiHG4ENfibJoq/VAMxmphIW2NmbinBZ7z8W76PQKvqCgcBuGbXPskYdFvlsw1DD9oG4VDo/igq3J9T2EqvhQhuZh/eoqQfULWUQwvI1LfWpyCZ5PQv4kvOLqKMJeLsm4H/sIm3IVuBb5HMaSF5+OCPKsLc9RjXa7dgLeFdxYxTHkSXobZ+DDJOlpY73e4tcoeDxO5ZJkIMYQyp2IjxlRZa6fwzGlZR9HSRyU6EJ+mzTyDUzFeWN0J+DXxdRMf5hphfS/hT1ySFhqMKbn5d6SnNeiV1lpX6K8X7puhAU9XmWMQvirpHyqUNwPzRI4Yj74iN8wqGXOpCB+LUru/2ONuXKWik2rYmf0oWnqWRMdgLCbg9rTgIhwprC/DHKHwB4SV3pQ2MlR4xmThMfuC4YluyPUdjgEqH+IIYaXLqszRVRjQAJW99km/56X2LjwmcscuEYvL0Ci86a3UnoE6LMDnrdlQXqg8MqVP1bR62ZhoXaKjhcssxZ0qlQORuefn+PYFw4Xr58NGvfCkTJYJ+AQ/VpljThqzRZSUhEHkQ1i+PVS5AutwsQihu1LfxEQXtLyV/yIfXuqEtX6r/Ng9KNHNid4sMvcfIkEWMTTRLrUKlfBEevJYqfLRidCypJk53hGWXpQr7z3Hiz0TOeCzknnGobdK1dJbJPC9+KiZ9UuRV/rw1F5RhXekcL0tOUGIUqg5fF+rUDXgfbXX3aeJXEXE5R+E8rJ380vGNIoCYXlqH5HoL8LoakJe6VkSXVPC10cU/6uSgHVp4VU4t9ZF2xAP7cOY6bnfW3Fmrj1FU3QTYewdlXifhbye6f2eknFVkY/pWTwvU3p2yMjeZSGjby2LdVCcIxJ4/kC0TZSXPXBeC+ObnPqLSv9LeSLJvCBLrjtFXDwFk6osNlbTOr0jYpI4KBYv02Yn+jhOLhnXRZTOLxRfZOGlh0gw60XlUURZ6LlNxLiFIsFtEB/x6MTfHcc2t5sOgomi/C1WSHNF4r1eJN8V4urkbxwjjG4AnitOmCn9NKGkapdco8SpdFOubwXOEncOY4Wb/Szi5Eq8WMPG/q84XSiu7J5+r7hYW4gbcQYuEnraKk7Sy/FqcWCm9DWaL+2GVOn/BFe0LHuHRWOii5vheS09rUZH+BOjPdEoQu6WlhhrQdnVbicqqObh+4VOS28HdCq9HdCp9HZAp9LbAf8CUHr5FKFsEGIAAAAASUVORK5CYII=\n", - "text/latex": [ - "$\\displaystyle \\frac{h e^{- \\frac{h}{\\tau_{m}}}}{C}$" - ], - "text/plain": [ - " -h \n", - " ───\n", - " τₘ\n", - "h⋅ℯ \n", - "──────\n", - " C " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "PA_32 = PA.row(2).col(1)[0]\n", - "sp.limit(PA_32, tau_s, tau_m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**2.** The Taylor-series up to the second order of the function $PA_{32}(\\tau_s)$ is:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\frac{h e^{- \\frac{h}{\\tau_{m}}}}{C} + \\frac{h^{2} \\left(- \\tau_{m} + \\tau_{s}\\right) e^{- \\frac{h}{\\tau_{m}}}}{2 C \\tau_{m}^{2}} + O\\left(\\left(- \\tau_{m} + \\tau_{s}\\right)^{2}; \\tau_{s}\\rightarrow \\tau_{m}\\right)$" - ], - "text/plain": [ - " -h -h \n", - " ─── ─── \n", - " τₘ 2 τₘ \n", - "h⋅ℯ h ⋅(-τₘ + τₛ)⋅ℯ ⎛ 2 ⎞\n", - "────── + ────────────────── + O⎝(-τₘ + τₛ) ; τₛ → τₘ⎠\n", - " C 2 \n", - " 2⋅C⋅τₘ " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "PA_32_series = PA_32.series(x=tau_s,x0=tau_m,n=2)\n", - "PA_32_series " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Therefore we have \n", - " \n", - "$T(PA_{32}(\\tau_s,\\tau_m))=PAs_{32}+PA_{32}^{lin}+O(2)$ where $PA_{32}^{lin}=h^2(-\\tau_m + \\tau_s)*exp(-h/\\tau_m)/(2C\\tau_m^2)$\n", - " \n", - "**3.** We define\n", - "\n", - "$dev:=|PA_{32}-PAs_{32}|$\n", - " \n", - "We also define $PA_{32}^{real}$ which is the correct value of P32 without misscalculation (instability).\n", - " \n", - "In the following we assume $0<|\\tau_s-\\tau_m|<0.1$. We consider two different cases\n", - " \n", - "**a)** When $dev \\geq 2|PA_{32}^{lin}|$ we do not trust the numeric evaluation of $PA_{32}$, since it strongly deviates from the first order correction. In this case the error we make is\n", - " \n", - "$|PAs_{32}-PA_{32}^{real}|\\approx |P_{32}^{lin}|$\n", - " \n", - "**b)** When $dev \\le |2PA_{32}^{lin}|$ we trust the numeric evaluation of $PA_{32}$. In this case the maximal error occurs when $dev\\approx 2 PA_{32}^{lin}$ due to numeric instabilities. The order of the error is again\n", - "\n", - "$|PAs_{32}-PA_{32}^{real}|\\approx |P_{32}^{lin}|$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The entry $A_{31}$ is numerically unstable, too and we treat it analogously." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tests and examples\n", - "We will now show that the stability criterion explained above leads to a reasonable behavior for $\\tau_s\\rightarrow\\tau_m$" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "import nest\n", - "import numpy as np\n", - "import pylab as pl" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Neuron, simulation and plotting parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "<Figure size 432x288 with 0 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "taum = 10.\n", - "C_m = 250.\n", - "# array of distances between tau_m and tau_ex\n", - "epsilon_array = np.hstack(([0.],10.**(np.arange(-6.,1.,1.))))[::-1]\n", - "dt = 0.1\n", - "fig = pl.figure(1)\n", - "NUM_COLORS = len(epsilon_array)\n", - "cmap = pl.get_cmap('gist_ncar')\n", - "maxVs = []" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Loop through epsilon array" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'voltage V (mV)')" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "for i,epsilon in enumerate(epsilon_array):\n", - " nest.ResetKernel() # reset simulation kernel \n", - " nest.resolution = dt\n", - "\n", - " # Current based alpha neuron \n", - " neuron = nest.Create('iaf_psc_alpha') \n", - " neuron.set(C_m=C_m, tau_m=taum, t_ref=0., V_reset=-70., V_th=1e32,\n", - " tau_syn_ex=taum+epsilon, tau_syn_in=taum+epsilon, I_e=0.)\n", - " \n", - " # create a spike generator\n", - " spikegenerator_ex = nest.Create('spike_generator')\n", - " spikegenerator_ex.spike_times = [50.]\n", - " \n", - " # create a voltmeter\n", - " vm = nest.Create('voltmeter', params={'interval':dt})\n", - "\n", - " ## connect spike generator and voltmeter to the neuron\n", - " nest.Connect(spikegenerator_ex, neuron, 'all_to_all', {'weight':100.})\n", - " nest.Connect(vm, neuron)\n", - "\n", - " # run simulation for 200ms\n", - " nest.Simulate(200.) \n", - "\n", - " # read out recording time and voltage from voltmeter\n", - " times = vm.get('events','times')\n", - " voltage = vm.get('events', 'V_m')\n", - " \n", - " # store maximum value of voltage trace in array\n", - " maxVs.append(np.max(voltage))\n", - "\n", - " # plot voltage trace\n", - " if epsilon == 0.:\n", - " pl.plot(times,voltage,'--',color='black',label='singular')\n", - " else:\n", - " pl.plot(times,voltage,color = cmap(1.*i/NUM_COLORS),label=str(epsilon))\n", - "\n", - "pl.legend()\n", - "pl.xlabel('time t (ms)')\n", - "pl.ylabel('voltage V (mV)')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Show maximum values of voltage traces" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "<matplotlib.legend.Legend at 0x7f68764a5750>" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAAEKCAYAAADenhiQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deZRU9Zn/8ffDJpsCgiIKCCSgBmgabBRFDAjuJiQxLrihxjGD0VHPT1F/uGTyO06cOZqYGY2GuOHEiBsCjlWiEBEYRTbZ3KO22oqAREFAEOjn98e9hU3bVV3dXbdvVfXndU6dqrpL3efbRffDd7nfr7k7IiIiudQs7gBERKT4KLmIiEjOKbmIiEjOKbmIiEjOKbmIiEjOKbmIiEjOtYg7gHzQpUsX79WrV9xhiIgUlKVLl37u7vvVtE/JBejVqxdLliyJOwwRkYJiZh+m26dmMRERyTklFxERyTklFxERyTn1uaSxY8cOKioq2LZtW9yhFITWrVvTvXt3WrZsGXcoIpIHlFzSqKioYO+996ZXr16YWdzh5DV3Z8OGDVRUVNC7d++4wxGRPKBmsTS2bdtG586dlViyYGZ07txZtTwR2U3JJQMlluzpZyVSgKZPh/LySD5ayaUJKS8vp3v37lRWVu6xvbS0lEWLFsUUlYjEYvNmOOssuOuuSD5eyaUJ6dWrFz169GD+/Pm7t7311lt89dVXHHHEETFGJiKN7m9/g2++gVNOieTjlVzyWHl5OYceeiiXXHIJAwYM4Nxzz2X27NkMHz6cvn37smjRIhYtWsTRRx/N4MGDOfroo3n77bcB+N3vfsfFF18MwKpVqxgwYABbt25l3LhxTJ06dfc1pk6dyrhx42Ipn4jEKJmE9u3hmGMi+XjTMsdQVlbm1ad/efPNNznssMOCN1ddBcuX5/aipaVw550ZDykvL+f73/8+r732Gv3792fo0KEMGjSI+++/n5kzZ/Lggw/y8MMP07ZtW1q0aMHs2bO55557eOqpp6isrGTkyJFcffXV3HrrrfzhD39g+PDhfPbZZwwePJiPP/6YFi1acNhhh/HEE08wYMCABhdpj5+ZiOQvd+jVC4YMgaefrvfHmNlSdy+raZ+GIue53r17M3DgQAD69+/P6NGjMTMGDhxIeXk5GzduZPz48bz77ruYGTt27ACgWbNmPPTQQ5SUlPDLX/6S4cOHA3DAAQfQv39/5syZQ9euXWnZsmVOEouIFJA334SPPoJJkyK7hJJLNmqpYURpr7322v26WbNmu983a9aMnTt3ctNNNzFq1CiefvppysvLGTly5O7j3333Xdq3b8+nn366x2emmsa6du2qJjGRpiiZDJ5PPjmyS6jPpcBt3LiRgw46CICHHnpoj+1XXnkl8+bNY8OGDTz55JO7951++ukkEgkee+wxzj777MYOWUTilkjAgAHQo0dkl1ByKXATJ07khhtuYPjw4ezatWv39quvvprLLruMfv36cf/993P99dezbt06ADp27MiwYcPo2rWr7qgXaWq++grmz4+01gLq0Aey6NCXrOhnJlIApk+Hn/4UXnwRqjSj10emDn3VXEREmpJkEvbeG8JBPlFRchERaSrcg/6W44+HiGcwV3IREWkqXn8dKioi728BJRcRkaYjkQielVxERCRnkkkoKYHw9oUoKbmIiDQFmzbBggWRTVRZnZJLgbnkkkt44403cv65I0eOpPpwbBEpIrNnw86djdIkBpr+peDcd999cYcAwK5du2jevHncYYhIthIJ6NABjjqqUS6nmkse27JlC6eeeiqDBg1iwIABPPbYY3vUMNq3b8+kSZMYNGgQw4YNY+3atQC89957DBs2jKFDh3LzzTfTvn17AObOnctpp522+/Mvv/zyPaaMSZkwYQJlZWX079+fW265Zff2Xr168Zvf/IZjjjmGJ554IsKSi0hOuQf9LY0wBDlFNZcsXHXVVSzP8ZT7paWl3FnLhJjPPfccBx54IM8++ywQzBd2zz337N6/ZcsWhg0bxq233srEiRP585//zI033siVV17JlVdeybhx47j33nvrHNutt97Kvvvuy65duxg9ejQrV66kpKQEgNatW7NgwYI6f6aIxGjlSvj000brbwHVXPLawIEDmT17Ntdddx3z58+nQ4cOe+xv1arV7prI4YcfTnm4FvYrr7zCGWecAcA555xT5+s+/vjjDBkyhMGDB/P666/v0cdz1lln1bM0IhKb1CzIJ53UaJdUzSULtdUwotKvXz+WLl1KIpHghhtu4IQTTthjf8uWLTEzAJo3b87OnTszfl6LFi2orKzc/X7btm3fOeaDDz7g9ttvZ/HixXTq1IkLL7xwj+PatWvXkCKJSBwSCRg8GLp1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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig = pl.figure(2)\n", - "pl.semilogx(epsilon_array,maxVs,color='red',label='maxV')\n", - "#show singular solution as horizontal line\n", - "pl.semilogx(epsilon_array,np.ones(len(epsilon_array))*maxVs[-1],color='black',label='singular')\n", - "pl.xlabel('epsilon')\n", - "pl.ylabel('max(voltage V) (mV)')\n", - "pl.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "pl.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The maximum of the voltage traces show that the non-singular case nicely converges to the singular one and no numeric instabilities occur. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "-----------------------------\n", - "### License\n", - "\n", - "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", - "\n", - "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", - "\n", - "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/doc/htmldoc/neurons/model_details/aeif_models_implementation.ipynb b/doc/htmldoc/neurons/model_details/aeif_models_implementation.ipynb deleted file mode 100644 index 8e62614b0d..0000000000 --- a/doc/htmldoc/neurons/model_details/aeif_models_implementation.ipynb +++ /dev/null @@ -1,863 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# NEST implementation of the `aeif` models\n", - "\n", - "#### Hans Ekkehard Plesser and Tanguy Fardet, 2016-09-09\n", - "\n", - "This notebook provides a reference solution for the _Adaptive Exponential Integrate and Fire_\n", - "(AEIF) neuronal model and compares it with several numerical implementations using simpler solvers.\n", - "In particular this justifies the change of implementation in September 2016 to make the simulation\n", - "closer to the reference solution.\n", - "\n", - "## Position of the problem\n", - "\n", - "### Basics\n", - "The equations governing the evolution of the AEIF model are\n", - "\n", - "$$\\left\\lbrace\\begin{array}{rcl}\n", - " C_m\\dot{V} &=& -g_L(V-E_L) + g_L \\Delta_T e^{\\frac{V-V_T}{\\Delta_T}} + I_e + I_s(t) -w\\\\\n", - " \\tau_s\\dot{w} &=& a(V-E_L) - w\n", - "\\end{array}\\right.$$\n", - "\n", - "when $V < V_{peak}$ (threshold/spike detection).\n", - "Once a spike occurs, we apply the reset conditions:\n", - "\n", - "$$V = V_r \\quad \\text{and} \\quad w = w + b$$\n", - "\n", - "### Divergence\n", - "In the AEIF model, the spike is generated by the exponential divergence. In practice, this means that just before threshold crossing (threshpassing), the argument of the exponential can become very large.\n", - "\n", - "This can lead to numerical overflow or numerical instabilities in the solver, all the more if $V_{peak}$ is large, or if $\\Delta_T$ is small.\n", - "\n", - "## Tested solutions\n", - "\n", - "### Old implementation (before September 2016)\n", - "The orginal solution was to bind the exponential argument to be smaller than 10 (ad hoc value to be close to the original implementation in BRIAN).\n", - "As will be shown in the notebook, this solution does not converge to the reference LSODAR solution.\n", - "\n", - "### New implementation\n", - "The new implementation does not bind the argument of the exponential, but the potential itself, since according to the theoretical model, $V$ should never get larger than $V_{peak}$.\n", - "We will show that this solution is not only closer to the reference solution in general, but also converges towards it as the timestep gets smaller.\n", - "\n", - "## Reference solution\n", - "\n", - "The reference solution is implemented using the LSODAR solver which is described and compared in the following references:\n", - "\n", - "* http://www.radford.edu/~thompson/RP/eventlocation.pdf (papers citing this one)\n", - "* http://www.sciencedirect.com/science/article/pii/S0377042712000684\n", - "* http://www.radford.edu/~thompson/RP/rootfinding.pdf\n", - "* https://computation.llnl.gov/casc/nsde/pubs/u88007.pdf\n", - "* http://www.cs.ucsb.edu/~cse/Files/SCE000136.pdf\n", - "* http://www.sciencedirect.com/science/article/pii/0377042789903348\n", - "* http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.455.2976&rep=rep1&type=pdf\n", - "* https://theses.lib.vt.edu/theses/available/etd-12092002-105032/unrestricted/etd.pdf" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Technical details and requirements\n", - "\n", - "### Implementation of the functions\n", - "\n", - "* The old and new implementations are reproduced using Scipy and are called by the ``scipy_aeif`` function\n", - "* The NEST implementations are not shown here, but keep in mind that for a given time resolution, they are closer to the reference result than the scipy implementation since the GSL implementation uses a RK45 adaptive solver.\n", - "* The reference solution using LSODAR, called ``reference_aeif``, is implemented through the [assimulo](http://www.jmodelica.org/assimulo) package.\n", - "\n", - "### Requirements\n", - "\n", - "To run this notebook, you need:\n", - "\n", - "* [numpy](http://www.numpy.org/) and [scipy](http://www.scipy.org/)\n", - "* [assimulo](http://www.jmodelica.org/assimulo)\n", - "* [matplotlib](http://matplotlib.org/)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Install assimulo package in the current Jupyter kernel\n", - "import sys\n", - "!{sys.executable} -m pip install assimulo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from scipy.integrate import odeint\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "plt.rcParams['figure.figsize'] = (15, 6)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Scipy functions mimicking the NEST code\n", - "### Right hand side functions" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def rhs_aeif_new(y, _, p):\n", - " '''\n", - " New implementation bounding V < V_peak\n", - " \n", - " Parameters\n", - " ----------\n", - " y : list\n", - " Vector containing the state variables [V, w]\n", - " _ : unused var\n", - " p : Params instance\n", - " Object containing the neuronal parameters.\n", - " \n", - " Returns\n", - " -------\n", - " dv : double\n", - " Derivative of V\n", - " dw : double\n", - " Derivative of w\n", - " '''\n", - " v = min(y[0], p.Vpeak)\n", - " w = y[1]\n", - " Ispike = 0.\n", - " \n", - " if p.DeltaT != 0.:\n", - " Ispike = p.gL * p.DeltaT * np.exp((v-p.vT)/p.DeltaT)\n", - " \n", - " dv = (-p.gL*(v-p.EL) + Ispike - w + p.Ie)/p.Cm\n", - " dw = (p.a * (v-p.EL) - w) / p.tau_w\n", - " \n", - " return dv, dw\n", - "\n", - "\n", - "def rhs_aeif_old(y, _, p):\n", - " '''\n", - " Old implementation bounding the argument of the\n", - " exponential function (e_arg < 10.).\n", - " \n", - " Parameters\n", - " ----------\n", - " y : list\n", - " Vector containing the state variables [V, w]\n", - " _ : unused var\n", - " p : Params instance\n", - " Object containing the neuronal parameters.\n", - " \n", - " Returns\n", - " -------\n", - " dv : double\n", - " Derivative of V\n", - " dw : double\n", - " Derivative of w\n", - " '''\n", - " v = y[0]\n", - " w = y[1]\n", - " Ispike = 0.\n", - " \n", - " if p.DeltaT != 0.:\n", - " e_arg = min((v-p.vT)/p.DeltaT, 10.)\n", - " Ispike = p.gL * p.DeltaT * np.exp(e_arg)\n", - " \n", - " dv = (-p.gL*(v-p.EL) + Ispike - w + p.Ie)/p.Cm\n", - " dw = (p.a * (v-p.EL) - w) / p.tau_w\n", - " \n", - " return dv, dw" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Complete model" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def scipy_aeif(p, f, simtime, dt):\n", - " '''\n", - " Complete aeif model using scipy `odeint` solver.\n", - " \n", - " Parameters\n", - " ----------\n", - " p : Params instance\n", - " Object containing the neuronal parameters.\n", - " f : function\n", - " Right-hand side function (either `rhs_aeif_old`\n", - " or `rhs_aeif_new`)\n", - " simtime : double\n", - " Duration of the simulation (will run between\n", - " 0 and tmax)\n", - " dt : double\n", - " Time increment.\n", - " \n", - " Returns\n", - " -------\n", - " t : list\n", - " Times at which the neuronal state was evaluated.\n", - " y : list\n", - " State values associated to the times in `t`\n", - " s : list\n", - " Spike times.\n", - " vs : list\n", - " Values of `V` just before the spike.\n", - " ws : list\n", - " Values of `w` just before the spike\n", - " fos : list\n", - " List of dictionaries containing additional output\n", - " information from `odeint`\n", - " '''\n", - " t = np.arange(0, simtime, dt) # time axis\n", - " n = len(t) \n", - " y = np.zeros((n, 2)) # V, w\n", - " y[0, 0] = p.EL # Initial: (V_0, w_0) = (E_L, 5.)\n", - " y[0, 1] = 5. # Initial: (V_0, w_0) = (E_L, 5.)\n", - " s = [] # spike times \n", - " vs = [] # membrane potential at spike before reset\n", - " ws = [] # w at spike before step\n", - " fos = [] # full output dict from odeint()\n", - " \n", - " # imitate NEST: update time-step by time-step\n", - " for k in range(1, n):\n", - " \n", - " # solve ODE from t_k-1 to t_k\n", - " d, fo = odeint(f, y[k-1, :], t[k-1:k+1], (p, ), full_output=True)\n", - " y[k, :] = d[1, :]\n", - " fos.append(fo)\n", - " \n", - " # check for threshold crossing\n", - " if y[k, 0] >= p.Vpeak:\n", - " s.append(t[k])\n", - " vs.append(y[k, 0])\n", - " ws.append(y[k, 1])\n", - " \n", - " y[k, 0] = p.Vreset # reset\n", - " y[k, 1] += p.b # step\n", - " \n", - " return t, y, s, vs, ws, fos" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## LSODAR reference solution\n", - "### Setting assimulo class" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from assimulo.solvers import LSODAR\n", - "from assimulo.problem import Explicit_Problem\n", - "\n", - "class Extended_Problem(Explicit_Problem):\n", - "\n", - " # need variables here for access\n", - " sw0 = [ False ]\n", - " ts_spikes = []\n", - " ws_spikes = []\n", - " Vs_spikes = []\n", - " \n", - " def __init__(self, p):\n", - " self.p = p\n", - " self.y0 = [self.p.EL, 5.] # V, w\n", - " # reset variables\n", - " self.ts_spikes = []\n", - " self.ws_spikes = []\n", - " self.Vs_spikes = []\n", - "\n", - " #The right-hand-side function (rhs)\n", - "\n", - " def rhs(self, t, y, sw):\n", - " \"\"\"\n", - " This is the function we are trying to simulate (aeif model).\n", - " \"\"\"\n", - " V, w = y[0], y[1]\n", - " Ispike = 0.\n", - " \n", - " if self.p.DeltaT != 0.:\n", - " Ispike = self.p.gL * self.p.DeltaT * np.exp((V-self.p.vT)/self.p.DeltaT)\n", - " dotV = ( -self.p.gL*(V-self.p.EL) + Ispike + self.p.Ie - w ) / self.p.Cm\n", - " dotW = ( self.p.a*(V-self.p.EL) - w ) / self.p.tau_w\n", - " return np.array([dotV, dotW])\n", - "\n", - " # Sets a name to our function\n", - " name = 'AEIF_nosyn'\n", - "\n", - " # The event function\n", - " def state_events(self, t, y, sw):\n", - " \"\"\"\n", - " This is our function that keeps track of our events. When the sign\n", - " of any of the events has changed, we have an event.\n", - " \"\"\"\n", - " event_0 = -5 if y[0] >= self.p.Vpeak else 5 # spike\n", - " if event_0 < 0:\n", - " if not self.ts_spikes:\n", - " self.ts_spikes.append(t)\n", - " self.Vs_spikes.append(y[0])\n", - " self.ws_spikes.append(y[1])\n", - " elif self.ts_spikes and not np.isclose(t, self.ts_spikes[-1], 0.01):\n", - " self.ts_spikes.append(t)\n", - " self.Vs_spikes.append(y[0])\n", - " self.ws_spikes.append(y[1])\n", - " return np.array([event_0])\n", - "\n", - " #Responsible for handling the events.\n", - " def handle_event(self, solver, event_info):\n", - " \"\"\"\n", - " Event handling. This functions is called when Assimulo finds an event as\n", - " specified by the event functions.\n", - " \"\"\"\n", - " ev = event_info\n", - " event_info = event_info[0] # only look at the state events information.\n", - " if event_info[0] > 0:\n", - " solver.sw[0] = True\n", - " solver.y[0] = self.p.Vreset\n", - " solver.y[1] += self.p.b\n", - " else:\n", - " solver.sw[0] = False\n", - "\n", - " def initialize(self, solver):\n", - " solver.h_sol=[]\n", - " solver.nq_sol=[]\n", - "\n", - " def handle_result(self, solver, t, y):\n", - " Explicit_Problem.handle_result(self, solver, t, y)\n", - " # Extra output for algorithm analysis\n", - " if solver.report_continuously:\n", - " h, nq = solver.get_algorithm_data()\n", - " solver.h_sol.extend([h])\n", - " solver.nq_sol.extend([nq])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### LSODAR reference model" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "def reference_aeif(p, simtime):\n", - " '''\n", - " Reference aeif model using LSODAR.\n", - " \n", - " Parameters\n", - " ----------\n", - " p : Params instance\n", - " Object containing the neuronal parameters.\n", - " f : function\n", - " Right-hand side function (either `rhs_aeif_old`\n", - " or `rhs_aeif_new`)\n", - " simtime : double\n", - " Duration of the simulation (will run between\n", - " 0 and tmax)\n", - " dt : double\n", - " Time increment.\n", - " \n", - " Returns\n", - " -------\n", - " t : list\n", - " Times at which the neuronal state was evaluated.\n", - " y : list\n", - " State values associated to the times in `t`\n", - " s : list\n", - " Spike times.\n", - " vs : list\n", - " Values of `V` just before the spike.\n", - " ws : list\n", - " Values of `w` just before the spike\n", - " h : list\n", - " List of the minimal time increment at each step.\n", - " '''\n", - " #Create an instance of the problem\n", - " exp_mod = Extended_Problem(p) #Create the problem\n", - " exp_sim = LSODAR(exp_mod) #Create the solver\n", - "\n", - " exp_sim.atol=1.e-8\n", - " exp_sim.report_continuously = True\n", - " exp_sim.store_event_points = True\n", - "\n", - " exp_sim.verbosity = 30\n", - "\n", - " #Simulate\n", - " t, y = exp_sim.simulate(simtime) #Simulate 10 seconds\n", - " \n", - " return t, y, exp_mod.ts_spikes, exp_mod.Vs_spikes, exp_mod.ws_spikes, exp_sim.h_sol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set the parameters and simulate the models\n", - "### Params (chose a dictionary)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Regular spiking\n", - "aeif_param = {\n", - " 'V_reset': -58.,\n", - " 'V_peak': 0.0,\n", - " 'V_th': -50.,\n", - " 'I_e': 420.,\n", - " 'g_L': 11.,\n", - " 'tau_w': 300.,\n", - " 'E_L': -70.,\n", - " 'Delta_T': 2.,\n", - " 'a': 3.,\n", - " 'b': 0.,\n", - " 'C_m': 200.,\n", - " 'V_m': -70., #! must be equal to E_L\n", - " 'w': 5., #! must be equal to 5.\n", - " 'tau_syn_ex': 0.2\n", - "}\n", - "\n", - "# Bursting\n", - "aeif_param2 = {\n", - " 'V_reset': -46.,\n", - " 'V_peak': 0.0,\n", - " 'V_th': -50.,\n", - " 'I_e': 500.0,\n", - " 'g_L': 10.,\n", - " 'tau_w': 120.,\n", - " 'E_L': -58.,\n", - " 'Delta_T': 2.,\n", - " 'a': 2.,\n", - " 'b': 100.,\n", - " 'C_m': 200.,\n", - " 'V_m': -58., #! must be equal to E_L\n", - " 'w': 5., #! must be equal to 5.\n", - "}\n", - "\n", - "# Close to chaos (use resolution < 0.005 and simtime = 200)\n", - "aeif_param3 = {\n", - " 'V_reset': -48.,\n", - " 'V_peak': 0.0,\n", - " 'V_th': -50.,\n", - " 'I_e': 160.,\n", - " 'g_L': 12.,\n", - " 'tau_w': 130.,\n", - " 'E_L': -60.,\n", - " 'Delta_T': 2.,\n", - " 'a': -11.,\n", - " 'b': 30.,\n", - " 'C_m': 100.,\n", - " 'V_m': -60., #! must be equal to E_L\n", - " 'w': 5., #! must be equal to 5.\n", - "}\n", - "\n", - "class Params:\n", - " '''\n", - " Class giving access to the neuronal\n", - " parameters.\n", - " '''\n", - " def __init__(self):\n", - " self.params = aeif_param\n", - " self.Vpeak = aeif_param[\"V_peak\"]\n", - " self.Vreset = aeif_param[\"V_reset\"]\n", - " self.gL = aeif_param[\"g_L\"]\n", - " self.Cm = aeif_param[\"C_m\"]\n", - " self.EL = aeif_param[\"E_L\"]\n", - " self.DeltaT = aeif_param[\"Delta_T\"]\n", - " self.tau_w = aeif_param[\"tau_w\"]\n", - " self.a = aeif_param[\"a\"]\n", - " self.b = aeif_param[\"b\"]\n", - " self.vT = aeif_param[\"V_th\"]\n", - " self.Ie = aeif_param[\"I_e\"]\n", - " \n", - "p = Params()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Simulate the 3 implementations" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final Run Statistics: AEIF_nosyn \n", - "\n", - " Number of steps : 2013\n", - " Number of function evaluations : 5590\n", - " Number of Jacobian evaluations : 0\n", - " Number of state function evaluations : 2042\n", - " Number of state events : 7\n", - "\n", - "Solver options:\n", - "\n", - " Solver : LSODAR \n", - " Absolute tolerances : [1.e-08 1.e-08]\n", - " Relative tolerances : 1e-06\n", - " Starter : classical\n", - "\n", - "Simulation interval : 0.0 - 100.0 seconds.\n", - "Elapsed simulation time: 0.07648879801854491 seconds.\n" - ] - } - ], - "source": [ - "# Parameters of the simulation\n", - "simtime = 100.\n", - "resolution = 0.01\n", - "\n", - "t_old, y_old, s_old, vs_old, ws_old, fo_old = scipy_aeif(p, rhs_aeif_old, simtime, resolution)\n", - "t_new, y_new, s_new, vs_new, ws_new, fo_new = scipy_aeif(p, rhs_aeif_new, simtime, resolution)\n", - "t_ref, y_ref, s_ref, vs_ref, ws_ref, h_ref = reference_aeif(p, simtime)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot the results\n", - "### Zoom out" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6cAAAF3CAYAAABZvT12AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXhdVb3/8fc6yUlO5jlpmqQZmqRzOkMHWkoBUQZBBIGLghdREbQiFwe8F/V64SdyQREUZbBFAUVQZJapLdAylKYTbZrOSZt5npMzr98fLVwqLRRps9Pk83qePD37nLVPvt/zEJpP19prG2stIiIiIiIiIk5yOV2AiIiIiIiIiMKpiIiIiIiIOE7hVERERERERByncCoiIiIiIiKOUzgVERERERERxymcioiIiIiIiOMcD6fGmAhjzAZjzDMHjguNMWuMMTuNMX8xxkQ5XaOIiIiIiMjxzBiTZ4xZaYypNMZUGGO+feD5VGPMSwfy10vGmBSnanQ8nALfBirfd/xz4JfW2hKgA/iKI1WJiIiIiIgMH0HgP6y1E4A5wDXGmInAD4DlB/LX8gPHjnA0nBpjcoGzgPsPHBtgMfDXA0P+AJznTHUiIiIiIiLDg7W2wVq7/sDjHvZPEOYA57I/d4HD+cvpmdM7gO8B4QPHaUCntTZ44LiW/R+YiIiIiIiIHAXGmAJgOrAGyLLWNsD+AAtkOlVXpFPf2BhzNtBsrV1njFn07tOHGGoPc/7XgK8dOJwZGxt79IsUERERERE5DvT391tg/fueutdae+8/jzPGxAN/A6611nbvX7w6NDgWToH5wGeNMWcCHiCR/TOpycaYyAOzp7lA/aFOPvBB3wsQFxdn+/r6BqdqERERERGRIcYYM2CtnfURY9zsD6YPW2sfP/B0kzEm21rbYIzJBpqPda2H49iyXmvtDdbaXGttAXAxsMJaeymwErjgwLDLgScdKlFERERERGRYOLC/z++BSmvtL9730lPsz13gcP5y+prTQ/k+cJ0xZhf7r0H9vcP1iIiIiIiIHO/mA18CFhtjNh74OhO4BTjdGLMTOP3AsSOMtYe8pPO4omW9IiIiIiIyEllr8Tf48eR4+q21cU7X80k4ec3pMRUIBKitrcXr9TpdiuM8Hg+5ubm43W6nSxERERERkX+BtZbON5roc7XR6B6gav1WkusfJCK9AdfoQ27Tc9wZtuG0traWhIQECgoKGEo7UA02ay1tbW3U1tZSWFjodDkiIiIiInIIYX+YgeoB+vd00Lapl+aNzXhzl+EftZue0duJiekkOdlP9TOT+ffbtxBhDM88nExPWzx9W/OADqdb+MSG7bLeyspKxo8fP6KD6bustWzbto0JEyY4XYqIiIiIyIjlb/IT6PDjLoqipqaGvcuWEQpvwxXfiCujCZPdAFsnwvdvxYcP10OXEYzupaY9hNebSnxfCbjLSC0+leLiYoqKinj3lprGGC3rHcoUTPfT5yAiIiIicmyFvCF8NT7697bTtzNE8+Zmus0/CKZton3CNoxpJi0yiO2O59MT67DW8sQvC0iYWMtAYxJ9rYn015fi9ecQ/ulWCqYXkF/8MoWFpURHRzvd3qAY1uF0OGppaeHss8/G7/dz5513smDBAqdLEhEREREZtt5daWqMobuyhbb124hYkE99fT2dzzxPhF2HK7GFiLRWyGqCiBBc/SxhLIEbXiZ64evQEqajw0Nvbw62L5cf/egrFBQUkJifxpgx48lfXEhkpKKZPoEhKBQKERERccjXli9fzvjx4/nDH/4wyFWJiIiIiAwvwe4g3n1efM19DLTU0dG4k+62KrxvTsFf48I1djXuxc/TOWYXMfF9xMSEIAc+PzGK9j4/t185nrJzq+lrSqC/Ix5vfTEBUum+fi2jJueQP/ZG8vNLWXhK7mF/v5f/o3B6jNx66614PB6WLFnCd77zHTZt2sSKFStYvnw5y5Yt46GHHjpofEFBAVdccQUvvvgi3/zmN5k9ezbXXHMNLS0txMbGct999+H1evne977HwMAA06ZN48033yQmJsahDkVEREREho6QN0SwPUiwI0igPUCgLUBPfQPtnWvxT2mmN7oG/95mPNUDrOsrZltXNzNDnUy+8GVI6IUs9n8BrQ/+jMbqGNxjKsiOq6eh1o03nEtUaDQxJpdbbl/A6NwisrOzyM0dQ0ZGhi6lOwpGRDi99tpr2bhx41F9z2nTpnHHHXcc9vWFCxdy++23s2TJEsrLy/H5fAQCAVavXn3Ypbgej4fVq1cDcOqpp/K73/2OkpIS1qxZw9VXX82KFSv46U9/Snl5Ob/+9a+Paj8iIiIiIkNNOBCmu6KBUFwjfdFNtFfvpfvZOvxji2lPjiW4pZos1wu4Ynsxcb2Q0LP/6+ffhzVzYM6b8LMfAhAFRI6FYEYsK366gcrWSOzk0cRuHEvQxmMjU4lOHk1iVhE5D87ixNwisrOvGjHXew4FIyKcOmHmzJmsW7eOnp4eoqOjmTFjBuXl5axatYo777zzkOdcdNFFAPT29vLGG29w4YUXvveaz+cblLpFRERERJwQ8oZoKa9kx1vP0v56JMFX80lKacf9+69D5/sGfgae+UURv3p6D/OKsvjhT734eqPw90cTqI8mGMylfmwlgSIvyWNdZOy9jqS0fFJTx5KZWUxW1miePzdeM51D0IgIpx82w3msuN1uCgoKWLZsGfPmzaOsrIyVK1eye/fuw97SJS5u/87P4XCY5OTkoz7bKyIiIiIyFNiwxef3sWXdJtpevANX4k4iC6owae0wC2KqPsuO/tPYO6qXrFc/zUBcMhGpKcTGZhEfn83nv1vEV3+WTUpKCsnJycTExChsDgMjIpw6ZeHChdx2220sXbqUKVOmcN111zFz5syP/MFJTEyksLCQxx57jAsvvBBrLe+88w5Tp04dpMpFRERERD65cDBMz7ZmaqtWUxe9ira2clJbu+isTeDS29cSCoV46dFkAr0e2ivH4A8uJLnwBKZ+//Oc8ZvSA+9yg6M9yOBROD2GFixYwM0338zcuXOJi4vD4/Ec8a1fHn74Yb7xjW9w0003EQgEuPjiiw8ZTq+88kquuuoqZs2adbTLFxERERE5ItZaBmp7aVi3hrptq+lvaMX759OIb4sn8rdXQ+lOooDkZOjtyaSXFH7wgx8wdepU8somUlw8XrvZCubd+/Ycz+Li4mxfX99Bz1VWVh52+exIpM9DRERERI6Gvuo2at5eQ/OoeLZu3Ur6juWkTi7HlVsHUQEAwp0JrP/8jfRm9pH12V0klSaRM+skysrOICUl1eEOhidjTL+1Ns7pOj4JzZyKiIiIiMhB/G1+erf20rCmgcaalwimLKez5B2i45pITvZBJpx7hptub4CfXjyFSTnR9O+dC9GFJI2dRum00zjZP0GzofKxKJyKiIiIiIxA766g3P3q29Suegafbw9E1xGZ3khEXi1cfTfUjMGetxP3p1/CV2doaEkgyj+DJNdk/vLXs5g4ZTq5ubm4XC6Hu5HhQOFURERERGQYstYSaAnQu6OV+h2v0ZGyhTazmVD7PlL8/Tzx1CiWrVrPpVPzufimCqLChkBLMj1NKfStm0jLKRUkFAconPNZJkz+L0759CjtiCvHlMKpiIiIiMhxLNDjpfrZ12jZu5m+3j2EqcMV2wzPfhr36wuhdDvccxUACSFo7XfR2VVAdKqHK664gvFFefh7kxg74STyF5YQGamIIM7Qf3kiIiIiIkOQDVn8TX68tQO0Vq2lnQrak7fR072TpN0DVFdn8Lu1tYRb2/jlH/bCKHADYZ8bX2Mye7M20DA5REypYfSGq8konsbYcfNYuLAUt9vN+U43KPJPFE5FRERERAZZ2B8m1BvCneqmt7eXinv+QF/XboKhBohuISKhHdeWSZilXwEsPH82RPuJBmwC+LLTad/tIzMzk8ITTmDfWh+JOSWMLp5B0eSZpKWlYS7XElw5viicDnGLFi3itttu+8B9TB944AHKy8v59a9/7VBlIiIiIvJ+1lqCHUF8DQP0NzfSXdtE744Eeqp78KY/QShjN11j9wAtpIUt/TUZXPb/aujq6uKlB0cRObMRd8gQaE+gry2Bluh4qia/THRuNKPXXkZSfj7ZRdMpLZ3OqFGjOPtyF993ummRo0jhVERERETkEEIDIQJtAYJtQbxtbXi763Gd0Etr6x7aV1Xjq+9n1+hSmpqamNm/gcTxlZiUDkjuhIgw2Dy46Y8ECGB/8QJRE7cTbg/S2elmoDuPvtZUvvSlReTm5tIeNmRSSF5+Gbnz8/F4PE63LzLoFE6PkVtvvRWPx8OSJUv4zne+w6ZNm1ixYgXLly9n2bJlPPTQQweNX758Oddffz3BYJDZs2fz29/+lujo6IPGLFu2jJ/97GdkZ2dTWlr6gddFRERE5MhZa/H7/WzatInWF58l0r8Rl7sHE9ODK64XE9sPX34AMPC9n8NnnocdB06eBO6iaL55pg9jDP975STyOg3+hjwCwYmEI5KJiB6F6659ZBRlkJl1H1lZeZyUmUlUVJSDXYsMXSMmnG5YtOEjx6SdncaY68e8N37Ul0eR/eVs/K1+Ki6oOGjs9Femf+h7LVy4kNtvv50lS5ZQXl6Oz+cjEAiwevVqFixYcNBYr9fLl7/8ZZYvX05paSmXXXYZv/3tb7n22mvfG9PQ0MCPf/xj1q1bR1JSEqeccgrTp394DSIiIiKyn7WWgX2d7OtZyc6qp/Hv3UxKQjOXfaeLuo5ubr+sjGkXbcffFYO/x4Ov14O/PZaNE5/ClRhFRlcmiasvwGQkk5icR2pqPhnZxTQ0jCU9PV073IocBfopOkZmzpzJunXr6OnpITo6mhkzZlBeXs6qVau48847Dxq7fft2CgsLKS0tBeDyyy/nN7/5zUHhdM2aNSxatIiMjAwALrroInbs2IGIiIiIHMyGLT07Wtj1xks0rnTR91YkCQXleH5wG0SESUiA7uxIuqpKuOrfP8uEeadQWlpEevooUlNTD1qddul/OtiIyAgzYsLpR810ftj4qPSoj32+2+2moKCAZcuWMW/ePMrKyli5ciW7d+9mwoQJB4211h7Re+qmxyIiIiIHs9bi8/l4Z/mrtK/5AyauCndODa7R9VBk8fzpBlp2jaM+KkTaKwsx2eMpmXUO8+efjtvt5nNONyAi7xkx4dQJCxcu5LbbbmPp0qVMmTKF6667jpkzZ34gZI4fP57q6mp27dpFcXExDz74ICeffPJBY0488US+/e1v09bWRmJiIo899hhTp04dzHZEREREHBP2hemsqGVf02vU29X0tG8kvbuLzW9lcf2fVlOSksLdf2nDX59OR10m3l2TiE6ZQP5PTuGiZxbg8VzudAsi8hEUTo+hBQsWcPPNNzN37lzi4uLweDwfuN4UwOPxsGzZMi688ML3NkS66qqrDhqTnZ3NT37yE+bOnUt2djYzZswgFAoNVisiIiIigyLUF6JjSxXVG16lo3ED3h0xhJ85iYT+GFzPnwkxIWKBcBh6OscQjHVzww03MG3qVHJySyheNAWXy+V0GyLyLzBHuqR0KIuLi7N9fX0HPVdZWfmB5bMjmT4PERERGUqstTSvqaB2VwX74qLYvn070+wTeCZWQlL3e+P635xKxf9cSmB0gJwLNxI3Jo/c6SczadIpJCQkONiByNBijOm31sY5XccnoZlTERERETkmgr1BerY30rimh4a1DXjjHseMWUfXmK0kJ/fg8Vj8oWzOP78BgHuunUpCoIRAaDSejPHkTZvP9KsXceYNSQ53IiKDQeFURERERP5loYEQLo+L9vZ2Kh/9K/0Nq7HRNUSmNhIxugHcAbjmWVy4MN/diitnFx0d0NJSTLx/IokJU1m79hxKS0tJTEx0uh0RcZDCqYiIiIgclg1ZfLU+enb0sG/zW3T2vEpncSVeqoj395CU1MdXrolkT2MLd10xjclf2oi/OZmehlT6N5YQDI8i+J87KZhXzJSyP5KTk6M7EIjIISmcioiIiIxgNmT339bOBXvf2kDNq8/g7a/CRtYTkdRMREYL5r9ugupCOGclEdf9kpQQNLdApzeVgbpCvvCFWWQVTiAvP4OMjPEUz5180L1CRUSOhMKpiIiIyDBlrcXf4se3b4DOHd00bttGj3mW3rwq+uOqcQc6SIsI88RDefxuxQYunT6Wy26pJAoIdsQz0JTCwL5UaqZsIGJBF5nTx5HLI5SMn8OiU/Le2xX3YmfbFJEjYIxZCpwNNFtrJx947ifAV4GWA8N+aK19zpkKFU5FREREjltBfz+Ny7cyEBuiKy6Cpq27idzxOMbdjiuhjYjUdkxmM9z7NXjyPCisJWLpnSSEDN5WS9dADKH2sSTkZnPttSdTkJ1Bb2sUBePnUnTCJGJjY51uUUSOngeAXwN//Kfnf2mtvW3wy/kghVMRERGRIcJaS9e6JgbaGuhq2kdXy14Gehvx7k3Gu7YUugLEX3cTgYxGbEorsbFhiIF3HprMt+/fQk58Ig8+0UOwI4GB9ni8zYl4q6fQldmPWVJBxuQURkf+nTFF01h4ci6Rkft/FbzI4b5F5Niz1r5mjClwuo4Po3AqIiIiMggC3QEqn6ykee9jBDy76c2vJRRqJ7XZRVfNKH67LkhbWxt33LwbE98HY9j/BZgXT6ZtSxodpp1i00NPYxztrXEYk05SXxEp08bz5JM3k5WVRXZ2FllZ2brmU2TkiTTGlL/v+F5r7b1HcN43jTGXAeXAf1hrO45NeR9N4fQYufXWW/F4PCxZsoTvfOc7bNq0iRUrVrB8+XKWLVvGQw89dND4goICLr/8cp5++mkCgQCPPfYY48ePp6+vj29961ts3ryZYDDIT37yE84991zOPPNMbrnlFsrKypg+fTqf+9zn+NGPfsSNN95Ifn4+V155pUOdi4iISDgYpuHtd9j++pP096zH1Q7Rv1lCBBFE/v5hIouqCPVCVxd0u7No9LsIBBIoLCxk++ocImNjiIpPJzZ9NKmjC8m9dAInfLeY5ORkjPmu0+2JyNAUtNbO+pjn/Bb4H8Ae+PN24IqjXdiRGjHhdMOGRR94LjPzC+TkXE0o1M8775z5gddHjfoy2dlfxu9vpaLigoNemz79lQ/9fgsXLuT2229nyZIllJeX4/P5CAQCrF69mgULFhzynPT0dNavX8/dd9/Nbbfdxv3338/NN9/M4sWLWbp0KZ2dnZxwwgmcdtppLFy4kFWrVlFQUEBkZCSvv/46AKtXr+aLX/zikX0oIiIi8onZkKWloprdfY1s2LCBzKrnSDvxLUx6G67ZEBeIpG9zMVtnbCVjQQa5mbeTObqU9PRskpOT39tU6FsO9yEiI4+1tundx8aY+4BnHCxn5ITTwTZz5kzWrVtHT08P0dHRzJgxg/LyclatWsWdd955yHPOP//89859/PHHAXjxxRd56qmnuO22/dcoe71e9u3bx4IFC7jzzjspLCzkrLPO4qWXXqK/v5/q6mrGjRs3OE2KiIiMMMHeIHVvvMOejU/TlP06fruVjNhuPCl9fPYsF72+IDdfMp3S7WMIbDmFtJKTmPnpi0g7fRRc53T1IiIHM8ZkW2sbDhx+DtjiZD0jJpx+2ExnRETsh74eFZX+kTOl/8ztdlNQUMCyZcuYN28eZWVlrFy5kt27dzNhwoRDnvPutSEREREEg0Fg/8YIf/vb3z4QOP1+P+Xl5RQVFXH66afT2trKfffdx8yZMz9WnSIiIvJB1lr6qjrY+fpLtFS9SdBuw7/0AhL3FeH6/OOYb/6GjBA0NETSUJdP3NYyHnrwQmbMOYnc3FyMMU63ICJyEGPMn4FFQLoxphb4MbDIGDON/ct6q4GvO1YgIyicOmHhwoXcdtttLF26lClTpnDdddcxc+bMj/UX1hlnnMFdd93FXXfdhTGGDRs2MH36dKKiosjLy+PRRx/lxhtvpKWlheuvv57rr7/+GHYkIiIy/Ph7+tn5/HJqg/1srqshVLGJ2aeuwJXdCHlhovIgss9DzXNF7EhoJzU9l/ymXzPl5HM49dQxTpcvInJErLWXHOLp3w96IR9C4fQYWrBgATfffDNz584lLi4Oj8dz2OtND+fGG2/k2muvpaysDGstBQUFPPPMM++9//Lly4mNjWXBggXU1tZ+7PcXEREZKXxNPhreaKD6jc0MxD5E36ithNN2k5Y2QEQGvPbLyfy/p7awePJ4Siem4a+agjthPDnTTmbSyaexeE2C0y2IiAxrxlrrdA2fWFxcnO3r6zvoucrKysMunx2J9HmIiMhI4ff62PLI32it2UjAt5uI+DqishpxvXIK/PFyiOvFPnkuPY1x1Ha5seF8MvtPIGPSYqbMOZW0tDSnWxAR+diMMf3W2jin6/gkNHMqIiIixxVrLf7mAVr2baY29AaNjWtxb22kvSmaW17ex64dO3n+yUiiCgZwh1z4G9PobkqnM85P8Kpd5MzPYcLYSvIXl+jaUBGRIUThVERERIYcay2++n7qN22gfkc5ve07CLT68T52BvEd8cTc800YuweA5GTwT4rB9pVQUlLCOeecQ+uuCEZPmMz4GYtJS8tyuBsRETkSCqciIiLiiHAgTNj0U1Ozhn3L36J3Xx1vhlPZvXs3F43dS/KityE2BNPAA0TWZbF36TSqMqtIXzeb6Ka5JE6ZzNixJ1M8byZR50ZxmdNNiYjIv2xYh1NrrZbrsP9zEBERGWyhvhC9Vc3Ub91Ia00F/d1V9D5zMuEGQ8JpzxJ93lOY1I79g4shttDFbZ8x5OTlMyuhkJzXF2Gic0nIHkfOlNkUz57DaZfGO9uUiIgcM8M2nHo8Htra2khLSxvRAdVaS1tbGx6Px+lSRERkGAn7w/ga+vHFNNHYvpnGDRvxbt3HZpPD9voGZoUbGX/ea5DYA5lAJkQDXXdPpLnD0t3pI2HrWNoTPcSllJCZMo2Cknn09E3F7XY73Z6IiDhg2O7WGwgEqK2txev1OlTV0OHxeMjNzdVf9iIicsR669qoeuV1Oht3MtBdSzDYhHG34nv8bNzbxxI37234r5sgInzQeTdfk83mtjAXzxnPnBk+QqQRGZtDQnYJ2eOnUjh2FsnJKQ51JSIyfGm33iHM7XZTWFjodBkiIiKOstYS6g7hbeqlt76WzuoBuvdYeptrCWQ8x0BOPf2J9bj83WT4Iln+jxzuf6OCxTkpXPXLHZADUez/CnbGU/diEa1J/XjoImP1KfhTEvBk5JKeNoncvBk8VT6FmJgYp9sWEZHj0LCdORURERmJBvoGWL9xPeteXsHYyGeJya3HldYO8Qf+nrz7G/DYFyCnFh76EiG/i7bOMN6+aBK7xrB+YzHNnjEUZKZSnNpDfFY+6YXjyckvIzMzh4iICGcbFBGRQxoOM6cKpyIiIsepkC/Evoo32Nb0OC3Nr5Id7GBPeQpX/W4DMZGRPPlAKn0NGQz0JxIKJ2LcyYTNROLSJpNalER6djyZmYWkpaUpdIqIHOcUTocIhVMRERnuQr4Qe157g6rXN9DyjzTMTsOoX9yAq2AfAH194NtTSE/DLJJPvJR58+aRkZHhcNUiIjJYhkM4deyaU2NMHvBHYBQQBu611v7KGJMK/AUoAKqBL1hrO5yqU0RExAkNDQ288/D9BHrWEJVWjbtwLyahl6ixuSS//TvqY+ppfGs2kfWLyJp/CqeccgGxZ+k2KyIicvxybObUGJMNZFtr1xtjEoB1wHnAl4F2a+0txpgfACnW2u9/2Htp5lRERI5H1lo6dzWwu2M5+2pfIVy1g/jIDq64pZWGxib+eP0Uck/fhrd6NP3No7GuYtJL5jHjU/9GYlKi0+WLiMgQMhxmTofMsl5jzJPArw98LbLWNhwIsK9Ya8d92LkKpyIiMtT52vvZs+pV6ipX0f6PUkKV0aSdsoKob9z/f2P6IghWF/Bc+VyKy2YwY0op02bPISkpzcHKRUTkeKBwerSKMKYAeA2YDOyz1ia/77UOa+2H3hBN4VRERIaKYH+Q1tZmdlTvovbVV0iJeJGoUXVE5NZBVACA/iW3ULs9BeZvJWXRbtxjx1M05VQmTFiM2x3lcAciInI8Gg7h1PH7nBpj4oG/Addaa7uNMUd63teArwFERekvchERGVz+Vj9Vr22ldteTtMdvpDemgtiIVjLTfPz19nzuXlnJ2ZMK+faPOumry2Jg30lEeIrJGHciJ6w4izPTRzndgoiIyJDi6MypMcYNPAO8YK39xYHntqNlvSIiMgRYa+na2UjV26/Suncdft9uIuJr4ZX5eP5xLmQ1wiOXANDWZuhsTyapaTI9rjlkz1jMxIkTyc3NxeVyOdyJiIgMd5o5/QTM/inS3wOV7wbTA54CLgduOfDnkw6UJyIiI4QNWwbau9jX+hY1NW/iXb2Hlg746642anZVcefdOzG5Idy5EBmMwF+fQXPGPtrnbSJlahJ5zXdTOu90Tj55LEe6+kdEREQ+yMndek8CVgGb2X8rGYAfAmuAR4ExwD7gQmtt+4e9l2ZORUTkw9iwpW9fO9Xlb9C8ZwN9+3rpfWE67iY3qbf+J67xOw4a3/DqOH7+dw+lpaWcOw5iUnPJHDeLCSeeSlpalkNdiIiIHN5wmDkdEhsifVIKpyIiI5u1lnA4QEPDRvauWEPXvno2u5Oprq7mUylbSZ5RgUlve298eE8BtVf+N53xnaT/+/OYDDDFOYwaNYuiopPIy5uoWVARETmuKJwOEQqnIiLDW9gfpn9fB3WVm2jdW0lPaxU9L55IqC5E4hmP4zn1FWx6CxERB8b3xHHqZ/tITU3lpovHk5njJ+DPJDIun9TCKRROP4n8wkm6FlRERIaN4RBOHd+tV0RERrZQf4jO3XW0mkqa2rfQXbkHalp5rTeL6vpGTk/qpOTsNZDUDQnAZPAAvlv/TIuvl0AnxO4eQ1vbWDzxhaTHTGJUznQ6O+eTlJTkdHsiIiJyhBRORUTkqAt5Q+CCfl8/Nes207puFd7eekKhVqyrHZenE+99XyK6upCYc16Aa3/13rnx44BxsOqrObS74pgwK5/kdyYTtqm4PKOITcsnq6SMstr5pKamAVc61Xu2uscAACAASURBVKaIiIgcRQqnIiLyL7PW0vxONVtX/JGm2NfwebaQGD1ASpxl6c9yefDNbXx9/iQuvqmCd+9IHe6NJdCRQGPyLvrHeIkPR5O8+nxMXibJo4vJzJzEmDEzeGNHhq77FBERGUF0zamIiByxYL+PLc89TUPlS/S+lo3nlZkkFNXDPVcRDhpq66PwdqeR1F5IdfckXFnFZCfFkZEYIC2/mFF5E8jKysPtdjvdioiIyLCia05FRGTYstZSV1fH2jfexLX5j0SnVxFdsgeTPkDMAgjWnEPVllSiSiIoqvolM876AotPG+102SIiInKc0sypiIgQDoap3VJOZdOTNDWtIq2zlY59sXzp9nUAvPRIGqGeePrqCzBRUxhz4qeZuuAMIiP1b5wiIiJDwXCYOVU4FREZYYL9AbavXMm+8vW0PZeLa5eLUf/1c1zT39n/ehD6azLp2TmF9uxzmT17NmVlk4mNjXe4chERETkchdMhQuFUROTQvF4vFRUV7H32Udx2LdGZtbgLajAxXuiLZeCcR6nzNBB94St4xhrST5rH9BmfJzk50+nSRURE5GNQOB0iFE5FZKQL9PvZsXIlteFXae1+m+iuWlJTOrnoaz209vZz11emMvGzuxjYm4O3YzQRUSVkjptL2akXEJ+Y4HT5IiIi8gkpnA4RCqciMlIE+wPsXLWK2i2v099RSc+zs3FvG03Gp97A9Z07AQiFoL0hFnftOCq7TqF4xhzKpkyguGQCERERDncgIiIix8JwCKfayUJEZAgK+vzsemUVeztbqairY6DiHU6Y8xqRuQ2YGC/umZAEBF8dRXO8hx5fKmlvfpXUstlMPfFM0k/NAeA8Z9sQERGRIcIYsxQ4G2i21k4+8Fwq8BegAKgGvmCt7XCsRs2ciog4w1pLT3U3e16rom79DkJJjzGQsZ1Q2m7S0waIira8+usp/ORvmzlpXDHfvyoSX3c2LnchKQUzGDf/dLLHlDrdhoiIiAwBHzVzaoxZCPQCf3xfOL0VaLfW3mKM+QGQYq39/uBUfIgaFU5FRI6tcDjM3uq97HniIfq7dmAi6nCnNBGV3YR5+TS45yrwDGCfOZuBtjhqOyOx4TFkdMwitfQUJi38FBkZGU63ISIiIkPYkSzrNcYUAM+8L5xuBxZZaxuMMdnAK9bacce82MPQsl4RkU/IWstAwwB73n6Nppb1tCdvob9/F+ntXtpr4vnabzfg9XpZ8UQCCUk9hLvi8dZn0rljLAOeJKK+30revDxKptWSmpbtdDsiIiJyfIo0xpS/7/hea+29H3FOlrW2AeBAQHV0u36FUxGRI2CtZe/bG6ndtIbuxm0EAzVERDdhumNw3fYfeKwH7llCROlOMoCBAQiGM6EpmauvvprS0lKML4rCnFmMOXkyxhinWxIREZHhJWitneV0EZ+EwqmIjHg2bPE1+ajZtJ6m6nI6c3fQ07OHqIYOogbC/PCRfqqqqvjjDWNInV9JbCnYsCHUmkL/7jHsLd1JVH4U6Q0XkxKfQf6JcxgzZhputxuALzncn4iIiMhhNBljst+3rLfZyWIUTkVkWAt5QwQJ0tLawr7Vb9JbVY5/oB5czUTEtuNObsde/WvcoRhY8iv43BPEA/Hx0B/twbRkUVRYxqmnnkofUcRuv5hR46ZTNGseiYlp+7/JDY62KCIiIvKvegq4HLjlwJ9POlmMNkQSkeNWKBCgoXwtVSv66Nrpwx/eRFTRa3Tm7MF6WkmOCpGQGOCaK2LZ2tjOrRdPZ/bXNwAQ7osh0JKCryOJfX/6Iq6UZFKmdpI8zpAxeSJjimaRkTFay29FRETkuHAEu/X+GVgEpANNwI+BJ4BHgTHAPuBCa237sa/2MDUqnIrI8aK/vYPNT/+J9rpXiUjairtoNybGC9+6E7ZMIXjaP3B9+y7auwxd3ghc/enEd+RTHTiBxNwichJiSEuNIm/idEbnluByuZxuSUREROSoOJLdeoc6hVMRGZKstVRtL2f7k49T2djDUxu2kNnTzNW3V2JDLnx7cuiqziNgi0jJ/Qw5UyaSXZpNRkaGQqeIiIiMOMMhnOqaUxEZEtp2t7HpsbV0D/wef/omInN2k5oaJuZE8PyljP7+aHLmnEJn+XmUnno+ExbP1JJbERERkWFEM6ciMui6G1vY8vzfadv7OiZqB66q0cTe9y3AYp84D29PFHXeeGJjZ5IfcwbTT7+I2PhEp8sWERERGbI0cyoi8hFadldR8foKNnX0smHDBs4v2UTinHegIExCAYRaUunqjKXxjD3knZ5H2dTNZBWMcbpsERERERlkmjkVkaPChi01a2rYtupvDPSvpjXvLRITm8nICBLuTOTUz3WTlZXF/1w4mdR0D9FJZZQuPIeS6XO0PFdERETkE9LMqYiMSL1tHVQuf4HmnW8RCmwnKqUW+/3/IcaXTNTX1+D+wt/xNUXR2TmKQONU0iPmUFv7ZXJycp0uXURERESGKIVTETmsYNDP9vKV1Kx6jc09hvLtO5lGI3O+thqTGSYuE6zfja96NDUzNhOdN4b8WZcwedzPyVic73T5IiIiInIc0bJeESEUCLHvrSp2vVxF+86NxE56Am9uJYmjOoiO3j/mgR+WsKopxPmzy5g3IYA7bhyjp8xn4sIz8MQc1ytIRERERI57WtYrIseVYDDIrooK9r78V7zdO3BF1RGd1og7txFz79dwP/1ZssZkEjq/kv6WBGpqCkmKm0pOxALuePJMkjOynG5BRERERIYpzZyKDDPWWhordrJ75ys0ht6mu2sLWe1+dmyJ5ft/fptkdxSPPrv/5yXUmoKvPgtfdwaBzoVklpzGxE9PJDM/0+EuREREROTjGA4zpwqnIschay3te/ZRVb6a9n2b8fbtwb83Ft9fTyelL5nYpy6C+P0/E4EAhBpGUbdhCrs8Mxk/fjxjPZbSuYvIHFPgbCMiIiIiclQMh3CqZb0iQ1QoFKKubit7975Ox9sV9LV28VytZc+ePdx4STOeybsgC6KyIArwvTWDzsiT6J3QS9obl5BQMJoxC06iuHgBbrcHLnO6IxERERGRw9PMqYhDQv4QTZWV1FWsp6O+koGOJjqeXAhNkHnZn4g5dRUm1vve+GBzKl/5bjxFRUVcNj2JxKQoohIKSSuYQvGJC8jM0e64IiIiIiPVcJg5VTgVOQbCoTDdNQ009VfQ1FpB59Zd2LoWXmxLZe++Wj5f0EXBOW9jov3/d1LIRccZf6ErqpeYz79M9LhGvEXJpKZPYXTKbIomzCc2Psm5pkRERERkyBoO4VTLekX+BfUVu6l+eyU9LVX4B+qw4VZc0e303PNFohtGkfT5fxDx9fvfG584HhgPb16Zi01Ipzkjl8S3FmJNFtEJeaSMGU/hzLmMDpRgjAG+7FRrIiIiIiKOUDgV+QihUIh3Vj1LzUsv8GptD0++/gbnl8Zw5ve2EF0I0YD1RxJqS6E1vpmOLOjqTyXhlQuxBakk5xQzKn0yYwpnsH6XdsEVERERETkULesV+Scd9R2se2QF3V0P4x21jvicGhIT9/+cvHTndLbafE6dMZ2SjBBJo0sZPb6M0UUTiIzUv/WIiIiIiDOGw7JehVMZ0UKhEFtXvkj12ucIBzcTWjOepGcvJCK5G/72eXrr0mgOpJGUOI9x2eczce5ncLkinC5bREREROQgwyGcaqpHRpT66mo2bt3KuvJypkU9Rdz4nbiSu0mYC7Y3ls6GJGpOriH3U7lMLdxDxuICp0sWERERERkRNHMqw1bdtq1sff1J6iNXEAhUkJc4QLAplbOX7MEYw19/UkZkRByEJ5JTdgZTP/NZIqOinC5bRERERORj08ypyBDRuHsXFS89TufeCtofPImkpiQyf/Ir3PPfIB9oanLT2TAOd8d0Xn11GdOnTychIcHpskVERERE5ADNnMpxJRgMUl1dzebNm+la8wLpaW8Tk1tLRHbLe2Naz32ArqQgCZ/eS+asJCaf93nSMwucK1pERERE5BjTzKnIMdTV3MLml56iPvAaXYH1JJoWMkf18IOrE3m7ppEbzppC7hfa6N+bT2j7IhJGzWTi4vNY1DXO6dJFRERERORj0sypOC4UDLLzjdfYu/5V+tor6H5pElHrxpE1ezcRN/8IgIEB6GhMJbamjN64z1C6YBGTJk0iLu64/schEREREZGjQjOnIh9DKBRi95o32V1dxdaGZpq2bua0E1/DnVePifERPQ2igah30mhJL6A+MZWM9TdQOP80ShaerFu4iIiIiIgMYwqnctSFgiF2v7Wb3St24A39CV/iNnzpO8jI6CM2Fqpfm8r192xibG4Oi8qS6FszH1dEEan5M5lw8mdIfyLf6RZERERERGSQaVmv/Mu6urrY+sJTtFetI+CtItLTQFR6E67t44n83xsAC0+cRyAcpq7LTSiUR1rbTFJyFzL5jHNIS0tzugURERERkWFBy3pl2Gtvbmbn2tXU+d6ms/Md4po6CHW6+PbSHbS2tvL8fbnEnViLDbkINaXja8xkwJ9M+NJmRs8ZTcmEjWSVFjrdhoiIiIiIDHEKp0Lb3r3sensVrdXv4O+twvq76PjtRST0JJDx0zsw898kNQ5SU8Gf4cG/vYTzzjuPkpISAj4X6d2FlMxfRKJmQkVERERE5F+kZb0jQGdTI/saymlo2kjPrl1ENLfy2LY4qvbt48rZAcaev+6g8eH2ZOq+8guCaZBw6lbiiwNkLJzG2HGLSErKxxjjUCciIiIiInIoWtYrjhvo72fvOxto3r6ZnqbdBAZqMaaFzkfOInJvJmlnrsRzze8BiI6G6Elgx7tofWoycWkZdPoy6Vg5luiEQtILyyg5cSEpublwvsONiYiIiIjIiKJwOkQFfAGatjfRuHUHHS2r6YrdQ2/EXkxfO2kD8PjziTy9aRuXlGVy/o1bIR/iDmxya/ti8D16Mt2xCTT3ZpGw8gLM2FGkFU4gJ2sGeWOm8eIGj7MNioiIiIiIvI+W9Q6SgYFeWlp20tKwk84N++iwHuoDYQbqaxgXU44ruhd3bC8R8X1EJvXAb67BtfI0mPIO3Pnt996npysST9toVr08lebE0UxMS6Yotg1PUj7JuaXkls0kq7BIS29FREREREaQI1nWa4ypBnqAEBC01s4ajNqO1JANp8aYTwO/AiKA+621txxu7NEOp9ZafD4fA50D9Hf009dZjS/YRTC+F6+3i/7NHfSFommNTqC3o4Ocrjcx9OGK7MflHiAieoCBVbPxP3canoQBUv74LUzswEHf4617pnLDI5uYmp3JL3/XT6grgVBvHMG+eEK+BPoqF2CDk4gviiBlYjejJk8kb/xUPJ74o9aniIiIiIgMDx8jnM6y1rYOTlUfz5Bc1muMiQB+A5wO1AJrjTFPWWu3Hmp8VqLlxfsKwRosBsIG/+4COu65DAyk/cfdhDOaaYtpJSIiTJo/hY7tufz8+T68Xi93/kcAd2o3JiIMESFMVABeW4C55Yf7v8HzZ0C0H7r2H0aUQvtTU/jKLzcT6TK8tNxiA5HY3jjC/TGE+2IYiAkwkDHAQKIf19qT8MdFEc5NIC4uh4TmXM68aipX3jWFlJQUIiIiBuNjFRERERERGbKGZDgFTgB2WWv3ABhjHgHOBQ4ZTsNhCPQkAJb9q1ktoUAkgcgAWAiHXGBdWOsmEDD4exIIBGIZO3YUHo+Hvrom3K0BsJFABITdBHqL8J5ZR0RsBLFrroTkSCjwEBUVT0xzCpNPz6dqyRSSkpKIdhk8CYm4XK7/K+pr76/wG8fkQxIRERERETkg0hhT/r7je6219/7TGAu8aIyxwD2HeN1RQ3JZrzHmAuDT1torDxx/CTjRWvvNQ40/Hq45leHj6ofXMb84nUtPzHe6lBHvpme2EhFhuOEzE5wuRYAlf97AlJwkvrqwyOlSBKjvHOD8u9/gsavmkpca63Q5csDXHyxnTlEa/z6/0OlS5H2+99dNFKTHcfWiYqdLkffxBUOcc9dqfnzOJOYXpztdzpB3hMt6R1tr640xmcBLwLesta8NToUfzfXRQxxxqN18DkrRxpivGWPKjTHlwWBwkMoSgec2N/Kff9/idBkC3L+6inte3eN0GXLAU5vqufm5SqfLkAP+vqGOxm4vf357n9OlyPu8UNHEfz99yIVg4qBHy2u59fntTpch/6SmfYAdTb3c+KR+7zparLX1B/5sBv7O/hWrQ8ZQDae1QN77jnOB+vcPsNbea62dZa2dFRk5VFcni4iIiIiIOM8YE2eMSXj3MfApYEgl/6Ga6tYCJcaYQqAOuBj4N2dLEhEREREROW5lAX8/cMvJSOBP1trnnS3pYEMynFprg8aYbwIvsP9WMkuttRUOlyUiIiIiInJcOrDZ7FSn6/gwQzKcAlhrnwOec7oOEREREREROfaG6jWnIiIiIiIiMoIonIqIiIiIiIjjFE5FRERERETEcQqnIiIiIiIi4jiFUxERkWHIWut0CSIiR0Wc7QP9P21EUDgVEREZxvbfzk5E5Pg0mlae7v03ePM3Tpcig0DhVEREREREhqQ807L/wXbdYXIkUDgVERERERERxymcioiIiIjIkGSMrjUdSRRORURERERkSArZA3ElKt7ZQmRQRDpdwLESCASora3F6/U6XYqjPB4Pubm5uN1up0sREREREflYam0GjSaTUdP+zelSZBAM23BaW1tLQkICBQUFmBG6VaG1lra2NmprayksLHS6HBERERGRj6WBNP4t/j5WTFrkdCkyCIbtsl6v10taWtqIDaYAxhjS0tJG/OyxiIiIiByf0uji1v4fw86XnS5FBsGwDafAiA6m79JnICIiMrTkvntrDBH5SFmmg1mhjbBL4XQkGNbh1EmLFi3ihRdeOOi5O+64g6uvvvpffs9Vq1YxadIkpk2bxsDAwCctUURERAbZWa63WB39bf2iLXKE2mwiFa5xMHax06XIIFA4PUYuueQSHnnkkYOee+SRR7jkkksOe461lnA4fNjXH374Ya6//no2btxITEzMUatVREREBkeZa/f+B00VzhYicpxoIpVvxd0KpZ9yuhQZBAqnx8gFF1zAM888g8/nA6C6upr6+npOOumkg8ZVV1czYcIErr76ambMmEFNTQ0vvvgic+fOZcaMGVx44YX09vZy//338+ijj/LTn/6USy+91ImWREREREQGVQYd3N+3BCqfdroUGQTDdrfe9/vvpyvYWt99VN9z4uhEfnzOpMO+npaWxgknnMDzzz/PueeeyyOPPMJFF110yGtAt2/fzrJly7j77rtpbW3lpptu4uWXXyYuLo6f//zn/OIXv+BHP/oRq1ev5uyzz+aCCy44qr2IiIjI4FgTnsDXeRZyZjpdishxId80URTeC5segQnnOF2OHGNHFE6NMZnAfGA0MABsAcqttYdfgyrvLe19N5wuXbr0kOPy8/OZM2cOAG+99RZbt25l/vz5APj9fubOnTtoNYuIiMixEyRi/wOX7j8uciTcJrT/gbfL2UJkUHxoODXGnAL8AEgFNgDNgAc4DxhrjPkrcLu19uhOSx5lHzbDeSydd955XHfddaxfv56BgQFmzJhxyHFxcXHvPbbWcvrpp/PnP/95sMoUERGRQVJgGvc/6KoBTnS0FhGRo80Y4wKm8n+TmhXW2qYjPf+jZk7PBL5qrd13iG8cCZwNnA787YgrHkHi4+NZtGgRV1xxxYduhPR+c+bM4ZprrmHXrl0UFxfT399PbW0tpaWlx7haEREROdZyTOv+Bz0NzhYiInIUGWPGAt8HTgN2Ai3sn9QsNcb0A/cAf/iolbcftSHSbYcKpgDW2qC19glrrYLph7jkkkvYtGkTF1988RGNz8jI4IEHHuCSSy6hrKyMOXPmsG3btkOOnTZt2tEsVURERI6xR0KL+U3wszDxPKdLETkuGKzTJciRuQl4CBhrrT3DWvtFa+0F1toy4FwgCfjSR73JR82cbjLGbAb+DPzNWqvF3h/T5z73Oaw9/A9VQUEBW7ZsOei5xYsXs3bt2g+MfeCBBw463rhx41GpUURERAZHlc3mf4MXc01yntOliBxfDrGp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\n", - "text/plain": [ - "<Figure size 1080x432 with 2 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "ax2 = ax.twinx()\n", - "\n", - "# Plot the potentials\n", - "ax.plot(t_ref, y_ref[:,0], linestyle=\"-\", label=\"V ref.\")\n", - "ax.plot(t_old, y_old[:,0], linestyle=\"-.\", label=\"V old\")\n", - "ax.plot(t_new, y_new[:,0], linestyle=\"--\", label=\"V new\")\n", - "\n", - "# Plot the adaptation variables\n", - "ax2.plot(t_ref, y_ref[:,1], linestyle=\"-\", c=\"k\", label=\"w ref.\")\n", - "ax2.plot(t_old, y_old[:,1], linestyle=\"-.\", c=\"m\", label=\"w old\")\n", - "ax2.plot(t_new, y_new[:,1], linestyle=\"--\", c=\"y\", label=\"w new\")\n", - "\n", - "# Show\n", - "ax.set_xlim([0., simtime])\n", - "ax.set_ylim([-65., 40.])\n", - "ax.set_xlabel(\"Time (ms)\")\n", - "ax.set_ylabel(\"V (mV)\")\n", - "ax2.set_ylim([-20., 20.])\n", - "ax2.set_ylabel(\"w (pA)\")\n", - "ax.legend(loc=6)\n", - "ax2.legend(loc=2)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Zoom in" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAF3CAYAAACotmb7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXicZ33u8e87M5p9JFm7vEnyqt1bYsdJ7ISQhSUtawhLSnIgcGha0oTSHOg5QIFygDS0ECjkhCUQlgIp0FDKEhoSYifEjndbkmXLjrxbtiRLGs2i2Z7zx0gjjSXbcmJZsnx/rmuuWd7nXeZtiefW71ksYwwiIiIiIiIik8022RcgIiIiIiIiAgqoIiIiIiIiMkUooIqIiIiIiMiUoIAqIiIiIiIiU4ICqoiIiIiIiEwJCqgiIiIiIiIyJUx6QLUsy25Z1lbLsn41+L7KsqwNlmXttSzrJ5ZlOSf7GkVERERERGTiTXpABf4GaBnx/ovAvxhjFgKngPdPylWJiIiIiIjIRTWpAdWyrNnAG4FvDb63gBuAfx9s8j3gzZNzdSIiIiIiInIxTXYF9cvAA0Bq8H0h0GOMSQy+PwzMmowLExERERERkYvLMVkntizrVuCEMWazZVnXD308RlNzhv0/CHxw8O0Kr9d74S9SRERERETkEhAOh40xZrILkK/apAVU4Brgzy3LegPgBnJJV1TzLctyDFZRZwNHx9rZGPMo8CiAz+czoVDo4ly1iIiIiIjIFGNZVmSyr+FCmLSEbYz5uDFmtjGmEngn8AdjzHuAZ4C3Dza7E3hyki5RRERERERELqKpWAL+X8BHLMtqIz0m9duTfD0iIiIiIiJyEVjGjDnE85KiLr4iIiIiInI5sywrbIzxTfZ1vFqTOQZ1QsXjcQ4fPkw0Gp3sS5l0breb2bNnk5OTM9mXIiIiIiIickbTNqAePnyYQCBAZWUl6eVVL0/GGLq6ujh8+DBVVVWTfTkiIiIiIiJnNBXHoF4Q0WiUwsLCyzqcAliWRWFhoSrJIiIiIiIy5U3bgApc9uF0iO6DiIiIiIhcCqZ1QJ2OTp48yapVq1i2bBnr1q2b7MsRERERERG5YKbtGNRLWTKZxG63j7nt6aefprq6mu9973sX+apEREREREQmliqoE+TBBx/k4YcfBuD+++/nhhtuANIB84477hjVvrKyks985jNce+21PPHEE+zbt4/Xve51rFixgjVr1rB79262bdvGAw88wK9//WuWLl1KJBK5qN9JRERERERkIl0WFdT77ruPbdu2XdBjLl26lC9/+ctn3L527Vq+9KUvce+997Jp0yYGBgaIx+OsX7+eNWvWjLmP2+1m/fr1ALz2ta/lkUceYeHChWzYsIF77rmHP/zhD3zmM59h06ZNfO1rX7ug30dERERERGSyXRYBdTKsWLGCzZs3EwwGcblcLF++nE2bNrFu3bpMZfV0t99+OwD9/f288MIL3HbbbZltAwMDF+W6RUREREREJstlEVDPVumcKDk5OVRWVvLYY49x9dVX09jYyDPPPMO+ffuoqakZcx+fzwdAKpUiPz//gld9RUREREREpjKNQZ1Aa9eu5aGHHmLt2rWsWbOGRx55hKVLl55z2Zfc3Fyqqqp44oknADDGsH379otxySIiIiIiIpNGAXUCrVmzhmPHjrF69WpKS0txu91nHH96uh/+8Id8+9vfZsmSJdTV1fHkk0+O2e7uu+9m06ZNF/KyRUREREREJoVljJnsa3jVfD6fCYVCWZ+1tLScsSvt5Uj3Q0RERERk+rIsK2yM8U32dbxaqqCKiIiIiIjIlKCAKiIiIiIiIlOCAqqIiIiIiIhMCQqoIiIiIiIiMiUooIqIiIiIiMiUoIAqIiIiIiIiU4IC6hR3/fXXj7nO6Xe/+13++q//ehKuSEREREREZGIooIqIiIiIiMiUoIA6QR588EEefvhhAO6//35uuOEGAJ5++mnuuOOOUe2ffvppli1bRkNDA+973/sYGBgY1eaxxx5j0aJFXHfddTz//PMT+wVEREREREQuMsdkX8DFsnXr9edsU1h4K3PnfjTTvqzsLsrL7yIW66Sp6e1ZbZcte/asx1q7di1f+tKXuPfee9m0aRMDAwPE43HWr1/PmjVrstpGo1Huuusunn76aRYtWsR73/tevvGNb3Dfffdl2hw7doxPfepTbN68mby8PF7zmtewbNmy8X15ERERERGRS4AqqBNkxYoVbN68mWAwiMvlYvXq1WzatIl169aNCqitra1UVVWxaNEiAO68806ee+65rDYbNmzg+uuvp7i4GKfTye23337RvouIiIiIiMjFcNlUUM9V8Txbe6ez6Lz3z8nJobKykscee4yrr76a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\n", - "text/plain": [ - "<Figure size 1080x432 with 2 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "ax2 = ax.twinx()\n", - "\n", - "# Plot the potentials\n", - "ax.plot(t_ref, y_ref[:,0], linestyle=\"-\", label=\"V ref.\")\n", - "ax.plot(t_old, y_old[:,0], linestyle=\"-.\", label=\"V old\")\n", - "ax.plot(t_new, y_new[:,0], linestyle=\"--\", label=\"V new\")\n", - "\n", - "# Plot the adaptation variables\n", - "ax2.plot(t_ref, y_ref[:,1], linestyle=\"-\", c=\"k\", label=\"w ref.\")\n", - "ax2.plot(t_old, y_old[:,1], linestyle=\"-.\", c=\"y\", label=\"w old\")\n", - "ax2.plot(t_new, y_new[:,1], linestyle=\"--\", c=\"m\", label=\"w new\")\n", - "\n", - "ax.set_xlim([90., 92.])\n", - "ax.set_ylim([-65., 40.])\n", - "ax.set_xlabel(\"Time (ms)\")\n", - "ax.set_ylabel(\"V (mV)\")\n", - "ax2.set_ylim([17.5, 18.5])\n", - "ax2.set_ylabel(\"w (pA)\")\n", - "ax.legend(loc=5)\n", - "ax2.legend(loc=2)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Compare properties at spike times" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "spike times:\n", - "-----------\n", - "ref [18.715 30.561 42.495 54.517 66.626 78.819 91.096]\n", - "old [18.73 30.59 42.54 54.58 66.71 78.92 91.22]\n", - "new [18.72 30.57 42.51 54.54 66.66 78.86 91.14]\n", - "\n", - "V at spike time:\n", - "---------------\n", - "ref [0.006 0.03 0.025 0.036 0.033 0.031 0.041]\n", - "old [ 6.128 5.615 6.107 10.186 17.895 4.997 20.766]\n", - "new [32413643.009 32591616.327 35974587.741 51016349.639 77907589.627\n", - " 37451353.637 11279320.151]\n", - "\n", - "w at spike time:\n", - "---------------\n", - "ref [ 7.359 9.328 11.235 13.08 14.864 16.589 18.256]\n", - "old [ 7.367 9.344 11.258 13.111 14.906 16.637 18.315]\n", - "new [ 7.362 9.334 11.244 13.093 14.883 16.611 18.278]\n" - ] - } - ], - "source": [ - "print(\"spike times:\\n-----------\")\n", - "print(\"ref\", np.around(s_ref, 3)) # ref lsodar\n", - "print(\"old\", np.around(s_old, 3))\n", - "print(\"new\", np.around(s_new, 3))\n", - "\n", - "print(\"\\nV at spike time:\\n---------------\")\n", - "print(\"ref\", np.around(vs_ref, 3)) # ref lsodar\n", - "print(\"old\", np.around(vs_old, 3))\n", - "print(\"new\", np.around(vs_new, 3))\n", - "\n", - "print(\"\\nw at spike time:\\n---------------\")\n", - "print(\"ref\", np.around(ws_ref, 3)) # ref lsodar\n", - "print(\"old\", np.around(ws_old, 3))\n", - "print(\"new\", np.around(ws_new, 3))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Size of minimal integration timestep" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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dx177LF69NFHdeKJJ2r69OmaOXOmjjjiCBUXFysajdZ5n7333juteQcgc1DnBQCPYwiGL6SyWua0Oo4vlrS4ySnyoJLibdp111H678qV2nXXXTVp0iRJseBuyZIlGjlypCRp8+bNWrZs2XZB1JIlS7Ro0SLNmjVLUmwF0G+++UaSNGnSJLVv377e+/Xq1Ut9+vTRiBEjJEm77rqrVq5cqU2bNmn16tU64ogjJMX2rmtMugAgWdQJAMAfaKzztnSvlumqZHvY0q1izt2WzZs0ZcoU3XbbbTr33HNlrdUll1yis88+u97rrbV69NFHNWDAgGrH33zzTeXl5VU7r7b7rVy5UllZlTtJBAIBbdu2rc4JscmmCwAai2Fr8DOKN4DWzh+7brcSbdq00c0336xZs2aprKxMkydP1pw5c7R582ZJ0urVq7VmzZrtrps8ebJuueWWRDD2/vvv13r/ZO9XobCwUD169NATTzwhSSopKdHWrVsbfR8AAAD4GyMw/MFXPXetwciRIzV8+HDNnz9fJ510kj777DPtueeekqT8/Hzdf//96ty5c7VrLr/8cp1//vkaNmyYrLXq3bu3nnrqqe3ufcABB9R6v0AgUGd67rvvPp199tn63e9+p1AopAULFtR5n5rpAryOXqSWw8rZAOAPfHZ6G8FdGrzxRVG1108++WTi+/POO0/nnXfedtesXLky8X1OTo7uvPPO7c6ZMWOGZsyYUe1YXff7+OOPE99feOGFie/79++vl156abvz67oPAKSCSgH8jCXiAbR2DMsEAAAAMhybl/sDwR0AAAAASYzA8DqCOwBAyixT8ZEBqPMCaO0I7gAAaWOo/gKAJ9FE5w8EdwAAAAAk0UjndQR3AICUMQ8fAAD3EdylSVFRkaZOnar+/furX79+Ou+881RaWqpXXnlFU6ZMqfWa3r17a926dS2cUgBoPkzEh59RvgG0dgR3aWCt1TFHH63DDz9cy5Yt05dffqnNmzfrsssucztpaOWoKAAAgNaAERj+wCbmafDWa0uVnZ2tU089VZIUCAR04403qk+fPtp3330T561fv17Tpk3T2rVrtdtuu7GfCHiQwjcoygDgDzQ8e5u/grsr2zTTfX+q9+3lX36uUaNGVTtWWFioXr16afny5YljV111lcaNG6ff/e53evrppzV79uxmSS4AAEg/FpoA0Nr5K7hzi7UytTRz2BrHly5dqscee0ySdMghh6hdu3YtlkQAaE5UeQHA2xiB4Q/+Cu4a6GFrLv12Hqj7/ra42rGNGzdq1apV6tevX7XjtQWByFwUB/gFlQIAANzHgippsPu4fbR121bde++9kqRIJKILLrhAM2bMUG5ubuK8vffeWw888IAk6ZlnntGPP/7oSnqBTEHwDCCteKYAaOUI7tLAGKOFCx/VggUL1L9/f+28887Kzs7WtddeW+28K664QkuXLtWoUaO0ZMkS9erVy6UUAwAAAJVY6M8f/DUs00U9e/bUk08+ud3xCRMmaMKECZKkDh06aMmSJYn3brzxxpZKHlopnqPwCyoFAOAPTCHyNnruAABpQ6UAfkbxBtDaEdwBLqKiAAAAWgPGX/gDwR0AIGVUCgDAH2h39jaCOwBA2lApgJ9RvgG0dgR3AHzLUBUDACA5DMHwBYI7wEUsMAjfoCwDgC+wHoC3EdylwfCe7fSbCy9MvJ41a5auvPJK9xIEz+ABCr+hTMPPWA0WQGtHcJcG4awsPfHE41q3bp3bSQEAAAAazTIEwxcI7tIgEAjqjDPOrHVT8rVr1+qoo47SmDFjNGbMGL322muSpF122UUbNmyQtVYdOnTQvffeK0k66aST9MILL7Ro+gEgVVQKAMAfmK/ubUG3E5BOf3zrj/r8h8/Tes+B7Qfq4t0ubvC8c37+c40aOUIXXXRRtePnnXeefv3rX2vcuHH65ptvNHnyZH322Wfaa6+99Nprr2nHHXdU37599eqrr+rkk0/WG2+8odtvvz2tvwMAtBSqBPAzyjeA1s5XwZ2bCgsLdfLJJ+vmm29WTk5O4vgLL7ygTz/9NPF648aN2rRpk8aPH6+lS5dqxx131DnnnKPZs2dr9erVat++vfLz8934FdCCWEgFfkXRBgBvom7iD74K7pLpYWtO559/vkaNGqVTTz01cSwajer111+vFvBJ0t57763bbrtN33zzja655ho9/vjjWrhwocaPH9/SyYaLmJvfvMjflsMwHgDwBz47vY05d2nUvn17HXvssbr77rsTxw444ADdeuutidcffPCBJKlnz55at26dli1bpr59+2rcuHGaNWsWwR0AT2LOHTIBlV4ArR3BXZpdcMEF1VbNvPnmm/XOO+9o2LBhGjx4sO64447Ee7vvvrt23nlnSdL48eO1evVqjRs3rsXTDADpQt0XALyJYZn+4KthmW5544uixPddunTR1q1bE687duyohx9+uNbr7rvvvsT3Y8eOVTQabb5EAgAAAA2gkc7b6LkDXMAQNvgNLb7IBMwtBdDaEdwBLqKiAL8xTEoCAE+i4dkfCO4AAAAASGLhIK/zRXBnGQ+UduQpgMbgkQEAgPs8H9xlZ2dr/fr1BCNpZK3V+vXrlZ2d7XZSfIviCr+iwRd+Ro8G/Iy6iT+4ulqmMWa8pOnxdAy21o5t7D169OihoqIirV27Nu3pS8bmknJt2FqmwE/Zchz/PPWzs7PVo0cPt5Phe1QUAABA60LlxMuaHNwZY+ZImiJpjbV2aJXjB0q6SVJA0l3W2uvruoe19lVJrxpjDpf0dlPSEQqF1KdPn6Zcmhbz/r1SVyz6RO9dPknt88KupQMA3ESDLwAA7kul526upFsl3VtxwBgTkHSbpEmSiiS9bYxZpFigd12N60+z1q6Jf3+CpDNSSAsAoBWgNxoAvIlGOn9ocnBnrV1qjOld4/BukpZba1dIkjFmvqSp1trrFOvl244xppekn6y1G+t4/yxJZ0lSr169mppcAAAAAPC1dC+o0l3Sqiqvi+LH6nO6pHvqetNaO9taO9paO7pTp05pSCLgPlrH4DcsagUA/sAIDG9L94IqtRWHej/xrbVXpDkNgGfw/IT/UKrhX1R6AbR26e65K5LUs8rrHpK+TfPPAAC0WvTgAYAXMQDDH9Id3L0tqb8xpo8xJizpeEmL0vwzAAAAADQDOqi9rcnBnTHmIUmvSxpgjCkyxpxurS2X9EtJz0n6TNIj1tpP0pNUAEDrR7UA/mUo3wBauVRWy5xWx/HFkhY3OUVABmDxCQAA0LpQN/GDdA/LBNAYzM6HT1AlAAB/MNRNPI3gDgCQNtQJ4GeUbwCtHcEdAAAAkOGYMeIPBHcAgJRRKQAAf6CD2tsI7gAXUA+GX1EpgJ9RvgG0dgR3gIuoKAAAgNaAhmd/ILgDAKQB1QIA8AMWDvI2gjsAQNpQKYCfsUQ8gNaO4A5wAYtPAACA1sRSOfEFgjvARTQCAwCA1oS6ibcR3AEAUkaDLzIBdV4ArR3BHQAgbQzVXwDwJNro/IHgDgCQNpbqAQB4Go103kZwB7iCCjAAAADSi+AOcBFtY/AbWnzhZyw0AT9j7rQ/ENwBAAAAiKERw9MI7gAAKaPBFwAA9xHcAQDShmFr8DNDAYeP0UjnDwR3gAsY1w4AAFojmjC8jeAOcBGtwPALGiwAAHAfwR0AIG1orwAAb7K00vkCwR0AAAAASYwq8jqCOwBAyixT8QEAcB3BHeACqsHwKzYxBwDAPQR3gIuoBgMAgNaEuom3EdwBAFLGPHwAANxHcAcASB+afAEAcA3BHeACejkAAEBrQt3EHwjuABex2jD8gjoBAPgDdRNvI7gDAKQNdQIAANxDcAcAAABkOPYr9QeCOwBAyiyTNQDAF9iv1NsI7gAXUBGGXxkmawAA4BqCO8BFtI4BAIDWgHZnfyC4AwAAACCJ1TK9juAOAAAAAHyA4A4AkDY0+AKANzEs0x8I7gAX8PwEAACtEY103uZacGeMGWyMecQYc7sx5mi30gG4iicofIIWXwAA3Nek4M4YM8cYs8YY83GN4wcaY74wxiw3xsxs4DYHSbrFWnuOpJObkg4AQOvCRHwA8CY2MfeHYBOvmyvpVkn3VhwwxgQk3SZpkqQiSW8bYxZJCki6rsb1p0m6T9IVxpjDJHVoYjoAAAAApAuNdJ7WpODOWrvUGNO7xuHdJC231q6QJGPMfElTrbXXSZpSx61+EQ8KH2tKOgAArQMtvgAAuK+pPXe16S5pVZXXRZJ2r+vkeHB4qaQ8STfUc95Zks6SpF69eqUhmYD7mJ8Ev6LBFwC8ibqJP6QzuKvtM73OYmKtXal40FYfa+1sSbMlafTo0RQ7+AoVYQAA0JoYaieels7VMosk9azyuoekb9N4fwBAK0WLLwAA7ktncPe2pP7GmD7GmLCk4yUtSuP9AQCtnGG5TADwJNro/KGpWyE8JOl1SQOMMUXGmNOtteWSfinpOUmfSXrEWvtJ+pIKAAAAoDnRRudtTV0tc1odxxdLWpxSioAMwMqC8BuGZQIA4L50DssE0Ei0jsFvKNIA4FE00vkCwR0AAAAASTTSeR3BHQAgZTT4AgDgPoI7wA3UhOFXNPkCgCexHoA/ENwBLmKjUAAA0JqwpY23EdwBAFJmWS4TAADXEdwBANKG3mgA8Cba6PyB4A4AAACAJLZp8jqCO8AFNI7BbyjTAAC4j+AOcBGtY/AbyjQAeBONdP5AcAcAAABAEjvaeB3BHQAAAAD4AMEdAN9jqGALYDwPAACuI7gDXMByw/Ar4mgA8Cb2K/UHgjvARfQoAQCA1oS6ibcR3AEAUmYZlwkAgOsI7gD4Ho2QLYcWXwDwJpro/IHgDgAAAEAcrXReRnAHuIAhbPAb5uEDAOA+gjvARYbWMfgMZRoAvIlGOn8guAPge4aJYAAAJIWPTG8juAMApIwGXwAA3EdwB7iAoQ/wK1p8AcCbqJr4A8Ed4CIqwgAAoDWhauJtBHcAfI8PquZHbzQAAO4juAMApA290QDgUbTS+QLBHQAAAABJrDDtdQR3gAtoG2sZNEK2HEupBgDAdQR3AHyPRsiWRGYDgBfRROcPBHcAAAAAJNFE53UEdwCAlDEEFgAA9xHcAfAt5oG1PIbAAoA30UjnDwR3gAssT9AWZRhkAgBAUmik8zaCO8BFLDcMv6C5AgAA9xHcAQDShuYKAPAmpjL4A8EdAN9i9CsAAI3DVAZvI7gD4H98TgEAgAxAcAe4gA4l+A7dpADgaTzG/YHgDnARHUrwG9YIAgBv4znubS0W3Blj+hpj7jbGLKzvGACkG59TAAAgEyQV3Blj5hhj1hhjPq5x/EBjzBfGmOXGmJn13cNau8Jae3pDxwAA3sNoHgDwNoZl+kMwyfPmSrpV0r0VB4wxAUm3SZokqUjS28aYRZICkq6rcf1p1to1KacWANCqscoaAADuSSq4s9YuNcb0rnF4N0nLrbUrJMkYM1/SVGvtdZKmpDORgO/QOtYiaIUEAACZJJU5d90lraryuih+rFbGmA7GmDskjTTGXFLXsVquO8sY844x5p21a9emkFyg9WHScssgn5sfgTQAeFuXwixJfGZ6XbLDMmtT2399nR/v1tr1kn7W0LFarpstabYkjR49muoDALRiVAoAwJsunzJYPduv1KCuhW4nBSlIJbgrktSzyusekr5NLTkAAAAAWlrfTvn6/dShbicDKUoluHtbUn9jTB9JqyUdL+mEtKQK8DnLpLsWUdGL1CEvy92EZIDhPdtKksb37+RySjJDQVZQm0rK3U5GxjhnQj89/eF3bicjo1x04AB1yufZDTRWUsGdMeYhSRMkdTTGFEm6wlp7tzHml5KeU2yFzDnW2k+aLaWADzGCrXllhwL601HDNHanDm4nxfdG9GyrT38/WbnhVNoMkax3Lp/IPMcWdPGBA3XxgQPdTkZG+fmEndxOAuBJya6WOa2O44slLU5rigAgjY4d07Phk5AWBHYtJysYcDsJAIBWKJXVMgEAAAAArQTBHQAAAAD4AMEd4ALmygAAACDdCO4AFxk2BQMAAECaENwBAAAAgA8Q3AEAAACADxDcAQAAAIAPENwBLmBBFQAAAKQbwR3gIpZTAQAAQLoQ3AEAAACADxDcAQAAAIAPENwBAAAAgA8Q3AEuYD0VAAAApBvBHeAiw4oqAAAASBOCOwAAAADwAYI7AAAAAPABgjvABRWjMQ3jMgEAAJAmQbcTAGSifQZ00kl77Khf7beT20kBAACATxDcAS4IBRz94fChbicDAAAAPsKwTAAAAADwAYI7AAAAAPABgjsAAAAA8AGCOwAAAADwAYI7AAAAAPABgjsAAAAA8AGCOwAAAADwAYI7AAAAAPABgjsAAAAA8AGCOwAAAADwAYI7AAAAAPABgjsAAAAA8AGCOwAAAADwAWOtdTsNSTPGrJX0X7fTUYuOkta5nQj4FuULzY0yhuZE+UJzonyhObXW8rWjtbZTbW94KrhrrYwx71hrR7udDvgT5QvNjTKG5kT5QnOifKE5ebF8MSwTAAAAAHyA4A4AAAAAfIDgLj1mu50A+BrlC82NMobmRPlCc6J8oTl5rnwx5w4AAAAAfICeOwAAAADwAYK7FBljDjTGfGGMWW6Mmel2euBtxpiexpiXjTGfGWM+McacFz/e3hjzvDFmWfxrO7fTCu8yxgSMMe8bY56Kv+5jjHkzXr4eNsaE3U4jvMkY09YYs9AY83n8ObkLfyMAAAO8SURBVLYnzy+kizHm1/HPxo+NMQ8ZY7J5fiEVxpg5xpg1xpiPqxyr9ZllYm6O1/k/NMaMci/ldSO4S4ExJiDpNkkHSRosaZoxZrC7qYLHlUu6wFo7SNIekn4RL1MzJb1ore0v6cX4a6CpzpP0WZXXf5R0Y7x8/SjpdFdSBT+4SdKz1tqBkoYrVs54fiFlxpjuks6VNNpaO1RSQNLx4vmF1MyVdGCNY3U9sw6S1D/+7yxJt7dQGhuF4C41u0labq1dYa0tlTRf0lSX0wQPs9Z+Z619L/79JsUqRt0VK1fz4qfNk3S4OymE1xljekg6RNJd8ddG0n6SFsZPoXyhSYwxhZL2lnS3JFlrS621G8TzC+kTlJRjjAlKypX0nXh+IQXW2qWSfqhxuK5n1lRJ99qYNyS1Ncbs0DIpTR7BXWq6S1pV5XVR/BiQMmNMb0kjJb0pqYu19jspFgBK6uxeyuBxf5V0kaRo/HUHSRusteXx1zzH0FR9Ja2VdE982O9dxpg88fxCGlhrV0uaJekbxYK6nyS9K55fSL+6nlmeqPcT3KXG1HKM5UeRMmNMvqRHJZ1vrd3odnrgD8aYKZLWWGvfrXq4llN5jqEpgpJGSbrdWjtS0hYxBBNpEp/3NFVSH0ndJOUpNkyuJp5faC6e+LwkuEtNkaSeVV73kPStS2mBTxhjQooFdg9Yax+LH/6+ous//nWNW+mDp+0l6TBjzErFhpHvp1hPXtv4MCeJ5xiarkhSkbX2zfjrhYoFezy/kA4TJX1trV1rrS2T9JikseL5hfSr65nliXo/wV1q3pbUP75SU1ixib2LXE4TPCw+/+luSZ9Za/9S5a1Fkk6Jf3+KpH+0dNrgfdbaS6y1Pay1vRV7Xr1krZ0u6WVJR8dPo3yhSay1/5O0yhgzIH5of0mfiucX0uMbSXsYY3Ljn5UV5YvnF9KtrmfWIkknx1fN3EPSTxXDN1sTNjFPkTHmYMVavgOS5lhrr3E5SfAwY8w4Sa9K+kiVc6IuVWze3SOSein2AXeMtbbmBGAgacaYCZIutNZOMcb0Vawnr72k9yWdaK0tcTN98CZjzAjFFusJS1oh6VTFGpJ5fiFlxpirJB2n2MrS70s6Q7E5Tzy/0CTGmIckTZDUUdL3kq6Q9IRqeWbFGxVuVWx1za2STrXWvuNGuutDcAcAAAAAPsCwTAAAAADwAYI7AAAAAPABgjsAAAAA8AGCOwAAAADwAYI7AAAAAPABgjsAAAAA8AGCOwAAAADwAYI7AAAAAPCB/wdJg5ttC4h2xwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "<Figure size 1080x432 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.semilogy(t_ref, h_ref, label='Reference')\n", - "plt.semilogy(t_old[1:], [d['hu'] for d in fo_old], linewidth=2, label='Old')\n", - "plt.semilogy(t_new[1:], [d['hu'] for d in fo_new], label='New')\n", - "\n", - "plt.legend(loc=6)\n", - "plt.show();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Convergence towards LSODAR reference with step size\n", - "### Zoom out" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 1080x432 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(t_ref, y_ref[:,0], label=\"V ref.\")\n", - "resolutions = (0.1, 0.01, 0.001)\n", - "di_res = {}\n", - "\n", - "for resolution in resolutions:\n", - " t_old, y_old, _, _, _, _ = scipy_aeif(p, rhs_aeif_old, simtime, resolution)\n", - " t_new, y_new, _, _, _, _ = scipy_aeif(p, rhs_aeif_new, simtime, resolution)\n", - " di_res[resolution] = (t_old, y_old, t_new, y_new)\n", - " plt.plot(t_old, y_old[:,0], linestyle=\":\", label=\"V old, r={}\".format(resolution))\n", - " plt.plot(t_new, y_new[:,0], linestyle=\"--\", linewidth=1.5, label=\"V new, r={}\".format(resolution))\n", - "plt.xlim(0., simtime)\n", - "plt.xlabel(\"Time (ms)\")\n", - "plt.ylabel(\"V (mV)\")\n", - "plt.legend(loc=2)\n", - "plt.show();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Zoom in" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4sAAAFzCAYAAACXTZw+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXjU5bn/8feTmSyQsCVswYAEE2jYRJYALYGwCWrLYtliVShFW9HTc6T1CO3Rqm1/pdWj9BxbsVaE9ljSugCW1gAqCBQBgUJRdiVCILJvgWSSmXl+f0wSEmayAMlMSD6v68rFzPO9v9+5R7ic3PM83+c21lpEREREREREygoLdQIiIiIiIiJS96hYFBERERERET8qFkVERERERMSPikURERERERHxo2JRRERERERE/KhYFBERERERET/OUCdQE1q2bGk7duwY6jRERERERERCYuvWrSetta1q8pr1oljs2LEjW7ZsCXUaIiIiIiIiIWGM+aKmr6llqCIiIiIiIuJHxaKIiIiIiIj4UbEoIiIiIiIifurFPYuBFBUVkZOTQ0FBQahTkWsUFRVFQkIC4eHhoU5FRERERKTBqbPFojFmNPBrwAH83lo792rOz8nJoUmTJnTs2BFjTK3kKLXHWsupU6fIyckhMTEx1OmIiIiIiDQ4dXIZqjHGAfwGuAPoCmQYY7pezTUKCgqIi4tToXiDMsYQFxenmWERERERkRCpk8UikAocsNZ+bq0tBDKBsVd7ERWKNzb9/YmIiIiIhE5dLRZvAg6XeZ5TPHbDSE9PZ8WKFeXG5s2bx8yZM6/5muvWraNbt2706tWL/Pz8601RREQaAK/X0vOpFfz540OhTkVERG4wdbVYDDSlZMsFGPOgMWaLMWbLiRMngpRW9WVkZJCZmVluLDMzk4yMjArPsdbi9XorPP7666/zwx/+kO3bt9OoUaMay1VEROqvQo+X8wVunlj2aahTERGRG0xdLRZzgPZlnicAR8sGWGt/Z63ta63t26pVq6AmVx0TJkxg+fLluFwuALKzszl69CiDBg0qF5ednU1KSgozZ86kd+/eHD58mJUrVzJw4EB69+7NxIkTycvL4/e//z1/+ctfeOaZZ/jWt74VirckIiIiIiINSF3dDfVjINkYkwgcAaYA91zrxZ7+66fsOnq+pnIDoGu7pvzkG90qPB4XF0dqaipZWVmMHTuWzMxMJk+eHPA+vL179/Laa6/x29/+lpMnT/Kzn/2M9957j+joaH75y1/y/PPP8+STT7J+/Xq+/vWvM2HChBp9LyIiIiIiIleqk8WitdZtjHkEWIGvdcYCa+0Nt36mZClqSbG4YMGCgHE333wzAwYMAGDjxo3s2rWLr33tawAUFhYycODAoOUsIiIiIiICdbRYBLDW/h34e01cq7IZwNo0btw4Zs2axbZt28jPz6d3794B46Kjo0sfW2sZOXIkixcvDlaaIiIiIiIifurqPYv1QkxMDOnp6UyfPr3SjW3KGjBgAP/4xz84cOAAAJcuXWLfvn21maaIiIiIiIgfFYu1LCMjgx07djBlypRqxbdq1YqFCxeSkZFBz549GTBgAHv27AkY26tXr5pMVUREREREpFSdXYZaX4wfPx5rbYXHO3bsyCeffFJubNiwYXz88cd+sQsXLiz3fPv27TWSo4iIiIiIyJU0sygiIiIiIiJ+VCyKiIiIiIiIHxWLIiIiIiIi4kfFooiIiATd0X27+d9pkzj86b9CnYqIiFRAxaKIiIgEXZHLRWH+JUyYfhUREamr9H9oERERCboTXxz0/XkoO7SJiIhIhVQs1pL09HRWrFhRbmzevHnMnDmz2teIiYkJOD5t2jTefPPN68ovkKysLLp06UJSUhJz584NGLN27Vp69+6N0+mslRxERKRhuHj2DABFBQUhzkRERCqiYrGWZGRkkJmZWW4sMzOTjIyMoOfidrurjPF4PDz88MO8++677Nq1i8WLF7Nr1y6/uA4dOrBw4ULuueee2khVREQaCE9REQDOiIgQZyIiIhVRsVhLJkyYwPLly3G5XABkZ2dz9OhRBg0a5Bf7/PPP0717d7p37868efP8jltreeSRR+jatSt33XUXx48fr/L1p02bxqxZsxg6dCiPP/54lfGbN28mKSmJTp06ERERwZQpU1i2bJlfXMeOHenZsydhusdERESuQ7PWbQGIig68iqasixs3YavxxaeIiNQsZ6gTCJrX7vIf6zYOUh+Awkvw+kT/473ugdu+BRdPwV/uL3/s23+r9OXi4uJITU0lKyuLsWPHkpmZyeTJkzHGlIvbunUrr732Gps2bcJaS//+/RkyZAi33XZbacySJUvYu3cvO3fu5NixY3Tt2pXp06dX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\n", - "text/plain": [ - "<Figure size 1080x432 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(t_ref, y_ref[:,0], label=\"V ref.\")\n", - "for resolution in resolutions:\n", - " t_old, y_old = di_res[resolution][:2]\n", - " t_new, y_new = di_res[resolution][2:]\n", - " plt.plot(t_old, y_old[:,0], linestyle=\"--\", label=\"V old, r={}\".format(resolution))\n", - " plt.plot(t_new, y_new[:,0], linestyle=\"-.\", linewidth=2., label=\"V new, r={}\".format(resolution))\n", - "plt.xlim(90., 92.)\n", - "plt.ylim([-62., 2.])\n", - "plt.xlabel(\"Time (ms)\")\n", - "plt.ylabel(\"V (mV)\")\n", - "plt.legend(loc=2)\n", - "plt.show();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "-----------------------------\n", - "### License\n", - "\n", - "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", - "\n", - "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", - "\n", - "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/doc/htmldoc/neurons/model_details/noise_generator.ipynb b/doc/htmldoc/neurons/model_details/noise_generator.ipynb deleted file mode 100644 index 65c9f589f7..0000000000 --- a/doc/htmldoc/neurons/model_details/noise_generator.ipynb +++ /dev/null @@ -1,777 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# The NEST `noise_generator`\n", - "\n", - "#### Hans Ekkehard Plesser, 2015-06-25\n", - "\n", - "This notebook describes how the NEST `noise_generator` model works and what effect it has on model neurons.\n", - "\n", - "NEST needs to be in your `PYTHONPATH` to run this notebook.\n", - "\n", - "## Basics\n", - "\n", - "The `noise_generator` emits \n", - "\n", - "1. a piecewise constant current \n", - "1. that changes at fixed intervals $\\delta$. \n", - "1. For each interval, a new amplitude is chosen from the normal distribution.\n", - "1. Each target neuron receives a different realization of the current.\n", - "\n", - "To be precise, the output current of the generator is given by\n", - "\n", - "$$I(t) = \\mu + \\sigma N_j \\qquad\\text{with $j$ such that}\\quad j\\delta < t \\leq (j+1)\\delta$$\n", - "\n", - "where $N_j$ is the value drawn from the zero-mean unit-variance normal distribution for interval $j$ containing $t$. \n", - "\n", - "When using the generator with modulated variance, the noise current is given by\n", - "\n", - "$$I(t) = \\mu + \\sqrt{\\sigma^2 + \\sigma_m^2\\sin(2\\pi f j\\delta + \\frac{2\\pi}{360}\\phi_d)} N_j \\;.$$\n", - "\n", - "Mathematical symbols match model parameters as follows\n", - "\n", - "|Symbol|Parameter|Unit|Default|Description|\n", - "|------|:--------|:---|------:|:----------|\n", - "|$\\mu$|`mean`|pA|0 pA|mean of the noise current amplitude|\n", - "|$\\sigma$|`std`|pA|0 pA|standard deviation of the noise current amplitude|\n", - "|$\\sigma_m$|`std_mod`|pA|0 pA|modulation depth of the std. deviation of the noise current amplitude|\n", - "|$\\delta$|`dt`|ms|1 ms|interval between current amplitude changes|\n", - "|$f$|`frequency`|Hz|0 Hz| frequency of variance modulation|\n", - "|$\\phi_d$|`phase`|[deg]|0$^{\\circ}$| phase of variance modulation|\n", - "\n", - "For the remainder of this document, we will only consider the current at time points $t_j=j\\delta$ and define\n", - "\n", - "$$I_j = I(t_j+) = \\mu + \\sigma N_j $$\n", - "\n", - "and correspondingly for the case of modulated noise. Note that $I_j$ is thus the current emitted during $(t_j, t_{j+1}]$, following NEST's use of left-open, right-closed intervals. We also set $\\omega=2\\pi f$ and $\\phi=\\frac{2\\pi}{360}\\phi_d$ for brevity.\n", - "\n", - "### Properties of the noise current\n", - "\n", - "1. The noise current is a *piecewise constant* current. Thus, it is only an approximation to white noise and the properties of the noise will depend on the update interval $\\delta$. The default update interval is $\\delta = 1$ms. We chose this value so that the default would be independent from the time step $h$ of the simulation, assuming that time steps larger than 1 ms are rarely used. It also is plausible to assume that most time steps chosen will divide 1 ms evenly, so that changes in current amplitude will coincide with time steps. If this is not the case, the subsequent analysis does not apply exactly.\n", - "1. The currents to all targets of a noise generator have different amplitudes, but always change simultaneously at times $j\\delta$.\n", - "1. Across an ensemble of targets or realizations, we have\n", - "\\begin{align}\n", - "\\langle I_j\\rangle &= \\mu \\\\\n", - "\\langle \\Delta I_j^2\\rangle &= \\sigma^2 \\qquad \\text{without modulation} \\\\\n", - "\\langle \\Delta I_j^2\\rangle &= \\sigma^2 + \\sigma_m^2\\sin( \\omega j\\delta + \\phi) \\qquad \\text{with modulation.} \n", - "\\end{align}\n", - "1. Without modulation, the autocorrelation of the noise is given by\n", - "$$\\langle (I_j-\\mu) (I_k-\\mu)\\rangle = \\sigma^2\\delta_{jk}$$\n", - "where $\\delta_{jk}$ is Kronecker's delta.\n", - "1. With modulation, the autocorrlation is\n", - "$$\\langle (I_j-\\mu) (I_k-\\mu)\\rangle = \\sigma_j^2\\delta_{jk}\\qquad\\text{where}\\; \\sigma_j = \\sqrt{\\sigma^2 + \\sigma_m^2\\sin( j\\delta\\omega + \\phi_d)}\\;.$$\n", - "Note that it is currently not possible to record this noise current directly in NEST, since a `multimeter` cannot record from a `noise_generator`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Noise generators effect on a neuron\n", - "\n", - "Precisely how a current injected into a neuron will affect that neuron, will obviously depend on the neuron itself. We consider here the subthreshold dynamics most widely used in NEST, namely the leaky integrator. The analysis that follows is applicable directly to all `iaf_psc_*` models. It applies to conductance based neurons such as the `iaf_cond_*` models only as long as no synaptic input is present, which changes the membrane conductances.\n", - "\n", - "### Membrane potential dynamics\n", - "\n", - "We focus here only on subthreshold dynamics, i.e., we assume that the firing threshold of the neuron is $V_{\\text{th}}=\\infty$. We also ignore all synaptic input, which is valid for linear models, and set the resting potential $E_L=0$ mV for convenience. The membrane potential $V$ is then governed by\n", - "\n", - "$$\\dot{V} = - \\frac{V}{\\tau} + \\frac{I}{C}$$\n", - "\n", - "where $\\tau$ is the membrane time constant and $C$ the capacitance. We further assume $V(0)=0$ mV. We now focus on the membrane potential at times $t_j=j\\delta$. Let $V_j=V(j\\delta)$ be the membrane potential at time $t_j$. Then, a constant currant $I_j$ will be applied to the neuron until $t_{j+1}=t_j+\\delta$, at which time the membrane potential will be\n", - "\n", - "$$V_{j+1} = V_j e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_j\\tau}{C} \\;.$$\n", - "\n", - "We can apply this backward in time towards $V_0=0$\n", - "\n", - "\\begin{align}\n", - "V_{j+1} &= V_j e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_j\\tau}{C} \\\\\n", - " &= \\left[V_{j-1} e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_{j-1}\\tau}{C}\\right]\n", - " e^{-\\delta/\\tau} + \\left(1-e^{-\\delta/\\tau}\\right)\\frac{I_j\\tau}{C} \\\\\n", - " &= \\left(1-e^{-\\delta/\\tau}\\right)\\frac{\\tau}{C}\\sum_{k=0}^{j} I_k e^{-(j-k)\\delta/\\tau} \\\\\n", - " &= \\left(1-e^{-\\delta/\\tau}\\right)\\frac{\\tau}{C}\\sum_{k=0}^{j} I_{k} e^{-k\\delta/\\tau} \\;.\n", - "\\end{align}\n", - "\n", - "In the last step, we exploited the mutual independence of the random current amplitudes $I_k$, which allows us to renumber them arbitratily." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Mean and variance of the membrane potential\n", - "\n", - "The mean of the membrane potential at $t_{j+1}$ is thus\n", - "\n", - "\\begin{align}\n", - "\\langle V_{j+1}\\rangle &= \\left(1-e^{-\\delta/\\tau}\\right)\\frac{\\tau}{C}\\sum_{k=0}^{j} \\langle I_{k} \\rangle e^{-k\\delta/\\tau}\\\\\n", - " &= \\frac{\\mu\\tau}{C}\\left(1-e^{-\\delta/\\tau}\\right)\\sum_{k=0}^{j} e^{-k\\delta/\\tau}\\\\\n", - " &= \\frac{\\mu\\tau}{C}\\left(1-e^{-(j+1)\\delta/\\tau}\\right)\\\\\n", - " &= \\frac{\\mu\\tau}{C}\\left(1-e^{-t_{j+1}/\\tau}\\right)\n", - "\\end{align}\n", - "\n", - "as expected; note that we used the geometric sum formula in the second step.\n", - "\n", - "To obtain the variance of the membrane potential at $t_{j+1}$, we first compute the second moment\n", - "\n", - "$$\\langle V_{j+1}^2 \\rangle = \\frac{\\tau^2}{C^2}\\left(1-e^{-\\delta/\\tau}\\right)^2 \\left\\langle\\left(\\sum_{k=0}^{j} I_{k} e^{-k\\delta/\\tau}\\right)^2\\right\\rangle$$\n", - "\n", - "Substituting $q = e^{-\\delta/\\tau}$ and $\\alpha = \\frac{\\tau^2}{C^2}\\left(1-e^{-\\delta/\\tau}\\right)^2= \\frac{\\tau^2}{C^2}\\left(1-q\\right)^2$ and , we have\n", - "\n", - "\\begin{align}\n", - "\\langle V_{j+1}^2 \\rangle &= \\alpha \\left\\langle\\left(\\sum_{k=0}^{j} I_{k} q^k\\right)^2\\right\\rangle \\\\\n", - " &= \\alpha \\sum_{k=0}^{j} \\sum_{m=0}^{j} \\langle I_k I_m \\rangle q^{k+m} \\\\\n", - " &= \\alpha \\sum_{k=0}^{j} \\sum_{m=0}^{j} (\\mu^2 + \\sigma_k^2 \\delta_{km}) q^{k+m} \\\\\n", - " &= \\alpha \\mu^2 \\left(\\sum_{k=0}^j q^k\\right)^2 + \\alpha \\sum_{k=0}^{j} \\sigma_k^2 q^{2k} \\\\\n", - " &= \\langle V_{j+1}\\rangle^2 + \\alpha \\sum_{k=0}^{j} \\sigma_k^2 q^{2k} \\;.\n", - "\\end{align}\n", - "\n", - "Evaluating the remaining sum for the modulate case will be tedious, so we focus for now on the unmodulated case, i.e., $\\sigma\\equiv\\sigma_k$, so that we again are left with a geometric sum, this time over $q^2$. We can now subtract the square of the mean to obtain the variance\n", - "\n", - "\\begin{align}\n", - "\\langle (\\Delta V_{j+1})^2 \\rangle &= \\langle V_{j+1}^2 \\rangle - \\langle V_{j+1}\\rangle^2 \\\\\n", - " &= \\alpha \\sigma^2 \\frac{q^{2(j+1)}-1}{q^2-1} \\\\\n", - " &= \\frac{\\sigma^2\\tau^2}{C^2} (1-q)^2 \\frac{q^{2(j+1)}-1}{q^2-1} \\\\\n", - " &= \\frac{\\sigma^2\\tau^2}{C^2} \\frac{1-q}{1+q}\\left(1-q^{2(j+1)}\\right) \\\\\n", - " &= \\frac{\\sigma^2\\tau^2}{C^2} \\frac{1-e^{-\\delta/\\tau}}{1+e^{-\\delta/\\tau}}\\left(1-e^{-2t_{j+1}/\\tau}\\right) \\;.\n", - "\\end{align}\n", - "\n", - "In the last step, we used that $1-q^2=(1-q)(1+q)$.\n", - "\n", - "The last term in this expression describes the approach of the variance of the membrane potential to its steady-state value. The fraction in front of it describes the effect of switching current amplitudes at intervals $\\delta$ instead of instantenously as in real white noise. \n", - "\n", - "We now have in the long-term limit\n", - "\n", - "$$\\langle (\\Delta V)^2 \\rangle = \\lim_{j\\to\\infty} \\langle (\\Delta V_{j+1})^2 \\rangle \n", - " = \\frac{\\sigma^2\\tau^2}{C^2} \\frac{1-e^{-\\delta/\\tau}}{1+e^{-\\delta/\\tau}} \\;. $$\n", - " \n", - "We expand the fraction:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\frac{x}{2} - \\frac{x^{3}}{24} + \\frac{x^{5}}{240} + O\\left(x^{6}\\right)$" - ], - "text/plain": [ - " 3 5 \n", - "x x x ⎛ 6⎞\n", - "─ - ── + ─── + O⎝x ⎠\n", - "2 24 240 " - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sympy\n", - "sympy.init_printing()\n", - "x = sympy.Symbol('x')\n", - "sympy.series((1-sympy.exp(-x))/(1+sympy.exp(-x)), x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We thus have for $\\delta \\ll \\tau$ and $t\\gg\\tau$\n", - "\n", - "$$\\langle (\\Delta V)^2 \\rangle \n", - " \\approx \\frac{\\delta\\tau \\sigma^2 }{2 C^2} \\;.$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### How to obtain a specific mean and variance of the potential\n", - "\n", - "In order to obtain a specific mean membrane potential $\\bar{V}$ with standard deviation $\\Sigma$ for given neuron parameters $\\tau$ and $C$ and fixed current-update interval $\\delta$, we invert the expressions obtained above.\n", - "\n", - "For the mean, we have for $t\\to\\infty$\n", - "\n", - "$$\\langle V\\rangle = \\frac{\\mu\\tau}{C} \\qquad\\Rightarrow\\qquad \\mu = \\frac{C}{\\tau} \\bar{V}$$\n", - "\n", - "and for the standard deviation\n", - "\n", - "$$\\langle (\\Delta V)^2 \\rangle \\approx \\frac{\\delta\\tau \\sigma^2 }{2 C^2}\n", - "\\qquad\\Rightarrow\\qquad \\sigma = \\sqrt{\\frac{2}{\\delta\\tau}}C\\Sigma \\;.$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tests and examples\n", - "\n", - "We will now test the expressions derived above against NEST. We first define some helper functions." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def noise_params(V_mean, V_std, dt=1.0, tau_m=10., C_m=250.):\n", - " 'Returns mean and std for noise generator for parameters provided; defaults for iaf_psc_alpha.'\n", - " \n", - " return C_m / tau_m * V_mean, math.sqrt(2/(tau_m*dt))*C_m*V_std" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "def V_asymptotic(mu, sigma, dt=1.0, tau_m=10., C_m=250.):\n", - " 'Returns asymptotic mean and std of V_m'\n", - " \n", - " V_mean = mu * tau_m / C_m\n", - " V_std = (sigma * tau_m / C_m) * np.sqrt(( 1 - math.exp(-dt/tau_m) ) / ( 1 + math.exp(-dt/tau_m) ))\n", - " \n", - " return V_mean, V_std" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "def V_mean(t, mu, tau_m=10., C_m=250.):\n", - " 'Returns predicted voltage for given times and parameters.'\n", - " \n", - " vm, _ = V_asymptotic(mu, sigma, tau_m=tau_m, C_m=C_m)\n", - " return vm * ( 1 - np.exp( - t / tau_m ) )" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "def V_std(t, sigma, dt=1.0, tau_m=10., C_m=250.):\n", - " 'Returns predicted variance for given times and parameters.'\n", - " \n", - " _, vms = V_asymptotic(mu, sigma, dt=dt, tau_m=tau_m, C_m=C_m)\n", - " return vms * np.sqrt(1 - np.exp(-2*t/tau_m))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "import nest\n", - "\n", - "def simulate(mu, sigma, dt=1.0, tau_m=10., C_m=250., N=1000, t_max=50.):\n", - " '''\n", - " Simulate an ensemble of N iaf_psc_alpha neurons driven by noise_generator.\n", - " \n", - " Returns\n", - " - voltage matrix, one column per neuron\n", - " - time axis indexing matrix rows\n", - " - time shift due to delay, time at which first current arrives\n", - " '''\n", - " \n", - " resolution = 0.1\n", - " delay = 1.0\n", - "\n", - " nest.ResetKernel()\n", - " nest.resolution = resolution\n", - " ng = nest.Create('noise_generator', params={'mean': mu, 'std': sigma, 'dt': dt})\n", - " vm = nest.Create('voltmeter', params={'interval': resolution})\n", - " nrns = nest.Create('iaf_psc_alpha', N, params={'E_L': 0., 'V_m': 0., 'V_th': 1e6,\n", - " 'tau_m': tau_m, 'C_m': C_m})\n", - " nest.Connect(ng, nrns, syn_spec={'delay': delay})\n", - " nest.Connect(vm, nrns)\n", - " \n", - " nest.Simulate(t_max)\n", - " \n", - " # convert data into time axis vector and matrix with one column per neuron\n", - " t, s, v = vm.events['times'], vm.events['senders'], vm.events['V_m']\n", - " tix = np.array(np.round(( t - t.min() ) / resolution), dtype=int)\n", - " sx = np.unique(s)\n", - " assert len(sx) == N\n", - " six = s - s.min()\n", - " V = np.zeros((tix.max()+1, N))\n", - " for ix, vm in enumerate(v):\n", - " V[tix[ix], six[ix]] = vm\n", - " \n", - " # time shift due to delay and onset after first step\n", - " t_shift = delay + resolution\n", - " return V, np.unique(t), t_shift" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### A first test simulation" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mu = 0.00, sigma = 111.80\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "dt = 1.0\n", - "mu, sigma = noise_params(0., 1., dt=dt)\n", - "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", - "\n", - "V, t, ts = simulate(mu, sigma, dt=dt)\n", - "V_mean_th = V_mean(t, mu)\n", - "V_std_th = V_std(t, sigma, dt=dt)\n", - "\n", - "plt.plot(t, V.mean(axis=1), 'b-', label=r'$\\bar{V_m}$')\n", - "plt.plot(t + ts, V_mean_th, 'b--', label=r'$\\langle V_m \\rangle$')\n", - "plt.plot(t, V.std(axis=1), 'r-', label=r'$\\sqrt{\\bar{\\Delta V_m^2}}$')\n", - "plt.plot(t + ts, V_std_th, 'r--', label=r'$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$')\n", - "\n", - "plt.legend()\n", - "plt.xlabel('Time $t$ [ms]')\n", - "plt.ylabel('Membrane potential $V_m$ [mV]')\n", - "plt.xlim(0, 50);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Theory and simulation are in excellent agreement. The regular \"drops\" in the standard deviation are a consquence of the piecewise constant current and the synchronous switch in current for all neurons. It is discussed in more detail below." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### A case with non-zero mean\n", - "\n", - "We repeat the previous simulation, but now with non-zero mean current." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mu = 50.00, sigma = 111.80\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "dt = 1.0\n", - "mu, sigma = noise_params(2., 1., dt=dt)\n", - "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", - "\n", - "V, t, ts = simulate(mu, sigma, dt=dt)\n", - "V_mean_th = V_mean(t, mu)\n", - "V_std_th = V_std(t, sigma, dt=dt)\n", - "\n", - "plt.plot(t, V.mean(axis=1), 'b-', label=r'$\\bar{V_m}$')\n", - "plt.plot(t + ts, V_mean_th, 'b--', label=r'$\\langle V_m \\rangle$')\n", - "plt.plot(t, V.std(axis=1), 'r-', label=r'$\\sqrt{\\bar{\\Delta V_m^2}}$')\n", - "plt.plot(t + ts, V_std_th, 'r--', label=r'$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$')\n", - "\n", - "plt.legend()\n", - "plt.xlabel('Time $t$ [ms]')\n", - "plt.ylabel('Membrane potential $V_m$ [mV]')\n", - "plt.xlim(0, 50);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We again observe excellent agreement between theory and simulation." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Shorter and longer switching intervals\n", - "\n", - "We now repeat the previous simulation for zero mean with shorter ($\\delta=0.1$ ms) and longer ($\\delta=10$ ms) switching intervals." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mu = 0.00, sigma = 353.55\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3dd3hUZfbA8e+hRwRBmiggoJSwigjYUMS2iqCAiKCiWFawI/tbu6vLWta+tmVVFGVtoLIKgkpTARVQadLBqJQILlWaEEJyfn+cGSZlkswkM5kMOZ/nmWdm7r1z7zs3mXvu20VVcc4554pSIdEJcM45lxw8YDjnnIuIBwznnHMR8YDhnHMuIh4wnHPORcQDhnPOuYhUSnQCSqpu3bratGnTRCfDOeeSyty5czepar1oPpP0AaNp06bMmTMn0clwzrmkIiKro/2MF0k555yLiAcM55xzEfGA4ZxzLiIeMJxzzkXEA4ZzzrmIeMBwzjkXEQ8YzrnYysyEiRPh118TnRIXYx4wnDsQZGbC88/DokWJTgn89a9w/vnQti18/z1MmgQzZ1rasrMTnTpXAknfcc+5MkUV/u//4Msv4cwzoWJFePRREInvcR9/HO6/317PmAG1akGNGlDaoyB8+SU89RT84Q/w44/Qrl3u9RdeCB98AJUKufRkZ9t+Tj89/uct2WRmwuefw0knwdSp9ndu2RKOOML+1+JNVZP60aFDB3UHgK1bVbt3V33ooUSnpGTeeEPVwkbux5NPqv7vf/E55qJFqpUrq55yimrNmqFjNmmimp0dn2MuX646b17o/a+/qvbpo1qpkh132zbVZctUn3tOdcoU1QkTVP/2N0vX+eerrl0b+uz27ap79qjOnGnn6JlnbLujjlI9+2zVVavi8x2SxZdfqo4YYa//7//C/3+J2LmOAjBHo7zeJvyCX9KHB4wksmOHXRxGj1bt31914UJbnpWleuGFoX/+bdsSm87i2rdPtWVL1eOOU50/X/XMM+3iGfxetWqp3nyz6i+/lOw46emqn31mr5ctU01NVa1XT3XDBtUlS1QfeUS1YsXQcc86S/XRR+08Z2ZaOvNavlx1wYLwx/v2W9XBg1XbtFEdMkT1449Vq1WzfV9+uWqXLvY6JUX1L39RXbeu4LQ/8oht26eP/R/UrWvva9QInaNDDsl9MbzqKtW5cy2g5PXbb6r33qs6bpx9v+++s++Y06xZqjfdpNq6ter48bZtssjMzP3/A6rNmqkOGBBa3qCBav36qgcdpPr116qLF0d0o+ABw5UdGzfaD3zKFNU//cnuMOvXz30hqFNH9dln7U4SLIiA6r//nejUF8+oUZb+99/PvXzHDtWxY1Uvvli1ShW7SE6ebBf7zz+P7hhffGHnDVRPOsmeDz44/35271a94QbVa65Rbd/etmvd2i4qhx2m+o9/WOCYNEn1yCNDf5PDD1d98EHV339X/fFHC3Dh7miDj+rV7QJ22GF2sYrE4MG5L4KXX6569dWqRx9tgeOoo+wcvvFG7jvqChVUly6189a/vwW4K67In6Yrr8x9vsKlu6CgvXKlBZ6yIJgjCz5OPNH+pnv32vr0dNU5c+z199/nzl0+/3yRuy/TAQN4DdgALC5gvQDPA2nAQqB9JPv1gFFGtW0b/od68MF2Z7lsmWrt2rbssMNUX33V7orat1dt2LDgu92yKitL9Q9/sLvwwi44y5fbdjnPyZIlBW8/YULoznrHDtVDD7ULf2qqffb661XXry88bdnZqn//u12QU1KsmCcYcCpVCqWjb1/VCy4I/3f74QcLesH3J5xgxUp57+YjsXSp7i9GyZsbyc7OfXe8YUPo/yaYa6pQIXfarrlG9b77VBs3Di2bN0/1scdCx7nhBtXhw0PrBw60nMuLL9r/2n33hdZffXX03ynWFi8OpfW22yIrWty8WbVrV/tMpUqqTz9tOfoClPWAcTrQvpCA0Q34NBA4Tga+iWS/HjDKmGCRU84f9HXXqb73Xv470GXLVG+8MXcZ9ccfhy4OffrY/jZutIvTvffaBe299+yi88ADxbtgxcN//2vf9e23i952507Vu++2O+HgBW3IkNB5uOMOu9M+5ZTQORw7NnShnzXLyvzT06NLY3a2HVvVcnE1a1qO4ocfVH/+ObTdxImqd91lF84+fVSfeCL3fnbvLnndyJo1dlGMxOrVqrt2WW61cWPVP//ZclS1a1tuJBh0srOtLqx69dB569fPLqRBM2daEU5huSZQHTo0dxoWLLDzVBpWrrQbjzp1LGBGKz09VHzVsKHdaIRRnIAh9rnSISJNgQmqekyYdS8D01R1VOD9CuAMVV1f2D47duyoPrx5GTF6NFx2mb3u3Bn++1/4+mu44ILCW8XktWULPPAA/Pvf9vMNqlgRGjSAdetCy559Fm67Lf8+MjOtSWe7dlAh0Hq8QpxakWdlQceOsGsXLFsWXWuVefPgH/+wc9WyJRx3HLz/vp2/XbvgyCOtxdCmTbb90KHWbDU7GypXtmW7d9v3zc6285Wdbd+1dm1bv3Ej7Nljy4OPKlWsZY0q/Pyz7SO4ThUOPtjSAzB3bmh98JJaty4cE/gZz5gBe/fa6+Dfq2HD0PrJk+0c5Vx/5JHWkio7Gz7+OLQ8+NyiBbRpY/udMCH/+j/8AeoFpnL47LPc6+fMsfN59dUweDB88kko3QCzZ8OLL1prrrZtYfhwO5e//27H/Pxz+OYbS/+xx9r5mzrVPnv++dbSq0cPO3+rV9v2eXXrZv+rP/xgf7+8evWCQw+FpUth1qzc6558ElatgnHj4LDD7Pvk1b8/VKtm6xYsyL/+3HPtf/Hjj+075CQC112HiMxV1Y75P1yIaCNMSR5AUwrOYUwATsvx/jOgYwHbDgLmAHOaNGkSfQR2sbdsmeUMQLVzZ9UtW0q+zzFj7C57wADVW26xXEVmppW/p6TYsWrUyH2nvWSJlbsHy8lTU614rF278He06emqGRn2OivL7sA3bLCio2D58M8/q376qd3ljx5tZeuvvGJ3tl98oXr88XasHj3s7vemm6zeJpj7eekl1W7dVM891yqgTz/dHkF//WuoOKVCBbvzT00Nre/UyXIhFSvaM1hletC55+a/Q/7DH3J/Pu/6k08OrT/22PzrzzkntL5p0/zrL7ootD5Yp5LzMWBAaH2VKvnX33yzrcvICH+Hf/fdtn7z5vDrH3nE1q9aFX59sMXQokXh1//rX7Z+1qzw68N955yPQYMsRxPMWeZ9fPWV7X/kyPDrp02z7xasX8r7uPVW+/yjj4Zfv3Gjrb/33vDrd++29bfemn9dpUqqqkmfw/gYeFRVvwq8/wy4U1XnFrZPz2Ek0P/+BykpcO+98J//2B3PvHnQuHH8j52VZXdhxx4L7dvD9ddDaqrlNmbODG0nkjuX0ry53S3Xrw/PPGN3YlWr2p1sZmb4Y/XtC++9l395q1awYoXdzQfv+KtWDT1++AEOOsjuZN9913JZwUflynbnDTBsGEybBvv2QfXqtq5GDeuIB/DGG7B4ce7P164Nt95q68eMgTVr7LtWqGCPOnXg8stt/Ucf2V1ycF2FCnZ33rWrrZ88GXbssOXBfdSrB6ecYuu//BIyMkLrwNYHcxCzZlnag30mRGx9MIfyzTf2N8i5vn596yOSnQ3z54eWB58bNIDDD7f9Ll2af339+vbIzIS0tPDra9e2dK9dG1oe3KZePTvHe/bA+jCFGPXrw4YN1t8hNdX+vzp1sh7sDz8Mv/xi/UQWL4bWrWHECPst7N4NQ4bYPsaPt+Nv2WLvd+60HMq2bfYoSIUKljs+5hjYvj38tocfbjnZbdvsb5fXEUfYd/3tN8uphlmf7DmMl4HLcrxfATQsap9eh5Egn39uLW6Cdy29e6umpcVm31lZ1q4/2Lz2l1+sAvMvf7GKym7drNL1s89U33qr4LvAESNUf/rJng89VLVq1dzrg5WnlSvb86WXqj7+uDWNTUkJVdw3aBCqTMz76NLFmnKWlZY1LrbC1ZFlZ1sOqHr1UEu1kSNVv/kmd/3Iqadas99Nm+xzwf4lYLnI225T/c9/Qv+nr7xi/+vFqbcoBspypbcWHTC6k7vS+9tI9ukBo5Ts3m0tmYYNsyaX7dtbpePAgfZPH41t26wVS7CSd906q1w95RQraglewF9+2dbPm2fvU1JsfYcOdgGfPt3WDx9uP87TTrMK9s8/t6KpXbtyH3fPHtXXX7fP3X23VSz+5S9WLNKmjfVlqFdPcxV5TJsWSk/v3hYYgj/6GTOKfTrdASA72/4fmjXLfRMxcqRd/EXsf7ZyZQsmRx5pxbW7dxfaeqm0lOmAAYwC1gOZQDrwJ+AG4IbAegGGAT8Ciyig/iLvwwNGHCxfbhfHH3+095mZoRY6OR+F9ZfYuTPUs/n33+3u/cQTc5d3//Wvtn7TJtVWrax8/8or7WL+wguh5qaZmaHWPfEyfboFjS5d7DlnU9V166y/SPB8fPut1Wc4p2qdCq+/3nqwB280VC232rt3qHMilKlOg8UJGKVahxEPXocRB2eeaWXqtWpZ+eySJVZO+uKLVrY8YIC1Ppo0ycroAd56CxYutPLmpUutfmHAABg50n4qxx1nLT6aN7fHUUfB8cfba+cOZF99BVOmWL3CddfFr7VelIpTh+EBw4WMGQMvvWTNFK+4wpYtWWL/6H36wJVXWlO9GTMsKFSpAk8/bdu1aWODzbVubU0e27SB006DM85I2NdxzhWsOAHDR6t15uuv4ZJL7HX9+vDyy9bqKXg3dO+91vZ+61Z7X706nHNO6POff27ro+lv4ZxLKv7rdpYzuPJKy0m89ZZloS+5xDo4padbc8EGDaB3b8s1nHSSNZnM2UHtsMMSl37nXKnwgFEerFtnF/xwPZCXLLEgsHev9Tw980xb3qKF9dretcsCRrje1M65cqVs1L642NmzxzoIBQ0fbh3prrvOhj74+mub4OfPf4YTTrChEURg1Ch7/cIL1hFq5Ur417+smMk55/BK7+S1bZv1kg2OFxTUs6f13L36anjoIWuNtH17wfupWtUqsL21knPlild6lxdLl1qFc61a1pT144+tiWrlyjZQW4sW1tpp5kwLFl98ESpqqlDBBgM89FArqvrLXzxYOOci4gEj2Tz2GPz97xYc1q+HLl1CYyc1bGh9Hj74AP74RwsmKSlWR9G3r41sOXeuBRrnnIuS12Eki1GjLGdwzz2Wm1iwwIZZDgaLa66BRo0sxzBkiOUeKlWyYZR37bLPr1zpwcI5V2yewyjL0tOtT8RDD9kImYceasVNY8fa8tGjrb7ipJMsd/HZZ1ZU1bChzbFw/fX2GeeciwEPGGWJqg3BUbOmDaPcvXto5KZrr7XOdDk7xqWk2EQ3n35q6886yybf6dHDemE751wMeZFUWZGdDQMH2jj9nTvbuPnZ2VbsNHo0vPpq7mCxZAmcd57VVTz9tM0PIWJDeHiwcM7FgecwyoLt222ym48/tvdffQVnn20T5xx+eO5tt2yBv/3NBgKsUcMmAbrxxuimBXXOuWIoMmCISCSF4Nmq+lsM0lM+3X+/FUENG2Yd7CZMsJxDjRr5t01Ls6Kp66+31lLesc45V0qK7LgnInuAddh8FQWpqKpNYpmwSCV9x71ff4Wjj7aipJEjw2+zdq1NZH/99aHP+NhNzrkSiFfHvWWqenwRB54fzUFdwJo1Fiiysqy5bDhvv21FTqrWRLZBAw8WzrmEiKTS+5QYbeNyeuYZOPJIm1/irbegVavc63fssAmIrrjCxnhauNCChXPOJUgkAeMpETm1sA1UdU+M0lM+/PabDQAI1nP74otzr8/KglNPtdzF0KE2+12zZqWdSuecyyWSIqkfsKDREHgXGKWqC+KbrAPcqFH2/Omn0LVr/vUVK1oRVePGNqyHc86VARGPVisiRwKXBh7VgFHAaFVdGb/kFS3pKr137LARZFu0sOazEmhLkJUF990Hxx4L/fsnNo3OuQNecSq9I+64p6qrVfXxQAX45cBFwLIo0+jefx82boQnnggFi99/twrtxx+3AQKdc64MijhgiEhlEblQRN4GPgVWAhcX8TEXlJEBt98Of/qTTW/aqZMt37LF+lx88on1w3jmmcSm0znnChBJx70/ApcB3YFvgdHAIFXdFee0HThUrZjpv/+1Cu6bb7bcxa5dcPrp8MMP8N57+Su/nXOuDImk0vte4B3gdlXdEuf0HJjeeMOCxeOPw513hpZXrw79+lmLqLPOSlz6nHMuAj5Fa7z98gv84Q9WmT19us14t3q1TbHatm2iU+ecK6fiOkWriHQE7gOODHxOAFVVv+oV5uabYe9eeP11Cxbp6TZdaoUKsHx57hFonXOuDIvmavU2cAewCMiOT3IOMEuWwLhxNkjg0UfDpk02Cu3mzTB1qgcL51xSiWY+jI2q+pGq/hxoYrtaVVdHczAR6SoiK0QkTUTuDrO+iYh8ISLzRWShiHSLZv9lzt/+ZpMc3XSTNZ298EIrjpowAU44IdGpc865qERzi/s3EXkV+AzICC5U1Q8i+bCIVASGAX8E0oHvROQjVV2aY7O/Au+p6osi0gb4BGgaRRrLjgULrKL74YdtCPKhQ+Gbb2DMGJsgyTnnkkw0AeMaoDVQmVCRlAIRBQzgRCBNVX8CEJHRQE8gZ8BQoGbg9SHYsOrJ6cMPrZ4iOCT5PffAySeHHwrEOeeSQDQB4zhVPbYExzoCWJvjfTpwUp5thgKTReRWoDpwTrgdicggYBBAkyYJmYajcMuXwyuvWHPZ+fOhQwc49FAPFs65pBZNHcbsQDFRcYWbgClvm97LgJGq2gjoBrwpIvnSqKrDVbWjqnasV69eCZIUJ088ATt3Wu7iwgtDI9M651wSiyaHcRpwlYj8jNVhRNusNh1onON9I/IXOf0J6IrteJaIVAPqAhuiSGdiqcLkyXDGGXD33TaHxZNPJjpVzjlXYtEEjJKWp3wHtBCRZsAv2Ki3l+fZZg1wNjBSRFKxUXE3lvC4peu++6yzXp06sGEDzJwJZTEX5JxzUYo4YETbhDbM5/eJyC3AJKAi8JqqLhGRB4E5qvoR8BfgFRH5M1ZcdbUmS1f0jAwYPBiGD4f27WHePBtIsEOHRKfMOediIpLBB+epavuSbgOgqp9gTWVzLnsgx+ulQKGz+5VZb7xhweKww2D0aJst77bbEp0q55yLmSLHkhKR3disewVuAhyiqglprlQmxpJStfGiqla1+SwqVkxsepxzrgjxGkuqdQTbZEVz0APOpEmwbBn07m1Df3z6qfXwds65A0iRAaOkdRflwtNPW8X2+PHQp48HC+cilJmZSXp6Onv27El0Ug5Y1apVo1GjRlSuXLnE+/LR70qqXz8bSLBxY6hZE557LtEpci5ppKenU6NGDZo2bYpIuK5ariRUlc2bN5Oenk6zZs1KvL9oOu65vLZutTm6mzeHtWvh+ee9Ca1zUdizZw916tTxYBEnIkKdOnViloMrVsAQkTYicr6INIpJKpLVjBlW4Q1w7rlw2WWJTY9zSciDRXzF8vwWt0jq78D7wCAROVJVr4pZipLJG2/YNKtz5sDu3TZPt3POHaCKGzCmqOp7wHuxTExSmTsXPvjA5ryoXdsezrkDSufOndmxYweVKlUi4c33y4DiBoxOItIV2AwsU9V/xjBNyeH99+15wgQLGp67cO6A8+WXXyY6CWVKcQPGYlV9SkQqAX+IZYKSQna2FUcBXHedBwvnXLlQ3FZSFwTmrGiuqt/HMkFJ4eOPYf16GwbkuusSnRrnXAmkpaVx7LG5p/rJyMigWbNmLF26tIBPlU9FBgwRCdfTux82XEhvEXkl5qkq6+69154ffxwqeVcW55JZ8+bNWbt2LdnZ2fuXDR8+nC5dutCmTUmmADrwRHK1+0REpgFDVXUNgKr+D5gYeJQv338PixdD/frQv3+iU+OcK6EKFSrQpEkTVq1aRfPmzdm9ezdPP/0006ZNS3TSypxIx5K6HpguIuOAR1Q1ueaoiKVnn7WhP6ZN80EGnYuhIUNgwYLY7rNdO/vJFiU1NZXly5fTvHlzhg0bRo8ePWjatGlsE3MAKLJISlX3quoLQCo2a943IvKgiNSIe+rKml9+sWHLr70WUlMTnRrnXIykpqayYsUKdu7cybBhw7jvvvsSnaQyKZoJlPYAT4nIi8BtwDwReVlVn4pb6sqaG2+EzEw4//xEp8S5A04kOYF4SU1N5fPPP+e5556jf//+NGjQgF9//ZV+/frRvXt3lixZQqdOnZgyZQpDhw7lmGOOSVxiEyjiVlIi0jTQ9+I6oAmwA/hHvBJW5ixfbqPR1qwJXUs6W61zrixJTU3l22+/5bXXXuOOO+4AYP78+fTu3Zs777yTbdu2MXDgQC655BJWry6/A3hH0kpqoYhsAcYCVwO1gM+Bq4CD45q6siTYMur++73uwrkDTKtWrVi0aBGDBg3ikEMOAWDBggWcd955ZGZmUqdOHSpUqMDixYvzNcEtTyIpkroI+Clp5taOh59+go8+gmrV4JZbEp0a51yMVa1alX379uValpaWRsuWLVm4cCGpgTrLVatW0aRJQiYXLRMimUDpx9JISJl2zz2QlWXNOKpVS3RqnHOlYMSIEQC0a9eOdu3aAfDmm28mMkkJ5/NhFCUrC774wuot7r470alxzrmE8YBRlBkzYONGuOoqqFs30alxzrmE8YBRlNtvhypV4I9/THRKnHMuoYqswxCRHUC4Cm8BVFVrxjxVZcWmTTBvng0DcuihiU6Nc84lVCSV3uWvR3dQsCeRD2HunHPRzYchIrWBFsD+pkKqOiPWiSoTsrPhxRctUNx+e6JT45xzCRdxwBCR67AhQRoBC4CTgVnAWfFJWoK1awdbtsAJJ/j0q845R3SV3rcBJwCrVfVM4HggqlFrRaSriKwQkTQRCdtGVUT6ishSEVkiIu9Es/+YWbUKFi2Cli1tzgvnnHNRFUntUdU9IoKIVFXV5SLSKtIPi0hFYBjwR2zU2+9E5CNVXZpjmxbAPcCpqrpVROpHkb7YmT7dnseMgXI8DIBzzuUUTQ4jXURqYWNKTQnMjbEuis+fCKSp6k+quhcYDfTMs81AYJiqbgVQ1Q1R7D923nkHDjkEWkUcD51zSe6ss84q9nStW7du5aKLLop3EhMu4oChqhep6m+qOhS4HxgB9IriWEcAa3O8Tw8sy6kl0FJEvhaR2YHRcfMRkUEiMkdE5mzcGOO5nJYvh8mTYds28Pl8nSsXlixZQp06dYo9XWvt2rXZsmULmzdvLo3kJkyxOu6p6nRV/SiQU4hUuHapeft3VMJaYZ0BXAa8GsjV5D3+cFXtqKod69WrF0USIjBpkj03bw7HHRfbfTvnyqRx48bRq1evXNO1Avunax06dGiR++jevTvjx4+Pb0ITLJKOe1+p6mlhOvBF23EvHWic430j8hdppQOzVTUT+FlEVmAB5LsIj1Fykyfb8+WXe98L50rZGWfkX9a3L9x0E/z+O3Trln/91VfbY9Mm6NMn97pIp+X+5JNPmDBhAlD86Vp79uzJXXfdxdVXXx3ZQZNQJFO0nhZ4rqGqNXM8akTZy/s7oIWINBORKsClwEd5thkLnAkgInWxIqqfojhGyajCl1/a6759S+2wzrnE2b17N3v37qVWLSvMKO50ra1atWLFihXxTGrCRdMP43FVvauoZQVR1X0icgswCagIvKaqS0TkQWCOqn4UWHeuiCwFsoA7VLX0CgXXrYMdO6BBAyinUzA6l0iF5QgOOqjw9XXrRp6jyCklJQURYefOnRx88MFhp2sFipyydfXq1TRr1iz6BCSRaOowwo2+F9Xk1qr6iaq2VNWjVPWRwLIHAsECNf+nqm1U9VhVHR3N/kts/nx7HjbMi6OcK0fOO+88Jk6cCISfrhWKnrJ13Lhx9OyZt+HngSWSKVpvFJFFQKvAdK3Bx8/AovgnsRTNn2+B4txzE50S51wp6tmzJ2PHjgXCT9cKRU/ZOn78eHr06JGQ9JeWSIqk3gE+BR4FcvbO3qGqW+KSqkR5/XWoUwdqlN/xFp0rjzp06MCiRYvYt29f2OlaofApW7du3UpGRgYNGzYs7aSXKol0qm4RqQb0BpqSI9Co6oNxSVmEOnbsqHPmzCn5jvbsgZQUaN0ali0r+f6cc0VatmzZ/ouvi59w51lE5qpqx2j2E83QIGOBbcBcICOagySFkSPt+fyoqmWcc67ciCZgNFLVsD2vDwjByd1vuSWx6XDOuTIqmlZSM0XkwB2Jb948Gz+qefNEp8Q558qkaHIYpwHXiMhPWJFUsKd327ikrDRt3gwZGT5vt3POFSKagHHgFu4vWGC9vG+6KdEpcc65MiuaIqk1QGfgKlVdjY0r1SAuqSptgQ47nHJKYtPhnHNlWDQB49/AKdgosgA7sAmRklt2Njz7LNSvb3UYzjnnwoqmSOokVW0vIvMBAjPiVYlTukrPhx/Cvn1w3nmJTolzzpVp0eQwMgPTrCqAiNQDsgv/SBJ4/XV7Hjw4selwzrkyLpocxvPAh0B9EXkE6IPNvJfcZs+GKlWgY1QdHp1z5YiU0mCkkY68kSjRTNH6NnAnNqbUeqCXqr4Xr4SViowMa1LbsmWiU+KcK8Puuusu9u3bh6rG9VHWFWc+jOVhliWnhQvtuV+/xKbDOVdmBS/mFStWTHRSEq5U58MoczxgOOeK8O2333LCCSdE/bnOnTvTrl07Oh5Axd2RzOl9I3AT0FxEFgYXAwcDX8cxbfE3bhxUrw5HHZXolDjnyqjJkyczZMiQqD/3ZXC65wNI+Z4PY8oUm/exQjQZLedcebJjxw5q+Bw5QARFUqq6TVVXqeplQC3gwsCjcbwTF1cbNtgcGD4Wv3OuAKtXr6Zp06Yl3s/YsWMZOHAgPXv2ZPLkySVPWIJEfGstIoOBt4H6gcdbInJrvBIWd2PG2HOXLolNh3OuzBo/fjwXXnhhvuUffvghIsLy5fvbAJGWlrZ/utagjIwMmjVrRsuWLXnllVcYOXIk7777btzTHS/RlMVch/X2fkBVHwBOBgbGJ1mlYNIke7744sSmw+KPuVEAACAASURBVDlXJmRmZuZbtmbNGho3zl+YMmrUKDp27Mjo0aP3L2vevDlr164lOzvUn3n48OF06dKFNm3aAPDwww9z8803xyH1pSOagCFAVo73WYFlyWn+fKu7aNcu0SlxziXYjBkzaNmyJTt37ty/bPv27RwSZny5nTt3Mn36dEaMGMGoUaP2L69QoQJNmjRh1apVAOzevZunn36aoUOHoqrcddddnH/++bRv3z7u3ydeounp/TrwjYh8GHjfCxgR+ySVkoYNoUEDr/B2rqwYMsSmGoildu1scNEiHH744bRu3ZqJEyfSp08fACZOnEjXrvknGR07diznnHMObdu2pXr16sybN29/EEhNTWX58uU0b96cYcOG0aNHD5o2bcrzzz/P1KlT2bZtG2lpadxwww2x/Z6lJJqe3v8ErgG2AFuBa1S16L9EWbRvHyxaBKedluiUOOfKgKOPPpoBAwYwbty4/cvmzZtHhw4d8m07atQo+vbtC0Dfvn1z5TJSU1NZsWIFO3fuZNiwYdx3330ADB48mLlz5/LSSy8lbbCA6HIYqOo8YF6c0lJ63nkHdu/2FlLOlSUR5ATiqVu3bgwZMoR9+/YhIlSqlP/yuHnzZr799ls++OADAPr160eXLl144oknEBFSU1P5/PPPee655+jfvz8NGhwYUwYFRTM0SDWsA99p2Ii1XwEvquqeOKUtft4LDIF14omJTYdzrsw45JBDOPbYY5kxYwYVK1bk1FNPzbfNmDFj6NatG1WrVgWgWbNmHHbYYXz11Vd07tyZ1NRUHnvsMaZOncq8ecl/b51XNDmMN7BJk14IvL8MeBO4JNaJiruFC63uIk8TOOdc+dazZ0/GjRtH7dq1ueeee/KtHzVqFAsXLszVN2Pz5s288847dO7cmVatWrFo0SIeeeSR/RXmv/76K/369aN79+4sWbKETp06MWXKFIYOHcoxxxxTWl8tJqIJGK1U9bgc778Qke+jOZiIdAWeAyoCr6rqYwVs1wd4HzhBVedEc4wiqcL69VC3LvhgYs65HHr06MEZZ5zBpZdeuj8XkdO0adMK/XzVqlXZt29frmXz58+nd+/e3HbbbfTq1YuBAwdSq1YtVq9enXQBI5omQvNF5OTgGxE5iSjGkgpMvjQMG7CwDXCZiLQJs10NYDDwTRRpi9yaNVbp3bp1XHbvnEteRx55JDVr1qR1DK8PCxYs4LzzziMzM5M6depQoUIFFi9enK+TXzKIJmCcBMwUkVUisgqYBXQRkUU5BiUszIlAmqr+pKp7gdFAzzDbPQQ8AcSnbiQ4IJi3kHLOhTFw4EC6d+8es/2lpaXRsmVLlixZQmqgoc2qVato0qRJzI5RWqIpksrfIDk6RwBrc7xPx4LQfiJyPNBYVSeIyO0lPF54wX4XgWZxzjmX0y233BLT/Y0YYd3V2rVrR7tAR+E333wzpscoLREHDFVdXcJjhesVvn+KKRGpADwDXF3kjkQGAYOA6KP0999D5crQJl9pmHPOuUKUZjfndHKPcNsIWJfjfQ3gGGBaoMjrZOAjEck3+4iqDlfVjqrasV69etGl4q23rMK7cuUok++cc+VbaQaM74AWItJMRKoAlwIfBVcGhlGvq6pNVbUpMBvoEdNWUtnZsG4d1KoVs10651x5Ec3w5iIiV4jIA4H3TUQk4p5vqroPuAWYBCwD3lPVJSLyoIj0iDbhxTJ3rj0nWVM255wrC6Kp9P43kA2cBTyIdeL7LxDxZLeq+gnwSZ5lDxSw7RlRpC0ywSHNvYWUc85FLZqAcZKqtheR+QCqujVQtJQ8Zs2y527dEpsO55xLQtHUYWQGOt8pgIjUw3IcyWPTJqhSBY4+OtEpcc65pBNNwHge+BBoICKPYIMP/iMuqYqXlBQ4IeISNOecczlE0w/jbRGZC5wdWNRLVZfFJ1lx8vPPcPrpiU6Fcy6JiCTnxKKqWvRGUYqmlVRVoD1wCFAHuCTYYiopbN5s40jlmILROecKs3btWt59911UNeke8RBNpfc4YBswF8iIS2riaeZMe27YMLHpcM4ljUmTJnHJJck3g0O8RBMwGqlqSceTSpzvvrPnJJ6A3TlXurZt27Z/XgsXXaX3TBFJvvF4gxYvtudTTklsOpxzSWHnzp3UqFEj0ckoU6IJGKcBc0VkhYgsjGJY87Lhp5/suVWrxKbDOZcUJk2axLnnnpvoZOw3duxYBg4cSM+ePZk8eXJC0hBNwDgfaAGcC1wIXBB4Tg6VKkHNmvbsnHNF+Pnnn3NNxQpw1lln7Z9Rb/fu3XTp0oWsrKz96z/88ENEhOXLl+9flpaWlm+ypIyMDJo1a8bSpUsLPP7evXs5/fTT9x+vV69evPLKK4wcOZJ3332XrVu3ctFFF5X0a0Yl4oChqqvDPeKZuJiqUgU6dEh0KpxzZVR2dqgfclZWFpXy3FwuWbKEOnXq7F/+2muv0bt3byrmmOp51KhRdOzYkdGjR+9f1rx5c9auXZtr/8OHD6dLly60KWSahSpVqnD22Wfz7rvv5lr+8MMPc/PNN1O7dm22bNnC5s2bi/eFiyGq0WpFpLaInCgipwcf8UpYTKlaH4xmzRKdEudcGZOdnc3f//537r///v3LZs6cSadOnXJtN27cOHr16rX//dtvv03PnqFJQ3fu3Mn06dMZMWIEo0aN2r+8QoUKNGnShFWrVgGWM3n66acZOnRokWnr1asXb7/9NmD9Ku666y7OP/982gca73Tv3p3x48dH/Z2LK5p+GNcBM7DRZv8eeB4an2TF2PLl8OuvsH17olPinCtjRIQ///nPfPbZZ/uXzZkzhxPyjArxySef7J+6de/evfz000+5iqzGjh3LOeecQ9u2balevTrz5s3bvy41NXV/MdWwYcPo0aNHvuKucI455hi+C7TwfOGFF5g6dSpjxozhpZdeAqBnz56MHTu2WN+7OKIp0L8NG5l2tqqeKSKtscBR9gWHNW/ePLHpcM4V7owz8i/r2xduugl+/z38wKFXX22PTZugT5/c66ZNK/KQIkLNmjVp3LgxaWlpHH300WRnZ+fq4b1792727t1LrcBcOps2bdr/OmjUqFEMGjQokOS+jBo1an9OIDU1lRUrVnD66aczbNgwZs+eXWS6ACpWrEiVKlXYsWMHgwcPZvDgwbnWt2rVihUrVkS0r1iIpkhqj6ruAev1rarLgeRocrRokT23bZvYdDjnyqyePXsybtw4Vq5cSas8rSlTUlIQEXYGRopISUlhz549+9dv3ryZb7/9lq5dratav3799vcQh1AO47nnnqN///40aNAg4nRlZGRQrVq1sOtWr15Ns1Isao8mh5EuIrWAscAUEdlK7ilWy66VK+3ZBx50rmwrLEdw0EGFr69bN6IcRUG6d+/OxRdfTEpKCtdcc02+9eeddx4TJ06kT58+1K5dm6ysLPbs2UO1atUYM2YM3bp1o2rVqgA0a9aMww47jK+++orOnTuTmprKY489xtSpU3MVVf3666/069eP7t27s2TJEjp16sSUKVMYOnQoxxxzDJs3b6ZevXpULmBK6XHjxuWqR4m3iHIYYnmzwar6m6oOBe4HRgC9Cv1gWbFmjT37sObOuQLUrl2bChUqsH79elJSUvKtz1tfcO655/LVV18BVhw1fvx4mjZtuv+xbNky3nnnHcCKjhYtWsSgQYNy9RyfP38+vXv35s4772Tbtm0MHDiQSy65hNWrrQHqF198QbdC5u8ZP348PXqUzoSlEGEOQ1VVRMYCHQLvp8c1VbFWrRoceihUKM0pzJ1zyeaCCy4osHd3hw4dWLRoEfv27aNSpUrccsst/POf/+Scc85hWhE5m6pVq+7vT5HTggULuOiii8jMzKROnTpUqFCBxYsXM3DgQADeeecdHn300bD73Lp1KxkZGTQsxfHxoimSmi0iJ6jqd3FLTbxUrOj1F865Ig0YMCBXv4q8vv/++/2vjz/+eM4880yysrIK/Uxh0tLSaNmyJQsXLiQ1NRWAVatW0aRJE/bu3UuvXr3y1acE1a5dmxkzZhTruMUlkQ6DKyJLsUruVcAuQLDMR0KvxB07dtQ5c+YUvlHTpjaGVI620c65xFu2bNn+C6WLn3DnWUTmqmrHaPYTTQ7j/Gh2XGZkZMDq1XD44YlOiXPOJbVoAsb/gJuwQQgVm6L1xXgkKqaCY7o0bpzYdDjnXJKLJmC8AewAXgi8vwx4Eyjbs4ssDAyoe9RRiU2Hc84luWgCRitVPS7H+y9E5PsCty4rgr0gW7ZMbDqcc2GpatLOm50MYjldazTtTOeLyMnBNyJyEvB1zFISL4H2zBQyKqRzLjGqVavG5s2b4zYHdXmnqmzevLnAnuLRKjKHISKLsDqLysAAEVkTeH8kUPBg7mVFsJOMt8Rwrsxp1KgR6enpbNy4MdFJOWBVq1aNRo0axWRfkRRJXRCTIyWKCNSqBT7VonNlTuXKlUt1LCRXMkUGjFhOkiQiXYHngIrAq6r6WJ71/wdcB+wDNgLXlvj4K1dCvXol2oVzzrkoKr1FpCNwH1YUVYkoO+6JSEVgGPBHIB34TkQ+UtWcxVrzgY6q+ruI3Ag8AfSLNI1hzZrl07I651wMRHMlfRu4A1gEZBexbTgnAmmq+hOAiIwGepKjHkRVv8ix/WzgimIcJ7fduyFG5XfOOVeeRRMwNqrqRyU41hHA2hzv04GTCtn+T8CnJTieTc26b58NPOicc65EogkYfxORV4HPgIzgQlX9IMLPh2toHbYtnYhcAXQEuhSwfhAwCKBJkyYFH3HHDnuuXTvCJDrnnCtINAHjGqA11rw2WCSlQKQBIx3IOT5HI8JMwCQi52B1JV1UNSPvegBVHQ4MBxt8sMAjrg1kaDyH4ZxzJRZNwDhOVY8twbG+A1qISDPgF+BS4PKcG4jI8cDLQFdV3VCCY5m9e+35xBNLvCvnnCvvounpPVtEit1dWlX3AbcAk4BlwHuqukREHhSR4JRRTwIHA++LyAIRKUmdiY1UC97L2znnYiCaHMZpwFUi8jNWhxH1fBiq+gnwSZ5lD+R4fU4U6SlacFiQKlViulvnnCuPogkYXeOWiniZPdued+5MbDqcc+4AEE2R1BqgM3BVoPe1Ag3ikqpYCY5Pc8QRiU2Hc84dAKIJGP8GTsHmwQCbG2NYzFMUS1u32rNPnuSccyUWTZHUSaraXkTmA6jqVhEp25UDv/1mz/XrJzYdzjl3AIgmh5EZGA9KAUSkHsUbIqT0bN9uo9VWiOZrOuecCyeaK+nzwIdAAxF5BJvT+9G4pCpWmjb1kWqdcy5GIi6SUtW3RWQucHZgUU9VXR6fZMVItWrey9s552Ikkhn38naeC44JdZ6IoKo98n6mzMjIgKpVE50K55w7IESSwzgFG2V2FPAN4QcRLJv27vWA4ZxzMRJJwDgMm/ToMmzsp4+BUaq6JJ4JiwnPYTjnXMwUWemtqlmqOlFVrwJOBtKAaSJya9xTV1IeMJxzLmYiqvQWkapAdyyX0RRrMRXpsOaJk5Hhld7OORcjkVR6/wc4Bpv97u+qujjuqYoVz2E451zMRJLDuBLYBbQEBovsr/MOjlZbM05pK7mMDB+p1jnnYqTIgKGqydtN2ltJOedczCRvMIiEF0k551zMeMBwzjkXEQ8YzjnnIuIBwzmXlNatg99/L91jqkJaGtStC+edV/rHT7QDN2Ds2wfZ2d5KyrkDyMqVMGIE9O1rE2meeSbs2QNr1tjFHOz9Dz/A+vWxOeaePTB5MgwYAHXqQIsWsHmzLXvkkdgcI1lEM4FSctm71549h+Fc0snMhA8+sAv07Nnw5Zd2kZ43zwJD5cq23bffwnHHWSBp3RratoXPP4dNm2ybq6+GIUOgZUuolOdq9+qrNmVOmzZQsaIdp39/GDoUata0oFOjBixdCsuW2bQ6AwbYfGwnnAATJsBjj0G3bnDqqaV9hhJEVZP60aFDBw1ryxZVUH3mmfDrnXNl0m+/qZ5yiv18g4/69UOvZ8xQ3bbNth09WrVqVVsuolqpkuqZZ6qOHKl65ZWhdZddFtr/2rWqAwbk3n9hjwoVVEeMUF2zJnc6d+xQrVdPtVevyL5XZqbqpZeqHnmkavfuqmPGFP8cZWWpTp2qmp2tuny56iuv2HmLBjBHo7zeJvyCX9JHgQFj/Xr7ev/+d3Rn0TmXULfeahfpJ55Qvesu1bQ0uzAOHao6aVL+7VetUt2+XXXRItX09NzrVqxQPfbYUEDp2VO1QQMLJPfco/rDD6pffKE6bJhqzZq23T332P1mVpbqkiV2/ILcead95oYbLBBNnWrPffqo3n23akZGaNv337dtU1NVDz3UXn/6af59rl1r33vWLNUpU1Q7drQAmNOIEfb5F1+04BMMbpdcorpnT2Tn2QNGTqtW2dcbMSKys+ecS4jsbNVff7XXY8faz/bmm2O3/02bLFCccYbt+9BDVRcvzr/dunWqr79uOYdI7dihOmiQFpg7Oe00O9b69aotW6oedZTqvn2qu3ertmmjesQRqsOHW5Bcs0Z19mzVatXC7+uyy1SnT1f9/nvViy6yZQ0a2HOTJqHcVGqqBZysrMLT7gEjpxUr7Ou99VbhZ805V6q2b1d9+mnV559XnTZN9eqr7ad6552qBx9sd9S//x7742ZlqX70kermzbHdb3a26rhxqk8+qfrss6rdulmx2Usvqdapk/ui/9//hj733Xe5151wguof/2jFXJMnq554ourJJ1sgueACOzc5t2/XLvR64kTbZ86ittNPt8CbnR0+3R4wclq40L7ee++FX19GzZlj2WTnYmnRovB31aXp669VO3VSPftsDXsHDarHHZe/WCmZrVmjeu+9qo89ZsExrw8/tCDxzDOhc/Dww+H3tWOH6p//bNs0a6a6YYMVl02ZEgoK69ap/ulPqiedZNsdf3zBdRseMHKaM8e+3rhx4deXIRs3WvnmUUfp/ixlMtq50y4KBd3RuMT4/XfVlBT73/rss9DytDS7mEVbWVoca9bkrrgePFj1xx9V33hDde5ce9+wYemkpaz6z39UH3yw6KKk7OzcdSPhZGRYbqawnFqZDxhAV2AFNgnT3WHWVwXeDaz/Bmha1D4LDBhff6258mplUFaW6syZqrVqhX5IVarY88KFiU5dZDIy7K4mWKwAqq++Gt0+Vq2y1i4XXqi6dGl80lmePf986G8TLO7Zt89a94DqeecVvY/bb7cLeps2ql9+Gd3xP/hAtXJl1YMOsrL6IUOsxVBOWVlFXwRdbJXpgAFUBH4EmgNVgO+BNnm2uQl4KfD6UuDdovZbYMD4/HP7el98EfWJzM5W3bvXHps2qS5bZrvbsiXqXRVo6VLV2rUticHn1q2thUS1aqo1aqiedVb4bGxZ8csvqp07hy5G111nrVuaNMl/QQhuP2BA7j/J/feHPg+qhx1mMX7x4tzf/csvLbO4b1/cv9YBZft2+/866yzVf/4z97nO+fjPf+z/PJw33rBtunZVPfpoa7o6YIDqrl2hbbKzrSjlww+tbF7VKnaHDbNAcfzxiS8Sc7mV9YBxCjApx/t7gHvybDMJOCXwuhKwCZDC9tvumON0S9rmfI/tr72nCnpBnZnasqXd2UTqz3+21gsnnpj7R9Wnj2Vc5s8v+LPff6+6enXofbCFxiOPhIpqJkxQPfzw0H6nTrXyyGBAWrjQyiHr11etXj13JV3e7Ors2fajLO2sfFaWatOmlv6WLVXffNOWf/CBLfvoo9C22dnWuiM1NfSdn3nGikdA9dRT7WI0alT+C1nv3qotWuRe9sYbpftdk8Fvv6l++63l1v7yFyvePPlkK+sGu+HJzrb/w5zn8ocfQk08DzooFARWr7YmrEOGWHPU00+3YL11q2r//rb9Y49ZEOra1X4bOfc7a5YFKbD/47VrE3t+XH7FCRhin4s/EekDdFXV6wLvrwROUtVbcmyzOLBNeuD9j4FtNhW0344iOqeQ47blexbRFoB27aBaNbjsMkhPh5NOghdeyL39jh3WmzSnpk1h92743/9Cy0aOhA4d4LrrbJ8Av/4KK1bY6xtvtEfXrjbmDUDDhpCVBRs2QGoqXHAB/Pe/0Lhx7uP94x/QqZP1RB040HqwNmhgvVeXL4cHHoBWreD99+3zYDPRHnusvX75ZVs/fjw8/XT+c/Lmm3bMd9+FF1/Mv37MGBsrZ+RIe+T1ySfw44/Wq/aoo6BRo9A6Vesh2769PcaMsfO2ZQv7/wZHHAEff2zvU1KgY0frRVvQ+Q866CAbu6d6dfvukybBggWhz23YYOP7vPqqLRs0yHoA59SuHTz7rL2+4gr7P8jplFPg0Uft9cUXW+/inM4+G+6/316ff779X+R0wQVw++32+owz8n+Hvn3hppvse3Trln/91VfbY9Mm6NMn//obb4R+/WDtWrjySlu2bRssXmyj4QR17gzff289mQFOPx1E4J574Jdf7Hy/9JL97+7YYf+3u3ZZT+enn7a/7YYN9tkGDezvXLmynbt27ew8zZ6dP305iUCzZnD44daTGmLzv3fQQfDvf8N77+VfP22aPT/1lPXEziklBT791F4/9BB89lnu9XXqhH5P99wDs2blXt+oEbz1lr0eMiT0vxfUsiUMH26vk+F/b/p0mauqHfNvWbDSHBpEwizLG60i2QYRGQQMAmiaUp/p598X9oCV6tWi8jfHcHI1uwgF/8A5/9GDF+OMDPvRbNtm/zgjRtjF/fnnbbucAePgg+1HHdSihY1Esnq1/RCPPNJ+DNOmWbA4/HDbf3BsmyOOsCEN0tLsuSCtW9tQWL/8Yj+idessTX/7W2ibBg1s9JM1a+Dnny2dt98OF14IixbZP8dBBxV8jOL49dfQRblu3dzrRODaa22MnWBQAPuxHXaYbT9sGEydauekdetQsAALzjNnwsMPw2+/2UVv504b1uGgg+CQQ+yHeOWVcMklNoTE+vX23cG2/+EHmDEDvvvOxgFq0CC23z/esrPt3BQmK8uef/rJLjzVqkHz5nYTdP/9to/rr7dzWaOG/V3ALtzXXmu/heCNTo0aFrRXroS337YHWJCoWdMeed12m/3vZmdbUKhf3wJWpUr2t3vqKbtJiPX/nkuwaLMkxX0QpyKpAusw8vjsMyt/7drVymDPPdey7KD6ySdWbARWEfjjj+H3MXWqtbXetUv10UetuCRnNrxTp1CR0ZNP2rJGjawVVFaW6jffWIuQYCelSLz5phUJBDvlXHut6r/+ZZXES5bYNllZuesS8j7mz7eihzPOyF1UFM7evbnf//67FZcFLVoU6hF73HHh97Funer556s+9JAVv61cmX+b9eut2KI4gg3grrjCysZB9ZhjrP4j3PfftCn357OyLI2RtObavdt64xbVciWW7r3XWjVt3557eVaWFS1dfLH9XwWbYp59turPP4ff1+7d+f+mBcnIsE5ovXtbz+Kizs/WrcWqInRlBGW8DqMS8BPQjFCl9x/ybHMzuSu93ytqv5EGjJyCP6Dff1dt2zZ0YXniiah3pRMnqr72mnX3yPsD37jRfrAl9dVXVpF8+OE2bkw4s2bp/jL/SZOs/uVf/7JlRx4Z6kDUqpXq449bXUPwgvDLL1ZJ/cEH1jkoOLzB11/bcevVszLyjRvtfcOGVncS6YUoHk44wb5P5coWVINNDSdPtu+9cKGdB8hdf5WdHbo5uOiiogPBTTfZts89F30a9+yxdHbvbmMfpaVZxX0wgP34o/UrzVl5nJkZ+n8cMCA0zMP27dZrOG8wbN++dIOZO3CU6YBh6aMbsBJrLXVfYNmDQI/A62rA+1iz2m+B5kXtszgBI6eVK63jzA03lO0WODt32qMwU6fmr/y+7Tb7Kx99tI3Fk/Ni06KFffeKFa25Zb164e/QQbVvX9Xrr7dtg61gEmn6dOv9WlRl6q23WvpPPln1jjvsOwQr6sH2U5AffrCABKp160YeIF97zTpOdegQOn/XX5+7+fQdd9jfJNg67tNPLag89JAtC/bJ6dgxd2OBl16yxhEvv2yt6caPj/ycOZdTmQ8Y8XiUNGAc6LKzrRhj82Z7nZZmr4Nj0OR81KljfSiCLVvq1bNWNY89lvvCl0x27gxdmIN9XAYMsOKUypVVL7/cRpHJzLRt339f9a9/tWK8006zVmovv2yf+/hjK6oprHnorl2hc3XwwdZi6cwz7X1KigWEnDmFa68NdWgLdq674gr7W911l72vWdP2demluY8Vrumyc5EqTsAotVZS8dKxY0edM6ewdlIunJ9+glWrrJK8a1erOK1d2yo4f/zRWnSlpIQqS595xiqRX301+SoyN22yCtkGDaxFULAS96KLYOxYe33WWbbNjBm5P/vuu9CrlzVUCO4rJcUaRVx2mS3bvNkql7OyrOXOqFHWiueSS6yS/6efrGXbRRdZ6xdVa5BQubK1ltuwAaZPt4YA27fD66/nbnlXr541qqhUKTQPhHMlJRJ9KykPGK7c2rULJk601lyvv27LhgyBwYPhzjvtgt+3ry1/5BH461/hmmusddusWRYkjjjCmkCvXh3a7x13wBNPlP73cS4aHjCcK4aMDOvzULeu5QxSUvJvk5lpzaTPPtuaXrdrZ3f9DRtac+z337fX9erl7pfiXFlVnIBx4E7R6lyEqla1To6FqVwZ/vhHe127tnUKa9vWioxeeCF8JzznDjQeMJwrhmOPtQ6I8+db71nnygMPGM4VkwcKV95UKHoT55xzzgOGc865CHnAcM45FxEPGM455yLiAcM551xEPGA455yLiAcM55xzEfGA4ZxzLiJJP5aUiOwAViQ6HWVEXWyWQufnIic/FyF+LkJaqWqNaD5wIPT0XhHtAFoHKhGZ4+fC+LkI8XMR4uciRESiHrXVi6Scc85FxAOGc865iBwIAWN4ohNQhvi5CPFzEeLnIsTPV9NfyQAABXtJREFURUjU5yLpK72dc86VjgMhh+Gcc64UeMBwzjkXkaQOGCLSVURWiEiaiNyd6PSUJhF5TUQ2iMjiHMsOFZEpIvJD4Ll2ItNYGkSksYh8ISLLRGSJiNwWWF4ez0U1EflWRL4PnIu/B5Y3E5FvAufiXRGpkui0lhYRqSgi80VkQuB9uTwXIrJKRBaJyIJgc9ri/EaSNmCISEVgGHA+0Aa4TETaJDZVpWok0DXPsruBz1S1BfBZ4P2Bbh/wF1VNBU4Gbg78H5THc5EBnKWqxwHtgK4icjLwOPBM4FxsBf6UwDSWttuAZTnel+dzcaaqtsvRDyXq30jSBgzgRCBNVX9S1b3AaKBngtNUalR1BrAlz+KewH8Cr/8D9CrVRCWAqq5X1XmB1zuwi8MRlM9zoaq6M/C2cuChwFnAmMDycnEuAESkEdAdeDXwXiin56IAUf9GkjlgHAGszfE+PbCsPGugquvBLqRA/QSnp1SJSFPgeOAbyum5CBTBLAA2AFOAH4HfVHVfYJPy9Dt5FrgTyA68r0P5PRcKTBaRuSIyKLAs6t9IMg8NImGWeRvhckpEDgb+CwxR1e12M1n+qGoW0E5EagEfAqnhNivdVJU+EbkA2KCqc0XkjODiMJse8Oci4FRVXSci9YEpIrK8ODtJ5hxGOtA4x/tGwLoEpaWs+J+INAQIPG9IcHpKhYhUxoLF26r6QWBxuTwXQar6GzANq9epJSLBm8Py8js5FeghIquw4uqzsBxHeTwXqOq6wPMG7EbiRIrxG0nmgPEd0CLQ6qEKcCnwUYLTlGgfAVcFXl8FjEtgWkpFoFx6BLBMVf+ZY1V5PBf1AjkLRCQFOAer0/kC6BPYrFycC1W9R1UbqWpT7Nrwuar2pxyeCxGpLiI1gq+Bc4HFFOM3ktQ9vUWkG3bXUBF4TVUfSXCSSo2IjALOwIZr/h/wN2As8B7QBFgDXKKqeSvGDygichrwJbCIUFn1vVg9Rnk7F22xysuK2M3ge6r6oIg0x+6yDwXmA1eoakbiUlq6AkVSt6vqBeXxXAS+84eBt5WAd1T1ERGpQ5S/kaQOGM4550pPMhdJOeecK0UeMJxzzkXEA4ZzzrmIeMBwzjkXEQ8YzjnnIuIBwznnXEQ8YLhyQUTqBIZ2XiAiv4rILzneVxGRmXE6biMR6RdmeVMR2R0Y96mkx0gJfI+9IlK3pPtzriDJPJaUcxFT1c3YkN+IyFBgp6o+lWOTTnE69NnY8Pvvhln3o6q2K+kBVHU3Nn7UqpLuy7nCeA7DOUBEdgbu+peLyKsislhE3haRc0Tk68AkMyfm2P6KwGRFC0Tk5cD8LHn3eRrwT6BPYLtmhRy/yGMHhnj4ODBB0uJwORfn4skDhnO5HQ08B7QFWgOXA6cBt2NDjiAiqUA/bATQdkAW0D/vjlT1K2zMs56BiWt+LuGxuwLrVPU4VT0GmFiyr+pcdLxIyrncflbVRQAisgSbkUxFZBHQNLDN2UAH4LvAMOopFDzSZytgRYyOvQh4SkQeByao6pfRfjnnSsIDhnO55RyILjvH+2xCvxcB/qOq9xS2o8DgbttUNTMWx1bVlSLSAegGPCoik1X1wQj37VyJeZGUc9H7DKuXqA8gIoeKyJFhtmtGDOdbEJHDgd9V9S3gKaB9rPbtXCQ8h+FclFR1qYj8FZvysgKQCdwMrM6z6XKgrogsBgapakmb7h4LPCki2YFj3ljC/TkXFR/e3LkECMw/PiFQeR2rfa4COqrqpljt07mcvEjKucTIAg6JZcc9oDKhSaSciznPYTjnnIuI5zCcc85FxAOGc865iHjAcM45FxEPGM455yLiAcM551xEPGA455yLiAcM55xzEfGA4ZxzLiL/D1YTw0CVeTdDAAAAAElFTkSuQmCC\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "dt = 0.1\n", - "mu, sigma = noise_params(0., 1., dt=dt)\n", - "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", - "\n", - "V, t, ts = simulate(mu, sigma, dt=dt)\n", - "V_mean_th = V_mean(t, mu)\n", - "V_std_th = V_std(t, sigma, dt=dt)\n", - "\n", - "plt.plot(t, V.mean(axis=1), 'b-', label=r'$\\bar{V_m}$')\n", - "plt.plot(t + ts, V_mean_th, 'b--', label=r'$\\langle V_m \\rangle$')\n", - "plt.plot(t, V.std(axis=1), 'r-', label=r'$\\sqrt{\\bar{\\Delta V_m^2}}$')\n", - "plt.plot(t + ts, V_std_th, 'r--', label=r'$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$')\n", - "\n", - "plt.legend()\n", - "plt.xlabel('Time $t$ [ms]')\n", - "plt.ylabel('Membrane potential $V_m$ [mV]')\n", - "plt.xlim(0, 50);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Again, agreement is fine and the slight drooping artefacts are invisible, since the noise is now updated on every time step. Note also that the noise standard deviation $\\sigma$ is larger (by $\\sqrt{10}$) than for $\\delta=1$ ms." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mu = 0.00, sigma = 35.36\n" - ] - }, - { - "data": { - "image/png": "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ej87dujDyK9/7Z1scYQpDKMkc+eq62tg4nrw4JrzBP2HP+hneuopb/rLyxNJTdURS6Jfo9xcdXMGfUoO5fPMnavtn38+8vJFkv37RU49Vd1i//e/6vd3440axC8zs/p9RRufT03PB8EUhhHk0Uf1623WTOT223ViuKYQcA39/e+9vbm/8IIk/CgjO1vk3HOlRJTXUPD5RE46SeSEExJXYRYU6EORV6NOEV2QmpwcjMibKPh86krcrdtBR42mMGozPp/IO++om6iIKognn9TJvvnzRS65JHEmsiti6lQNCX3RRd6b0/LydCFiz56JedPctUvk9NP1+lS2OK08Au6nn37quWgRx+fT0UAkXIR/+1sdpW/c6G2/kcLnE3ngASlyJT7I3JUpjNqIz6dur92769dZPDeDiA5JO3bUur//PTYyesXChboyu1u3oAuw17z4ol6r996LTP+R4uefRU48UW9s775btT5ychLXM+iRR6RECBov2bhRzVKjRnnft9f4fCJ3363X4rrrDu7oIKYwah+LFomcfbZ+jampGoqj9FP3XXdpfVqatinPrTIRWL9ew1ikpops2RK58+Tna8KiDh2Ci9vinR9+0EnelBSR6dOr19df/6q/l8BINREIxAS76qoKb5DV4qab1DRVnUn0SOPzqccj6KiokmthCqO2cdddmrHtmWfKv7nNm6fmieuv1zUWifjkLKLeKp066XxMNFwcA5nZHnss8ueqLvPn6xqUFi28Cc+yc6d6S111VfX7igYTJuicxYUXRtYtfOtWkSZNNJNiPFJYqEoCVGmEYFI1hVHT8flEXn9d5LPPdH/fvoPPS+TliXTuLHLEESK7d+vI48gjNWVoIrF/v6YlrV9f5Msvo3feCy/UtSqRHM1Ul2nT1ESXluatU8Mdd+jq6LVrveszEnz0kT71n3lmhd5AnhEIrfLhh5E/VzgUFAQjNN99d8jzb6YwajKZmSIDB0rRit3KCNh0p0wJHvu//9NjCxdGTk4vyc/XuEfORX9ktGaNumYOGRKfE+CvvKI39ZNOqvrCtIOxZYuat6680tt+vWTOHJXxpJP0gSga5OXpSPeYY4J5tmNNTo6GewkEVgzjt2oKoybi84n85z9qjklJUfNTZXba77/Xm90ll5Q8vnu39lM8FHm84vPpJCOoG20seOwxPf9bb8Xm/OVRWChy770q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AwYM4GQv0ijEiHDiYfwb+MY594F/fwjwivciRYFNm6B+fejatep9fP45bNmiaVgNw6g+t92mJl4v6doVnn660maHH344xx57LNOnT2fYsGEATJ8+nfPPL5tkdNKkSfTr148TTjiBQw45hG+//bZICWRkZLBq1So6dOjA2LFjGTRoEGlpaTz77LN88skn7Nmzh7Vr13LDDTd4+zmjRDgrvZ8ErgN2AruA60Sk8m+iGM65851zq51za51zd1fQbphzTpxzkXFgPvponez2/zCqxMSJmnTpwgu9k8swjJhw9NFHc8011zB58uSiY99++y3dunUr03bChAlcdtllAFx22WUlRhkZGRmsXr2a7Oxsxo4dy7333gvALbfcwsKFC/nXv/6VsMoCwhthICLfAt9W5UT+wIVj0QWAmcB859wUEVlRql1j4Bbgm6qcJ2SSkqq+buLAAXjvPY0b1bCht3IZRm0lhJFAJLngggu47bbbKCgowDlHcjkBSbOyspg3bx7vv/8+AMOHD6dPnz489thjOOfIyMjgs88+45lnnuGqq66iTZuakTIoQDheUg2cc3c45953zr3nnLvdOdcgjHP1BNaKyDoROQBMBMqL1PcX4DH8YdQjwk03waPViJv4yScauNAmuw2jxtC0aVO6dOnCF198wZw5c+jVq1eZNu+++y4XXHAB9evXByA9PZ3DDjuMOXPmADrCmDdvHq+++ip33nlnVOWPBuE8Yv8HOB54DvgHkAGMC+P9RwCbi+1n+o8V4Zw7CWgvIh+G0W94iKg5ad26qvcxcSI0awbnneedXIZhxJzBgwczefJkZs2axdlnn12mfsKECUydOpW0tLSisnLlSt58800AOnXqxNKlSxk1alTRhPnWrVuLRiEjRozghRdeYNiwYSxbtiyqn80LwjFJdRKRE4vtz3LOfRfG+8vzqCoKz+icSwKeAq6ttCPnRgGjAFJTU8MQAfjxRx0dVHXCOzdXgw1edhnUS/z8UYZhBBk0aBB9+/bl8ssvLxpFFGf27NkVvr9+/foUFBSUOLZo0SKGDh3KrbfeypAhQxg5ciTNmjVj48aNdO7c2UvxI044I4xFzrmiwEvOuVMIL5ZUJiVXh7cDthTbbwx0BmY75zag6zymlDfxLSIvikh3EeneOlyX1u/8Ou6EE8J7X4CPPoJ9+2D48Kq93zCMuOXII4+k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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "dt = 10.0\n", - "mu, sigma = noise_params(0., 1., dt=dt)\n", - "print(\"mu = {:.2f}, sigma = {:.2f}\".format(mu, sigma))\n", - "\n", - "V, t, ts = simulate(mu, sigma, dt=dt)\n", - "V_mean_th = V_mean(t, mu)\n", - "V_std_th = V_std(t, sigma, dt=dt)\n", - "\n", - "plt.plot(t, V.mean(axis=1), 'b-', label=r'$\\bar{V_m}$')\n", - "plt.plot(t + ts, V_mean_th, 'b--', label=r'$\\langle V_m \\rangle$')\n", - "plt.plot(t, V.std(axis=1), 'r-', label=r'$\\sqrt{\\bar{\\Delta V_m^2}}$')\n", - "plt.plot(t + ts, V_std_th, 'r--', label=r'$\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$')\n", - "\n", - "plt.legend()\n", - "plt.xlabel('Time $t$ [ms]')\n", - "plt.ylabel('Membrane potential $V_m$ [mV]')\n", - "plt.xlim(0, 50);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For $\\delta=10$, i.e., a noise switching time equal to $\\tau_m$, the drooping artefact becomes clearly visible. Note that our theory developed above only applies to the points at which the input current switches, i.e., at multiples of $\\delta$, beginning with the arrival of the first current at the neuron (at delay plus one time step). At those points, agreement with theory is good.\n", - "\n", - "##### Why does the standard deviation dip between current updates?\n", - "\n", - "In the last case, where $\\delta = \\tau_m$, the dips in the membrane potential between changes in the noise current become quite large. They can be explained as follows. For large $\\delta$, we have at the end of a $\\delta$-interval for neuron $n$ membrane potential $V_n(t_{j})\\approx I_{n,j-1}\\tau/C$ and these values will be distributed across neurons with standard deviation $\\sqrt{\\langle (\\Delta V_m)^2 \\rangle}$. Then, input currents of all neurons switch to new values $I_{n,j}$ and the membrane potential of each neuron now evolves towards $V_n(t_{j+1})\\approx I_{n,j}\\tau/C$. Since current values are independent of each other, this means that membrane-potential trajectories criss-cross each other, constricting the variance of the membrane potential before they approach their new steady-state values, as illustrated below.\n", - "\n", - "You should therefore use short switching times $\\delta$." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(t, V[:, :25], lw=3, alpha=0.5);\n", - "plt.plot([31.1, 31.1], [-3, 3], 'k--', lw=2)\n", - "plt.plot([41.1, 41.1], [-3, 3], 'k--', lw=2)\n", - "plt.xlabel('Time $t$ [ms]')\n", - "plt.ylabel('Membrane potential $V_m$ [mV]')\n", - "plt.xlim(30, 42);\n", - "plt.ylim(-2.1, 2.1);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Autocorrelation\n", - "\n", - "We briefly look at the autocorrelation of the membrane potential for three values of $\\delta$." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "from scipy.signal import fftconvolve\n", - "from statsmodels.tsa.stattools import acf\n", - "\n", - "def V_autocorr(V_mean, V_std, dt=1., tau_m=10.):\n", - " 'Returns autocorrelation of membrane potential and pertaining time axis.'\n", - "\n", - " mu, sigma = noise_params(V_mean, V_std, dt=dt, tau_m=tau_m)\n", - " V, t, ts = simulate(mu, sigma, dt=dt, tau_m=tau_m, t_max=5000., N=20)\n", - "\n", - " # drop the first second\n", - " V = V[t>1000., :]\n", - " \n", - " # compute autocorrelation columnwise, then average over neurons\n", - " nlags = 1000\n", - " nt, nn = V.shape\n", - " acV = np.zeros((nlags+1, nn))\n", - " for c in range(V.shape[1]):\n", - " acV[:, c] = acf(V[:, c], unbiased=True, nlags=1000, fft=True)\n", - " #fftconvolve(V[:, c], V[::-1, c], mode='full') / V[:, c].std()**2\n", - " acV = acV.mean(axis=1)\n", - "\n", - " # time axis\n", - " dt = t[1] - t[0]\n", - " acT = np.arange(0, nlags+1) * dt\n", - " \n", - " return acV, acT" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "acV_01, acT_01 = V_autocorr(0., 1., 0.1)\n", - "acV_10, acT_10 = V_autocorr(0., 1., 1.0)\n", - "acV_50, acT_50 = V_autocorr(0., 1., 5.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(acT_01, acV_01, label=r'$\\delta = 0.1$ms');\n", - "plt.plot(acT_10, acV_10, label=r'$\\delta = 1.0$ms');\n", - "plt.plot(acT_50, acV_50, label=r'$\\delta = 5.0$ms');\n", - "\n", - "plt.xlim(0, 50);\n", - "plt.ylim(-0.1, 1.05);\n", - "plt.legend();\n", - "plt.xlabel(r'Delay $\\tau$ [ms]')\n", - "plt.ylabel(r'$\\langle V(t)V(t+\\tau)\\rangle$');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We see that the autocorrelation is clearly dominated by the membrane time constant of $\\tau_m=10$ ms. The switching time $\\delta$ has a lesser effect, although it is noticeable for $\\delta=5$ ms." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Different membrane time constants\n", - "\n", - "To document the influence of the membrane time constant, we compute the autocorrelation function for three different $\\tau_m$." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "acV_t01, acT_t01 = V_autocorr(0., 1., 0.1, 1.)\n", - "acV_t05, acT_t05 = V_autocorr(0., 1., 0.1, 5.)\n", - "acV_t10, acT_t10 = V_autocorr(0., 1., 0.1, 10.)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(acT_t01, acV_t01, label=r'$\\tau_m = 1$ms');\n", - "plt.plot(acT_t05, acV_t05, label=r'$\\tau_m = 5$ms');\n", - "plt.plot(acT_t10, acV_t10, label=r'$\\tau_m = 10$ms');\n", - "\n", - "plt.xlim(0, 50);\n", - "plt.ylim(-0.1, 1.05);\n", - "plt.legend();\n", - "plt.xlabel(r'Delay $\\tau$ [ms]')\n", - "plt.ylabel(r'$\\langle V(t)V(t+\\tau)\\rangle$');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "-----------------------------\n", - "### License\n", - "\n", - "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", - "\n", - "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", - "\n", - "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/doc/htmldoc/neurons/model_details/test_post_trace.ipynb b/doc/htmldoc/neurons/model_details/test_post_trace.ipynb deleted file mode 100644 index 844a3c89cb..0000000000 --- a/doc/htmldoc/neurons/model_details/test_post_trace.ipynb +++ /dev/null @@ -1,661 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Test postsynaptic trace\n", - "=======================\n", - "\n", - "Pre- and postsynaptic traces are used to calculate STDP weight updates, but are computed differently: postsynaptic traces are stored and maintained in the NEST C++ `ArchivingNode` class. Following [nest-simulator#1034](https://github.com/nest/nest-simulator/issues/1034), this notebook (and corresponding test script in `testsuite/regressiontests/issue-1034.py`) was created to specifically test the postsynaptic trace value, by comparing the NEST-obtained samples to a Python-generated reference timeseries.\n", - "\n", - "Construct a network of the form:\n", - "- pre_spike_gen connects via static_synapse to pre_parrot\n", - "- pre_parrot connects via stdp_synapse to post_parrot\n", - "- post_spike_gen connects via static_synapse to post_parrot\n", - "\n", - "The spike times of the spike generators are defined in\n", - "`pre_spike_times` and `post_spike_times`. From the perspective of the\n", - "STDP synapse, spikes arrive with the following delays (with respect to\n", - "the values in these lists):\n", - "\n", - "- for the presynaptic neuron: one synaptic delay in the static synapse\n", - "- for the postsynaptic neuron: one synaptic delay in the static synapse\n", - "- for the synapse itself: one dendritic delay between the post_parrot\n", - " node and the synapse itself (see the C++ variable `dendritic_delay`)." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import matplotlib.ticker as plticker\n", - "import nest\n", - "import numpy as np\n", - "import os\n", - "import scipy as sp\n", - "import scipy.stats\n", - "import unittest" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "NEST simulation\n", - "---------------\n", - "\n", - "Construct and run the NEST network." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def run_post_trace_test_nest_(pre_spike_times, post_spike_times,\n", - " resolution, delay, sim_time, tau_minus,\n", - " show_all_nest_trace_samples=False,\n", - " debug=False):\n", - "\n", - " if debug:\n", - " print(\"Pre spike times: [\"\n", - " + \", \".join([str(t) for t in pre_spike_times]) + \"]\")\n", - " print(\"Post spike times: [\"\n", - " + \", \".join([str(t) for t in post_spike_times]) + \"]\")\n", - "\n", - " nest.set_verbosity(\"M_WARNING\")\n", - "\n", - " nest.ResetKernel()\n", - " nest.resolution = resolution\n", - "\n", - " wr = nest.Create(\"weight_recorder\")\n", - " nest.CopyModel(\"stdp_synapse\", \"stdp_synapse_rec\",\n", - " {\"weight_recorder\": wr, \"weight\": 1.})\n", - "\n", - " # create spike_generators with these times\n", - " pre_sg_ps = nest.Create(\"spike_generator\",\n", - " params={\"spike_times\": pre_spike_times,\n", - " \"precise_times\": True})\n", - " post_sg_ps = nest.Create(\"spike_generator\",\n", - " params={\"spike_times\": post_spike_times,\n", - " \"precise_times\": True})\n", - "\n", - " # create parrot neurons and connect spike_generators\n", - " pre_parrot_ps = nest.Create(\"parrot_neuron_ps\")\n", - " post_parrot_ps = nest.Create(\"parrot_neuron_ps\",\n", - " params={\"tau_minus\": tau_minus})\n", - "\n", - " nest.Connect(pre_sg_ps, pre_parrot_ps, syn_spec={\"delay\": delay})\n", - " nest.Connect(post_sg_ps, post_parrot_ps,syn_spec={\"delay\": delay})\n", - "\n", - " # create spike recorder --- debugging only\n", - " spikes = nest.Create(\"spike_recorder\")\n", - " nest.Connect(pre_parrot_ps + post_parrot_ps, spikes)\n", - "\n", - " # connect both parrot neurons with a stdp synapse onto port 1\n", - " # so spikes transmitted through the stdp connection are\n", - " # not repeated postsynaptically.\n", - " nest.Connect(\n", - " pre_parrot_ps, post_parrot_ps,\n", - " syn_spec={'synapse_model': 'stdp_synapse_rec',\n", - " 'receptor_type': 1,\n", - " 'delay': delay})\n", - "\n", - " if debug:\n", - " print(\"[py] Total simulation time: \" + str(sim_time) + \" ms\")\n", - "\n", - " n_steps = int(np.ceil(sim_time / delay))\n", - " trace_nest = []\n", - " trace_nest_t = []\n", - "\n", - " t = nest.biological_time\n", - " trace_nest_t.append(t)\n", - "\n", - " post_tr = post_parrot_ps.post_trace\n", - " trace_nest.append(post_tr)\n", - "\n", - " for step in range(n_steps):\n", - " if debug:\n", - " print(\"\\n[py] simulating for \" + str(delay) + \" ms\")\n", - " nest.Simulate(delay)\n", - " t = nest.biological_time\n", - " nearby_pre_spike = np.any(\n", - " np.abs(t - np.array(pre_spike_times) - delay) < resolution/2.)\n", - " if show_all_nest_trace_samples or nearby_pre_spike:\n", - " trace_nest_t.append(t)\n", - " post_tr = post_parrot_ps.post_trace\n", - " trace_nest.append(post_tr)\n", - " if debug:\n", - " print(\"[py] Received NEST trace: \" +\n", - " str(post_tr) + \" at time t = \" + str(t))\n", - "\n", - " return trace_nest_t, trace_nest" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python simulation\n", - "-----------------\n", - "\n", - "Generate the Python reference timeseries." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def run_post_trace_test_python_reference_(pre_spike_times,\n", - " post_spike_times, resolution,\n", - " delay, dendritic_delay, sim_time,\n", - " tau_minus, debug=False):\n", - " \"\"\"\n", - " compute Python known-good reference of postsynaptic trace\n", - " \"\"\"\n", - "\n", - " n_timepoints = 1000 * int(np.ceil(sim_time))\n", - " trace_python_ref = np.zeros(n_timepoints)\n", - "\n", - " n_spikes = len(post_spike_times)\n", - " for sp_idx in range(n_spikes):\n", - " t_sp = post_spike_times[sp_idx] + delay + dendritic_delay\n", - " for i in range(n_timepoints):\n", - " t = (i / float(n_timepoints - 1)) * sim_time\n", - " if t > t_sp:\n", - " trace_python_ref[i] += np.exp(-(t - t_sp) / tau_minus)\n", - "\n", - " n_spikes = len(pre_spike_times)\n", - " for sp_idx in range(n_spikes):\n", - " t_sp = pre_spike_times[sp_idx] + delay\n", - " i = int(np.round(t_sp / sim_time\n", - " * float(len(trace_python_ref) - 1)))\n", - " if debug:\n", - " print(\"* At t_sp = \" + str(t_sp)\n", - " + \", post_trace should be \" + str(trace_python_ref[i]))\n", - "\n", - " return trace_python_ref" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Run the test\n", - "------------\n", - "\n", - "First, define some pre/post spike patterns." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# spike test pattern 1: minimal reproducing example of the original bug\n", - "pre_spike_times1 = np.array([2., 3., 10.])\n", - "post_spike_times1 = np.array([1., 2., 3.])\n", - "\n", - "# spike test pattern 2: generate some random integer spike times\n", - "t_sp_min = 1.\n", - "t_sp_max = 50\n", - "n_spikes = 10\n", - "pre_spike_times2 = np.sort(\n", - " np.unique(\n", - " np.ceil(\n", - " sp.stats.uniform.rvs(\n", - " t_sp_min, t_sp_max - t_sp_min, n_spikes))))\n", - "n_spikes = 50\n", - "post_spike_times2 = np.sort(\n", - " np.unique(\n", - " np.ceil(\n", - " sp.stats.uniform.rvs(\n", - " t_sp_min, t_sp_max - t_sp_min, n_spikes))))\n", - "tau_minus = 2. # [ms]\n", - "\n", - "# for each parameter set, run the test\n", - "# spike test pattern 3 is a pre/post-reversed version of test pattern 2\n", - "pre_spike_times = [pre_spike_times1,\n", - " pre_spike_times2,\n", - " post_spike_times2]\n", - "post_spike_times = [post_spike_times1,\n", - " post_spike_times2,\n", - " pre_spike_times2]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a function that will validate equality between the Python-generated and the NEST-generated timeseries." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "trace_match_atol = 1E-3\n", - "trace_match_rtol = 1E-3\n", - "\n", - "def nest_trace_matches_ref_trace(trace_nest_t, trace_nest,\n", - " trace_python_ref, pre_spike_times,\n", - " post_spike_times, resolution, delay,\n", - " dendritic_delay, trace_match_atol,\n", - " trace_match_rtol, sim_time,\n", - " debug=False):\n", - " \"\"\"\n", - " Trace values are returned from NEST at regular intervals, but only\n", - " updated at presynaptic spike times.\n", - "\n", - " To match the NEST samples with the continuous reference trace, step\n", - " backwards in time from the sampled value, to find the last time at\n", - " which the trace value was updated, namely the time of occurrence of\n", - " the last presynaptic spike.\n", - " \"\"\"\n", - "\n", - " n_timepoints = len(trace_nest_t)\n", - " for i in range(n_timepoints)[1:]:\n", - " t = trace_nest_t[i]\n", - " if debug:\n", - " print(\"* Finding ref for NEST timepoint t = \" + str(t)\n", - " + \", NEST trace = \" + str(trace_nest[i]))\n", - "\n", - " traces_match = False\n", - " for i_search, t_search in enumerate(\n", - " reversed(np.array(pre_spike_times) + delay)):\n", - " if t_search <= t:\n", - " _trace_at_t_search = trace_python_ref[int(np.round(\n", - " t_search / sim_time\n", - " * float(len(trace_python_ref) - 1)))]\n", - " traces_match = np.allclose(\n", - " _trace_at_t_search,\n", - " trace_nest[i],\n", - " atol=trace_match_atol,\n", - " rtol=trace_match_rtol)\n", - " post_spike_occurred_at_t_search = np.any(\n", - " (t_search - (np.array(post_spike_times)\n", - " + delay\n", - " + dendritic_delay))**2\n", - " < resolution/2.)\n", - "\n", - " if debug:\n", - " print(\"\\t* Testing \" + str(t_search) + \"...\")\n", - " print(\"\\t traces_match = \" + str(traces_match))\n", - " print(\"\\t post_spike_occurred_at_t_search = \"\n", - " + str(post_spike_occurred_at_t_search))\n", - "\n", - " if (not traces_match) and post_spike_occurred_at_t_search:\n", - " traces_match = np.allclose(\n", - " _trace_at_t_search + 1,\n", - " trace_nest[i],\n", - " atol=trace_match_atol,\n", - " rtol=trace_match_rtol)\n", - " if debug:\n", - " print(\"\\t traces_match = \" + str(traces_match)\n", - " + \" (nest trace = \" + str(trace_nest[i])\n", - " + \", ref trace = \"\n", - " + str(_trace_at_t_search + 1)\n", - " + \")\")\n", - " if traces_match:\n", - " _trace_at_t_search += 1.\n", - "\n", - " if (not traces_match) and post_spike_occurred_at_t_search:\n", - " traces_match = np.allclose(\n", - " _trace_at_t_search - 1,\n", - " trace_nest[i],\n", - " atol=trace_match_atol,\n", - " rtol=trace_match_rtol)\n", - " if debug:\n", - " print(\"\\t traces_match = \" + str(traces_match)\n", - " + \" (nest trace = \" + str(trace_nest[i])\n", - " + \", ref trace = \"\n", - " + str(_trace_at_t_search - 1)\n", - " + \")\")\n", - " if traces_match:\n", - " _trace_at_t_search -= 1.\n", - "\n", - " break\n", - "\n", - " if (not traces_match) and i_search == len(pre_spike_times) - 1:\n", - " if debug:\n", - " print(\"\\tthe time before the first pre spike\")\n", - " # the time before the first pre spike\n", - " traces_match = trace_nest[i] == 0.\n", - "\n", - " if not traces_match:\n", - " return False\n", - "\n", - " return True\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Plotting function:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "def plot_run(trace_nest_t, trace_nest, trace_python_ref,\n", - " pre_spike_times, post_spike_times, resolution, delay,\n", - " dendritic_delay, trace_match_atol, trace_match_rtol,\n", - " sim_time, title_snip=\"\", debug=False):\n", - "\n", - " fig, ax = plt.subplots(nrows=3, dpi=120)\n", - " ax1, ax2, ax3 = ax\n", - "\n", - " #\n", - " # pre spikes\n", - " #\n", - "\n", - " ax1.set_ylim([0., 1.])\n", - " ax1.set_ylabel(\"Pre spikes\")\n", - " n_spikes = len(pre_spike_times)\n", - " for i in range(n_spikes):\n", - " ax1.plot(2 * [pre_spike_times[i] + delay],\n", - " ax1.get_ylim(),\n", - " linewidth=2, color=\"blue\", alpha=.4)\n", - "\n", - " #\n", - " # post spikes\n", - " #\n", - "\n", - " ax2.set_ylim([0., 1.])\n", - " ax2.set_ylabel(\"Post spikes\")\n", - " n_spikes = len(post_spike_times)\n", - " for i in range(n_spikes):\n", - " ax2.plot(2 * [post_spike_times[i] + delay + dendritic_delay],\n", - " [0, 1],\n", - " linewidth=2, color=\"red\", alpha=.4)\n", - "\n", - " #\n", - " # traces\n", - " #\n", - "\n", - " ax3.set_ylabel(\"Synaptic trace\")\n", - " ax3.set_ylim([0., np.amax(trace_python_ref)])\n", - " ax3.plot(np.linspace(0., sim_time, len(trace_python_ref)),\n", - " trace_python_ref,\n", - " label=\"Expected\", color=\"cyan\", alpha=.6)\n", - " ax3.scatter(trace_nest_t, trace_nest,\n", - " marker=\".\", alpha=.5, color=\"orange\", label=\"NEST\")\n", - " ax3.legend()\n", - "\n", - " #\n", - " # Trace values are returned from NEST at regular intervals, but only\n", - " # updated at presynaptic spike times.\n", - " #\n", - " # Step backwards in time from the sampled value, to find the last\n", - " # time at which the trace value was updated, namely the time of\n", - " # occurrence of the last presynaptic spike.\n", - " #\n", - "\n", - " pre_spike_times = np.array(pre_spike_times)\n", - " n_timepoints = len(trace_nest_t)\n", - " for i in range(n_timepoints):\n", - " t = trace_nest_t[i]\n", - " if debug:\n", - " print(\"* Finding ref for NEST timepoint t = \"\n", - " + str(t) + \", trace = \" + str(trace_nest[i]))\n", - " for t_search in reversed(pre_spike_times + delay):\n", - " if t_search <= t:\n", - " if debug:\n", - " print(\"\\t* Testing \" + str(t_search) + \"...\")\n", - " _idx = int(np.round(t_search / sim_time\n", - " * float(len(trace_python_ref) - 1)))\n", - " _trace_at_t_search = trace_python_ref[_idx]\n", - " traces_match = np.allclose(_trace_at_t_search,\n", - " trace_nest[i],\n", - " atol=trace_match_atol,\n", - " rtol=trace_match_rtol)\n", - " if debug:\n", - " print(\"\\t traces_match = \" + str(traces_match))\n", - " if not traces_match:\n", - " post_spike_occurred_at_t_search = np.any(\n", - " (t_search - (np.array(post_spike_times)\n", - " + delay + dendritic_delay))**2 < resolution/2.)\n", - " if debug:\n", - " print(\"\\t post_spike_occurred_at_t_search = \"\n", - " + str(post_spike_occurred_at_t_search))\n", - " if post_spike_occurred_at_t_search:\n", - " traces_match = np.allclose(\n", - " _trace_at_t_search + 1,\n", - " trace_nest[i],\n", - " atol=trace_match_atol,\n", - " rtol=trace_match_rtol)\n", - " if debug:\n", - " print(\"\\t traces_match = \" + str(traces_match)\n", - " + \" (nest trace = \" + str(trace_nest[i])\n", - " + \", ref trace = \"\n", - " + str(_trace_at_t_search+1) + \")\")\n", - " \n", - " if traces_match:\n", - " _trace_at_t_search += 1.\n", - "\n", - " if not traces_match:\n", - " traces_match = np.allclose(\n", - " _trace_at_t_search - 1,\n", - " trace_nest[i],\n", - " atol=trace_match_atol,\n", - " rtol=trace_match_rtol)\n", - " \n", - " if debug:\n", - " print(\"\\t traces_match = \"\n", - " + str(traces_match)\n", - " + \" (nest trace = \"\n", - " + str(trace_nest[i])\n", - " + \", ref trace = \"\n", - " + str(_trace_at_t_search-1) + \")\")\n", - " \n", - " if traces_match:\n", - " _trace_at_t_search -= 1.\n", - "\n", - " ax3.scatter(t_search, _trace_at_t_search, 100, marker=\".\",\n", - " color=\"#A7FF00FF\", facecolor=\"none\")\n", - " ax3.plot([trace_nest_t[i], t_search],\n", - " [trace_nest[i], _trace_at_t_search],\n", - " linewidth=.5, color=\"#0000007F\")\n", - " break\n", - "\n", - " for _ax in ax:\n", - " _ax.xaxis.set_major_locator(\n", - " plticker.MultipleLocator(base=10*delay))\n", - " _ax.xaxis.set_minor_locator(\n", - " plticker.MultipleLocator(base=delay))\n", - " _ax.grid(which=\"major\", axis=\"both\")\n", - " _ax.grid(which=\"minor\", axis=\"x\", linestyle=\":\", alpha=.4)\n", - " _ax.set_xlim(0., sim_time)\n", - "\n", - " ax3.set_xlabel(\"Time [ms]\")\n", - " fig.suptitle(\"\"\"Postsynaptic trace testbench. Spike times are\\n\"\"\"\n", - " \"\"\"shown from the perspective of the STDP synapse \"\"\" + title_snip)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, run the test and make the plots while we go.\n", - "\n", - "The plots should be interpreted as follows. Pre- and postsynaptic spikes are shown in the top two subplots, at the time at which they arrive at the synapse (i.e. from the perspective of the synapse, taking dendritic and axonal delays into account).\n", - "\n", - "The bottom subplot shows the reference/known-good timeseries generated (numerically) in Python (**cyan colour**). The values returned from NEST are shown using **orange circles**. They are plotted as points rather than as a continuous line, because we can only retrieve the value at the resolution of the minimum synaptic delay (i.e. fetch trace value; simulate for a timestep `delay`; repeat). Moreover, the postsynaptic trace value is only updated in NEST during the processing of a presynaptic spike, so unless a presynaptic spike was processed in the last delay interval, the value will remain unchanged. To allow comparison between the Python- and NEST-generated values, we thus search for the previous time at which NEST would have updated the trace value, which is the time of arrival of the last presynaptic spike. This value is marked by an **open green circle**. If all is well, all green circles should always overlap an orange circle, and all **black lines** (which simply connect subsequent postsynaptic trace values returned by NEST) should be perfectly horizontal." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 720x480 with 3 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 720x480 with 3 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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caGrd92PPfYYZ511Fh/+8Ie59957WbBgAR/4wAd49dVXh5R3ww03sHXr1oFyNm/ezK9//WsOOeQQisUibW1tHH744Tz88MMsWLCARYsWDfmaPn06AEcffTTPPPMMd9xxx7D2lSdj9/T0bHe+vb19oJ59992XBQsWsN9++21Xz4wZMwA4/PDDeeKJJ3jkkUe28+Xaa6+tKYb9/f289NJLqmU0XOhstRp897kesXFpo4ZmjE0IuVIqleju7qZUKvEc0UByJF253glELxkBPD0G+5qxP2gJITbpHM+R+RnwYWCZQxsSwdUySVpdrWU+/vjjQzqzMYbddtuNjo4OTjzxRHbddVeuuuoqWlpauP7661m4cCGnn346N95443blZbNZjjzySM455xxKpRJf//rX6ezsZMmSJQO6b3/72xx88MEccsghnHHGGcyfP5/Nmzfz3HPP8atf/Yobb7wRgM985jP8/Oc/57jjjuOLX/wi+++/Pz09Pdx99928+93v5rDDDqOlpYVddtmFm266iXe84x1Mnz6dHXbYgfnz5w/Uc+ihh/KJT3yCXXfdla6uLp577jl+/etfDwxoP/OZz/DDH/6QY489losuuog5c+Zw7bXX8tRTT9UU61wux5w5c1Q7UbjQ2Wo1+O5zPWLj0kYNzRibEHIlk8nQ3tZGJpOhl2jO5vwRdLmK7RSrzfMMITZprtSuy2qn3znE5cDzEeADInIH0S5Fr7BtMXkAjDFB7F5ks3yOC12tZZ5++ulVtd///ve5++67WbFiBQ8++CAdHR0A7LbbbvzgBz/g/e9/P9/+9rf5zGc+M1Dmpz/9abZu3TqwNNLee+/NsmXLOPjggwfK3WuvvXjooYf4yle+wnnnnceaNWuYOnUqr3vd6zjqqKMGdOU335csWcL3vvc9LrzwQqZNm8Zb3vIWPv7xjw/sa3v11VfzL//yL7znPe+ht7eXU089lWuuuWa7es4///zt6jnmmGMG6pkzZw533303Z599Np/61Kdob2/n+OOP58orr+S4444bc6wzmcx2L1r5prPVJlme77pQbNTQjLEJIVdEhGzFIONpqg88y7rK4Ua1eZ4hxCbNlWR0vuNy4Pmf8fediJZVGowB/B+6E8b8lbGUedppp2232Ho13Uc+8hF+/OMfDzn/vve9b2DuUeVySplMhvPPP5/zzz+/anll++bP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\n", - "text/plain": [ - "<Figure size 720x480 with 3 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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1L2syDjkkEPabSspKWlpjN58880sXLiQL37xi8yfP5+zzz6bww8/nKuuuqrd6zKZDE8++ST9+vUD4HOf+xwTJkzg+9//fsvZ0W9961sMGjSIF198kfLycgBmz55NY2MjN9xwA5dccglDhw7llltuYfHixTz55JMcffTRLe9x6qmnttw/8EA7MdzYsWPb/Tt6+j4333wz69at44033mC//fYD4LjjjuOYY45hxYoVgTJtzYdL7WH+RZlDbqCrMeYXIlIG/DP2Cty1wHUh1qbyxId1Y6MqKtm9DByXp2MNBKYCb2Inkz8DKM3TsduKSn6+0vyCy2d2u+XtSPnhWs/vfvc79t577522tT5LV1payrx58zjkkEOYNm0a5eXl3HfffZSUlLQ71qmnntrS6AQYNGgQJ554Ivfddx+ZTIZUKsXTTz/NhRdeSFlZ2U6NsuOPP57bbruNhQsXctxxx/HYY4+x55577tTo7Knt27f3+H2effZZJk+e3NLobHb22We3NJaLXSgNTxEpwTY6a5q3GWN+AvwkjHpU34jH44waNar7J6p2opTd34BjsSPT8+FQbMOzMffz4Dwdt7Uo5ecjzS+4fGfnclk7ivbee+8uBxeJCHvvvTeHH3448+fP58ILL6SqqqrD51ZWVna4rampia1bt7J161bS6TS33nort956a4fHWL9+PQDr1q1j3LhxHT6nO7W1tT1+n9raWiZOnNijf0sQPlyhCKtCwfbrPJEd/TpVkTHGkMlkKCkp8aLfSZREKbsa4H1gzzwdbzL2zOdW4CX6puEZpfx8pPkFp9m5McZw1113MX/+fA466CBuu+02zjjjDA4+uP1fiurq6g63JZNJBg4cSCKRoKSkhC996Ut8/etf7/D9mhuBFRUVrFq1KlDNQ4cO7fH7DB8+vNO688GH6ZRCGdVujEkD1WG9vyqMVCrFqlWrSKVSYZfinahl91IejxXHTq0EdgnNtXk8drOo5ecbzS84zc7N22+/zaWXXsqXvvQlXnjhBfbdd1/OOOMMNm7c2O65Dz30ENu3b295vGXLFh599FEOP/xwSkpKKCsrY9asWbzxxhvsu+++TJ8+vd1t+PDhgO1nuXTpUp555plOaysttR2DGhoadtrem/eZNWsWixcv5q233trpGPPmzQsWWBvax7Nr9wP/CswPsQbVh+LxOJWVlV6c+o+a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\n", - "text/plain": [ - "<Figure size 720x480 with 3 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 720x480 with 3 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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4aabbuqy/IorrqCuro6///3vAKxYsQIRYf78+VxzzTVMmjSJQYMGMWvWLB5++OFux33jjTc455xzaGpqoqamhgMPPJCf/vSn3bbbtm0bF198Mfvssw81NTU0NTVxyimnsHTpUlasWEFjYyMAV155JSJCVVUVn//85zti5fs5S5cu5aSTTqKuro5Ro0bxxS9+kR07dhQdP7Cm9t5YBYxOv34V+DBBDk+A44HNYUhpR2M+M3PyR6OXOflhTv6E7bUBGFNg3ZismV3eARoqIVQAnzjdDayujE6ASPAowETgzCIOn0wmu9XKZQpxZ511FgsXLuTiiy9m9uzZzJo1i0ceeYRrrrmGb37zm3zwgx/sst9NN93E5MmTueGGG0ilUsyfP5+TTz6ZhQsXMmfOHABeffVVjj76aCZNmsT111/PmDFjeOCBB7jwwgvZtGkTl19+OQA7duzg2GOPZcWKFVxyySUcddRR7Ny5k8cff5y1a9dy9NFHc//993PSSSfx2c9+ls997nMANDY2IiLen7N+/XqOP/54YrEYN998M6NHj+b222/ny1/+chFR7RpL7YRZ8HwMmAv8DvgFcLOIHEhwI/pB4PrQzBSTSCTYunUrI0aMUHNnY07+aPQyJz/MyZ+wvdZQuOA5NqtZdC1wSCWECpAdp0KsBpZVTinot5hKIZFIWQoxs2fP7rasqqqqozB6ww038PTTT3PmmWeyYMECzjnnHI477ji+9a1vdfSnzJBMJnnooYcYNGgQAB/60IeYMmUK3/nOd3jooYcA+NrXvsbQoUN58sknO5rzTzzxRNra2rj22mu58MILGTFiBDfccAOvvPIKDz30ECeccELHZ5xxxhkdrw8//HAAJkyYwOzZs3HOkUgkcM55f86Pf/xjNm7cyAsvvMChhx4KwMknn8wHP/hBVq1aVXR8B0JTe5hXqsuBkQDOuf8nInXA/yHodnM1cE2IbqrROBerOfmj0cuc/DAnfyrtNZwgKTwENZmzCmxX5xzDgO3p7cKmtzhNrJBHBkfQVSFC/pmdivX5n//5Hw488MAuy7ILkzU1Ndx9990cfvjhzJw5k/r6eu644468s2CdccYZHYVOgKFDh3Lqqady5513kkwmicfjPPzww5x//vnU1dV1KZSdcsop3HTTTSxatIiTTz6Z++67j/33379LodOXPXv2eH/Oo48+yvTp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\n", - "text/plain": [ - "<Figure size 720x480 with 3 Axes>" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "resolution = .1 # [ms]\n", - "delays = np.array([1., 5.]) # [ms]\n", - "\n", - "# settings for plotting debug information\n", - "show_all_nest_trace_samples = True\n", - "\n", - "for delay in delays:\n", - " dendritic_delay = delay\n", - " for spike_times_idx in range(len(pre_spike_times)):\n", - " max_t_sp = max(np.amax(pre_spike_times[spike_times_idx]),\n", - " np.amax(post_spike_times[spike_times_idx]))\n", - " sim_time = max_t_sp + 5 * delay\n", - " trace_nest_t, trace_nest = run_post_trace_test_nest_(\n", - " pre_spike_times[spike_times_idx],\n", - " post_spike_times[spike_times_idx],\n", - " resolution, delay, sim_time, tau_minus,\n", - " show_all_nest_trace_samples)\n", - " trace_python_ref = run_post_trace_test_python_reference_(\n", - " pre_spike_times[spike_times_idx],\n", - " post_spike_times[spike_times_idx],\n", - " resolution, delay, dendritic_delay, sim_time, tau_minus)\n", - "\n", - " title_snip = \"(delay = \" \\\n", - " + str(delay) \\\n", - " + \")\"\n", - " plot_run(\n", - " trace_nest_t, trace_nest, trace_python_ref,\n", - " pre_spike_times[spike_times_idx],\n", - " post_spike_times[spike_times_idx], resolution, delay,\n", - " dendritic_delay, trace_match_atol, trace_match_rtol,\n", - " sim_time, title_snip)\n", - " assert nest_trace_matches_ref_trace(\n", - " trace_nest_t,\n", - " trace_nest,\n", - " trace_python_ref,\n", - " pre_spike_times[spike_times_idx],\n", - " post_spike_times[spike_times_idx],\n", - " resolution, delay, dendritic_delay,\n", - " trace_match_atol,\n", - " trace_match_rtol,\n", - " sim_time,\n", - " debug=False)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "-----------------------------\n", - "### License\n", - "\n", - "This file is part of NEST. Copyright (C) 2004 The NEST Initiative\n", - "\n", - "NEST is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.\n", - "\n", - "NEST is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/doc/htmldoc/neurons/node_handles.rst b/doc/htmldoc/neurons/node_handles.rst index 9a18f89556..46a29541cc 100644 --- a/doc/htmldoc/neurons/node_handles.rst +++ b/doc/htmldoc/neurons/node_handles.rst @@ -1,7 +1,7 @@ .. _node_handles: -New functionality for node handles (neurons and devices) -======================================================== +How to handle nodes (neurons and devices) +========================================== In NEST 3.0, ``nest.Create()`` returns a *NodeCollection* object instead of a list of global IDs. This provides a more compact and flexible way for handling nodes. @@ -21,20 +21,20 @@ NodeCollection supports the following functionality: - Access to node properties with :ref:`get() <get_param>` and :ref:`set() <set_param>` or by using :ref:`direct attributes <direct_attributes>` - :ref:`Parametrization <param_ex>` with spatial, random, distributions, math, and logic parameters - +-----------------------------------------------+------------------------------------------------+ - | NEST 2.x | NEST 3.0 | - +===============================================+================================================+ - | | | - | :: | :: | - | | | - | # A list of 10 GIDs is returned | # A NodeCollection object is returned | - | neurons = nest.Create('iaf_psc_alpha', 10)| neurons = nest.Create('iaf_psc_alpha', 10) | - | | | - | # Use lists as arguments in Connect | # Use NodeCollection objects as | - | nest.Connect(neurons, neurons) | # arguments in Connect | - | | nest.Connect(neurons, neurons) | - | | | - +-----------------------------------------------+------------------------------------------------+ ++-----------------------------------------------+------------------------------------------------+ +| NEST 2.x | NEST 3.0 | ++===============================================+================================================+ +| | | +| :: | :: | +| | | +| # A list of 10 GIDs is returned | # A NodeCollection object is returned | +| neurons = nest.Create('iaf_psc_alpha', 10)| neurons = nest.Create('iaf_psc_alpha', 10) | +| | | +| # Use lists as arguments in Connect | # Use NodeCollection objects as | +| nest.Connect(neurons, neurons) | # arguments in Connect | +| | nest.Connect(neurons, neurons) | +| | | ++-----------------------------------------------+------------------------------------------------+ .. _nodeID_support: @@ -248,7 +248,7 @@ This returns a dictionary with tuples. If the NodeCollection is a single-element To get specific parameters in the collection, use ``get([parameter_name_1, parameter_name_2, ... , parameter_name_n])``. -Get the parameters ``V_m`` and ``V_reset`` of all nodes +Get the parameters :hxt_ref:`V_m` and :hxt_ref:`V_reset` of all nodes >>> nodes = nest.Create('iaf_psc_alpha', 10, {'V_m': -55.}) >>> nodes.get(['V_m', 'V_reset']) diff --git a/doc/htmldoc/neurons/parametrization.rst b/doc/htmldoc/neurons/parametrization.rst index bf8648dd1e..19a3c4dc53 100644 --- a/doc/htmldoc/neurons/parametrization.rst +++ b/doc/htmldoc/neurons/parametrization.rst @@ -27,29 +27,29 @@ Random parameters The `random` module contains random distributions that can be used to set node and connection parameters, as well as positions for spatially distributed nodes. - +--------------------------------------------------+--------------------------------------------+ - | Parameter | Description | - +==================================================+============================================+ - | :: | | - | | | - | nest.random.uniform(min=0.0, max=1.0) | Draws samples based on a | - | | uniform distribution. | - +--------------------------------------------------+--------------------------------------------+ - | :: | | - | | | - | nest.random.normal(mean=0.0, std=1.0) | Draws samples based on a | - | | normal distribution. | - +--------------------------------------------------+--------------------------------------------+ - | :: | | - | | | - | nest.random.exponential(beta=1.0) | Draws samples based on a | - | | exponential distribution. | - +--------------------------------------------------+--------------------------------------------+ - | :: | | - | | | - | nest.random.lognormal(mean=0.0, std=1.0) | Draws samples based on a | - | | lognormal distribution. | - +--------------------------------------------------+--------------------------------------------+ ++--------------------------------------------------+--------------------------------------------+ +| Parameter | Description | ++==================================================+============================================+ +| :: | | +| | | +| nest.random.uniform(min=0.0, max=1.0) | Draws samples based on a | +| | uniform distribution. | ++--------------------------------------------------+--------------------------------------------+ +| :: | | +| | | +| nest.random.normal(mean=0.0, std=1.0) | Draws samples based on a | +| | normal distribution. | ++--------------------------------------------------+--------------------------------------------+ +| :: | | +| | | +| nest.random.exponential(beta=1.0) | Draws samples based on a | +| | exponential distribution. | ++--------------------------------------------------+--------------------------------------------+ +| :: | | +| | | +| nest.random.lognormal(mean=0.0, std=1.0) | Draws samples based on a | +| | lognormal distribution. | ++--------------------------------------------------+--------------------------------------------+ For every value to be generated, samples are drawn from a distribution. The distributions use NEST's random number generator, and are therefore thread-safe. Note that @@ -88,25 +88,25 @@ nodes. To create spatially distributed nodes (see :ref:`spatial_networks` for more), use ``nest.spatial.grid()`` or ``nest.spatial.free``. - +----------------------------------------------------+-------------------------------------------------------+ - | Parameter | Description | - +====================================================+=======================================================+ - | :: | | - | | Create spatially positioned nodes distributed on a | - | nest.spatial.grid(shape, center=None, | grid with dimensions given by `shape=[nx, ny(, nz)]`. | - | extent=None, edge_wrap=False) | | - +----------------------------------------------------+-------------------------------------------------------+ - | :: | | - | | Create spatially positioned nodes distributed freely | - | nest.spatial.free(pos, extent=None, | in space with dimensions given by `pos` or | - | edge_wrap=False, num_dimensions=None) | `num_dimensions`. | - | | | - +----------------------------------------------------+-------------------------------------------------------+ - - .. code-block:: ipython - - grid_nodes = nest.Create('iaf_psc_alpha', positions=nest.spatial.grid(shape=[10, 8])) - nest.PlotLayer(grid_nodes); ++----------------------------------------------------+-------------------------------------------------------+ +| Parameter | Description | ++====================================================+=======================================================+ +| :: | | +| | Create spatially positioned nodes distributed on a | +| nest.spatial.grid(shape, center=None, | grid with dimensions given by `shape=[nx, ny(, nz)]`. | +| extent=None, edge_wrap=False) | | ++----------------------------------------------------+-------------------------------------------------------+ +| :: | | +| | Create spatially positioned nodes distributed freely | +| nest.spatial.free(pos, extent=None, | in space with dimensions given by `pos` or | +| edge_wrap=False, num_dimensions=None) | `num_dimensions`. | +| | | ++----------------------------------------------------+-------------------------------------------------------+ + +.. code-block:: ipython + + grid_nodes = nest.Create('iaf_psc_alpha', positions=nest.spatial.grid(shape=[10, 8])) + nest.PlotLayer(grid_nodes); .. image:: ../static/img/NEST3_23_0.png :width: 500px @@ -124,61 +124,61 @@ To create spatially distributed nodes (see :ref:`spatial_networks` for more), us After you have created your spatially distributed nodes, you can use the `spatial` property to set node or connection parameters. - +----------------------------------+-------------------------------------------------------------------------+ - | Parameter | Description | - +==================================+=========================================================================+ - | :: | | - | | | - | nest.spatial.pos.x | | Position of a neuron, on the x, y, and z axis. | - | nest.spatial.pos.y | | Can be used to set node properties, but not for connecting. | - | nest.spatial.pos.z | | - +----------------------------------+-------------------------------------------------------------------------+ - | :: | | - | | | - | nest.spatial.source_pos.x | | Position of the source neuron, on the x, y, and z axis. | - | nest.spatial.source_pos.y | | Can only be used when connecting. | - | nest.spatial.source_pos.z | | - +----------------------------------+-------------------------------------------------------------------------+ - | :: | | - | | | - | nest.spatial.target_pos.x | | - | nest.spatial.target_pos.y | | Position of the target neuron, on the x, y, and z axis. | - | nest.spatial.target_pos.z | | Can only be used when connecting. | - +----------------------------------+-------------------------------------------------------------------------+ - | :: | | - | | | - | nest.spatial.distance | | Distance between two nodes. Can only be used when connecting. | - +----------------------------------+-------------------------------------------------------------------------+ - | :: | | - | | | - | nest.spatial.distance.x | | - | nest.spatial.distance.y | | Distance on the x, y and z axis between the source and target neuron. | - | nest.spatial.distance.z | | Can only be used when connecting. | - +----------------------------------+-------------------------------------------------------------------------+ - - These parameters represent positions of neurons or distances between two - neurons. To set node parameters, only the node position can be used. The - others can be used when connecting. - - - .. code-block:: ipython - - positions = nest.spatial.free([[x, 0.5*x] for x in np.linspace(0, 1.0, 10000)]) - spatial_nodes = nest.Create('iaf_psc_alpha', positions=positions) ++----------------------------------+-------------------------------------------------------------------------+ +| Parameter | Description | ++==================================+=========================================================================+ +| :: | | +| | | +| nest.spatial.pos.x | | Position of a neuron, on the x, y, and z axis. | +| nest.spatial.pos.y | | Can be used to set node properties, but not for connecting. | +| nest.spatial.pos.z | | ++----------------------------------+-------------------------------------------------------------------------+ +| :: | | +| | | +| nest.spatial.source_pos.x | | Position of the source neuron, on the x, y, and z axis. | +| nest.spatial.source_pos.y | | Can only be used when connecting. | +| nest.spatial.source_pos.z | | ++----------------------------------+-------------------------------------------------------------------------+ +| :: | | +| | | +| nest.spatial.target_pos.x | | +| nest.spatial.target_pos.y | | Position of the target neuron, on the x, y, and z axis. | +| nest.spatial.target_pos.z | | Can only be used when connecting. | ++----------------------------------+-------------------------------------------------------------------------+ +| :: | | +| | | +| nest.spatial.distance | | Distance between two nodes. Can only be used when connecting. | ++----------------------------------+-------------------------------------------------------------------------+ +| :: | | +| | | +| nest.spatial.distance.x | | +| nest.spatial.distance.y | | Distance on the x, y and z axis between the source and target neuron. | +| nest.spatial.distance.z | | Can only be used when connecting. | ++----------------------------------+-------------------------------------------------------------------------+ + +These parameters represent positions of neurons or distances between two +neurons. To set node parameters, only the node position can be used. The +others can be used when connecting. - parameter = -60 + nest.spatial.pos.x + (0.4 * nest.spatial.pos.x * nest.random.normal()) - spatial_nodes.set('V_m'=parameter) - node_pos = np.array(nest.GetPosition(spatial_nodes)) - node_pos[:,1] - v_m = spatial_nodes.get('V_m'); +.. code-block:: ipython - fig, ax = pyplot.subplots(figsize=(12, 6)) - ax.plot(node_pos[:,0], v_m, '.', ms=3.5) - ax.set_xlabel('Node position on x-axis') - ax.set_ylabel('V_m'); + positions = nest.spatial.free([[x, 0.5*x] for x in np.linspace(0, 1.0, 10000)]) + spatial_nodes = nest.Create('iaf_psc_alpha', positions=positions) + + parameter = -60 + nest.spatial.pos.x + (0.4 * nest.spatial.pos.x * nest.random.normal()) + spatial_nodes.set(V_m=parameter) + + node_pos = np.array(nest.GetPosition(spatial_nodes)) + node_pos[:,1] + v_m = spatial_nodes.get('V_m'); + + fig, ax = pyplot.subplots(figsize=(12, 6)) + ax.plot(node_pos[:,0], v_m, '.', ms=3.5) + ax.set_xlabel('Node position on x-axis') + ax.set_ylabel('V_m'); - .. image:: ../static/img/NEST3_25_0.png +.. image:: ../static/img/NEST3_25_0.png @@ -191,45 +191,45 @@ The spatial_distributions module contains random distributions that take a spati parameter as input and applies the distribution on the parameter. They are used for spatially distributed nodes. - +----------------------------------------------+--------------------+------------------------------------------------------+ - | Distribution function | Arguments | Function | - +==============================================+====================+======================================================+ - | | | .. math:: p(x) = e^{-\frac{x}{\beta}} | - | ``nest.spatial_distributions.exponential()`` | | x, | | - | | | beta | | - +----------------------------------------------+--------------------+------------------------------------------------------+ - | | | x, | .. math:: | - | ``nest.spatial_distributions.gaussian()`` | | mean, | p(x) = e^{-\frac{(x-\text{mean})^2} | - | | | std | {2\text{std}^2}} | - +----------------------------------------------+--------------------+------------------------------------------------------+ - | | | .. math:: | - | | | x, | | - | | | y, | p(x) = e^{-\frac{\frac{(x-\text{mean_x})^2} | - | | | mean_x, | {\text{std_x}^2}+\frac{ | - | ``nest.spatial_distributions.gaussian2D()`` | | mean_y, | (y-\text{mean_y})^2}{\text{std_y}^2}+2 | - | | | std_x, | \rho\frac{(x-\text{mean_x})(y-\text{mean_y})} | - | | | std_y, | {\text{std_x}\text{std_y}}} | - | | | rho | {2(1-\rho^2)}} | - | | | | - +----------------------------------------------+--------------------+------------------------------------------------------+ - | | | .. math:: p(x) = \frac{x^{\kappa-1}e^{-\frac{x} | - | ``nest.spatial_distributions.gamma()`` | | x, | {\theta}}}{\theta^\kappa\Gamma(\kappa)} | - | | | kappa | | - +----------------------------------------------+--------------------+------------------------------------------------------+ ++----------------------------------------------+--------------------+------------------------------------------------------+ +| Distribution function | Arguments | Function | ++==============================================+====================+======================================================+ +| | | .. math:: p(x) = e^{-\frac{x}{\beta}} | +| ``nest.spatial_distributions.exponential()`` | | x, | | +| | | beta | | ++----------------------------------------------+--------------------+------------------------------------------------------+ +| | | x, | .. math:: | +| ``nest.spatial_distributions.gaussian()`` | | mean, | p(x) = e^{-\frac{(x-\text{mean})^2} | +| | | std | {2\text{std}^2}} | ++----------------------------------------------+--------------------+------------------------------------------------------+ +| | | .. math:: | +| | | x, | | +| | | y, | p(x) = e^{-\frac{\frac{(x-\text{mean_x})^2} | +| | | mean_x, | {\text{std_x}^2}+\frac{ | +| ``nest.spatial_distributions.gaussian2D()`` | | mean_y, | (y-\text{mean_y})^2}{\text{std_y}^2}+2 | +| | | std_x, | \rho\frac{(x-\text{mean_x})(y-\text{mean_y})} | +| | | std_y, | {\text{std_x}\text{std_y}}} | +| | | rho | {2(1-\rho^2)}} | +| | | | ++----------------------------------------------+--------------------+------------------------------------------------------+ +| | | .. math:: p(x) = \frac{x^{\kappa-1}e^{-\frac{x} | +| ``nest.spatial_distributions.gamma()`` | | x, | {\theta}}}{\theta^\kappa\Gamma(\kappa)} | +| | | kappa | | ++----------------------------------------------+--------------------+------------------------------------------------------+ With these functions, you can recreate for example a Gaussian kernel as a parameter: - +------------------------------------------------------------+-----------------------------------------------------------------+ - | NEST 2.x | NEST 3.0 | - +------------------------------------------------------------+-----------------------------------------------------------------+ - | | | - | :: | :: | - | | | - | kernel = {"gaussian": {"p_center": 1.0, "sigma": 1.0}} | param = nest.spatial_distributions.gaussian( | - | | nest.spatial.distance, p_center=1.0, std_deviation=1.0) | - | | | - +------------------------------------------------------------+-----------------------------------------------------------------+ ++------------------------------------------------------------+-----------------------------------------------------------------+ +| NEST 2.x | NEST 3.0 | ++------------------------------------------------------------+-----------------------------------------------------------------+ +| | | +| :: | :: | +| | | +| kernel = {"gaussian": {"p_center": 1.0, "sigma": 1.0}} | param = nest.spatial_distributions.gaussian( | +| | nest.spatial.distance, p_center=1.0, std_deviation=1.0) | +| | | ++------------------------------------------------------------+-----------------------------------------------------------------+ .. code-block:: ipython @@ -252,7 +252,7 @@ parameter: fig, ax = pyplot.subplots(figsize=(12, 6)) bars = ax.hist(targets, bins=N, edgecolor='black', linewidth=1.2) - pyplot.xticks(bars[1] + 0.5,np.arange(1, N+1)) + pyplot.xticks(bars[1] + 0.5,np.arange(1, N+2)) ax.set_title('Connections from node with NodeID {}'.format(spatial_nodes[middle_node].get('global_id'))) ax.set_xlabel('Target NodeID') ax.set_ylabel('Num. connections'); @@ -266,21 +266,21 @@ parameter: Mathematical functions ^^^^^^^^^^^^^^^^^^^^^^ - +----------------------------+---------------------------------------------+ - | Parameter | Description | - +============================+=============================================+ - | :: | | - | | | - | nest.random.exp(x) | | Calculates the exponential of a parameter | - +----------------------------+---------------------------------------------+ - | :: | | - | | | - | nest.random.cos(x) | | Calculates the cosine of a parameter | - +----------------------------+---------------------------------------------+ - | :: | | - | | | - | nest.random.sin(x) | | Calculates the sine of a parameter | - +----------------------------+---------------------------------------------+ ++----------------------------+---------------------------------------------+ +| Parameter | Description | ++============================+=============================================+ +| :: | | +| | | +| nest.random.exp(x) | | Calculates the exponential of a parameter | ++----------------------------+---------------------------------------------+ +| :: | | +| | | +| nest.random.cos(x) | | Calculates the cosine of a parameter | ++----------------------------+---------------------------------------------+ +| :: | | +| | | +| nest.random.sin(x) | | Calculates the sine of a parameter | ++----------------------------+---------------------------------------------+ The mathematical functions take a parameter object as argument, and return a new parameter which applies the mathematical function on the parameter @@ -316,34 +316,34 @@ given as argument. Clipping, redraw, and conditionals ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - +----------------------------------------------------+-----------------------------------------------------+ - | Parameter | Description | - +====================================================+=====================================================+ - | :: | | - | | | - | nest.math.min(x, value) | If a value from the Parameter is above a threshold, | - | | x, the value is replaced with the value of the | - | | threshold. | - +----------------------------------------------------+-----------------------------------------------------+ - | :: | | - | | | - | nest.math.max(x, value) | If a value from the parameter is below a threshold, | - | | x, the value is replaced with the value of | - | | the threshold. | - +----------------------------------------------------+-----------------------------------------------------+ - | :: | | - | | | - | nest.math.redraw(x, min, max) | If a value from the parameter is outside of the | - | | limits given, the value is redrawn. Throws an error | - | | if a suitable value is not found after a certain | - | | number of redraws. | - +----------------------------------------------------+-----------------------------------------------------+ - | :: | | - | | | - | nest.logic.conditional(x, val_true, val_false) | Given a condition, yields one value or another | - | | based on if the condition evaluates to true or | - | | false. | - +----------------------------------------------------+-----------------------------------------------------+ ++----------------------------------------------------+-----------------------------------------------------+ +| Parameter | Description | ++====================================================+=====================================================+ +| :: | | +| | | +| nest.math.min(x, value) | If a value from the Parameter is above a threshold, | +| | x, the value is replaced with the value of the | +| | threshold. | ++----------------------------------------------------+-----------------------------------------------------+ +| :: | | +| | | +| nest.math.max(x, value) | If a value from the parameter is below a threshold, | +| | x, the value is replaced with the value of | +| | the threshold. | ++----------------------------------------------------+-----------------------------------------------------+ +| :: | | +| | | +| nest.math.redraw(x, min, max) | If a value from the parameter is outside of the | +| | limits given, the value is redrawn. Throws an error | +| | if a suitable value is not found after a certain | +| | number of redraws. | ++----------------------------------------------------+-----------------------------------------------------+ +| :: | | +| | | +| nest.logic.conditional(x, val_true, val_false) | Given a condition, yields one value or another | +| | based on if the condition evaluates to true or | +| | false. | ++----------------------------------------------------+-----------------------------------------------------+ Note that ``x`` is a ``nest.Parameter``. @@ -351,6 +351,8 @@ The ``nest.math.min()`` and ``nest.math.max()`` functions are used to clip a parameter. Essentially they work like the standard ``min()`` and ``max()`` functions, ``nest.math.min()`` yielding the smaller of two values, and ``nest.math.max()`` yielding the larger of two values. +Note that the order of inputs matter, meaning that the first argument +must be a parameter, and the second argument must be a threshold value. :: @@ -460,15 +462,15 @@ Use parameters to set node properties Using parameters makes it easy to set node properties - +-----------------------------------------------+----------------------------------------------------+ - | NEST 2.x | NEST 3.0 | - +===============================================+====================================================+ - | | | - | :: | :: | - | | | - | for gid in nrns: | nrns.V_m=nest.random.uniform(-20., 20) | - | v_m = numpy.random.uniform(-20., 20.) | | - | nest.SetStatus([node_id], {'V_m': V_m}) | | - | | | - | | | - +-----------------------------------------------+----------------------------------------------------+ ++-----------------------------------------------+----------------------------------------------------+ +| NEST 2.x | NEST 3.0 | ++===============================================+====================================================+ +| | | +| :: | :: | +| | | +| for gid in nrns: | nrns.V_m = nest.random.uniform(-20.0, 20.0) | +| v_m = numpy.random.uniform(-20.0, 20.0) | | +| nest.SetStatus(gid, {"V_m": v_m}) | | +| | | +| | | ++-----------------------------------------------+----------------------------------------------------+ diff --git a/doc/htmldoc/ref_material/glossary.rst b/doc/htmldoc/ref_material/glossary.rst index 5d64e1c67c..e60c782dc3 100644 --- a/doc/htmldoc/ref_material/glossary.rst +++ b/doc/htmldoc/ref_material/glossary.rst @@ -5,62 +5,16 @@ Glossary ======== -.. glossary:: - :sorted: - - iaf - Integrate and fire. - - gif - Generalized integrate and fire. - - cond - Conductance-based. - - psc - Post-synaptic current (current-based). - - hh - Hodgkin huxley. - - rng - Random number generator. - - wfr - Waveform relaxation method. - - aeif - Adaptive exponential integrate and fire. - - ht - Hill and tononi. - - pp - Point process. - - in - Inhibitory. - - ex - Excitatory. - - MAM - Multi-area model. +.. _units_measure: - mpi - Message passing interface. - - stdp - Spike-timing dependent plasticity synapse. +Units of measure +---------------- - st - Short term plasticity. - - vp - Virtual process. +.. glossary:: + :sorted: time - Milliseconds (ms). + Time in milliseconds (ms). tau_m Membrane time constant in milliseconds (ms). @@ -116,7 +70,7 @@ Glossary V_th Spike threshold in Millivolts (mV). - V_reset double + V_reset Reset potential of the membrane in Millivolts (mV). V_min @@ -132,7 +86,91 @@ Glossary Sodium reversal potential in Millivolts (mV). E_K - Potassium reversal potential in Millivolts (mV). + Potassium reversal potential in millivolts (mV). + +.. _model_terms: + +Terms for models in NEST +------------------------ + +.. glossary:: + :sorted: + + iaf + Integrate-and-fire. Also known in other sources as `IF`. + + gif + Generalized integrate-and-fire. From the Gerstner lab. + + glif + Generalized leaky integrate-and-fire. From the Allen institute. + + cond + Conductance-based. Also known in other sources as `COBA`. + + psc + Post-synaptic current (current-based). Also known in other sources as `CUBA`. + + hh + Hodgkin Huxley. + + aeif + Adaptive exponential integrate-and-fire. Also known in other sources as `AdEx`. + + ht + Hill and Tononi. + + pp + Point process. + + in + Inhibitory. + + ex + Excitatory. + + stdp + Spike-timing dependent plasticity. + + st + Short-term plasticity. + + psp + Post-synaptic potential. + + sfa + Spike-frequency adaptation. + + cm + Compartmental model. + +Other abbreviations +------------------- + +.. glossary:: + :sorted: + + + rng + Random number generator. + + wfr + Waveform relaxation method. + + MAM + Multi-area model. + + mpi + Message passing interface. + + vp + Virtual process. + +Commonly used terms in NEST +---------------------------- + +.. glossary:: + :sorted: subthreshold dynamics Non-spiking backgound activity of the synapses. @@ -196,9 +234,6 @@ Glossary Gaussian white noise A random process with a mean of zero. - sfa - Spike-frequency adaptation. - point neuron A simple neuron model where its soma along with the membrane potential dynamics are modeled as a resistance–capacitance circuit. @@ -213,9 +248,6 @@ Glossary eligibility trace A property of a synapse, which allows it to be modified for a period of time when some constraints are satisfied. - reversal potential - The membrane potential in which a neuron causes no net current flow. - alpha function Instance of a synaptic response. @@ -241,15 +273,9 @@ Glossary renewal process Spike-time statistical analysis. - spike train - A sequence of action potentials. - spike-frequency adaptation After stimulation, neurons show a reduction in the firing frequency of their spike response following an initial increase. - GIF - Generalized integrate-and-fire model. - coefficient of variation Standard deviation divided by the mean. @@ -262,14 +288,8 @@ Glossary soma Cell body of the neuron. - psp - Post-synaptic potential. - - PSC - Post-synatpic current. - - absolute refractory - An interval after a neuron fires a spike to prevent it from firing a spike again. + absolute refractory period + Interval directly following a spike emission in which the sender neuron cannot fire again. indegree Amount of connections to post-synaptic cells. diff --git a/doc/htmldoc/ref_material/pynest_api/index.rst b/doc/htmldoc/ref_material/pynest_api/index.rst new file mode 100644 index 0000000000..f04820aa59 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/index.rst @@ -0,0 +1,29 @@ +.. _pynest_api: + +PyNEST API listing +================== + +{% for key, value in api_dict | dictsort -%} + + +:doc:`{{ key }}` +-------------------------------------------------------------- + +.. automodule:: {{ key }} + :noindex: + + .. autosummary:: + + {% for item in value %} + {{ item }} + {% endfor %} + +{% endfor %} + + + +.. toctree:: + :hidden: + :glob: + + * diff --git a/doc/htmldoc/ref_material/pynest_api/nest.NestModule.rst b/doc/htmldoc/ref_material/pynest_api/nest.NestModule.rst new file mode 100644 index 0000000000..f780fc7d4b --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.NestModule.rst @@ -0,0 +1,28 @@ +.. _sec_kernel_attributes: + +Kernel attributes (nest.NestModule) +=================================== + + +The NEST kernel can be controlled from the PyNEST interface by getting or +setting attributes on the ``nest`` module: + +.. code-block:: python + + # set a single kernel attribute + nest.resolution = 0.1 + + # set multiple attributes at once + nest.set(min_delay=0.1, max_delay=2.0) + + # if you have the attributes in a dictionary + params = {'min_delay': 0.1, 'max_delay': 2.0} + nest.set(**params) + +Here is a list of attributes that can be get and/or set on the ``nest`` module: + + +.. autoclass:: nest.NestModule + :members: + :no-undoc-members: + diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_connections.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_connections.rst new file mode 100644 index 0000000000..2b54cd5ebf --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_connections.rst @@ -0,0 +1,7 @@ +Connection module +================= + +.. automodule:: nest.lib.hl_api_connections + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_info.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_info.rst new file mode 100644 index 0000000000..4d1dca2546 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_info.rst @@ -0,0 +1,10 @@ +Info module +=========== + +Functions to provide additional information. + + +.. automodule:: nest.lib.hl_api_info + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_models.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_models.rst new file mode 100644 index 0000000000..9eba22c717 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_models.rst @@ -0,0 +1,24 @@ +Models module +============= + +.. automodule:: nest.lib.hl_api_models + :members: + :undoc-members: + :show-inheritance: + + + + + +.. autofunction:: Models(mtype="all", sel=None) + + + Deprecated since 3.3. + + Use :py:obj:`~.NestModule.node_models` or :py:obj:`~.NestModule.synapse_models` instead. + +.. autofunction:: ConnectionRules + + Deprecated since 3.3. + + Use :py:obj:`~.NestModule.connection_rules` instead. diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_nodes.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_nodes.rst new file mode 100644 index 0000000000..253dfe1b7b --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_nodes.rst @@ -0,0 +1,7 @@ +Node module +=========== + +.. automodule:: nest.lib.hl_api_nodes + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_parallel_computing.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_parallel_computing.rst new file mode 100644 index 0000000000..bceecc5321 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_parallel_computing.rst @@ -0,0 +1,7 @@ +Parallel computing module +========================= + +.. automodule:: nest.lib.hl_api_parallel_computing + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_simulation.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_simulation.rst new file mode 100644 index 0000000000..8e985f1c5d --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_simulation.rst @@ -0,0 +1,7 @@ +Simulation module +================= + +.. automodule:: nest.lib.hl_api_simulation + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_sonata.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_sonata.rst new file mode 100644 index 0000000000..d515982cc2 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_sonata.rst @@ -0,0 +1,13 @@ +Sonata module +============= + +Build and simulate networks represented by the SONATA format + +.. seealso:: + + See the :ref:`nest_sonata` guide for more details + +.. automodule:: nest.lib.hl_api_sonata + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_spatial.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_spatial.rst new file mode 100644 index 0000000000..127bb922a2 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_spatial.rst @@ -0,0 +1,44 @@ +Spatial module +============== + + +Functions related to spatially-structured networks. + +.. seealso:: + + See our in depth guide to :ref:`spatial_networks` for details. + + +Query functions for spatial layers +---------------------------------- + +Syntax: +~~~~~~~ + +.. code-block:: Python + + nest.Distance(nodes[1], nodes[2]) + +.. automodule:: nest.lib.hl_api_spatial + :members: CreateMask, Displacement, Distance, DumpLayerConnections, DumpLayerNodes, FindCenterElement, FindNearestElement, GetPosition, GetTargetNodes, GetSourceNodes, GetTargetPositions, GetSourcePositions, SelectNodesByMask + :undoc-members: + :show-inheritance: + +Visualization functions +----------------------- + +Syntax: +~~~~~~~ + +.. code-block:: Python + + nest.PlotLayer(layer, fig, nodecolor, nodesize) + +.. automodule:: nest.lib.hl_api_spatial + :members: PlotLayer, PlotSources, PlotTargets, PlotProbabilityParameter + :undoc-members: + :show-inheritance: + + + + diff --git a/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_types.rst b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_types.rst new file mode 100644 index 0000000000..61322603c7 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.lib.hl_api_types.rst @@ -0,0 +1,14 @@ +Types module +============ + +Accessing and setting node and parameter types in NEST. + +.. automodule:: nest.lib.hl_api_types + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: nest.lib.hl_api_info + :members: get_argv, GetStatus, SetStatus + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.logic.hl_api_logic.rst b/doc/htmldoc/ref_material/pynest_api/nest.logic.hl_api_logic.rst new file mode 100644 index 0000000000..4a3af9425e --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.logic.hl_api_logic.rst @@ -0,0 +1,17 @@ +Logic module +============ + +Given a condition, yields one value or another based on if the condition evaluates to true or false. + +Syntax: +~~~~~~~~ + +:: + + nest.logic.conditional(x, val_true, val_false) + + +.. automodule:: nest.logic.hl_api_logic + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.math.hl_api_math.rst b/doc/htmldoc/ref_material/pynest_api/nest.math.hl_api_math.rst new file mode 100644 index 0000000000..f6dfd56164 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.math.hl_api_math.rst @@ -0,0 +1,22 @@ +Math module +=========== + + +The mathematical functions take a parameter object as argument, +and return a new parameter which applies the mathematical function on the parameter given as argument. + +Syntax: +~~~~~~~ + +:: + + nest.math.sin(x) + nest.math.redraw(x, min, max) + +.. automodule:: nest.math.hl_api_math + :members: + :undoc-members: + :show-inheritance: + + + diff --git a/doc/htmldoc/ref_material/pynest_api/nest.random.hl_api_random.rst b/doc/htmldoc/ref_material/pynest_api/nest.random.hl_api_random.rst new file mode 100644 index 0000000000..ce8c56c19a --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.random.hl_api_random.rst @@ -0,0 +1,14 @@ +Random module +============= + +The random module contains random distributions that can be used to set +node and connection parameters, as well as positions for spatially distributed nodes. + +Syntax:: + + nest.random.uniform(min, max) + +.. automodule:: nest.random.hl_api_random + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.raster_plot.rst b/doc/htmldoc/ref_material/pynest_api/nest.raster_plot.rst new file mode 100644 index 0000000000..c1c8783dd0 --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.raster_plot.rst @@ -0,0 +1,7 @@ +Raster\_plot module +=================== + +.. automodule:: nest.raster_plot + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.server.hl_api_server.rst b/doc/htmldoc/ref_material/pynest_api/nest.server.hl_api_server.rst new file mode 100644 index 0000000000..294d957c8d --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.server.hl_api_server.rst @@ -0,0 +1,10 @@ +Server module +============= + +.. automodule:: nest.server.hl_api_server + :members: + :undoc-members: + :show-inheritance: + + + diff --git a/doc/htmldoc/ref_material/pynest_api/nest.spatial.hl_api_spatial.rst b/doc/htmldoc/ref_material/pynest_api/nest.spatial.hl_api_spatial.rst new file mode 100644 index 0000000000..60fb589e9b --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.spatial.hl_api_spatial.rst @@ -0,0 +1,21 @@ +.. _pynest_spatial: + +Spatial positions functions +=========================== + +The spatial module contains parameters related to spatial positions of the nodes. + +Syntax: +~~~~~~~ + +.. code-block:: Python + + nest.spatial.grid(shape, center, + extent, edge_wrap) + +.. automodule:: nest.spatial.hl_api_spatial + :members: + +.. automodule:: nest.spatial + :members: distance + diff --git a/doc/htmldoc/ref_material/pynest_api/nest.spatial_distributions.hl_api_spatial_distributions.rst b/doc/htmldoc/ref_material/pynest_api/nest.spatial_distributions.hl_api_spatial_distributions.rst new file mode 100644 index 0000000000..8b0bc7ff4a --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.spatial_distributions.hl_api_spatial_distributions.rst @@ -0,0 +1,16 @@ +Spatial distribution functions +============================== + +Functions to help create distributions based on the position of the nodes. + +Syntax: +~~~~~~~ + +.. code-block:: Python + + nest.spatial_distributions.gamma(x, kappa, theta) + +.. automodule:: nest.spatial_distributions.hl_api_spatial_distributions + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.visualization.rst b/doc/htmldoc/ref_material/pynest_api/nest.visualization.rst new file mode 100644 index 0000000000..48902f719a --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.visualization.rst @@ -0,0 +1,7 @@ +Visualization module +==================== + +.. automodule:: nest.visualization + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_api/nest.voltage_trace.rst b/doc/htmldoc/ref_material/pynest_api/nest.voltage_trace.rst new file mode 100644 index 0000000000..4fe799addc --- /dev/null +++ b/doc/htmldoc/ref_material/pynest_api/nest.voltage_trace.rst @@ -0,0 +1,7 @@ +Voltage\_trace module +===================== + +.. automodule:: nest.voltage_trace + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/htmldoc/ref_material/pynest_apis.rst b/doc/htmldoc/ref_material/pynest_apis.rst deleted file mode 100644 index 4099a01d94..0000000000 --- a/doc/htmldoc/ref_material/pynest_apis.rst +++ /dev/null @@ -1,115 +0,0 @@ -.. _pynest_api: - -PyNEST API -========== - -The ``nest`` module contains methods and attributes to control the NEST kernel. -This interface is known as PyNEST. - -.. _sec:kernel_attributes: - -Kernel attributes ------------------ - -The NEST kernel can be controlled from the PyNEST interface by getting or -setting attributes on the ``nest`` module: - -.. code-block:: python - - # set a single kernel attribute - nest.resolution = 0.1 - - # set multiple attributes at once - nest.set(min_delay=0.1, max_delay=2.0) - - # if you have the attributes in a dictionary - params = {'min_delay': 0.1, 'max_delay': 2.0} - nest.set(**params) - -Here is a list of attributes that can be get and/or set on the ``nest`` module: - -.. autoclass:: nest.NestModule - :members: - :exclude-members: set_communicator - -Functions related to models -------------------------------- - -.. automodule:: nest.lib.hl_api_models - :members: - -Functions related to the creation and retrieval of nodes (neurons, devices) ----------------------------------------------------------------------------- - -.. automodule:: nest.lib.hl_api_nodes - :members: - -Functions related to setting and getting parameters ------------------------------------------------------ - -.. automodule:: nest.lib.hl_api_info - :members: - -Functions related to connections ---------------------------------- - -.. automodule:: nest.lib.hl_api_connections - :members: - -Functions related to simulation ---------------------------------- - -.. automodule:: nest.lib.hl_api_simulation - :members: - -Functions related to parallel computing ----------------------------------------- - -.. automodule:: nest.lib.hl_api_parallel_computing - :members: - -Functions related to spatially distributed nodes ------------------------------------------------- - -.. note:: - - This used to be a separate topology module. Now, it is integrated into NEST 3.0. - -.. automodule:: nest.lib.hl_api_spatial - :members: - -Functions related to NEST types -------------------------------- - -.. automodule:: nest.lib.hl_api_types - :members: - -Functions related to helper info ---------------------------------- - -.. automodule:: nest.lib.hl_api_helper - :members: - -Functions related to randomization ----------------------------------- - -.. automodule:: nest.random.hl_api_random - :members: - -Functions related to spatial distributions ------------------------------------------- - -.. automodule:: nest.spatial.hl_api_spatial - :members: - -.. automodule:: nest.spatial_distributions.hl_api_spatial_distributions - :members: - -Functions related to mathematical expressions ---------------------------------------------- - -.. automodule:: nest.math.hl_api_math - :members: - -.. automodule:: nest.logic.hl_api_logic - :members: diff --git a/doc/htmldoc/related_projects.rst b/doc/htmldoc/related_projects.rst index e2c7bf7650..c69e2d8a85 100644 --- a/doc/htmldoc/related_projects.rst +++ b/doc/htmldoc/related_projects.rst @@ -3,7 +3,7 @@ Related projects ================ -NEST simulator is part of a larger network of projects that focus on simulation, analysis, visualization, or modeling of +NEST Simulator is part of a larger network of projects that focus on simulation, analysis, visualization, or modeling of biologically realistic neural networks. Here you can find further information about some of these projects. @@ -41,6 +41,13 @@ The app enables the rapid construction, parametrization, and instrumentation of * :doc:`Get started with NEST desktop <desktop:user/index>` +NEST GPU +-------- + +NEST GPU is a GPU-MPI library for simulation of large-scale networks of spiking neurons. It can be used in Python, in C++ and in C. + +* :doc:`Get started with NEST GPU <gpu:index>` + PyNN ---- diff --git a/doc/htmldoc/release_notes/index.rst b/doc/htmldoc/release_notes/index.rst deleted file mode 100644 index c173ea35b0..0000000000 --- a/doc/htmldoc/release_notes/index.rst +++ /dev/null @@ -1,14 +0,0 @@ -.. _release_notes: - -Release notes -============= - -This page contains links to the release notes of all recently -published versions of NEST. On the linked pages, you will find both -information about new features, as well as quick guides on how to -transition your simulation code to the new versions. - -* :ref:`NEST 3.0 (June 10, 2021 ) <release_3.0>` -* :ref:`NEST 3.1 (September 15, 2021 ) <release_3.1>` -* :ref:`NEST 3.2 (January 21, 2022 ) <release_3.2>` -* :ref:`NEST 3.3 (March 22, 2022 ) <release_3.3>` diff --git a/doc/htmldoc/release_notes/v3.0/features/index.rst b/doc/htmldoc/release_notes/v3.0/features/index.rst deleted file mode 100644 index bddba7940e..0000000000 --- a/doc/htmldoc/release_notes/v3.0/features/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _toc_3.0_features: - -NEST 3.0 Features -================= - -Here you can discover the new features NEST 3.0 has to offer! - -.. toctree:: - :maxdepth: 1 - - node_handles - handling_connections - parametrization - random_number_generators - recording_simulations - stimulation_backends - ../../../nest_server diff --git a/doc/htmldoc/resolve_includes.py b/doc/htmldoc/resolve_includes.py index 6c6be18b42..20badc28b3 100644 --- a/doc/htmldoc/resolve_includes.py +++ b/doc/htmldoc/resolve_includes.py @@ -32,22 +32,22 @@ """ +import glob import os import re import sys -import glob from fileinput import FileInput -pattern = re.compile('^.. include:: (.*)') +pattern = re.compile("^.. include:: (.*)") path = sys.argv[1] -for rst_fname in glob.glob(os.path.join(path, 'spike_recorder.rst')): - with FileInput(rst_fname, inplace=True, backup='.bak') as rst_file: +for rst_fname in glob.glob(os.path.join(path, "spike_recorder.rst")): + with FileInput(rst_fname, inplace=True, backup=".bak") as rst_file: for line in rst_file: match = pattern.match(line) if match: include_fname = os.path.join(path, match.group(1)) with open(include_fname) as include_file: - print(include_file.read(), end='') + print(include_file.read(), end="") else: - print(line, end='') + print(line, end="") diff --git a/doc/htmldoc/static/css/bootstrap.min.css.map b/doc/htmldoc/static/css/bootstrap.min.css.map deleted file mode 100644 index c84afa43c6..0000000000 --- a/doc/htmldoc/static/css/bootstrap.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow in Chrome from inputs built with datalists.\n// See https://stackoverflow.com/a/54997118\n\n[list]::-webkit-calendar-picker-indicator {\n display: none;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// Inherit font family and line height for file input buttons\n\n::file-selector-button {\n font: inherit;\n}\n\n// 1. Change font properties to `inherit`\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::-webkit-file-upload-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n background-color: currentColor;\n border: 0;\n opacity: 0.25;\n}\n\nhr:not([size]) {\n height: 1px;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: #0d6efd;\n text-decoration: underline;\n}\na:hover {\n color: #0a58ca;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n direction: ltr /* rtl:ignore */;\n unicode-bidi: bidi-override;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: #d63384;\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 0.875em;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n font-weight: 700;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n display: none;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n}\n\n::file-selector-button {\n font: inherit;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-right: var(--bs-gutter-x, 0.75rem);\n padding-left: var(--bs-gutter-x, 0.75rem);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-bg: transparent;\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: #212529;\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: #212529;\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: #212529;\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n vertical-align: top;\n border-color: #dee2e6;\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n.table > :not(:first-child) {\n border-top: 2px solid currentColor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-bg: #cfe2ff;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #bacbe6;\n}\n\n.table-secondary {\n --bs-table-bg: #e2e3e5;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #cbccce;\n}\n\n.table-success {\n --bs-table-bg: #d1e7dd;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #bcd0c7;\n}\n\n.table-info {\n --bs-table-bg: #cff4fc;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #badce3;\n}\n\n.table-warning {\n --bs-table-bg: #fff3cd;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #e6dbb9;\n}\n\n.table-danger {\n --bs-table-bg: #f8d7da;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #dfc2c4;\n}\n\n.table-light {\n --bs-table-bg: #f8f9fa;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #dfe0e1;\n}\n\n.table-dark {\n --bs-table-bg: #212529;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: #fff;\n border-color: #373b3e;\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: auto;\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n height: 1.5em;\n border-radius: 0.25rem;\n}\n.form-control-color::-webkit-color-swatch {\n height: 1.5em;\n border-radius: 0.25rem;\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n padding: 1rem 0.75rem;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n z-index: 3;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 3;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n z-index: 1;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus,\n.was-validated .input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n z-index: 2;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus,\n.was-validated .input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n z-index: 3;\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: #212529;\n}\n.btn-check:focus + .btn, .btn:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n pointer-events: none;\n opacity: 0.65;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #0b5ed7;\n border-color: #0a58ca;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n color: #fff;\n background-color: #0b5ed7;\n border-color: #0a58ca;\n box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0a58ca;\n border-color: #0a53be;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-primary:disabled, .btn-primary.disabled {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-secondary:hover {\n color: #fff;\n background-color: #5c636a;\n border-color: #565e64;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n color: #fff;\n background-color: #5c636a;\n border-color: #565e64;\n box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #565e64;\n border-color: #51585e;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-secondary:disabled, .btn-secondary.disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-success {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #157347;\n border-color: #146c43;\n}\n.btn-check:focus + .btn-success, .btn-success:focus {\n color: #fff;\n background-color: #157347;\n border-color: #146c43;\n box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #146c43;\n border-color: #13653f;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-success:disabled, .btn-success.disabled {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n\n.btn-info {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-info:hover {\n color: #000;\n background-color: #31d2f2;\n border-color: #25cff2;\n}\n.btn-check:focus + .btn-info, .btn-info:focus {\n color: #000;\n background-color: #31d2f2;\n border-color: #25cff2;\n box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle {\n color: #000;\n background-color: #3dd5f3;\n border-color: #25cff2;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-info:disabled, .btn-info.disabled {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n\n.btn-warning {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-warning:hover {\n color: #000;\n background-color: #ffca2c;\n border-color: #ffc720;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n color: #000;\n background-color: #ffca2c;\n border-color: #ffc720;\n box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle {\n color: #000;\n background-color: #ffcd39;\n border-color: #ffc720;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-warning:disabled, .btn-warning.disabled {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #bb2d3b;\n border-color: #b02a37;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n color: #fff;\n background-color: #bb2d3b;\n border-color: #b02a37;\n box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #b02a37;\n border-color: #a52834;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-danger:disabled, .btn-danger.disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-light {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-light:hover {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n}\n.btn-check:focus + .btn-light, .btn-light:focus {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-light:disabled, .btn-light.disabled {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-dark {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-dark:hover {\n color: #fff;\n background-color: #1c1f23;\n border-color: #1a1e21;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n color: #fff;\n background-color: #1c1f23;\n border-color: #1a1e21;\n box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1a1e21;\n border-color: #191c1f;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-dark:disabled, .btn-dark.disabled {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n\n.btn-outline-primary {\n color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n color: #0d6efd;\n background-color: transparent;\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-success {\n color: #198754;\n border-color: #198754;\n}\n.btn-outline-success:hover {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n color: #198754;\n background-color: transparent;\n}\n\n.btn-outline-info {\n color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-outline-info:hover {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n color: #0dcaf0;\n background-color: transparent;\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n.btn-outline-warning:hover {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-outline-light:hover {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-dark {\n color: #212529;\n border-color: #212529;\n}\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n color: #212529;\n background-color: transparent;\n}\n\n.btn-link {\n font-weight: 400;\n color: #0d6efd;\n text-decoration: underline;\n}\n.btn-link:hover {\n color: #0a58ca;\n}\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n z-index: 1000;\n display: none;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: #1e2125;\n background-color: #e9ecef;\n}\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #0d6efd;\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #adb5bd;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1rem;\n color: #212529;\n}\n\n.dropdown-menu-dark {\n color: #dee2e6;\n background-color: #343a40;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item {\n color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.15);\n}\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n color: #fff;\n background-color: #0d6efd;\n}\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n color: #adb5bd;\n}\n.dropdown-menu-dark .dropdown-divider {\n border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item-text {\n color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-header {\n color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n color: #0d6efd;\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: #0a58ca;\n}\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n.nav-tabs .nav-link {\n margin-bottom: -1px;\n background: none;\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n isolation: isolate;\n}\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: 0.25rem;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #0d6efd;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n transition: box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-sm .offcanvas-top,\n.navbar-expand-sm .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-md .offcanvas-top,\n.navbar-expand-md .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-lg .offcanvas-top,\n.navbar-expand-lg .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-xl .offcanvas-top,\n.navbar-expand-xl .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-xxl .offcanvas-top,\n.navbar-expand-xxl .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n}\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n}\n.navbar-expand .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.55);\n border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.55);\n border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1rem 1rem;\n}\n\n.card-title {\n margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n margin-top: -0.25rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: 1rem;\n}\n\n.card-header {\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.5rem 1rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.5rem;\n margin-bottom: -0.5rem;\n margin-left: -0.5rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.5rem;\n margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n margin-bottom: 0.75rem;\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n background-color: #fff;\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: #0c63e4;\n background-color: #e7f1ff;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n transform: rotate(-180deg);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n margin-left: auto;\n content: \"\";\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-size: 1.25rem;\n transition: transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button {\n border-radius: 0;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0 0;\n margin-bottom: 1rem;\n list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: 0.5rem;\n color: #6c757d;\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n color: #0d6efd;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #dee2e6;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: #0a58ca;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n.page-link:focus {\n z-index: 3;\n color: #0a58ca;\n background-color: #e9ecef;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.page-link {\n padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.35em 0.65em;\n font-size: 0.75em;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n position: relative;\n padding: 1rem 1rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n color: #084298;\n background-color: #cfe2ff;\n border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n color: #0f5132;\n background-color: #d1e7dd;\n border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n color: #055160;\n background-color: #cff4fc;\n border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n color: #664d03;\n background-color: #fff3cd;\n border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n color: #842029;\n background-color: #f8d7da;\n border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n color: #636464;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n color: #141619;\n background-color: #d3d3d4;\n border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #0d6efd;\n transition: width 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: 1s linear infinite progress-bar-stripes;\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > li::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.5rem 1rem;\n color: #212529;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.25rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n width: 350px;\n max-width: 100%;\n font-size: 0.875rem;\n pointer-events: auto;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.5rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.toast-header .btn-close {\n margin-right: -0.375rem;\n margin-left: 0.75rem;\n}\n\n.toast-body {\n padding: 0.75rem;\n word-wrap: break-word;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1055;\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - 1rem);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n.modal-header .btn-close {\n padding: 0.5rem 0.5rem;\n margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n flex-shrink: 0;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n\n .modal-dialog-scrollable {\n height: calc(100% - 3.5rem);\n }\n\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n\n .modal-sm {\n max-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n max-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1080;\n display: block;\n margin: 0;\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: 0.9;\n}\n.tooltip .tooltip-arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] {\n padding: 0.4rem 0;\n}\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] {\n padding: 0 0.4rem;\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] {\n padding: 0.4rem 0;\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] {\n padding: 0 0.4rem;\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0 /* rtl:ignore */;\n z-index: 1070;\n display: block;\n max-width: 276px;\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n.popover .popover-arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-0.5rem - 1px);\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-0.5rem - 1px);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f0f0f0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 1rem 1rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: 0.75s linear infinite spinner-border;\n animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: 0.75s linear infinite spinner-grow;\n animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n -webkit-animation-duration: 1.5s;\n animation-duration: 1.5s;\n }\n}\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: 1045;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n visibility: hidden;\n background-color: #fff;\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1rem;\n}\n.offcanvas-header .btn-close {\n padding: 0.5rem 0.5rem;\n margin-top: -0.5rem;\n margin-right: -0.5rem;\n margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: 1rem 1rem;\n overflow-y: auto;\n}\n\n.offcanvas-start {\n top: 0;\n left: 0;\n width: 400px;\n border-right: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateX(-100%);\n}\n\n.offcanvas-end {\n top: 0;\n right: 0;\n width: 400px;\n border-left: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateX(100%);\n}\n\n.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: 30vh;\n max-height: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n right: 0;\n left: 0;\n height: 30vh;\n max-height: 100%;\n border-top: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateY(100%);\n}\n\n.offcanvas.show {\n transform: none;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentColor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n -webkit-animation: placeholder-wave 2s linear infinite;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.link-primary {\n color: #0d6efd;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca;\n}\n\n.link-secondary {\n color: #6c757d;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64;\n}\n\n.link-success {\n color: #198754;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43;\n}\n\n.link-info {\n color: #0dcaf0;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3;\n}\n\n.link-warning {\n color: #ffc107;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39;\n}\n\n.link-danger {\n color: #dc3545;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37;\n}\n\n.link-light {\n color: #f8f9fa;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb;\n}\n\n.link-dark {\n color: #212529;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentColor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #0d6efd !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #198754 !important;\n}\n\n.border-info {\n border-color: #0dcaf0 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #212529 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: 0.25rem !important;\n border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n\n .float-sm-end {\n float: right !important;\n }\n\n .float-sm-none {\n float: none !important;\n }\n\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-sm-0 {\n gap: 0 !important;\n }\n\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n\n .gap-sm-3 {\n gap: 1rem !important;\n }\n\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n\n .gap-sm-5 {\n gap: 3rem !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n\n .text-sm-start {\n text-align: left !important;\n }\n\n .text-sm-end {\n text-align: right !important;\n }\n\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n\n .float-md-end {\n float: right !important;\n }\n\n .float-md-none {\n float: none !important;\n }\n\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-md-0 {\n gap: 0 !important;\n }\n\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n\n .gap-md-3 {\n gap: 1rem !important;\n }\n\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n\n .gap-md-5 {\n gap: 3rem !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n\n .text-md-start {\n text-align: left !important;\n }\n\n .text-md-end {\n text-align: right !important;\n }\n\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n\n .float-lg-end {\n float: right !important;\n }\n\n .float-lg-none {\n float: none !important;\n }\n\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-lg-0 {\n gap: 0 !important;\n }\n\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n\n .gap-lg-3 {\n gap: 1rem !important;\n }\n\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n\n .gap-lg-5 {\n gap: 3rem !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n\n .text-lg-start {\n text-align: left !important;\n }\n\n .text-lg-end {\n text-align: right !important;\n }\n\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n\n .float-xl-end {\n float: right !important;\n }\n\n .float-xl-none {\n float: none !important;\n }\n\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-xl-0 {\n gap: 0 !important;\n }\n\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n\n .gap-xl-3 {\n gap: 1rem !important;\n }\n\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xl-5 {\n gap: 3rem !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n\n .text-xl-start {\n text-align: left !important;\n }\n\n .text-xl-end {\n text-align: right !important;\n }\n\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n\n .float-xxl-end {\n float: right !important;\n }\n\n .float-xxl-none {\n float: none !important;\n }\n\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-xxl-0 {\n gap: 0 !important;\n }\n\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n\n .text-xxl-start {\n text-align: left !important;\n }\n\n .text-xxl-end {\n text-align: right !important;\n }\n\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n\n .fs-2 {\n font-size: 2rem !important;\n }\n\n .fs-3 {\n font-size: 1.75rem !important;\n }\n\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$variable-prefix}table-bg: #{$table-bg};\n --#{$variable-prefix}table-accent-bg: #{$table-accent-bg};\n --#{$variable-prefix}table-striped-color: #{$table-striped-color};\n --#{$variable-prefix}table-striped-bg: #{$table-striped-bg};\n --#{$variable-prefix}table-active-color: #{$table-active-color};\n --#{$variable-prefix}table-active-bg: #{$table-active-bg};\n --#{$variable-prefix}table-hover-color: #{$table-hover-color};\n --#{$variable-prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n vertical-align: $table-cell-vertical-align;\n border-color: $table-border-color;\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$variable-prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$variable-prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n\n // Highlight border color between thead, tbody and tfoot.\n > :not(:first-child) {\n border-top: (2 * $table-border-width) solid $table-group-separator-color;\n }\n}\n\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$variable-prefix}table-accent-bg: var(--#{$variable-prefix}table-striped-bg);\n color: var(--#{$variable-prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$variable-prefix}table-accent-bg: var(--#{$variable-prefix}table-active-bg);\n color: var(--#{$variable-prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$variable-prefix}table-accent-bg: var(--#{$variable-prefix}table-hover-bg);\n color: var(--#{$variable-prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n\n --#{$variable-prefix}table-bg: #{$background};\n --#{$variable-prefix}table-striped-bg: #{$striped-bg};\n --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$variable-prefix}table-active-bg: #{$active-bg};\n --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$variable-prefix}table-hover-bg: #{$hover-bg};\n --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: $color;\n border-color: mix($color, $background, percentage($table-border-factor));\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n\n &::-webkit-file-upload-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n\n &::-webkit-file-upload-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n\n &::-webkit-file-upload-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: auto; // Override fixed browser height\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n @include border-radius($input-border-radius);\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$variable-prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n // stylelint-disable-next-line property-no-vendor-prefix\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n // stylelint-disable no-duplicate-selectors\n > .form-control {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // stylelint-enable no-duplicate-selectors\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus {\n z-index: 3;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n > .dropdown-toggle:nth-last-child(n + 3) {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n > .dropdown-toggle:nth-last-child(n + 4) {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group .form-control,\n .input-group .form-select {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 1;\n } @else if $state == \"invalid\" {\n z-index: 2;\n }\n &:focus {\n z-index: 3;\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-family: $btn-font-family;\n font-weight: $btn-font-weight;\n line-height: $btn-line-height;\n color: $body-color;\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n background-color: transparent;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-border-radius);\n @include transition($btn-transition);\n\n &:hover {\n color: $body-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n .btn-check:focus + &,\n &:focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active {\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n pointer-events: none;\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $btn-link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $btn-link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus {\n text-decoration: $link-hover-decoration;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n &:hover {\n color: $hover-color;\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n .btn-check:focus + &,\n &:focus {\n color: $hover-color;\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);\n }\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active,\n .show > &.dropdown-toggle {\n color: $active-color;\n background-color: $active-background;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);\n }\n }\n }\n\n &:disabled,\n &.disabled {\n color: $disabled-color;\n background-color: $disabled-background;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: $disabled-border;\n }\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n color: $color;\n border-color: $color;\n\n &:hover {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n .btn-check:focus + &,\n &:focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active,\n &.dropdown-toggle.show {\n color: $active-color;\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n\n &:disabled,\n &.disabled {\n color: $color;\n background-color: transparent;\n }\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y $dropdown-padding-x;\n margin: 0; // Override default margin of ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: $dropdown-spacer;\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: $dropdown-divider-margin-y 0;\n overflow: hidden;\n border-top: 1px solid $dropdown-divider-bg;\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n // Prevent dropdown overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n @if $dropdown-padding-y == 0 {\n &:first-child {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n\n &:last-child {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n\n &:hover,\n &:focus {\n color: $dropdown-link-hover-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-header-padding;\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n color: $dropdown-dark-color;\n background-color: $dropdown-dark-bg;\n border-color: $dropdown-dark-border-color;\n @include box-shadow($dropdown-dark-box-shadow);\n\n .dropdown-item {\n color: $dropdown-dark-link-color;\n\n &:hover,\n &:focus {\n color: $dropdown-dark-link-hover-color;\n @include gradient-bg($dropdown-dark-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-dark-link-active-color;\n @include gradient-bg($dropdown-dark-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-dark-link-disabled-color;\n }\n }\n\n .dropdown-divider {\n border-color: $dropdown-dark-divider-bg;\n }\n\n .dropdown-item-text {\n color: $dropdown-dark-link-color;\n }\n\n .dropdown-header {\n color: $dropdown-dark-header-color;\n }\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n // Prevent double borders when buttons are next to each other\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n @include font-size($nav-link-font-size);\n font-weight: $nav-link-font-weight;\n color: $nav-link-color;\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: $nav-link-hover-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-link {\n margin-bottom: -$nav-tabs-border-width;\n background: none;\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n &:hover,\n &:focus {\n border-color: $nav-tabs-link-hover-border-color;\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n background: none;\n border: 0;\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n @include gradient-bg($nav-pills-link-active-bg);\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding-top: $navbar-padding-y;\n padding-right: $navbar-padding-x; // default: null\n padding-bottom: $navbar-padding-y;\n padding-left: $navbar-padding-x; // default: null\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-brand-margin-end;\n @include font-size($navbar-brand-font-size);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n @include font-size($navbar-toggler-font-size);\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n @include transition($navbar-toggler-transition);\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 $navbar-toggler-focus-width;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$variable-prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important; // stylelint-disable-line declaration-no-important\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n @include transition(none);\n transform: none;\n }\n .offcanvas-top,\n .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-brand-color;\n\n &:hover,\n &:focus {\n color: $navbar-light-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n &:hover,\n &:focus {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-light-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-light-color;\n\n a,\n a:hover,\n a:focus {\n color: $navbar-light-active-color;\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-brand-color;\n\n &:hover,\n &:focus {\n color: $navbar-dark-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n &:hover,\n &:focus {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-dark-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a,\n a:hover,\n a:focus {\n color: $navbar-dark-active-color;\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: $card-height;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n @include box-shadow($card-box-shadow);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius($card-inner-border-radius);\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius($card-inner-border-radius);\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: $card-spacer-y $card-spacer-x;\n color: $card-color;\n}\n\n.card-title {\n margin-bottom: $card-title-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -$card-title-spacer-y * .5;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-cap-padding-y $card-cap-padding-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n}\n\n.card-footer {\n padding: $card-cap-padding-y $card-cap-padding-x;\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -$card-cap-padding-x * .5;\n margin-bottom: -$card-cap-padding-y;\n margin-left: -$card-cap-padding-x * .5;\n border-bottom: 0;\n\n @if $nav-tabs-link-active-bg != $card-bg {\n .nav-link.active {\n background-color: $card-bg;\n border-bottom-color: $card-bg;\n }\n }\n}\n\n.card-header-pills {\n margin-right: -$card-cap-padding-x * .5;\n margin-left: -$card-cap-padding-x * .5;\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n @include border-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: $accordion-button-padding-y $accordion-button-padding-x;\n @include font-size($font-size-base);\n color: $accordion-button-color;\n text-align: left; // Reset button style\n background-color: $accordion-button-bg;\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition($accordion-transition);\n\n &:not(.collapsed) {\n color: $accordion-button-active-color;\n background-color: $accordion-button-active-bg;\n box-shadow: inset 0 ($accordion-border-width * -1) 0 $accordion-border-color;\n\n &::after {\n background-image: escape-svg($accordion-button-active-icon);\n transform: $accordion-icon-transform;\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: $accordion-icon-width;\n height: $accordion-icon-width;\n margin-left: auto;\n content: \"\";\n background-image: escape-svg($accordion-button-icon);\n background-repeat: no-repeat;\n background-size: $accordion-icon-width;\n @include transition($accordion-icon-transition);\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: $accordion-button-focus-border-color;\n outline: 0;\n box-shadow: $accordion-button-focus-box-shadow;\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n background-color: $accordion-bg;\n border: $accordion-border-width solid $accordion-border-color;\n\n &:first-of-type {\n @include border-top-radius($accordion-border-radius);\n\n .accordion-button {\n @include border-top-radius($accordion-inner-border-radius);\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius($accordion-border-radius);\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius($accordion-inner-border-radius);\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius($accordion-border-radius);\n }\n }\n}\n\n.accordion-body {\n padding: $accordion-body-padding-y $accordion-body-padding-x;\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n @include border-radius(0);\n }\n }\n}\n",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n @include font-size($breadcrumb-font-size);\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding-x;\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: $breadcrumb-item-padding-x;\n color: $breadcrumb-divider-color;\n content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n",".pagination {\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n color: $pagination-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 3;\n color: $pagination-focus-color;\n background-color: $pagination-focus-bg;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n &.active .page-link {\n z-index: 3;\n color: $pagination-active-color;\n @include gradient-bg($pagination-active-bg);\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n@include pagination-size($pagination-padding-y, $pagination-padding-x, null, $pagination-border-radius);\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n }\n\n .page-item {\n @if $pagination-margin-start == (-$pagination-border-width) {\n &:first-child {\n .page-link {\n @include border-start-radius($border-radius);\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius($border-radius);\n }\n }\n } @else {\n //Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius($border-radius);\n }\n }\n }\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n @include font-size($badge-font-size);\n font-weight: $badge-font-weight;\n line-height: 1;\n color: $badge-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n @include font-size($progress-font-size);\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius($list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > li::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n color: $list-group-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n pointer-events: none;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n\n & + & {\n border-top-width: 0;\n\n &.active {\n margin-top: -$list-group-border-width;\n border-top-width: $list-group-border-width;\n }\n }\n}\n\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child {\n @include border-bottom-start-radius($list-group-border-radius);\n @include border-top-end-radius(0);\n }\n\n &:last-child {\n @include border-top-end-radius($list-group-border-radius);\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: $list-group-border-width;\n border-left-width: 0;\n\n &.active {\n margin-left: -$list-group-border-width;\n border-left-width: $list-group-border-width;\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 $list-group-border-width;\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state, $value in $theme-colors {\n $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);\n $list-group-variant-color: shift-color($value, $list-group-item-color-scale);\n @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {\n $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));\n }\n\n @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);\n}\n// scss-docs-end list-group-modifiers\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",".toast {\n width: $toast-max-width;\n max-width: 100%;\n @include font-size($toast-font-size);\n color: $toast-color;\n pointer-events: auto;\n background-color: $toast-background-color;\n background-clip: padding-box;\n border: $toast-border-width solid $toast-border-color;\n box-shadow: $toast-box-shadow;\n @include border-radius($toast-border-radius);\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: $toast-spacing;\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: $toast-padding-y $toast-padding-x;\n color: $toast-header-color;\n background-color: $toast-header-background-color;\n background-clip: padding-box;\n border-bottom: $toast-border-width solid $toast-header-border-color;\n @include border-top-radius(subtract($toast-border-radius, $toast-border-width));\n\n .btn-close {\n margin-right: $toast-padding-x * -.5;\n margin-left: $toast-padding-x;\n }\n}\n\n.toast-body {\n padding: $toast-padding-x; // apply to both vertical and horizontal\n word-wrap: break-word;\n}\n","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: subtract(100%, $modal-dialog-margin * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: subtract(100%, $modal-dialog-margin * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: $modal-content-color;\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n @include overlay-backdrop($zindex-modal-backdrop, $modal-backdrop-bg, $modal-backdrop-opacity);\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-inner-border-radius);\n\n .btn-close {\n padding: ($modal-header-padding-y * .5) ($modal-header-padding-x * .5);\n margin: ($modal-header-padding-y * -.5) ($modal-header-padding-x * -.5) ($modal-header-padding-y * -.5) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n flex-shrink: 0;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding - $modal-footer-margin-between * .5;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n @include border-bottom-radius($modal-content-inner-border-radius);\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: $modal-footer-margin-between * .5;\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-scrollable {\n height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n }\n\n .modal-dialog-centered {\n min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n max-width: $modal-lg;\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl { max-width: $modal-xl; }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n\n .modal-footer {\n @include border-radius(0);\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($tooltip-font-size);\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .tooltip-arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-end {\n padding: 0 $tooltip-arrow-height;\n\n .tooltip-arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: -1px;\n border-width: ($tooltip-arrow-width * .5) $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-start {\n padding: 0 $tooltip-arrow-height;\n\n .tooltip-arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: -1px;\n border-width: ($tooltip-arrow-width * .5) 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n",".popover {\n position: absolute;\n top: 0;\n left: 0 #{\"/* rtl:ignore */\"};\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($popover-font-size);\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .popover-arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n bottom: 0;\n border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n &::after {\n bottom: $popover-border-width;\n border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-top-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-end {\n > .popover-arrow {\n left: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n &::after {\n left: $popover-border-width;\n border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-right-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n top: 0;\n border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n &::after {\n top: $popover-border-width;\n border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: -$popover-arrow-width * .5;\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-start {\n > .popover-arrow {\n right: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;\n border-left-color: $popover-arrow-outer-color;\n }\n\n &::after {\n right: $popover-border-width;\n border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;\n border-left-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size($font-size-base);\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid $popover-border-color;\n @include border-top-radius($popover-inner-border-radius);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n.carousel-dark {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: $spinner-vertical-align;\n border: $spinner-border-width solid currentColor;\n border-right-color: transparent;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: $spinner-animation-speed linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n border-width: $spinner-border-width-sm;\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: $spinner-vertical-align;\n background-color: currentColor;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n opacity: 0;\n animation: $spinner-animation-speed linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n animation-duration: $spinner-animation-speed * 2;\n }\n }\n}\n",".offcanvas {\n position: fixed;\n bottom: 0;\n z-index: $zindex-offcanvas;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: $offcanvas-color;\n visibility: hidden;\n background-color: $offcanvas-bg-color;\n background-clip: padding-box;\n outline: 0;\n @include box-shadow($offcanvas-box-shadow);\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: $offcanvas-padding-y $offcanvas-padding-x;\n\n .btn-close {\n padding: ($offcanvas-padding-y * .5) ($offcanvas-padding-x * .5);\n margin-top: $offcanvas-padding-y * -.5;\n margin-right: $offcanvas-padding-x * -.5;\n margin-bottom: $offcanvas-padding-y * -.5;\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: $offcanvas-padding-y $offcanvas-padding-x;\n overflow-y: auto;\n}\n\n.offcanvas-start {\n top: 0;\n left: 0;\n width: $offcanvas-horizontal-width;\n border-right: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateX(-100%);\n}\n\n.offcanvas-end {\n top: 0;\n right: 0;\n width: $offcanvas-horizontal-width;\n border-left: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateX(100%);\n}\n\n.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: $offcanvas-vertical-height;\n max-height: 100%;\n border-bottom: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n right: 0;\n left: 0;\n height: $offcanvas-vertical-height;\n max-height: 100%;\n border-top: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateY(100%);\n}\n\n.offcanvas.show {\n transform: none;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentColor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value;\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$variable-prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$variable-prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentColor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/doc/htmldoc/static/css/bootstrap.min.css b/doc/htmldoc/static/css/bootstrap/bootstrap.min.css similarity index 100% rename from doc/htmldoc/static/css/bootstrap.min.css rename to doc/htmldoc/static/css/bootstrap/bootstrap.min.css diff --git a/doc/htmldoc/static/css/custom.css b/doc/htmldoc/static/css/custom.css index b5138e6755..fb519822d2 100644 --- a/doc/htmldoc/static/css/custom.css +++ b/doc/htmldoc/static/css/custom.css @@ -1,365 +1,960 @@ - .wy-breadcrumbs-aside { - display: none !important; +/* + * Customize css to define NEST specific colors, style and format + * + primary styles, for custom index.html and layout.html pages (see templates/ folder) + Author: www.prowebdesign.ro + Simple Responsive Template v 1.2 + Add your own styles to customize the project. + + Sphinx theme: sphinx-material + https://bashtage.github.io/sphinx-material/index.html + Sphinx material theme properties use 'md' in variable names + Extesion for grid / cards in reStructured Text see sphinx-design + https://sphinx-design.readthedocs.io/ + Sphinx design properties use the sd in variable names + */ +/* Define colors*/ +:root { + --nest-orange: #ff6633; + --nest-blue: #1281B3; + --nest-green: #36B34F; + --sd-color-primary: var(--nest-orange); + --sd-color-primary-highlight: #e05a2d; + --sd-color-muted: #adadad; + --sd-color-info: var(--nest-blue); + --sd-color-success: var(--nest-green); + --sd-color-card-border-hover: var(--nest-orange); } +/* Define base font color and style */ +body{ + background:#fff; + color:#666; + font-family: 'Droid Sans', Arial, Helvetica, sans-serif; + /*font-size: medium; + line-height:1.5em; + font-weight:normal;*/ +} +h1, h2, h3, h4, h5, h6{ + /*font-size: 1.5em;*/ + font-weight:600; + font-family: 'Open Sans', Arial, Helvetica, sans-serif; + /*line-height:1.5em; + margin:.45em 0; + padding:0;*/ +} + +/* Box sizing. Awesome thing. Read about it here: http://www.w3schools.com/cssref/css3_pr_box-sizing.asp */ +*{ box-sizing:border-box; + -moz-box-sizing:border-box;} + +/* links */ +a {color: var(--nest-orange);} +a:visited, +a:active {color:var(--nest-orange);} +a:hover{color:var(--nest-orange); text-decoration:underline;} + +/* set api function and class names style */ -.keep-us-sustainable { - background-color: #272525; +.sig-prename.descclassname { + display:None; +} +.sig.sig-object.py { + font-weight: bold; + background-color: #ffd1c1; + font-family: "Roboto Mono","Courier New",Courier,monospace; + } +section#kernel-attributes-nest-nestmodule em.property{ + display: none; } -div.twocol { - width: 430px; - height: 180px; - border-top-width: 1px; - border-top-style: solid; - border-bottom-width: 1px; - border-bottom-style: solid; +dt:target { + margin-top: -0.55rem; + padding-top: 0.45rem; +} +section#kernel-attributes-nest-nestmodule dl.field-list.simple dt.field-odd{ + position:absolute; + padding-left: 0.1rem; } +section#kernel-attributes-nest-nestmodule dl.field-list.simple dd.field-odd{ + padding-left: 4rem; +} -div.leftside { - width: 150px; - padding: 10px 3px 0px 0px; - float: left; +dt#nest\.NestModule { + display: none; } +section#kernel-attributes-nest-nestmodule dd { + margin-left: 0em; +} +.sphx-glr-download-link-note { -div.rightside { - margin-left: 160px; + display: none; } -.rst-content dl:not(.docutils) [class^="sig-prename descclassname"] { - display: none; + +.autosummary tr { + border: none; + border-bottom: 1px solid #ddd; } -.rst-content dl:not(.docutils) dt { - color: #272727; - background: none; - border-left: none; - border-top: none; +/************************************************************* + * Rules for mermaid diagrams + *************************************************************/ +.mermaid .cluster rect { + fill: #47555B21 !important; + stroke: None !important; + stroke-width: None !important; } -.rst-content dl:not(.docutils) dt[class^="sig sig-object py"] { - margin: 6px 0; - font-size: medium; - line-height: normal; - background: #ff663329; - color: #272727; - border-left: solid 3px #ff663385; - border-top: none; - padding: 6px; - position: relative; + +rect.basic.label-container { + fill: #e2e2e200; !important + stroke: #ff6633; + stroke-width: 1px; +} + +figure.align-default { + text-align: center; +} +.mermaid svg { + /* outline: auto; */ + outline-color: #f0f0f069; + outline-width: medium; + outline-style: groove; +} + + +/************************************************************************************** + Settings for overriding material design theme + Setting nest colors to override sphinx material "orange" and other default colors + +**************************************************************************************/ +/* To ensure the headings in the theme have same weight as custom index page*/ + +.md-typeset h1, +.md-typeset h2, +.md-typeset h3, +.md-typeset h4, +.md-typeset h5, +.md-typeset h6 { + font-weight: 600; +} +.md-typeset h1[id]:before, +.md-typeset h2[id]:before, +.md-typeset h3[id]:before, +.md-typeset h4[id]:before { + margin-top: -3.4rem; + padding-top: 3.4rem; +} + +[data-md-color-primary=orange] .md-tabs { + background-color: var(--nest-orange); + } + +/* To add matching styling for the header in index.html */ +div[role="main"] .md-header { + background-color: var(--nest-orange); + scale: 140%; + padding-top: 0.3rem; + height: 2.6rem; + transition: background-color .25s,color .25s,box-shadow .25s; + box-shadow: 0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2); +} + +div[role="main"] .md-source { + display: none; } -.rst-content dl:not(.docutils) dl dt { - border-left: none; - color: #272727; - background: none; +.md-typeset blockquote { + border-left: none; } -.rst-content code, .rst-content tt, code { - border: none; - font-size: 85%; - background: None; - padding-left: 2px; - padding-right: 2px; +[data-md-color-primary="orange"] .md-header, [data-md-color-primary="orange"] .md-hero { + background-color: var(--nest-orange); +} +[data-md-color-primary="orange"] .md-nav__link--active, [data-md-color-primary="orange"] .md-nav__link:active { + color: var(--nest-orange); +} +[data-md-color-primary="orange"] .md-typeset a { + color: var(--nest-orange); +} +.md-typeset details { + background-color: white; +} +.md-typeset summary::after { + display: none; +} +.md-typeset details > summary::before { + display: none; +} + +/* settings for icons */ +.md-typeset .sd-card-title img { + border: none; + opacity: 0.75; + width: 64px; + height: auto; + margin-right: 0.7em; +} +div.sd-card-title.sd-font-weight-bold.sd-d-flex-row.docutils a.reference.internal img { + margin-right: 2em; + margin-bottom: 0.5em; + } -t.rst-content tt.literal, .rst-content tt.literal, .rst-content code.literal { - color: #111; +.md-typeset .admonition, .md-typeset .admonition.tip { + border-left: .2rem solid var(--nest-blue); + border-radius: 5px; +} +.md-typeset .admonition > .admonition-title::before, .md-typeset .admonition.important > .admonition-title::before, .md-typeset .admonition.tip > .admonition-title::before { + color: #fff; +} +.md-typeset .admonition > .admonition-title, .md-typeset .admonition.tip > .admonition-title { + background-color: var(--nest-blue); + color: #fff; +} +.md-typeset .admonition { + background-color: #fff; + box-shadow: 0 .125rem .25rem var(--sd-color-shadow); + margin-left: 17px; + margin-right: 15px; +} +.md-typeset .admonition.seealso > .admonition-title, .md-typeset .admonition.important > .admonition-title { + background-color: var(--nest-green); +} +.md-typeset .admonition.seealso, .md-typeset .admonition.important { + border-left: .2rem solid var(--nest-green); +} +.md-typeset .admonition.warning { + border-left-color: #be1717; +} +.md-typeset .admonition.warning > .admonition-title { + background-color: #be1717; +} +.md-typeset .admonition.danger > .admonition-title { + background-color: black; +} +/* add admonition warning / info (?) */ +.md-nav__extra_link{ + color: var(--nest-orange); +} +div.admonition .md-typeset a > code { + color: white; } -.rst-content tt.xref, a .rst-content tt, .rst-content tt.xref, .rst-content code.xref { - color: #f63; +.md-nav__link, .md-nav__link:focus, .md-nav__link:hover { + color: var(--nest-orange); } -p { - margin-bottom: 12px; +ul.md-tabs__list li.md-tabs__item a.md-tabs__link { + color: #fff; + opacity:0.9; +} +a.md-tabs__link, a.md-source { + color: #fff; +} +div.md-header-nav__source a.md-source div.md-source__repository, div.md-source__icon{ + color: #fff; } -.wy-nav-content { - max-width: 950px; +/*remove logo from header */ +.md-header-nav__button { + display: none; +} +/* remove space between the md_tabs bar and the header section */ +.md-container { + padding-top: 0px; } -.wy-side-nav-search { - background: linear-gradient(45deg, #fff, #eee); - color: #888; - border-bottom: 1px solid #e1e4e5; + +/*********************************** + * Adjust settings for sphinx design + * *********************************/ +.sd-card-header .sd-card-text { + color: white; + text-align: center; +} +#pynest-examples img.sd-card-img-top { + width: auto; + height: max-content; } -.wy-side-nav-search input[type=text] { - border-color: #f63; +.sd-card-body { + padding: 0.6rem; +} +.sd-btn { + font-size: 1em; + padding: .375em .75em; +} +.sd-container-fluid { + padding-left: 0; + padding-right: 0; +} +.sd-container, .sd-container-fluid, .sd-container-lg, .sd-container-md, .sd-container-sm, .sd-container-xl { + padding-left: 0; + padding-right: 0; } -.wy-nav-side { - background: linear-gradient(90deg, #fff, #eee); - color: #888; - border-right: 1px solid #e1e4e5; +/* ************************************ + * Define styles for custom index.html + * ***********************************/ +/* structure */ +.wrapper{ + width: 100%; + margin: 0 auto; + padding: 0 50px; } +#logo img { + max-width: 70%; + height: auto; + padding-top: 20px; -.wy-menu-vertical a, -.wy-menu-vertical a:visited { - color: #444; } -.wy-menu-vertical a:hover { - color: #aaa; +#pulse span{ + width: 31px; + border-radius: 50%; + background: #000; + color: #fff; + text-align: center; + width: 31px; + padding: 5px 0px; + } +header.wrapper{ + padding: 0; } -.wy-menu-vertical header, .wy-menu-vertical p.caption { - background-color: #c1c1c1; - color: #6f6f6f; - border-top: 1px solid #aaa; +.wrapper-92{ + width: 92%; + margin: 0 auto; } -.wy-menu-vertical li.current a { - color: #888; +header{ + background-color: var(--nest-orange); + padding:15px 0; } -.wy-nav-top { - display: none; - background: linear-gradient(90deg, #fff, #eee);; - color: #888; - padding: .4045em .809em; - position: relative; - line-height: 50px; - text-align: center; - font-size: 100%; - border-bottom: 1px solid #e1e4e5; -} - -.wy-nav-top a { - color: #f63; - font-weight: bold; +#banner{ + text-align:center; + position: absolute; +} +#hero, +#page-header{ + background:#f3f3f3; + border-top:1px solid #e2e2e2; + border-bottom:1px solid #e2e2e2; + padding:20px 0; +} +#page-header h1{ + margin:0; } +.flexslider{ + display:none; +} +/*#content, +aside, +.vertical-padding{ + padding:40px 0; +}*/ + +p{ margin:0 0 1.5em;} + +#particles{ + width: 100%; + margin: 0; -@media screen and (max-width: 768px) { - .wy-nav-top { - display: block; - } } -video { - margin-bottom: 20px; - background-color: lightgrey; - border: 1px solid lightgrey; +/*MAIN MENU not displayed with sphinx material*/ +.menu-toggle{ + display:none; + padding:10px; + margin:20px 0 0; + background:#666; + color:#fff; + cursor:pointer; + text-transform:uppercase; + font-size:20px; +} +.menu-toggle.toggled-on{ + background:var(--nest-orange); +} +.srt-menu{ + display:none; } +.srt-menu.toggled-on{ + display:block; + position:relative; + z-index:10; +} + +.srt-menu{ + clear:both; + margin-bottom:60px; -a:visited { - color: #f63; } +.srt-menu li a { + color:#666; + background:#dadada; + display:block; + margin:1px 0; + padding:10px; + text-decoration:none; + font-size: medium; +} +.srt-menu li a:hover{ + background:var(--nest-orange); + color:#fff; +} +.srt-menu li li a { + background:#e8e8e8; + padding-left:40px; +} +.srt-menu li li li a { + background:#efefef; + padding-left:80px; +} + +/*SPACE GRID ELEMENTS VERTICALLY, SINCE THEY ARE ONE UNDER ANOTHER SO FAR*/ +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + margin-bottom:40px; + /*positioning and padding*/ + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.grid_3, .grid_6{ -a { - color: #f63; + margin-top: auto; +} +/*FOOTER*/ +footer{ + background:#333; + color:#ccc; + padding:20px 0; +} +footer ul{ + margin:0 0 0 8%; + padding:0; +} + +footer a, footer a:visited, footer a:active{ + color:#777; text-decoration: none; - background-color: transparent; - cursor: pointer; } -a:hover { - color: #f63; +footer a:hover{ + color:#888; text-decoration: underline; } -.rst-content dl:not(.docutils) dt em[class^='property']{ - display:none; + + +/*Some more colored elements*/ +a.buttonlink{ + background:var(--nest-orange); + border-radius:7px; + color:#fff; + display:block; + float:left; + margin:10px 15px 10px 0; + padding:20px; + text-decoration:none; +} +a.buttonlink:hover{ + background:#36B34F; + color: #fff; + text-decoration: underline; +} +.orangeelement{ + background:var(--nest-orange); + color:#fff; +} +.blueelement{ + background:var(--nest-blue); + color:#fff; + padding-bottom: 30px; } -.rst-content pre.literal-block, .rst-content div[class^='highlight'] pre, .rst-content .linenodiv pre { - line-height: 1.3em; +.greenelement{ + background: var(--nest-green); + color:#fff; } -.highlight { - background: rgba(255, 165, 0, 0.1); +/* Contain floats*/ +.clearfix:before, +.clearfix:after, +.row:before, +.row:after { + content: " "; + display: table; +} +.clearfix:after, +.container:after, +.row:after{ + clear: both; } -.rst-content .admonition-title::before { - display:none; +.green { + color: var(--nest-green); } -.rst-content .admonition-title { - background: #333333; +.darkgreen { + color: #15471F; } -.rst-content .danger .admonition-title { - background: #ff1133; +.button-container { + width: 520px; + overflow-y: auto; } -.rst-content .seealso .admonition-title, .rst-content .note .admonition-title { - background: #ffbb33; +.icon { + margin: 0 auto; + height: 95px; + display: block; } -.rst-content .warning .admonition-title { - background: #ff6633; +hr { + margin: 25px auto; +} +#topics { + width: 80%; + margin: 0 auto; } -.wy-plain-list-disc, .rst-content .section ul, .rst-content .toctree-wrapper ul, article ul { - margin-bottom: 12px; +html { + scroll-behavior: smooth; } -.rst-content .pull-quote { - background: #f0f3f3; - padding: 0.5em; - border: 1px solid #ff6633; - border-radius: 5px; +#gototop { + display: none; } -.rst-content .admonition { - background: #e9e9e9; +#gototop img { + position: fixed; + width: 75px; + height: 75px; + bottom: 25px; + right: 25px; + z-index: 100; + opacity: 0.6; +} +.narrow { + text-align: justify; + padding: 0 5%; } -/* override table width restrictions */ -@media screen and (min-width: 767px) { +#intro .accordion pre { + width: 65%; + margin: 0 auto; + background-color: #eee; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 0; + color: #666; + cursor: pointer; +} - .wy-table-responsive table td { - /* !important prevents the common CSS stylesheets from overriding - this as on RTD they are loaded after this stylesheet */ - white-space: normal !important; - } - .wy-table-responsive { - overflow: visible !important; - word-wrap: break-word; - } +#intro .accordion pre:first-of-type { + background: #ccc; + border-top: 1px solid #ccc; + border-radius: 10px 10px 0 0; +} +#intro .accordion pre:first-of-type code { + border-radius: 10px 10px 0 0; } -/*html body div.wy-table-responsive { - margin-bottom: 0; +#intro .accordion pre:last-of-type { + background: #ccc; + border-radius: 0 0 10px 10px; } -html body div.wy-table-responsive .footnote td { - padding-top: 1px; - padding-bottom: 4px; -}*/ +#intro .accordion pre:last-of-type code { + border-radius: 0 0 10px 10px; +} -.maroon { - color: maroon; +#intro.vertical-padding div#main.blueelement.wrapper.clearfix ul li a { + color: #fff; + +} +#backmatter.greenelement.vertical-padding div.wrapper.clearfix p a { + color: #fff; + background-color: none; + font-weight: bold; } -.red { - color: red; +#intro .accordion div { + display: none; + background-color: #f63; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + width: 65%; + margin: 0 auto; + padding: 1em; + box-shadow: inset 0 15px 15px -15px #444; } -.magenta { - color: magenta; +.flexslider { + border: 1px solid #ccc; + border-radius: 10px; } -.pink { - color: pink; +.flexslider img { + border-radius: 10px; } -.orange { - color: #f63; +.flex-control-nav { + bottom: -40px; } -.darkgreen { - color: #004f00; +.flexslider li span { + bottom: 0; + left: 0; + right: 0; + color: white; + padding: 15px; + position:absolute; + z-index:1; + border-radius: 0 0 10px 10px; + transition: all 0.5s ease; } -.green { - color: green; +.flexslider li span h3 { + font-weight: bold; + background-size: 26px; } +/**************************************** +***************************************** +MEDIAQUERIES +***************************************** +****************************************/ + +@media only screen and (min-width: 2048px) { -.teal { - color: teal; +.md-typeset .sd-card-title img { + width: 128px; + height: auto; + } } +@media only screen and (min-width: 1024px) { + +.particle-img + { + background-image: linear-gradient(to bottom, rgba(255, 102, 51, 0.63), rgba(255, 102, 51, 0.1), rgba(255, 102, 51, 0.73)), url('../img/background-particles-flattened.png'); + background-color: #ff6633; + height: 240px; + } -.cyan { - color: cyan; +header{ + background-color: var(--nest-orange); + padding:15px 0; + height: 240px; + } +.tsparticles-canvas-el { + margin-top: -275px; } -.aqua { - color: aqua; } -.blue { - color: blue; +@media only screen and (max-width: 1023px) { + .particle-img + { + background-image: linear-gradient(to bottom, rgba(255, 102, 51, 0.63), rgba(255, 102, 51, 0.1), rgba(255, 102, 51, 0.73)), url('../img/background-particles-flattened.png'); + background-color: #ff6633; + height: 210px; + + } +header{ + background-color: var(--nest-orange); + padding:0 0; + height: 210px; +} + #banner{ + padding-top: 50px; + } } -.navy { - color: navy; + + + +/* +LARGER MOBILE DEVICES +This is for mobile devices with a bit larger screens. +*/ +@media only screen and (min-width: 481px) { +#banner{ + float:left; + text-align:left; + margin: px 0 0 50px; } -.purple { - color: purple; +.menu-toggle{/*make menu float right, instead of sitting under the logo*/ + margin-top:10px; /*this depends on the height of the logo*/ + float:right; + display: None; + } -.under { - text-decoration: underline; } -.over { - text-decoration: overline; -} - -.blink { - text-decoration: blink; -} - -.strike { - text-decoration: line-through; -} - -@media screen and (min-width: 1270px) { - /* Pop out the in-page links to the right instead of the lef */ - /*div.wy-side-scroll li.toctree-l1.current > ul { - */ - div[class^='contents'] { - position: fixed; - margin-left: 0px; - overflow-y: auto; - padding-left: 15px; - border-left: 1px solid #e1e4e5; - border-left-color: #e1e4e5; - border-left-style: solid; - border-left-width: 1px; - border-right: 1px, #e0e0e0, solid; - border-right-width: 1px; - border-right-color: #e0e0e0; - border-right-style: solid; - height: 100%; - width: 250px; - top: 0px; - left: 1250px; - padding-right: 10px; - background: linear-gradient(90deg, #fcfcfc, rgba(0, 0, 0, 0)); - padding-top: 70px; - } - } - .rst-content .section ul p { - margin-bottom: 0px; - } -} - - /* div.wy-side-scroll li.toctree-l1.current a { - border-right: none; - } - - div.wy-side-scroll li.toctree-l1.current ul { - max-width: 400px; - } - - div.wy-side-scroll li.toctree-l1.current ul, li.toctree-l1.current li, li.toctree-l1.current a { - background-color: transparent !important; - } - - /* All items should now be visible regardless of expandy state */ - /*div.wy-side-scroll li.toctree-l1.current ul { - display: block !important; - } - - /* hide the expandy buttons */ - /* div.wy-side-scroll li.toctree-l1.current span.toctree-expand { - display: none !important; - } - - /* Make the padding correct */ - /*div.wy-side-scroll li.toctree-l2 li.toctree-l3 > a { - padding: .4045em 4.045em !important; - } - - div.wy-side-scroll li.toctree-l4 > a { - padding: .4045em 5.663em !important; - } -} */ +/* +TABLET & SMALLER LAPTOPS +The average viewing window and preferred media query for those is 768px. +But I think that some more breathing space is good:) +*/ +@media only screen and (min-width: 920px) { + + +header{ + padding:0; +} +#banner{ + float:left; + text-align:left; + margin: 55px 0 0 50px; +} +#hero{ + padding:13px 0; +} + +#content { + float:left; + width:65%; +} +#content.wide-content{ + float:none; + width:100%; +} + +.flexslider{ + display:block; +/*demo 1 slider theme*/ +margin: 0; +} +.flex-control-nav {bottom: 5px;} + + +/*** MAIN MENU - ESSENTIAL STYLES ***/ +.menu-toggle{display:none;} +#menu-main-navigation{display:block;} + +.srt-menu, .srt-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.srt-menu ul { + position: absolute; + display:none; + width: 12em; /* left offset of submenus need to match (see below) */ +} +.srt-menu ul li { + width: 100%; +} +.srt-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.srt-menu li { + float: left; + position: relative; + margin-left:1px; + height:25px; +} +.srt-menu li li { + margin-left:0px; + height:auto; +} +.srt-menu a { + display: block; + position: relative; +} +.srt-menu li:hover ul, +.srt-menu li.sfHover ul { + display:block; + left: 0; + top: 42px; /* match top ul list item height */ + z-index: 99; + -webkit-box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); + box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); +} +ul.srt-menu li:hover li ul, +ul.srt-menu li.sfHover li ul { + top: -999em; +} +ul.srt-menu li li:hover ul, +ul.srt-menu li li.sfHover ul { + left: 12em; /* match ul width */ + top: 0; +} +ul.srt-menu li li:hover li ul, +ul.srt-menu li li.sfHover li ul { + top: -999em; +} +ul.srt-menu li li li:hover ul, +ul.srt-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +/*** DEMO2 SKIN ***/ +#topnav, .srt-menu { + float:right; + margin: 85px 100px 0 0; +} +.srt-menu a { + text-decoration:none; +} +.srt-menu li a{ + background:#fff; + border-radius: 10px; + margin:5px; + padding:10px 20px; +} +.srt-menu a, .srt-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ + color: #666; +} +.srt-menu li li a { + border-top: 1px solid rgba(255,255,255,.2); + background: #333; /*fallback for old IE*/ + background:rgba(0,0,0,.6); + color: #fff; + padding-left:20px; +} +.srt-menu li li a:visited{color:#fff;} +.srt-menu li li li a, +.srt-menu li.current * li a{ + padding-left:20px; + background:rgba(0,0,0,.6); +} + +.srt-menu li:hover > a, +.srt-menu li.current a{ + color:#fff; + background:#1281B3; +} +.srt-menu li li:hover > a{ + color:#fff; + background:#1281B3; +} + + + +/*GRID*/ +/* + & Columns : 12 + */ + .row{ + margin-left: -15px; + margin-right: -15px; +} + +.grid_1 { width: 8.33333333%; } +.grid_2 { width: 16.66666667%; } +.grid_3 { width: 70%; } +.grid_4 { width: 33.33333333%; } +.grid_5 { width: 41.66666667%; } +.grid_6 { width: 50%; } +.grid_7 { width: 58.33333333%; } +.grid_8 { width: 66.66666667%; } +.grid_9 { width: 75%; } +.grid_10 { width: 83.33333333%; } +.grid_11 { width: 91.66666667%; } +.grid_12 { width: 100%; } + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + float: left; + display: block; +} + +.rightfloat{float:right;} +/* @notation inspired by tinyGrid, .row and percentage by Twitter Bootstrap + */ + +#hero .grid_8 { + margin:40px 0 -13px; +} + +} + +/* +DESKTOP +This is the average viewing window. So Desktops, Laptops, and +in general anyone not viewing on a mobile device. Here's where +you can add resource intensive styles. +*/ +@media only screen and (min-width: 1024px) { +#hero h1{ font-size:1.4em;} +} + +/* +LARGE VIEWING SIZE +This is for the larger monitors and possibly full screen viewers. +*/ +@media only screen and (min-width: 1240px) { +#hero h1{ font-size:2em;} +} + +/* +RETINA (2x RESOLUTION DEVICES) +This applies to the retina iPhone (4s) and iPad (2,3) along with +other displays with a 2x resolution. +*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5) { + + +} + +/* +iPHONE 5 MEDIA QUERY +iPhone 5 or iPod Touch 5th generation styles (you can include your own file if you want) +*/ +@media (device-height: 568px) and (-webkit-min-device-pixel-ratio: 2) { + +} + +@media only screen and (max-width: 76.1875em) { + html [data-md-color-primary="orange"] .md-nav--primary .md-nav__title--site { + background-color: #fff; + } + [data-md-color-primary="orange"] .md-nav__source { + background-color: #000; + } + html .md-nav--primary .md-nav__title { + white-space: initial; + } +/* Make hamburger menu on small devices visible */ + .md-icon.md-icon--menu.md-header-nav__button{ + display: flex; + } +} diff --git a/doc/htmldoc/static/css/default.min.css b/doc/htmldoc/static/css/default.min.css new file mode 100644 index 0000000000..5c53708bbb --- /dev/null +++ b/doc/htmldoc/static/css/default.min.css @@ -0,0 +1,85 @@ +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev <maniac@softwaremaniacs.org> + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs { + display:block; + overflow-x:auto; + padding:1em +} +code.hljs { + padding:3px 5px +} +.hljs { + background:#f0f0f0; + color:#444 +} +.hljs-comment { + color:#888 +} +.hljs-punctuation, +.hljs-tag { + color:#444a +} +.hljs-tag .hljs-attr, +.hljs-tag .hljs-name { + color:#444 +} +.hljs-attribute, +.hljs-doctag, +.hljs-keyword, +.hljs-meta .hljs-keyword, +.hljs-name, +.hljs-selector-tag { + font-weight:700 +} +.hljs-deletion, +.hljs-number, +.hljs-quote, +.hljs-selector-class, +.hljs-selector-id, +.hljs-string, +.hljs-template-tag, +.hljs-type { + color:#800 +} +.hljs-section, +.hljs-title { + color:#800; + font-weight:700 +} +.hljs-link, +.hljs-operator, +.hljs-regexp, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-symbol, +.hljs-template-variable, +.hljs-variable { + color:#bc6060 +} +.hljs-literal { + color:#78a960 +} +.hljs-addition, +.hljs-built_in, +.hljs-bullet, +.hljs-code { + color:#397300 +} +.hljs-meta { + color:#1f7199 +} +.hljs-meta .hljs-string { + color:#4d99bf +} +.hljs-emphasis { + font-style:italic +} +.hljs-strong { + font-weight:700 +} diff --git a/doc/htmldoc/static/css/gh-fork-ribbon.min.css b/doc/htmldoc/static/css/gh-fork-ribbon.min.css new file mode 100644 index 0000000000..18d7838f62 --- /dev/null +++ b/doc/htmldoc/static/css/gh-fork-ribbon.min.css @@ -0,0 +1,106 @@ +/*! + * "Fork me on GitHub" CSS ribbon v0.2.3 | MIT License + * https://github.com/simonwhitaker/github-fork-ribbon-css +*/.github-fork-ribbon { + width:12.1em; + height:12.1em; + position:absolute; + overflow:hidden; + top:0; + right:0; + z-index:9999; + pointer-events:none; + font-size:13px; + text-decoration:none; + text-indent:-999999px +} +.github-fork-ribbon.fixed { + position:fixed +} +.github-fork-ribbon:active, +.github-fork-ribbon:hover { + background-color:rgba(0,0,0,0) +} +.github-fork-ribbon:after, +.github-fork-ribbon:before { + position:absolute; + display:block; + width:15.38em; + height:1.54em; + top:3.23em; + right:-3.23em; + -webkit-box-sizing:content-box; + -moz-box-sizing:content-box; + box-sizing:content-box; + -webkit-transform:rotate(45deg); + -moz-transform:rotate(45deg); + -ms-transform:rotate(45deg); + -o-transform:rotate(45deg); + transform:rotate(45deg) +} +.github-fork-ribbon:before { + content:""; + padding:.38em 0; + background-color:#a00; + background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.15))); + background-image:-webkit-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.15)); + background-image:-moz-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.15)); + background-image:-ms-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.15)); + background-image:-o-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.15)); + background-image:linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,.15)); + -webkit-box-shadow:0 .15em .23em 0 rgba(0,0,0,.5); + -moz-box-shadow:0 .15em .23em 0 rgba(0,0,0,.5); + box-shadow:0 .15em .23em 0 rgba(0,0,0,.5); + pointer-events:auto +} +.github-fork-ribbon:after { + content:attr(data-ribbon); + color:#fff; + font:700 1em "Helvetica Neue",Helvetica,Arial,sans-serif; + line-height:1.54em; + text-decoration:none; + text-shadow:0 -.08em rgba(0,0,0,.5); + text-align:center; + text-indent:0; + padding:.15em 0; + margin:.15em 0; + border-width:.08em 0; + border-style:dotted; + border-color:#fff; + border-color:rgba(255,255,255,.7) +} +.github-fork-ribbon.left-bottom, +.github-fork-ribbon.left-top { + right:auto; + left:0 +} +.github-fork-ribbon.left-bottom, +.github-fork-ribbon.right-bottom { + top:auto; + bottom:0 +} +.github-fork-ribbon.left-bottom:after, +.github-fork-ribbon.left-bottom:before, +.github-fork-ribbon.left-top:after, +.github-fork-ribbon.left-top:before { + right:auto; + left:-3.23em +} +.github-fork-ribbon.left-bottom:after, +.github-fork-ribbon.left-bottom:before, +.github-fork-ribbon.right-bottom:after, +.github-fork-ribbon.right-bottom:before { + top:auto; + bottom:3.23em +} +.github-fork-ribbon.left-top:after, +.github-fork-ribbon.left-top:before, +.github-fork-ribbon.right-bottom:after, +.github-fork-ribbon.right-bottom:before { + -webkit-transform:rotate(-45deg); + -moz-transform:rotate(-45deg); + -ms-transform:rotate(-45deg); + -o-transform:rotate(-45deg); + transform:rotate(-45deg) +} +/*# sourceMappingURL=gh-fork-ribbon.min.css.map */ diff --git a/doc/htmldoc/static/css/normalize.css b/doc/htmldoc/static/css/normalize.css new file mode 100644 index 0000000000..4c48737b7a --- /dev/null +++ b/doc/htmldoc/static/css/normalize.css @@ -0,0 +1,530 @@ +/*! normalize.css v1.1.0 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. + * Known issue: no IE 6 support. + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using + * `em` units. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-size: 100%; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -ms-text-size-adjust: 100%; /* 2 */ +} + +/** + * Address `font-family` inconsistency between `textarea` and other form + * elements. + */ + +html, +button, +input, +select, +textarea { + font-family: sans-serif; +} + +/** + * Address margins handled incorrectly in IE 6/7. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address font sizes and margins set differently in IE 6/7. + * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, + * and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} + +h3 { + font-size: 1.17em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +/** + * Address styling not present in IE 7/8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +blockquote { + margin: 1em 40px; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + * Known issue: no IE 6/7 normalization. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 6/7/8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address margins set differently in IE 6/7. + */ + +p, +pre { + margin: 1em 0; +} + +/** + * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + +} + +/** + * Address CSS quotes not supported in IE 6/7. + */ + +q { + quotes: none; +} + +/** + * Address `quotes` property not supported in Safari 4. + */ + +q:before, +q:after { + content: ''; + content: none; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Lists + ========================================================================== */ + +/** + * Address margins set differently in IE 6/7. + */ + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +/** + * Address paddings set differently in IE 6/7. + */ + +menu, +ol, +ul { + padding: 0 0 0 40px; +} + +/** + * Correct list images handled incorrectly in IE 7. + */ + +nav ul, +nav ol { + list-style: none; + list-style-image: none; + padding:0; + margin:0; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. + * 2. Improve image quality when scaled in IE 7. + */ + +img { + border: 0; /* 1 */ + -ms-interpolation-mode: bicubic; /* 2 */ +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: visible; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Correct margin displayed oddly in IE 6/7. + */ + +form { + margin: 0; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct color not being inherited in IE 6/7/8/9. + * 2. Correct text not wrapping in Firefox 3. + * 3. Correct alignment displayed oddly in IE 6/7. + */ + +legend { + border: 0; /* 1 */ + padding: 0; + white-space: normal; /* 2 */ + *margin-left: -7px; /* 3 */ +} + +/** + * 1. Correct font size not being inherited in all browsers. + * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, + * and Chrome. + * 3. Improve appearance and consistency in all browsers. + */ + +button, +input, +select, +textarea { + font-size: 100%; /* 1 */ + margin: 0; /* 2 */ + vertical-align: baseline; /* 3 */ + *vertical-align: middle; /* 3 */ +} + +/** + * Address Firefox 3+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. Remove inner spacing in IE 7 without affecting normal text inputs. + * Known issue: inner spacing remains in IE 6. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + *overflow: visible; /* 4 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to content-box in IE 8/9. + * 2. Remove excess padding in IE 8/9. + * 3. Remove excess padding in IE 7. + * Known issue: excess padding remains in IE 6. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + *height: 13px; /* 3 */ + *width: 13px; /* 3 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 3+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 6/7/8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/doc/htmldoc/static/img/001-shuttle.svg b/doc/htmldoc/static/img/001-shuttle.svg new file mode 100644 index 0000000000..4606ed2ab8 --- /dev/null +++ b/doc/htmldoc/static/img/001-shuttle.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg16501" + width="512" + height="512" + viewBox="0 0 512 512" + sodipodi:docname="001-shuttle.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs16505" /> + <sodipodi:namedview + id="namedview16503" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="1.6601562" + inkscape:cx="155.40706" + inkscape:cy="135.83059" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g16507" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g16507"> + <path + style="fill:#fe6532;stroke-width:2" + d="m 3.722844,509.15024 c -1.89762,-2.09686 -3.30998,-7.01012 -3.30998,-11.5147 0,-7.6038 1.63549,-9.49178 50.70411,-58.5321 47.236024,-47.20878 51.206326,-50.68908 58.046746,-50.88298 9.93963,-0.28176 16.11817,5.89678 15.83642,15.83642 -0.1939,6.8404 -3.67421,10.81072 -50.882998,58.04674 -49.768538,49.79726 -50.821599,50.7041 -58.879588,50.7041 -5.4086305,0 -9.3327505,-1.24644 -11.51471,-3.65748 z m 90.690024,-0.34252 c -2.594504,-2.5945 -4,-6.66666 -4,-11.58926 0,-7.11056 1.807378,-9.38122 28.654992,-36 24.93788,-24.72532 29.48984,-28.41074 35.0909,-28.41074 8.65346,0 16.25411,7.63746 16.25411,16.33282 0,5.71556 -3.50517,10.0198 -28.57627,35.0909 -26.50352,26.50354 -29.11474,28.57628 -36,28.57628 -4.75706,0 -8.860566,-1.43684 -11.423732,-4 z m 150.597102,0.081 c -9.36958,-5.713 -11.69214,-11.91478 -16.50826,-44.081 -5.74256,-38.35368 -4.77772,-35.9917 -14.72362,-36.04392 -16.50135,-0.0866 -23.68427,-5.49844 -73.75357,-55.56774 -50.069296,-50.06928 -55.481082,-57.25222 -55.567728,-73.75356 -0.05222,-9.9459 2.309756,-8.98106 -36.043928,-14.72362 -41.7781405,-6.25528 -47,-9.76848 -47,-31.62114 v -13.29002 l 26.74969,-40 c 14.71232,-22 29.112322,-42.55535 31.999996,-45.67855 9.49383,-10.26818 14.57877,-11.59163 58.09781,-15.12103 l 41.15251,-3.33748 29,-28.93632 c 32.30966,-32.238708 56.21438,-50.360966 87.99999,-66.713156 49.76556,-25.602003 97.28752,-36.9972022 161.2244,-38.6596761 43.72472,-1.13692143 50.15114,-0.1867652 61.111,9.0353451 11.56916,9.734798 13.57152,17.594409 13.62068,53.463335 0.0674,49.138442 -5.33638,83.705042 -19.89032,127.234582 -17.07436,51.06797 -41.63442,89.25737 -85.99238,133.71295 l -28.93632,29 -3.33748,41.1525 c -3.52942,43.51942 -4.85312,48.6052 -15.12102,58.09664 -6.2414,5.76942 -73.84734,51.15316 -84.07924,56.44222 -8.65994,4.4765 -22.10817,4.2029 -30.00221,-0.6104 z M 303.5893,452.1747 c 17.69706,-11.64754 33.12902,-22.34502 34.29326,-23.77216 1.16426,-1.42712 2.7667,-13.15288 3.561,-26.0572 l 1.4442,-23.46244 -20.20922,11.67574 c -16.54112,9.55654 -43.7067,21.68364 -65.00952,29.0212 -2.83737,0.9773 -3.48477,2.61372 -2.67387,6.75872 0.58848,3.00806 2.64969,16.04844 4.58047,28.97864 3.44198,23.05036 3.59184,23.45598 7.6739,20.77216 2.28984,-1.5055 18.64274,-12.2671 36.33978,-23.91466 z m -62.67643,-61.80706 c 8.525,-2.3031 15.5,-4.72654 15.5,-5.38542 0,-2.12714 -127.80908,-129.03208 -128.87643,-127.96474 -0.56728,0.56728 -3.47824,10.69406 -6.46881,22.50394 l -5.4374,21.47252 47.89132,47.9971 c 54.47982,54.60016 45.74004,49.9275 77.39132,41.3766 z m 66.07555,-28.38084 c 23.6577,-13.48192 46.01004,-30.27584 67.70578,-50.86916 56.19534,-53.33998 85.24922,-104.95388 99.80912,-177.30992 5.96646,-29.65059 8.09336,-94.697808 3.22844,-98.73534 -2.27862,-1.891088 -10.9052,-2.566676 -31.3507,-2.455222 -81.88412,0.446376 -149.84214,23.942336 -209.06581,72.282922 -32.16274,26.25241 -68.70483,69.64844 -87.69584,104.14428 l -7.79345,14.15628 73.78331,73.80354 c 40.58084,40.59194 74.25967,73.80354 74.84189,73.80354 0.5822,0 8.02398,-3.96942 16.53726,-8.82092 z M 337.9738,236.78598 c -48.71802,-8.40896 -76.13142,-60.94107 -55.7939,-106.91742 5.58724,-12.63088 22.00758,-29.28706 35.70166,-36.214416 10.55606,-5.339946 13.30734,-5.833844 32.5313,-5.839856 18.568,-0.0058 22.31448,0.609632 32.3503,5.314246 15.9011,7.454166 28.44466,19.738516 36.14984,35.402856 6.08538,12.37138 6.49944,14.55507 6.4933,34.24516 -0.006,19.30715 -0.48974,21.98663 -5.9007,32.68671 -7.60072,15.03034 -25.45814,31.7108 -39.52358,36.91862 -13.0371,4.82706 -29.53626,6.55682 -42.00822,4.4041 z m 32.43906,-36.03477 c 40.47302,-20.68265 26.26864,-81.94349 -19,-81.94349 -29.0187,0 -50.06872,27.54055 -42.07282,55.04547 7.75444,26.6744 36.6268,39.39051 61.07282,26.89802 z M 93.734368,255.30772 c 7.028812,-20.56994 19.413672,-48.29826 28.927612,-64.76568 l 11.67575,-20.20922 -23.46243,1.45019 c -12.904338,0.7976 -24.185556,1.88731 -25.069374,2.42157 -0.883818,0.53427 -12.819824,17.76354 -26.524456,38.28726 l -24.917516,37.31588 25.524456,4.26454 c 32.386418,5.41104 32.418748,5.41222 33.845958,1.23546 z m -89.3215045,163.5 C 1.849704,416.24456 0.412864,412.14106 0.412864,407.384 c 0,-6.88526 2.07275,-9.49648 28.57628,-36 25.0711,-25.07112 29.375352,-28.57628 35.090904,-28.57628 8.695362,0 16.33282,7.60066 16.33282,16.2541 0,5.60106 -3.68542,10.15304 -28.410744,35.09092 -26.61877,26.8476 -28.88943,28.65498 -36,28.65498 -4.92259,0 -8.9947505,-1.4055 -11.5892605,-4 z" + id="path16511" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/005-artificial-intelligence-1.png b/doc/htmldoc/static/img/005-artificial-intelligence-1.png deleted file mode 100644 index 095e31fe64..0000000000 Binary files a/doc/htmldoc/static/img/005-artificial-intelligence-1.png and /dev/null differ diff --git a/doc/htmldoc/static/img/010-book-1.png b/doc/htmldoc/static/img/010-book-1.png deleted file mode 100644 index 4885e71312..0000000000 Binary files a/doc/htmldoc/static/img/010-book-1.png and /dev/null differ diff --git a/doc/htmldoc/static/img/014-teacher.svg b/doc/htmldoc/static/img/014-teacher.svg new file mode 100644 index 0000000000..dbc0dc2dcf --- /dev/null +++ b/doc/htmldoc/static/img/014-teacher.svg @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg16422" + width="375.89081" + height="376.00198" + viewBox="0 0 375.89081 376.00198" + sodipodi:docname="014-teacher.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs16426" /> + <sodipodi:namedview + id="namedview16424" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="1.6601562" + inkscape:cx="91.55765" + inkscape:cy="177.9953" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g16428" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g16428" + transform="translate(-63.998782,-78.354871)"> + <path + style="fill:#fe6532;stroke-width:2" + d="m 240.34419,451.95684 c -1.72632,-1.72632 -2.4,-15.2 -2.4,-48 v -45.6 h -68.26796 c -48.01615,0 -70.689129,-0.7254 -76.429611,-2.4453 -10.903596,-3.26678 -24.290724,-16.3931 -27.082342,-26.5547 -1.469618,-5.34946 -2.18692,-42.78824 -2.165008,-113 0.03057,-97.94845 0.281514,-105.53726 3.736648,-113 2.037134,-4.400002 6.292368,-10.427258 9.456076,-13.393906 12.840264,-12.040468 6.299942,-11.606096 174.752197,-11.606096 168.45226,0 161.91194,-0.434372 174.7522,11.606096 3.1637,2.966648 7.41894,8.993904 9.45608,13.393906 3.45512,7.46274 3.70608,15.05155 3.73664,113 0.022,70.21176 -0.69538,107.65054 -2.165,113 -3.98628,14.51016 -23.7284,29 -39.51196,29 -4.05984,0 -4.26796,0.93294 -4.26796,19.13148 0,26.50906 -0.2819,26.86852 -21.07036,26.86852 h -16.92964 v 21.13148 c 0,11.62232 -0.93166,22.87232 -2.07036,25 -1.9692,3.67948 -4.73506,3.86852 -56.6,3.86852 -39.74528,0 -55.18034,-0.6507 -56.92964,-2.4 z m 99.6,-80.38602 c 0,-59.05514 0.3662,-66.92656 3.16358,-68 4.73806,-1.81816 6.24672,-1.51796 9.69356,1.92888 2.64688,2.64686 3.14286,9.4329 3.14286,43 v 39.85714 h 11.1817 11.1817 l -0.71732,-48.5 c -0.67132,-45.38946 -0.99992,-49.03274 -5.12366,-56.80654 -5.40156,-10.1827 -16.20668,-19.3665 -26.36698,-22.4106 -11.54824,-3.45994 -86.49742,-3.05768 -94.71968,0.50836 -3.53966,1.53518 -16.32042,12.78518 -28.40166,25 -16.32456,16.50508 -23.25072,22.20878 -26.9687,22.20878 -3.70306,0 -10.85645,-5.83704 -27.53375,-22.46702 l -22.53094,-22.46702 -7.50035,7.51076 -7.50036,7.51078 29.13619,28.95624 c 37.19437,36.96468 34.67133,36.60468 62.76781,8.95626 11.17826,-11 21.66778,-20 23.31006,-20 7.46118,0 7.78594,3.06166 7.78594,73.4 v 68.6 h 43 43 z M 140.36035,311.71138 c -16.72889,-16.85502 -30.41616,-31.80836 -30.41616,-33.22968 0,-1.42132 6.75,-9.52048 15,-17.99814 l 15,-15.41392 v -40.28603 c 0,-38.23912 0.20324,-40.3948 4,-42.42677 2.84198,-1.52098 5.15802,-1.52098 8,0 3.8072,2.03755 4,4.18765 4,44.60789 v 42.46715 l 19.92606,19.8513 19.92607,19.8513 21.57393,-21.00652 c 17.2606,-16.80662 23.37334,-21.50558 30.57394,-23.5026 6.33072,-1.75578 22.68776,-2.31404 55.151,-1.8823 l 46.15102,0.61378 11.79192,6.03552 c 12.83324,6.5685 24.48598,19.76996 28.79014,32.6165 1.35404,4.0414 2.95446,19.3614 3.55648,34.04446 l 1.09456,26.6965 6.1279,-1.22558 c 8.43078,-1.68616 14.8132,-6.21254 19.42498,-13.77606 3.72954,-6.11662 3.89704,-10.81848 3.89704,-109.39134 0,-99.25732 -0.1444,-103.23685 -3.97424,-109.51828 -2.18584,-3.58506 -6.90746,-8.30669 -10.49252,-10.492526 -6.35224,-3.87301 -10.36466,-3.974244 -157.51828,-3.974244 -147.15363,0 -151.16604,0.10124 -157.518279,3.974244 -3.585054,2.185836 -8.30669,6.907466 -10.492524,10.492526 -3.82983,6.28142 -3.974516,10.26844 -3.98172,109.72252 l -0.0075,103.20422 4.539866,6.79578 c 8.1548,12.20698 14.162914,13.78916 52.376297,13.79266 l 33.91615,0.003 z m 140.58384,-85.11222 c -29.7883,-13.66476 -34.99554,-53.11767 -9.75664,-73.92169 26.67276,-21.98594 67.88028,-4.73227 70.35332,29.45706 1.03762,14.3449 -1.98612,24.24879 -10.29124,33.70781 -12.1631,13.853 -33.57506,18.43154 -50.30544,10.75682 z m 28.59932,-15.0523 c 15.50486,-8.06716 20.98774,-25.89534 12.05252,-39.19002 -6.21866,-9.25273 -17.61038,-14.82814 -26.78158,-13.10762 -9.72462,1.82435 -20.35316,11.7598 -22.96788,21.47015 -1.8772,6.97137 -1.5601,9.17506 2.4721,17.18041 7.24928,14.39236 22.46354,20.28678 35.22484,13.64708 z m -71.59932,122.80998 c 0,-4.4 -0.26734,-8 -0.5941,-8 -0.32676,0 -4.10942,3.6 -8.4059,8 l -7.8118,8 h 8.4059 8.4059 z" + id="path16432" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/014-teacher_black.png b/doc/htmldoc/static/img/014-teacher_black.png deleted file mode 100644 index fbddeba37c..0000000000 Binary files a/doc/htmldoc/static/img/014-teacher_black.png and /dev/null differ diff --git a/doc/htmldoc/static/img/019-programmer-1.svg b/doc/htmldoc/static/img/019-programmer-1.svg new file mode 100644 index 0000000000..f06139af0d --- /dev/null +++ b/doc/htmldoc/static/img/019-programmer-1.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg16288" + width="512" + height="512" + viewBox="0 0 512 512" + sodipodi:docname="019-programmer-1.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs16292" /> + <sodipodi:namedview + id="namedview16290" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="1.6601562" + inkscape:cx="155.40706" + inkscape:cy="256.30118" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g16294" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g16294"> + <path + style="fill:#fe6532;stroke-width:2" + d="m 0.606467,437.25537 c 0.542451,-63.20536 0.933168,-70.134 4.313956,-76.5 5.098935,-9.60126 18.780532,-23.5536 27.53411,-28.07896 3.988376,-2.06188 25.588376,-7.88294 48,-12.9357 61.843647,-13.94278 55.748407,-11.45098 55.748407,-22.79042 0,-8.99098 -0.5433,-10.02742 -7.94526,-15.15698 -22.31594,-15.46496 -38.270475,-41.91192 -42.251453,-70.03794 -1.335122,-9.43278 -1.825118,-27.9031 -1.1938,-45 0.883342,-23.92202 1.921824,-31.33892 5.930698,-42.35742 10.000105,-27.485552 25.642435,-45.016374 51.005945,-57.163846 54.82915,-26.259594 120.79599,1.822564 138.43533,58.932066 3.43384,11.1175 4.01854,18.60159 4.01854,51.43687 0,40.91033 -1.51724,50.41857 -11.04908,69.24253 -6.0347,11.91762 -20.7906,28.17778 -31.99424,35.25582 -8.54018,5.39538 -8.9497,6.08676 -8.9531,15.11588 -0.004,8.17236 0.60972,9.6036 4.49642,10.50168 2.475,0.57188 10.8,2.43206 18.5,4.13374 81.59776,18.03278 86.34688,19.73054 100.652,35.98202 13.8345,15.7168 14.348,19.05514 14.348,93.27694 v 65.64372 H 185.10647 0.009994 Z m 69.596474,19.5 v -20 h 16 15.999999 v 20 20 h 82 82 v -20 -20 h 16 16 v 20 20 h 20 20 v -48.70424 c 0,-47.21798 -0.1376,-48.9083 -4.5068,-55.39186 -2.47874,-3.6782 -7.24856,-8.28892 -10.5996,-10.24604 -5.13844,-3.001 -81.1327,-21.65238 -88.2385,-21.6565 -1.28968,-7.4e-4 -3.4233,3.26628 -4.74138,7.26006 -3.19256,9.67354 -15.03026,22.50598 -24.91372,27.00726 -10.54607,4.80304 -29.45393,4.80304 -40,0 -9.7181,-4.42596 -21.63986,-17.22328 -25.1894,-27.03936 -1.50262,-4.15544 -3.93151,-7.19522 -5.71238,-7.1491 -1.70402,0.0442 -21.81327,4.40636 -44.687209,9.6939 -60.220164,13.9205 -59.41101,12.77204 -59.41101,84.32432 v 41.90156 h 20 20 z M 194.93322,342.61021 c 5.06071,-3.98076 5.26972,-4.93264 5.26972,-24 v -19.85484 h -16.19306 -16.19306 l 0.69306,18.84258 c 0.61311,16.66892 1.25239,19.43752 5.54169,24 5.91645,6.29326 13.68895,6.67004 20.88165,1.01226 z m 18.3524,-81.87544 c 14.55914,-7.01944 29.41774,-22.73954 34.60974,-36.6164 3.60382,-9.6321 4.30758,-15.78734 4.30758,-37.6754 v -26.16236 l -7.07646,5.39748 c -11.5942,8.84333 -32.109,17.0802 -47.53007,19.08374 -7.91641,1.02852 -29.46847,1.89783 -47.89347,1.93179 l -33.5,0.0617 v 5.63268 c 0,11.37114 4.48425,29.62198 9.59808,39.06402 6.80909,12.57214 21.89716,26.0273 35.00591,31.21738 14.43747,5.71618 38.44572,4.83108 52.47869,-1.93468 z M 209.0139,148.85011 c 11.50152,-4.49392 33.18904,-22.47984 33.18904,-27.52438 0,-4.53084 -17.58996,-20.07555 -29.0758,-25.695052 -10.11446,-4.948544 -14.31919,-5.82858 -27.9509,-5.850044 -14.13002,-0.02225 -17.64274,0.760712 -29.42544,6.558734 -20.29855,9.988482 -34.80497,29.465892 -37.09813,49.810712 l -1.01809,9.03247 39.78418,-0.85881 c 35.59281,-0.76833 41.0285,-1.34499 51.59514,-5.47363 z m 185.68904,-18.59733 c -7.20414,-1.41337 -10.5,-3.02229 -10.5,-5.12572 0,-3.77382 26.16476,-129.06217 27.18254,-130.1619731 0.40224,-0.4346544 7.5567,0.3772338 15.8988,1.8041959 l 15.16746,2.59447685 -1.25068,7.19580395 C 440.51318,10.517256 434.3822,40.305368 427.57666,72.755368 413.5341,139.71268 416.49798,134.52874 394.70294,130.25278 Z m -62.05,-46.045872 -20.45158,-20.521428 20.55216,-20.48222 20.55216,-20.482218 10.44864,10.580054 c 5.74674,5.81903 10.44862,11.417686 10.44862,12.44146 0,1.023774 -3.60414,5.533768 -8.00922,10.022208 l -8.00922,8.160804 8.00922,7.820796 c 4.40508,4.301436 8.00922,8.793886 8.00922,9.98322 0,1.189334 -4.74714,6.850598 -10.5492,12.580588 l -10.5492,10.418168 z m 127.55344,9.55194 -10.85992,-10.996522 9.4072,-9.550826 9.40722,-9.550826 -9.45494,-9.45494 -9.45494,-9.454942 11.46806,-11.468066 11.46806,-11.468066 20.00792,19.93283 c 11.00434,10.963058 20.0079,20.866602 20.0079,22.007878 0,2.047202 -38.10164,41.000002 -40.1041,41.000002 -0.5679,0 -5.9195,-4.948432 -11.89246,-10.996522 z" + id="path16298" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/019-programmer-1_black.png b/doc/htmldoc/static/img/019-programmer-1_black.png deleted file mode 100644 index 27d4b7cb06..0000000000 Binary files a/doc/htmldoc/static/img/019-programmer-1_black.png and /dev/null differ diff --git a/doc/htmldoc/static/img/020-user.svg b/doc/htmldoc/static/img/020-user.svg new file mode 100644 index 0000000000..f77ba341f5 --- /dev/null +++ b/doc/htmldoc/static/img/020-user.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg16209" + width="546.1333" + height="546.1333" + viewBox="0 0 546.1333 546.1333" + sodipodi:docname="020-user.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs16213" /> + <sodipodi:namedview + id="namedview16211" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="1.5563966" + inkscape:cx="165.76752" + inkscape:cy="62.644702" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g16215" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g16215"> + <path + style="fill:#fe6532;stroke-width:2.13333" + d="M 223.70556,542.77787 C 189.51353,536.60814 151.36258,521.00661 120.12505,500.41941 99.698635,486.95731 60.137285,447.39597 46.675185,426.96956 15.295745,379.35667 0.78586546,330.75343 0.78586546,273.25571 c 0,-57.49772 14.50987954,-106.10096 45.88931954,-153.71384 13.4621,-20.426415 53.02345,-59.987761 73.449865,-73.449861 47.61288,-31.379436 96.21612,-45.88931886 153.71384,-45.88931886 57.49772,0 106.10096,14.50988286 153.71385,45.88931886 20.42641,13.4621 59.98775,53.023446 73.44985,73.449861 31.37943,47.61288 45.88932,96.21612 45.88932,153.71384 0,57.49772 -14.50989,106.10096 -45.88932,153.71385 -13.4621,20.42641 -53.02344,59.98775 -73.44985,73.44985 -32.16051,21.1955 -69.72465,36.31857 -105.71385,42.55972 -23.94443,4.15236 -74.5814,4.04851 -98.13333,-0.20118 z M 335.4778,504.88834 c 24.04044,-6.69483 50.78007,-18.90757 70.22412,-32.07335 24.66803,-16.70299 22.77594,-13.18496 17.75979,-33.02114 -11.27505,-44.58672 -40.8839,-81.1076 -82.42282,-101.66395 -43.54741,-21.55029 -90.86957,-21.36096 -135.46666,0.54204 -17.136,8.416 -23.24576,12.94754 -39.55214,29.33534 -22.33207,22.44358 -34.69463,43.67276 -41.80401,71.78657 -5.01615,19.83618 -6.90826,16.31815 17.75978,33.02114 25.91916,17.55015 60.34463,31.33235 93.29106,37.34899 5.3746,0.98151 25.61197,1.45161 44.97197,1.04468 29.96367,-0.62981 38.18097,-1.57001 55.23891,-6.32032 z M 94.546135,417.78903 c 3.26546,-10.90111 16.668175,-37.54785 25.275325,-50.25136 15.71979,-23.2012 44.46241,-47.7971 70.415,-60.25615 l 15.0104,-7.20604 -14.23731,-15.03822 c -23.92864,-25.27473 -33.51728,-51.2375 -31.8858,-86.3359 1.84029,-39.59076 19.64153,-70.21571 53.55491,-92.13498 18.61715,-12.032853 35.91272,-16.777326 61.16023,-16.777326 25.24751,0 42.54308,4.744473 61.16023,16.777326 33.91339,21.91927 51.71462,52.54422 53.55492,92.13498 1.63147,35.0984 -7.95716,61.06117 -31.8858,86.3359 l -14.23733,15.03822 14.46195,6.94275 c 28.611,13.73527 54.58143,36.40836 72.51048,63.30414 10.04038,15.06185 22.16821,39.83524 24.80386,50.66666 0.78515,3.22667 2.04348,5.85099 2.79629,5.83181 3.24262,-0.0826 24.54056,-33.02323 33.28074,-51.47391 15.12815,-31.93585 20.51593,-54.73882 21.8534,-92.49122 1.26133,-35.60365 -1.66225,-57.52354 -11.52363,-86.4 C 477.45053,128.62753 423.78576,73.58117 356.18572,48.309118 306.40397,29.69838 241.27381,29.69838 191.49207,48.309118 123.89201,73.58117 70.227245,128.62753 47.063765,196.45571 c -9.86138,28.87646 -12.78494,50.79635 -11.52361,86.4 1.33747,37.7524 6.72524,60.55537 21.8534,92.49122 8.5977,18.14992 30.01843,51.38674 33.17433,51.47391 0.69427,0.0192 2.48449,-4.04514 3.97825,-9.03181 z M 308.52589,277.93411 c 16.61894,-8.18148 31.66862,-23.56727 39.59553,-40.47985 4.94379,-10.54788 5.71747,-14.94097 5.71747,-32.46521 0,-18.24657 -0.65803,-21.64884 -6.60171,-34.13333 -14.06545,-29.54402 -41.19648,-46.86856 -73.39829,-46.86856 -32.20181,0 -59.33284,17.32454 -73.39829,46.86856 -5.94367,12.48449 -6.60171,15.88676 -6.60171,34.13333 0,17.48755 0.77828,21.92687 5.67554,32.37365 10.01306,21.35972 29.28948,38.48424 51.46801,45.72247 5.54876,1.8109 15.6486,2.68312 26.38611,2.27868 14.42313,-0.54323 19.74823,-1.81306 31.15734,-7.42974 z" + id="path16219" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/020-user_black.png b/doc/htmldoc/static/img/020-user_black.png deleted file mode 100644 index 286a28e2ff..0000000000 Binary files a/doc/htmldoc/static/img/020-user_black.png and /dev/null differ diff --git a/doc/htmldoc/static/img/037-network.png b/doc/htmldoc/static/img/037-network.png deleted file mode 100644 index f9ced37abb..0000000000 Binary files a/doc/htmldoc/static/img/037-network.png and /dev/null differ diff --git a/doc/htmldoc/static/img/1_HBP + EBRAINS logo_Color.png b/doc/htmldoc/static/img/1_HBP + EBRAINS logo_Color.png new file mode 100644 index 0000000000..a779756a2f Binary files /dev/null and b/doc/htmldoc/static/img/1_HBP + EBRAINS logo_Color.png differ diff --git a/doc/htmldoc/static/img/2_EBRAINS General Logo_Landscape_Black.png b/doc/htmldoc/static/img/2_EBRAINS General Logo_Landscape_Black.png new file mode 100644 index 0000000000..10f5c6f1f4 Binary files /dev/null and b/doc/htmldoc/static/img/2_EBRAINS General Logo_Landscape_Black.png differ diff --git a/doc/htmldoc/static/img/300_pointneurons.png b/doc/htmldoc/static/img/300_pointneurons.png new file mode 100644 index 0000000000..eb46457574 Binary files /dev/null and b/doc/htmldoc/static/img/300_pointneurons.png differ diff --git a/doc/htmldoc/static/img/3_EBRAINS General Logo_Landscape_Color+White.png b/doc/htmldoc/static/img/3_EBRAINS General Logo_Landscape_Color+White.png new file mode 100644 index 0000000000..0977a9a7fe Binary files /dev/null and b/doc/htmldoc/static/img/3_EBRAINS General Logo_Landscape_Color+White.png differ diff --git a/doc/htmldoc/static/img/3_HBP + EBRAINS logo_Color+White.png b/doc/htmldoc/static/img/3_HBP + EBRAINS logo_Color+White.png new file mode 100644 index 0000000000..094a1dcb21 Binary files /dev/null and b/doc/htmldoc/static/img/3_HBP + EBRAINS logo_Color+White.png differ diff --git a/doc/htmldoc/static/img/CPUs-cross-empty.gif b/doc/htmldoc/static/img/CPUs-cross-empty.gif new file mode 100644 index 0000000000..f5a68fa7ea Binary files /dev/null and b/doc/htmldoc/static/img/CPUs-cross-empty.gif differ diff --git a/doc/htmldoc/static/img/CPUs-lin-empty.gif b/doc/htmldoc/static/img/CPUs-lin-empty.gif new file mode 100644 index 0000000000..ea292ace0d Binary files /dev/null and b/doc/htmldoc/static/img/CPUs-lin-empty.gif differ diff --git a/doc/htmldoc/static/img/CPUs-lin-lin.gif b/doc/htmldoc/static/img/CPUs-lin-lin.gif new file mode 100644 index 0000000000..cecfa31ea0 Binary files /dev/null and b/doc/htmldoc/static/img/CPUs-lin-lin.gif differ diff --git a/doc/htmldoc/static/img/CPUs-lin-sparse.gif b/doc/htmldoc/static/img/CPUs-lin-sparse.gif new file mode 100644 index 0000000000..1979c6a236 Binary files /dev/null and b/doc/htmldoc/static/img/CPUs-lin-sparse.gif differ diff --git a/doc/htmldoc/static/img/Chat-256.png b/doc/htmldoc/static/img/Chat-256.png new file mode 100644 index 0000000000..b9067b2599 Binary files /dev/null and b/doc/htmldoc/static/img/Chat-256.png differ diff --git a/doc/htmldoc/static/img/Data-Replace-256.png b/doc/htmldoc/static/img/Data-Replace-256.png new file mode 100644 index 0000000000..d147ee3d86 Binary files /dev/null and b/doc/htmldoc/static/img/Data-Replace-256.png differ diff --git a/doc/htmldoc/static/img/Documents-02-256_nest.png b/doc/htmldoc/static/img/Documents-02-256_nest.png new file mode 100644 index 0000000000..5c1cd9db1a Binary files /dev/null and b/doc/htmldoc/static/img/Documents-02-256_nest.png differ diff --git a/doc/htmldoc/static/img/Documents-02-256_nest.svg b/doc/htmldoc/static/img/Documents-02-256_nest.svg new file mode 100644 index 0000000000..7f74bb3871 --- /dev/null +++ b/doc/htmldoc/static/img/Documents-02-256_nest.svg @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg16109" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="Documents-02-256_nest.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs16113" /> + <sodipodi:namedview + id="namedview16111" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="19.727059" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g16115" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g16115"> + <g + id="g16119" + transform="translate(8.3897653,0.09869459)"> + <path + style="fill:#fed8cc" + d="M 55,143 V 30 l 60.75,8.73e-4 60.75,8.73e-4 25.75,25.082053 L 228,80.165853 V 168.08293 256 H 141.5 55 Z m 156,22 V 91 H 189 167 V 69.5 48 H 119.5 72 V 143.5 239 H 141.5 211 Z M 90,210 v -5 h 49.5 49.5 v 5 5 H 139.5 90 Z m 0,-44.5 V 161 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z M 90,121 v -5.03267 l 26.75,0.26634 26.75,0.26633 v 4.5 4.5 L 116.75,125.76633 90,126.03267 Z M 28,107.5 V 0 h 75 75 v 5 5 H 108 38 V 112.5 215 h -5 -5 z" + id="path16133" /> + <path + style="fill:#fec4b1" + d="M 55.245709,143.25 55.5,30.5 115.84051,30.242158 176.18102,29.984316 202.09051,55.145308 228,80.3063 V 168.15315 256 H 141.49571 54.991418 Z M 211,164.5 V 90 H 189 167 V 69 48 H 119.5 72 V 143.5 239 H 141.5 211 Z M 90,210 v -5 h 49.5 49.5 v 5 5 H 139.5 90 Z m 0,-44.5 V 161 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z m 0,-44 V 117 h 26.5 26.5 v 4.5 4.5 H 116.5 90 Z m -62,-14 V 0 h 75 75 v 5 5 H 108 38 V 112.5 215 h -5 -5 z" + id="path16131" /> + <path + style="fill:#feb198" + d="M 56,143 V 30 h 60.08028 60.08028 l 25.91948,25.25 25.91948,25.25 2.4e-4,87.75 L 228,256 H 142 56 Z M 211.75641,164.75 211.5,90.5 189.25,90.230868 167,89.961737 V 68.480868 47 H 119.5 72 v 96 96 h 70.00641 70.0064 z M 90,210.5 V 206 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z m 0,-45 V 161 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z m 0,-44 V 117 h 26.5 26.5 v 4.5 4.5 H 116.5 90 Z m -62,-14 V 0 h 75 75 v 5 5 H 108 38 V 112.5 215 h -5 -5 z" + id="path16129" /> + <path + style="fill:#fe9e7e" + d="M 56,143 V 30 l 60.25,0.0347 60.25,0.0347 25.75,25.47228 25.75,25.47228 v 87.49301 87.49302 H 142 56 v -113 z m 156,21.5 V 90 H 189.5 167 V 68.5 47 H 119.5 72 v 96 96 h 70 70 z M 90,210 v -4 h 49.5 49.5 v 4 4 H 139.5 90 Z m 0,-44.5 V 161 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z M 90,121 v -4 h 26.5 26.5 v 4 4 H 116.5 90 Z M 28,107.5 V 0 h 75.05479 75.05479 L 177.80479,4.75 177.5,9.5 107.75,9.7567987 38,10.013597 V 112.5068 215 h -5 -5 z" + id="path16127" /> + <path + style="fill:#fe8a65" + d="M 56,143 V 30 h 60.03532 60.03533 L 202.03532,55.649581 228,81.299161 V 168.64958 256 H 142 56 Z m 156,21.5 V 90 H 190.01989 168.03978 L 167.76989,68.75 167.5,47.5 119.75,47.240303 72,46.980606 V 142.9903 239 h 70 70 z M 90,210 v -4 h 49.5 49.5 v 4 4 H 139.5 90 Z m 0,-44.5 V 161 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z M 90,121 v -4 h 26.5 26.5 v 4 4 H 116.5 90 Z M 28,107.5 V 0 h 75 75 V 4.5 9 H 108 38 v 103 103 h -5 -5 z" + id="path16125" /> + <path + style="fill:#fe774b" + d="M 56,143.5 V 31 h 60.37963 60.37962 L 201.87963,55.599842 227,80.199684 V 168.09984 256 H 141.5 56 Z m 156,21 V 90 H 190 168 V 68.490396 46.980792 L 119.75,47.240396 71.5,47.5 71.244976,143.25 70.989953,239 H 141.49498 212 Z M 90,210 v -4 h 49.5 49.5 v 4 4 H 139.5 90 Z m 0,-44.5 V 161 h 49.5 49.5 v 4.5 4.5 H 139.5 90 Z M 90,121 v -4 h 26.5 26.5 v 4 4 H 116.5 90 Z M 29,107.5 V 0 H 103.5 178 V 4.4932471 8.9864943 L 107.75,9.2432471 37.5,9.5 37.245306,112.25 36.990613,215 H 32.995306 29 Z" + id="path16123" /> + <path + style="fill:#fe6532" + d="M 56,143.5 V 31 l 60.25,0.02772 60.25,0.02772 25.29478,24.72228 L 227.08956,80.5 227.04478,168.25 227,256 H 141.5 56 Z m 156,21 V 90 H 190 168 V 68.5 47 H 119.5 71 v 96 96 H 141.5 212 Z M 90,210 v -4 h 49.5 49.5 v 4 4 H 139.5 90 Z m 0,-44 v -4 h 49.5 49.5 v 4 4 H 139.5 90 Z m 0,-45 v -4 h 26.5 26.5 v 4 4 H 116.5 90 Z M 29,107.5 V 0 h 74 74 V 4.5 9 H 107 37 v 103 103 h -4 -4 z" + id="path16121" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/EBRAINS_white-text.png b/doc/htmldoc/static/img/EBRAINS_white-text.png new file mode 100644 index 0000000000..08fe3ababc Binary files /dev/null and b/doc/htmldoc/static/img/EBRAINS_white-text.png differ diff --git a/doc/htmldoc/static/img/GPS-Settings-256_nest.png b/doc/htmldoc/static/img/GPS-Settings-256_nest.png new file mode 100644 index 0000000000..0e98a90805 Binary files /dev/null and b/doc/htmldoc/static/img/GPS-Settings-256_nest.png differ diff --git a/doc/htmldoc/static/img/GPS-Settings-256_nest.svg b/doc/htmldoc/static/img/GPS-Settings-256_nest.svg new file mode 100644 index 0000000000..fd5ecda61d --- /dev/null +++ b/doc/htmldoc/static/img/GPS-Settings-256_nest.svg @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg13747" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="GPS-Settings-256_nest.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs13751" /> + <sodipodi:namedview + id="namedview13749" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="73.938824" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g13753" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g13753"> + <g + id="g13757" + transform="translate(-1.4091359,-3.7675551)"> + <path + style="fill:#fed8cb" + d="m 146.97581,247.27682 c 0,-9.08773 0.33502,-12.50455 1.25,-12.74854 13.44172,-3.58441 18.62926,-5.33866 25.67838,-8.68355 25.28109,-11.99619 45.27653,-34.64167 54.01201,-61.17035 l 2.22267,-6.75 h 12.49793 12.49792 l -0.69475,3.25 c -2.99255,13.99904 -11.41505,32.7791 -20.42144,45.53469 -18.52207,26.23247 -48.53209,45.54821 -80.29272,51.67982 l -6.75,1.30314 z m -44.5,10.96912 C 93.720281,256.29156 78.804867,250.87523 70.60055,246.67087 44.87552,233.48789 24.59332,212.51755 12.464299,186.56216 8.6639586,178.42966 2.9758088,161.79433 2.9758088,158.81251 c 0,-0.48847 5.5666482,-0.88813 12.3703292,-0.88813 h 12.37033 l 2.745732,7.75 c 5.51722,15.5727 13.330969,28.06015 24.632229,39.36572 13.012048,13.017 31.150394,23.56223 47.444591,27.58323 l 6.43679,1.58843 v 12.35631 c 0,13.57408 0.22047,13.17799 -6.5,11.67787 z m 13.16399,-67.98385 c -0.36209,-10.36074 -0.65961,-23.67521 -0.66116,-29.58771 -0.003,-9.58129 -0.19309,-10.74688 -1.75283,-10.72134 -0.9625,0.0158 -14.125001,3.33381 -29.250001,7.37344 -15.125,4.03963 -27.681198,7.18303 -27.902662,6.98534 -0.221465,-0.19769 0.710084,-1.23472 2.070107,-2.30451 1.360024,-1.0698 29.430818,-23.549 62.379546,-49.95379 32.94873,-26.404796 60.01998,-47.895508 60.15834,-47.757144 0.24938,0.249372 -61.74946,140.097544 -63.48143,143.192394 -0.57632,1.02983 -1.13908,-5.18492 -1.55991,-17.22668 z M 1.4486506,115.17438 C 7.7157861,63.935045 47.060215,19.919171 98.140562,7.0020344 102.65938,5.8593218 106.94592,4.9243751 107.6662,4.9243751 c 1.00887,0 1.3068,2.813059 1.29737,12.2499999 l -0.0122,12.25 -11.737759,3.761537 c -15.700942,5.031583 -27.004719,11.75272 -39.032718,23.208525 -5.179954,4.933534 -11.343022,11.683534 -13.695706,15 -8.684239,12.241752 -16.686783,31.679593 -18.14281,44.068113 l -0.641931,5.46183 H 13.222904 0.74536218 Z m 231.1076794,4.5 c -0.1962,-0.6875 -1.12423,-5.075 -2.06231,-9.75 C 222.9321,72.238593 192.64934,40.470414 155.78411,31.549824 l -8.78362,-2.125449 -0.0123,-12.25 C 146.97379,2.8648017 146.15887,3.528319 159.56589,6.9332256 205.76987,18.667401 241.25412,53.475224 253.453,99.03059 c 1.38351,5.16659 2.80428,12.20629 3.15726,15.64379 l 0.64178,6.25 h -12.16948 c -8.87867,0 -12.26594,-0.33802 -12.52619,-1.25 z" + id="path13771" /> + <path + style="fill:#fec7b4" + d="M 96.475809,256.43579 C 50.165463,244.11959 14.728361,207.58516 3.5906204,160.67438 l -0.6529157,-2.75 H 15.370039 27.802373 l 2.143748,6.63563 c 6.631982,20.52822 20.880987,39.59419 39.543595,52.91155 8.094288,5.77596 23.004876,12.7468 32.236094,15.07068 l 7.25,1.82512 v 12.27851 c 0,14.27775 1.10897,13.40921 -12.500001,9.78992 z m 50.500001,-9.49236 v -11.98095 l 2.75,-0.62151 c 19.70003,-4.4523 37.05444,-13.56983 50.99701,-26.7924 12.59991,-11.94925 22.05733,-26.7888 27.32421,-42.87419 l 2.21017,-6.75 h 12.3593 c 6.79762,0 12.35931,0.39966 12.35931,0.88813 0,2.95237 -5.66866,19.57544 -9.394,27.54745 -16.31203,34.90679 -46.87201,60.38654 -83.96548,70.00723 -15.67414,4.0653 -14.64052,4.73062 -14.64052,-9.42376 z m -31.5078,-68.49491 c -0.53194,-21.27884 -1.05861,-29.52449 -1.86661,-29.22391 -3.91533,1.45654 -55.894002,14.76469 -56.255533,14.40316 -0.24505,-0.24505 27.13394,-22.51476 60.842203,-49.48824 33.70826,-26.97349 61.40118,-48.741189 61.53983,-48.372672 0.29232,0.776985 -61.53413,140.242482 -62.72434,141.490912 -0.43699,0.45836 -1.12799,-12.5058 -1.53555,-28.80925 z M 0.9758088,119.55537 c 0,-4.15225 3.4880654,-20.292764 6.0159892,-27.838112 C 13.342521,72.761619 23.733322,56.127453 38.44779,41.360776 49.595035,30.17398 60.865478,22.214712 75.075638,15.493928 83.947642,11.297858 96.860327,7.022467 105.22581,5.5112039 l 3.75,-0.6774549 -0.008,12.295313 -0.008,12.295313 -8.24243,2.271062 C 63.831533,41.858951 33.593269,74.560364 26.99467,111.42438 c -0.689144,3.85 -1.411187,7.5625 -1.60454,8.25 -0.532966,1.89505 -24.4143212,1.77864 -24.4143212,-0.11901 z M 232.61625,119.17438 c -0.27189,-0.9625 -0.80319,-3.775 -1.18068,-6.25 C 228.42608,93.192689 215.39583,69.603653 199.49774,55.106411 185.36193,42.216169 172.69438,35.845338 148.22581,29.320474 c -0.91227,-0.243268 -1.25,-3.584048 -1.25,-12.364714 0,-13.9213012 -0.95884,-13.086426 11.57754,-10.0806998 15.10801,3.6222998 29.40099,9.9679228 43.18905,19.1745408 9.64644,6.441161 27.29226,24.069832 33.48748,33.454933 11.38553,17.247862 19.08512,37.386096 21.28465,55.669846 l 0.69173,5.75 h -12.04784 c -10.61914,0 -12.10646,-0.20752 -12.54217,-1.75 z" + id="path13769" /> + <path + style="fill:#feb097" + d="M 97.475809,256.52884 C 73.705237,250.55024 53.650241,238.76928 36.321068,220.60456 26.46991,210.27841 20.257766,201.49332 14.062734,189.12728 10.303037,181.62247 5.1990911,167.7843 3.5684213,160.67438 l -0.6307166,-2.75 H 15.210081 27.482457 l 2.342469,6.75 c 2.989745,8.61518 7.672538,18.15848 12.64281,25.76543 5.729557,8.76903 19.751037,22.40704 29.675481,28.86389 9.162434,5.96109 25.465476,13.06592 32.582593,14.19942 l 4.25,0.67688 v 12.37219 c 0,9.26627 -0.3138,12.35563 -1.25,12.30623 -0.6875,-0.0363 -5.3,-1.08459 -10.250001,-2.32958 z m 49.500001,-9.47186 v -12.0945 l 2.75,-0.5952 c 6.72461,-1.45546 16.59773,-4.68256 22.69344,-7.41753 25.83983,-11.59354 47.637,-36.16904 56.12192,-63.27537 l 1.79988,-5.75 h 12.33643 12.33643 l -0.65291,2.75 c -10.89297,45.87985 -44.77239,81.71868 -89.42883,94.60094 -4.699,1.35554 -10.6615,2.78222 -13.25,3.17039 l -4.70636,0.70576 z M 115.55652,178.7347 c -0.39766,-16.10728 -0.8286,-29.39154 -0.95765,-29.52059 -0.12905,-0.12905 -12.97817,3.14682 -28.553617,7.27971 -15.575441,4.1329 -28.472987,7.36035 -28.661214,7.17212 -0.188227,-0.18822 27.205419,-22.44366 60.874771,-49.45651 33.66935,-27.012867 61.35037,-48.981843 61.51339,-48.819957 0.36839,0.36585 -61.73777,140.732587 -62.75494,141.833047 -0.40575,0.43898 -1.06309,-12.38054 -1.46074,-28.48782 z M 1.4717775,116.17438 C 7.6197698,68.959695 39.815257,28.24802 84.194526,11.570224 89.552584,9.5566574 97.495802,7.372041 106.72581,5.3734643 c 2.23786,-0.4845639 2.24996,-0.4209784 2.24242,11.7818587 l -0.008,12.269052 -8.24243,2.249066 C 82.228671,36.718589 62.075334,49.647437 49.666463,64.424375 36.793701,79.753732 29.654049,95.687658 25.358194,118.67438 c -0.408434,2.18549 -0.765737,2.25 -12.46271,2.25 H 0.853263 Z m 231.4883625,4 c -0.009,-0.4125 -0.89432,-4.91252 -1.96824,-10.00005 C 226.56893,89.221057 216.19485,70.855608 200.34254,55.915126 192.079,48.126911 185.00208,43.319361 173.82283,37.899543 166.05015,34.131264 162.05462,32.723868 151.22581,29.939911 l -4.25,-1.092624 V 16.885831 c 0,-8.9117586 0.3187,-11.9570289 1.25,-11.9440923 2.98787,0.041504 15.03165,3.0219681 22.32405,5.5245153 37.4213,12.841938 67.73986,43.43328 80.35046,81.073397 2.57575,7.688112 6.07549,23.826339 6.07549,28.015719 0,1.08262 -2.51031,1.36901 -12,1.36901 -6.6,0 -12.00705,-0.3375 -12.01567,-0.75 z" + id="path13767" /> + <path + style="fill:#fe9775" + d="M 101.26594,257.36218 C 64.258447,249.24906 31.15065,223.34018 14.03146,189.09587 10.418583,181.86886 3.9758088,163.23704 3.9758088,160.016 c 0,-2.09994 0.2991391,-2.14788 11.6882852,-1.87336 l 11.688284,0.28174 3.685034,9.76748 c 5.54558,14.69901 11.932883,24.59892 23.438397,36.32803 14.255124,14.53215 27.35082,22.49102 45.734061,27.79473 l 8.26594,2.3848 0.28078,12.11248 c 0.15443,6.66186 -0.0706,12.0673 -0.5,12.01207 -0.42943,-0.0552 -3.57522,-0.71303 -6.99065,-1.46179 z m 45.70987,-10.29366 v -11.97841 l 4.90932,-1.05286 c 34.55084,-7.40983 63.82636,-33.63628 76.01401,-68.09707 l 2.65809,-7.5158 11.37499,-0.2843 c 6.25624,-0.15637 11.71015,0.0686 12.1198,0.5 1.3694,1.44202 -4.07468,17.65207 -10.01653,29.82472 -7.14318,14.63373 -14.86154,25.19816 -26.65353,36.48175 -10.06158,9.62778 -18.78645,15.72023 -31.94829,22.30903 -9.19491,4.60296 -25.10449,9.84081 -33.70786,11.09751 l -4.75,0.69384 z m -31.34524,-69.31679 c -0.3667,-15.49496 -0.8286,-28.33452 -1.02643,-28.53236 -0.19784,-0.19783 -13.10558,3.01942 -28.683887,7.14945 -15.5783,4.13004 -28.455968,7.37737 -28.617039,7.2163 -0.161072,-0.16107 27.444631,-22.48327 61.346006,-49.60487 33.90137,-27.121618 61.39658,-48.691891 61.10046,-47.93395 -3.3566,8.591545 -62.27669,139.87808 -62.77588,139.87808 -0.37208,0 -0.97653,-12.67769 -1.34323,-28.17265 z M 1.7460892,120.36133 C 0.0202595,118.6355 4.8676316,97.608005 10.042392,84.372665 24.224695,48.09899 55.938014,19.494549 94.031667,8.6169151 98.675945,7.2907425 103.95209,5.9258893 105.75644,5.5839081 l 3.28062,-0.621784 -0.28062,12.0936079 -0.28063,12.093608 -8.500001,2.451527 C 61.276498,42.762329 32.326658,76.029023 25.506751,117.17438 l -0.621568,3.75 h -11.28802 c -6.2084117,0 -11.5413947,-0.25337 -11.8510738,-0.56305 z M 232.01691,114.17438 C 228.38661,93.126285 219.0818,75.116458 203.55399,59.08328 188.86725,43.918545 170.9797,34.081618 149.72581,29.481475 l -2.75,-0.595204 V 16.86001 4.833749 l 3.75,0.6440282 c 26.26257,4.5103565 49.80611,16.8806378 69.27425,36.3981818 18.75115,18.798736 30.96497,42.376718 35.44766,68.429411 0.84045,4.88454 1.52809,9.27204 1.52809,9.75 0,0.47796 -5.35381,0.86901 -11.89735,0.86901 h -11.89734 z" + id="path13765" /> + <path + style="fill:#fe835b" + d="M 98.475809,256.48037 C 88.170875,253.79459 78.815987,250.38304 70.940387,246.43874 46.955406,234.42643 24.259894,210.97045 12.963263,186.51894 9.2397012,178.4593 3.9758088,163.14566 3.9758088,160.37276 c 0,-1.18296 2.1699916,-1.44838 11.8417122,-1.44838 h 11.841713 l 1.251628,4.25 c 4.255073,14.44843 14.889119,31.34323 27.321938,43.40762 14.392741,13.96624 29.725705,22.61318 48.49301,27.34737 l 4.25,1.0721 v 11.96145 c 0,6.5788 -0.3375,11.93933 -0.75,11.91229 -0.4125,-0.027 -4.8,-1.10472 -9.750001,-2.39484 z m 48.500001,-9.269 v -11.80363 l 8.75,-2.22424 c 19.92348,-5.06452 41.16332,-18.8151 54.52585,-35.29978 7.05472,-8.70305 15.27129,-23.67454 18.34584,-33.42816 l 1.74355,-5.53118 h 11.81738 c 10.23676,0 11.81738,0.21713 11.81738,1.62335 0,3.49326 -7.34138,23.31668 -11.60472,31.33542 -18.75626,35.27786 -52.51146,59.76695 -91.64528,66.48783 l -3.75,0.64403 z M 116.5974,201.76603 c -0.29065,-2.38791 -0.76798,-15.09772 -1.06074,-28.24403 -0.29276,-13.14632 -0.72633,-24.09643 -0.9635,-24.3336 -0.23716,-0.23716 -13.18109,2.93886 -28.764278,7.05783 -15.58319,4.11897 -28.413721,7.41344 -28.512292,7.32104 -0.232418,-0.21786 120.74229,-97.045419 121.7513,-97.449141 0.63799,-0.255269 -60.61518,138.609941 -61.59841,139.647901 -0.178,0.18791 -0.56144,-1.61209 -0.85208,-4 z M 2.4962377,112.15906 C 6.6602643,86.152991 19.674184,60.435792 38.182887,41.637594 54.599182,24.964531 79.543582,11.338103 102.43144,6.5404071 l 6.60407,-1.3843288 -0.27985,11.9966307 -0.27985,11.996631 -8.26594,2.384791 c -34.596806,9.981454 -62.199191,37.68938 -71.616413,71.890249 -1.362985,4.95 -2.754931,10.6875 -3.093214,12.75 l -0.61506,3.75 H 13.069029 1.2528747 Z M 232.01221,113.17438 C 225.24859,74.117245 194.12468,40.539887 155.65599,30.799107 L 146.97581,28.60117 V 16.787773 4.9743751 l 3.25,0.5845625 c 38.47243,6.9198594 70.82302,29.4937274 90.09239,62.8654374 7.75336,13.427685 12.58505,27.950631 16.05246,48.250005 l 0.55515,3.25 h -11.87235 -11.87234 z" + id="path13763" /> + <path + style="fill:#fe764a" + d="M 101.97581,257.20971 C 63.502165,249.46692 27.721369,220.35001 11.925321,183.9304 8.508452,176.05242 3.9758088,162.23361 3.9758088,159.69448 c 0,-0.42356 5.3287706,-0.7701 11.8417122,-0.7701 h 11.841713 l 1.244965,4.25 c 2.104485,7.18418 9.795215,22.60869 14.699761,29.48179 13.389183,18.76326 35.198851,34.06352 57.26427,40.17293 4.06584,1.12574 7.56814,2.22251 7.7829,2.43727 0.21476,0.21475 0.26316,5.53419 0.10757,11.82096 l -0.28289,11.4305 z m 45,-9.99728 v -11.87087 l 6.7944,-1.59455 c 22.47635,-5.2749 44.04316,-19.37708 58.24586,-38.086 7.06564,-9.30743 13.61306,-21.57508 16.53799,-30.98663 l 1.78699,-5.75 h 11.81738 c 10.23676,0 11.81738,0.21713 11.81738,1.62335 0,2.78374 -6.73641,21.90849 -10.05565,28.54814 -8.18715,16.37713 -22.16201,33.42182 -36.24865,44.21132 -16.66826,12.76686 -34.49951,20.56721 -57.4457,25.12987 l -3.25,0.64623 z m -29.96739,-41.28805 c -0.0718,-0.275 -0.52837,-13.03236 -1.01461,-28.3497 -0.48624,-15.31733 -1.12506,-28.09069 -1.4196,-28.38524 -0.29455,-0.29454 -12.74644,2.70357 -27.670865,6.66248 -14.924428,3.9589 -27.329883,7.00345 -27.567677,6.76565 -0.237794,-0.23779 26.399339,-21.90066 59.193632,-48.1397 32.79429,-26.23905 59.80103,-47.53231 60.01498,-47.318362 0.30111,0.301113 -25.2348,58.231302 -60.06623,136.264872 -0.7365,1.65 -1.39784,2.775 -1.46963,2.5 z M 1.9974509,116.67438 C 2.0291931,111.90764 5.4062595,97.535615 8.5180111,88.924375 22.893323,49.14316 56.683099,18.353416 97.385772,7.9467556 109.81942,4.7677824 108.97581,4.0807384 108.97581,17.385831 v 11.461456 l -4.25,1.072094 C 85.932145,34.660225 70.655783,43.282832 56.134714,57.346193 40.320677,72.661767 30.14467,91.629263 25.914806,113.67438 l -1.199207,6.25 H 13.345704 1.9758088 Z m 230.0147591,-3.5 C 227.94832,89.707119 213.90177,66.01117 194.97054,50.686631 184.70681,42.378293 167.88091,33.802845 155.72581,30.685252 l -8.75,-2.244238 V 16.615307 c 0,-10.7858238 0.15388,-11.7818704 1.75,-11.327188 0.9625,0.2741857 4.45,1.034634 7.75,1.6898854 21.63846,4.2965546 47.03586,18.1502486 63.00885,34.3698716 19.61819,19.921101 32.71284,46.057163 36.3311,72.514514 l 0.82903,6.06199 h -11.73183 -11.73184 z" + id="path13761" /> + <path + style="fill:#fe6532" + d="M 146.97581,247.02719 V 235.18 l 3.85,-0.61564 c 5.82065,-0.93076 18.8473,-5.49371 26.18292,-9.17131 23.42844,-11.74547 44.28881,-36.2338 51.56896,-60.53762 l 1.77662,-5.93105 h 11.89021 11.8902 l -0.67735,3.25 c -1.4314,6.86798 -5.79399,18.61045 -10.082,27.137 -13.80679,27.45428 -35.63757,47.98928 -64.47115,60.64442 -6.21356,2.72715 -20.72225,6.95036 -28.67841,8.34776 l -3.25,0.57082 z m -52.002774,8.41505 C 80.464858,251.45704 65.488051,244.14159 53.229869,235.0527 31.424375,218.88492 16.251947,197.85779 7.483606,171.65398 5.5543175,165.88839 3.9758088,160.66557 3.9758088,160.04773 c 0,-0.76831 3.7675494,-1.12335 11.9205452,-1.12335 h 11.920544 l 0.708967,3.2279 c 1.362217,6.20214 7.201245,18.58389 12.852055,27.253 13.673986,20.97775 36.498344,37.48531 60.84789,44.00782 l 6.75,1.80812 v 11.35158 11.35158 l -2.75,-0.0733 c -1.5125,-0.0403 -6.576249,-1.12429 -11.252774,-2.40887 z m 21.965254,-52.51786 c -0.0541,-1.375 -0.44481,-13.86455 -0.86829,-27.75454 -0.42347,-13.89 -1.06964,-25.55424 -1.43593,-25.92053 -0.36629,-0.36629 -12.88425,2.56575 -27.817681,6.51565 -14.933435,3.9499 -27.299884,7.03345 -27.480997,6.85234 -0.317873,-0.31788 115.562178,-93.382014 118.268268,-94.982133 0.93971,-0.555655 0.78549,0.48011 -0.52114,3.5 -5.65291,13.06506 -58.44492,131.529173 -59.17581,132.789213 -0.66853,1.15253 -0.89286,0.92089 -0.96842,-1 z M 2.3798404,114.06986 C 3.91179,100.52921 11.20389,79.642195 18.664768,67.424375 35.410955,40.001073 60.134152,20.0131 89.006387,10.555257 94.776424,8.6651333 101.63001,6.7988577 104.23659,6.407978 l 4.73922,-0.7106905 v 11.5749995 11.575 l -4.25,1.093704 C 82.932631,35.549293 62.334893,48.190596 49.229671,64.000241 37.939399,77.620397 29.57864,94.907568 26.360662,111.28548 l -1.697396,8.6389 H 13.190371 1.7174762 Z M 231.76279,111.67438 C 223.94598,71.550438 193.19539,39.405466 153.72581,30.0988 l -6.75,-1.591606 V 16.83196 5.1567258 l 6.89138,1.3130931 c 24.62197,4.6915081 46.69435,16.7319901 65.6723,35.8242401 14.65869,14.746971 23.17505,28.030954 29.89469,46.630316 3.11155,8.61249 6.48825,22.984235 6.51999,27.750005 l 0.0216,3.25 h -11.30289 -11.30289 z" + id="path13759" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/Gauge-256.png b/doc/htmldoc/static/img/Gauge-256.png new file mode 100644 index 0000000000..a79a0c1073 Binary files /dev/null and b/doc/htmldoc/static/img/Gauge-256.png differ diff --git a/doc/htmldoc/static/img/Gear-256_nest.png b/doc/htmldoc/static/img/Gear-256_nest.png new file mode 100644 index 0000000000..577b015554 Binary files /dev/null and b/doc/htmldoc/static/img/Gear-256_nest.png differ diff --git a/doc/htmldoc/static/img/Gear-256_nest.svg b/doc/htmldoc/static/img/Gear-256_nest.svg new file mode 100644 index 0000000000..2f0e4a81b1 --- /dev/null +++ b/doc/htmldoc/static/img/Gear-256_nest.svg @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg13647" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="Gear-256_nest.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs13651" /> + <sodipodi:namedview + id="namedview13649" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="243.2" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g13653" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g13653"> + <g + id="g13657" + transform="translate(-2.9356665,0.60652575)"> + <path + style="fill:#fee3da" + d="m 96.102652,253.75 c -0.466316,-1.2375 -1.166755,-3.71624 -1.556532,-5.50832 -0.389776,-1.79207 -1.542523,-3.70457 -2.561661,-4.25 -3.660511,-1.95904 -5.759717,-1.06579 -9.513805,4.0483 l -3.699683,5.03997 -2.635486,-1.71075 c -1.449517,-0.94091 -4.092415,-2.6464 -5.873106,-3.78997 -1.780692,-1.14358 -3.23952,-2.52923 -3.24184,-3.07923 -0.0023,-0.55 1.295166,-3.25 2.883301,-6 2.760069,-4.77931 2.816682,-5.1209 1.282641,-7.73915 -1.531584,-2.61406 -1.923429,-2.72823 -8.580029,-2.5 L 55.631302,228.5 54.308033,222.06373 C 52.779075,214.627 52.74916,214.66971 60.75,212.86558 c 3.895002,-0.8783 5.25,-1.63785 5.25,-2.94292 0,-0.9675 0.252273,-2.4165 0.560607,-3.22 0.3624,-0.9444 -1.213557,-2.8295 -4.457404,-5.33179 -2.759906,-2.12898 -5.03718,-4.21529 -5.060607,-4.63625 C 56.988124,195.75583 64.108309,185 64.810723,185 c 0.29016,0 2.917527,1.34881 5.838593,2.99736 5.292366,2.98683 5.321628,2.99091 8.327266,1.16308 1.65893,-1.00886 2.855836,-2.02017 2.65979,-2.24736 -0.196046,-0.2272 -0.631313,-3.16609 -0.96726,-6.53088 l -0.610813,-6.1178 5.637632,-1.1322 c 8.90413,-1.78821 8.958184,-1.76663 10.316101,4.1178 2.163594,9.37577 6.756048,10.3946 12.558398,2.78605 l 3.78555,-4.96395 3.70178,2.08052 c 2.03598,1.14429 4.86341,3.04056 6.28317,4.21395 l 2.58138,2.13343 -3.35579,5.61572 -3.3558,5.61571 2.14464,2.68801 c 2.0819,2.60938 2.32015,2.66018 8.14464,1.73669 3.3,-0.52322 6.16321,-0.79668 6.3627,-0.60769 0.33074,0.31335 3.01992,12.09457 3.10217,13.59051 0.0193,0.35143 -2.88987,1.43072 -6.46487,2.39842 -4.88872,1.32332 -6.5,2.19818 -6.5,3.52926 0,0.97339 -0.25109,2.42412 -0.55798,3.22386 -0.36248,0.94462 1.21411,2.75488 4.5,5.16695 2.78189,2.04209 5.05798,4.13149 5.05798,4.64311 0,1.35979 -7.21751,12.00949 -7.91123,11.67331 -0.32382,-0.15693 -2.93854,-1.52137 -5.81048,-3.0321 -5.09859,-2.68202 -5.28768,-2.70546 -8.0203,-0.99427 -2.60303,1.63004 -2.74995,2.06699 -2.10242,6.25251 1.35415,8.75297 1.42543,8.60721 -4.82235,9.86195 -7.684918,1.54335 -8.255916,1.47457 -9.230568,-1.11195 z m 5.912948,-26.60161 c 7.78997,-4.13959 10.47458,-14.1534 5.69707,-21.25051 C 99.590965,193.8329 81,199.47165 81,214 c 0,7.93236 6.832047,15 14.5,15 1.667162,0 4.59918,-0.83323 6.5156,-1.85161 z m 75.53175,-25.72138 c -4.33419,-1.88467 -8.02149,-3.56781 -8.19398,-3.74031 -0.1725,-0.1725 0.78668,-3.8799 2.13151,-8.23866 l 2.44514,-7.92503 -3.03629,-3.13266 -3.0363,-3.13266 -7.46681,2.37116 C 156.28387,178.93298 152.59494,180 152.193,180 c -0.40195,0 -2.0723,-3.45261 -3.71191,-7.67247 -1.6396,-4.21985 -3.12683,-8.03209 -3.30497,-8.47163 -0.17813,-0.43954 3.10459,-2.49561 7.29493,-4.56905 l 7.6188,-3.76988 -0.29492,-4.448 c -0.29255,-4.41213 -0.3529,-4.47912 -7.48517,-8.30949 l -7.19023,-3.86151 3.49864,-8.17406 c 1.92425,-4.49573 3.64401,-8.31943 3.82169,-8.4971 0.17767,-0.17767 3.86389,0.89176 8.19159,2.37651 l 7.86855,2.69956 3.13232,-2.77086 3.13232,-2.77087 -2.45041,-7.97914 c -1.34773,-4.38854 -2.18457,-8.245 -1.85964,-8.56993 1.07016,-1.07016 16.03151,-7.017039 16.67274,-6.627129 0.34503,0.2098 2.0809,3.689009 3.85747,7.731589 l 3.23015,7.35013 h 4.46388 4.46389 l 3.40374,-6.75893 c 1.87206,-3.71741 3.85186,-7.035883 4.39956,-7.374381 0.7767,-0.480022 15.23802,4.713671 16.92857,6.079781 0.20602,0.16648 -0.91102,3.92095 -2.4823,8.34325 l -2.85689,8.04055 3.00818,3.00817 3.00817,3.00818 7.78123,-2.61621 c 4.27967,-1.43891 7.99792,-2.39952 8.26276,-2.13467 0.26484,0.26484 2.02486,4.14089 3.91114,8.61344 l 3.4296,8.1319 -7.60524,3.82664 -7.60524,3.82663 -0.113,4.30229 -0.113,4.30229 7.25,3.58648 c 3.9875,1.97257 7.25,4.01948 7.25,4.54869 0,1.59768 -6.34573,16.59923 -7.02156,16.59923 -0.34547,0 -3.94246,-1.12727 -7.9933,-2.50505 l -7.36515,-2.50506 -3.055,2.75506 c -1.68025,1.51528 -3.216,2.8388 -3.41278,2.94117 -0.29056,0.15115 2.63715,9.73548 4.60319,15.06933 0.45246,1.22751 -1.05245,2.02584 -11.81782,6.26915 l -4.96336,1.95638 -3.7064,-7.49049 L 202.56143,190 h -4.58752 -4.58753 l -3.42805,7.08614 c -1.88543,3.89737 -3.67613,7.23945 -3.97934,7.42684 -0.3032,0.1874 -4.09744,-1.20129 -8.43164,-3.08597 z m 30.97958,-33.44365 c 5.1304,-3.17077 8.75878,-9.94957 8.75878,-16.3638 0,-7.40815 -3.92444,-13.78204 -10.64676,-17.29195 -3.76,-1.96319 -12.4729,-1.98651 -16.18775,-0.0433 -7.75566,4.05688 -12.38406,12.57972 -11.10659,20.45189 0.86477,5.32893 5.45318,11.38667 10.66877,14.08518 5.48219,2.83646 13.12814,2.49037 18.51355,-0.83799 z M 64.972905,143.75 c -0.04282,-3.55568 -1.80109,-20.91156 -2.154216,-21.26425 -0.175279,-0.17507 -2.619088,-1.22493 -5.430686,-2.33304 l -5.111998,-2.01473 -8.888002,7.39578 -8.888003,7.39579 -8.930164,-8.9017 -8.930165,-8.90169 7.775266,-8.56431 7.775266,-8.564299 -2.25314,-5.436106 -2.25314,-5.436106 -6.591962,-0.616676 C 17.466383,86.169491 12.25,85.575236 9.5,85.188097 L 4.5,84.484207 4.2202721,72.373049 3.9405443,60.261891 7.0952721,59.630946 C 8.8303725,59.283926 13.23125,58.993855 16.875,58.986345 c 9.610408,-0.01981 10.655461,-0.496108 12.773552,-5.821765 1.018297,-2.560369 1.967032,-4.891574 2.108301,-5.180456 0.141269,-0.288882 -3.10538,-4.565989 -7.214775,-9.504682 L 17.07045,29.5 l 8.901696,-8.930164 8.901696,-8.930165 8.579942,7.789464 8.579942,7.789463 5.409835,-2.195691 C 63.50832,22.561401 63.279413,23.119548 64.539526,7.7207806 L 65.176116,-0.05843888 77.838058,0.22078056 90.5,0.5 l 0.237204,6 c 0.130462,3.3 0.491199,8.289325 0.801639,11.08739 0.563703,5.080787 0.571615,5.090365 6.096258,7.380201 l 5.531819,2.292813 4.66654,-4.392457 c 2.5666,-2.415852 6.36132,-5.94477 8.43271,-7.84204 l 3.76617,-3.449583 8.48383,8.43976 C 133.18228,24.657952 137,28.926708 137,29.502207 c 0,0.5755 -3.1526,4.852642 -7.00577,9.504762 -3.85318,4.652119 -6.89068,8.693298 -6.75,8.980397 0.14067,0.287099 1.08892,2.616845 2.10722,5.177214 2.1302,5.356117 3.12205,5.796303 13.14855,5.83542 12.14485,0.04738 11.5,-0.71169 11.5,13.537037 v 12.303775 l -6.75,0.621874 c -16.9967,1.565896 -15.68066,1.051614 -18.19121,7.108762 l -2.24899,5.426103 7.77526,8.564299 7.77527,8.56431 -8.94702,8.94701 -8.94701,8.94702 -8.93874,-7.5249 c -4.91631,-4.13869 -9.18583,-7.40573 -9.48783,-7.26009 -0.302,0.14564 -2.632294,1.0935 -5.178428,2.10636 -5.259959,2.09243 -5.830174,3.63502 -5.850296,15.82665 C 90.993994,146.4753 91.652329,146 77.393011,146 65.215694,146 64.999528,145.96084 64.972905,143.75 Z M 88.958465,96.021189 C 100.61768,90.073103 106.29917,76.015512 102.06817,63.584137 100.27961,58.329052 93.511184,51.140338 88.073203,48.720154 c -5.90051,-2.626033 -15.245896,-2.626033 -21.146406,0 -5.437981,2.420184 -12.206411,9.608898 -13.994971,14.863983 -4.973341,14.612506 3.639184,30.63095 18.568174,34.534965 4.437256,1.160367 13.115923,0.117487 17.458465,-2.097913 z" + id="path13671" /> + <path + style="fill:#fed8cc" + d="M 96.591356,254.87192 C 96.349662,254.11736 95.609087,251.7 94.945633,249.5 93.326644,244.13146 92.273744,243 88.896947,243 c -2.264141,0 -3.631386,1.0357 -6.578552,4.98331 -3.697967,4.95328 -3.735749,4.97335 -6.269391,3.32923 -1.401952,-0.90975 -4.005934,-2.58974 -5.786625,-3.73331 -1.780692,-1.14358 -3.243192,-2.43267 -3.25,-2.86465 -0.0068,-0.43198 1.312465,-3.10513 2.93172,-5.94034 2.866829,-5.01963 2.899636,-5.23057 1.25,-8.0372 -1.673085,-2.84653 -1.777289,-2.87398 -8.400669,-2.21253 l -6.70657,0.66975 -0.643711,-2.84713 c -0.354041,-1.56592 -1.083295,-4.59912 -1.620564,-6.74044 -1.147391,-4.573 -0.889416,-4.82589 6.642369,-6.51143 4.815225,-1.0776 5.363507,-1.48177 5.956798,-4.39105 0.594965,-2.91749 0.203861,-3.60688 -4.370721,-7.70421 l -5.024157,-4.5 3.42343,-5.35353 c 1.882887,-2.94445 3.631357,-5.56146 3.885489,-5.8156 0.254132,-0.25413 2.967378,0.95186 6.029436,2.67998 5.496023,3.10176 5.605478,3.11953 8.54015,1.38597 2.320166,-1.37055 2.886754,-2.32033 2.580938,-4.32644 -0.21551,-1.41371 -0.633622,-4.42165 -0.929138,-6.68432 l -0.537302,-4.11395 5.656843,-1.13605 c 8.921828,-1.79176 8.975046,-1.77062 10.354497,4.11394 1.526134,6.51029 2.481235,7.75 5.970763,7.75 2.05472,0 3.69647,-1.14639 6.44451,-4.5 2.02807,-2.475 4.1142,-4.5 4.63584,-4.5 0.52164,0 3.38104,1.61516 6.35422,3.58924 l 5.40578,3.58923 -3.33152,5.65823 c -3.21894,5.46701 -3.27657,5.75125 -1.70556,8.41076 1.73417,2.93572 2.75353,3.11779 10.40213,1.85793 l 4.70737,-0.77538 1.54263,6.7824 c 0.84844,3.73032 1.54262,6.96428 1.54262,7.18657 0,0.2223 -2.8761,1.1827 -6.39133,2.13423 -5.86436,1.58741 -6.44445,1.99128 -7.03573,4.89842 -0.67979,3.34228 0.0402,4.31427 6.88516,9.29464 l 2.9223,2.12627 -3.92275,6.05842 -3.92275,6.05843 -5.69377,-3.03475 c -5.66365,-3.01869 -5.71004,-3.02515 -8.76658,-1.21961 -1.86016,1.09883 -2.90437,2.42087 -2.64601,3.35006 0.23474,0.8442 0.71792,3.83453 1.07374,6.64517 l 0.64696,5.11026 -3.82462,0.61315 c -2.10354,0.33723 -5.28019,0.90498 -7.05922,1.26166 -2.304864,0.46211 -3.360911,0.25417 -3.674044,-0.72341 z m 5.388714,-27.62347 c 10.70446,-5.37811 10.70446,-21.11879 0,-26.4969 C 92.184601,195.83014 81,202.89297 81,214 c 0,8.06566 6.701576,14.99689 14.5,14.99689 1.65,0 4.56603,-0.7868 6.48007,-1.74844 z m 75.55107,-25.92639 c -4.38287,-1.88454 -8.0944,-3.55198 -8.24784,-3.70543 -0.15345,-0.15344 0.84504,-3.58378 2.21885,-7.62296 1.37382,-4.03919 2.48466,-7.60266 2.46854,-7.91882 -0.0161,-0.31617 -1.32693,-2.00058 -2.91291,-3.74315 l -2.88359,-3.1683 -7.83709,2.41817 c -4.31041,1.32999 -7.97256,2.41822 -8.13813,2.41829 -0.3188,1.5e-4 -1.99753,-3.87775 -5.24244,-12.11014 l -1.97523,-5.01121 7.50935,-3.46954 L 160,155.93944 v -4.75509 -4.75509 l -6.53429,-3.2222 c -3.59386,-1.77221 -6.75967,-3.80953 -7.03513,-4.52737 -0.38547,-1.00451 4.77492,-15.04486 6.05211,-16.46655 0.14174,-0.15778 3.87341,1.0327 8.29261,2.64551 l 8.03491,2.93238 3.06331,-3.16053 3.0633,-3.16053 -2.50743,-7.89596 c -1.37909,-4.34278 -2.15237,-8.20125 -1.71841,-8.57437 0.43396,-0.37313 4.28169,-2.07191 8.55052,-3.77508 l 7.76149,-3.096667 3.62767,7.936057 3.62766,7.93605 h 4.27045 4.27046 l 4.11624,-7.5 c 2.26393,-4.125 4.28615,-7.5 4.49383,-7.5 1.5237,0 16.06503,6.8868 16.04378,7.59837 -0.0148,0.4959 -1.1196,4.17568 -2.4551,8.1773 l -2.42818,7.27567 3.09312,3.09312 3.09313,3.09313 6.86197,-2.26512 c 3.77409,-1.24582 7.36387,-2.44916 7.97729,-2.6741 0.62207,-0.22811 2.57624,3.21528 4.41882,7.7863 3.80121,9.42994 4.12167,8.70108 -6.12475,13.93014 -5.48073,2.79699 -5.59192,2.9394 -5.65702,7.24585 l -0.0664,4.39278 7.46751,3.69502 c 8.43171,4.17212 8.22492,3.27855 3.29932,14.25679 l -2.78884,6.21579 -8.21001,-2.51325 -8.21001,-2.51325 -2.99075,2.99075 -2.99076,2.99076 2.26512,6.86197 c 1.24582,3.77409 2.47336,7.42693 2.72787,8.11743 0.45246,1.22751 -1.05245,2.02584 -11.81782,6.26915 l -4.96336,1.95638 -3.7064,-7.49049 L 202.56144,190 h -4.58752 -4.58753 l -3.42805,7.08614 c -1.88543,3.89737 -3.65986,7.21578 -3.94319,7.37425 -0.28333,0.15846 -4.10112,-1.25379 -8.484,-3.13833 z m 29.08495,-32.23518 c 4.94834,-2.24713 8.78751,-7.03851 10.35281,-12.92056 2.84087,-10.67538 -4.56183,-21.52716 -16.15372,-23.68008 -7.30776,-1.35724 -16.2035,3.55302 -19.76484,10.90978 -7.81362,16.14078 9.12131,33.15859 25.56575,25.69086 z M 65.672273,145.25 c -0.245169,-0.4125 -0.745268,-4.575 -1.111331,-9.25 -1.066824,-13.62443 -0.959744,-13.38279 -7.048703,-15.90652 l -5.401864,-2.23895 -8.305188,7.07263 c -4.567853,3.88995 -8.765122,7.07268 -9.327265,7.07274 -0.562143,5e-5 -4.765972,-3.76334 -9.341842,-8.36311 l -8.319765,-8.36321 7.693016,-8.62336 7.693017,-8.623367 -2.259869,-5.45234 C 27.411094,86.467092 27.943069,86.68863 12.75,85.414804 L 5,84.765025 v -12.25167 -12.25167 l 3.75,-0.619837 c 2.0625,-0.34091 6.9574,-0.624789 10.877555,-0.630842 7.864558,-0.01214 8.127145,-0.183016 10.684278,-6.952546 1.91611,-5.072542 2.336124,-4.132505 -6.726946,-15.055633 l -5.915114,-7.129101 8.393036,-8.436863 C 30.678978,16.796588 34.843697,13 35.31774,13 c 0.474042,0 4.406488,3.200584 8.738767,7.112409 l 7.876873,7.112408 5.148981,-1.851548 C 60.204372,24.25061 62.528567,22.730117 62.986363,21.510861 63.401624,20.404887 64.066568,15.1125 64.464016,9.75 L 65.186649,0 h 12.290044 c 14.253527,0 13.486184,-0.66369741 13.509652,11.6849 0.01896,9.978094 0.781756,11.461138 7.019645,13.647802 l 5.22814,1.832702 3.63294,-3.320447 c 1.99811,-1.826246 5.67032,-5.23544 8.16046,-7.575988 l 4.52753,-4.255541 8.91278,8.95426 c 8.2128,8.251031 8.79488,9.094763 7.41168,10.743286 -0.8256,0.983964 -4.12596,4.837653 -7.33413,8.563753 l -5.83305,6.774727 2.43873,5.725273 2.43874,5.725273 5.95509,0.237204 c 3.27531,0.130462 8.3176,0.500342 11.2051,0.821956 l 5.25,0.584753 v 12.310556 12.310556 l -7.75,0.649779 c -15.19307,1.273826 -14.66109,1.052288 -17.19248,7.159709 l -2.25987,5.45234 7.69302,8.623367 7.69302,8.62336 -8.31977,8.36321 c -4.57587,4.59977 -8.7797,8.35465 -9.34184,8.34418 -0.56215,-0.0105 -4.79841,-3.17669 -9.41392,-7.03605 -4.61551,-3.85937 -8.66761,-6.8883 -9.00468,-6.73097 -0.33706,0.15733 -2.707691,1.1192 -5.26806,2.1375 -5.325657,2.11809 -5.801957,3.16314 -5.821765,12.77355 -0.0075,3.64375 -0.294905,8.03125 -0.638655,9.75 L 89.75,146 H 77.934017 c -6.498791,0 -12.016576,-0.3375 -12.261744,-0.75 z M 84.30718,97.933284 c 17.19553,-4.3748 24.81752,-25.023904 14.762896,-39.994875 -10.158536,-15.125694 -32.981616,-15.125694 -43.140152,0 -13.564577,20.197169 4.747769,46.006571 28.377256,39.994875 z" + id="path13669" /> + <path + style="fill:#fec7b5" + d="m 95.364667,250.25 c -2.07119,-6.85417 -2.057214,-6.8362 -5.864667,-7.54034 -2.718648,-0.50278 -3.364378,-0.0514 -6.88528,4.81316 l -3.88528,5.36797 -5.922544,-4.02192 c -3.257399,-2.21206 -5.781445,-4.32499 -5.60899,-4.6954 0.172454,-0.37041 1.557274,-3.03837 3.077377,-5.92881 2.669112,-5.07525 2.705323,-5.34463 1.056708,-7.86073 -1.645231,-2.51094 -1.952857,-2.58117 -8.48613,-1.9374 -7.604076,0.74929 -6.631936,1.68155 -8.782114,-8.42191 -1.103185,-5.18376 -1.025931,-5.26724 6.414924,-6.93243 4.973878,-1.11311 5.359614,-1.41664 5.976032,-4.70243 0.572397,-3.05113 0.29283,-3.8 -2.128339,-5.70114 -1.533011,-1.20374 -3.8214,-3.08862 -5.08531,-4.18862 l -2.298017,-2 3.676441,-5.5 c 2.022042,-3.025 3.812324,-5.66496 3.978403,-5.86659 0.166079,-0.20162 2.581257,1.03588 5.367063,2.75 5.833629,3.58947 6.748497,3.70703 9.695204,1.24579 1.960508,-1.63752 2.091934,-2.38281 1.42205,-8.06414 -0.495543,-4.20274 -0.38386,-6.38341 0.339852,-6.6358 2.097355,-0.73143 10.100092,-2.38071 11.66882,-2.40481 1.116181,-0.0172 1.952974,1.5936 2.804422,5.39827 1.327579,5.93225 2.335989,7.20956 6.104708,7.73261 1.97824,0.27455 3.30039,-0.64462 6.33507,-4.40418 2.10928,-2.61313 4.25201,-4.75115 4.76161,-4.75115 1.54939,0 10.86732,6.43012 10.8683,7.5 5e-4,0.55 -1.31199,3.23038 -2.91665,5.9564 -2.82832,4.8048 -2.86641,5.04298 -1.24539,7.78714 1.64441,2.78378 1.78353,2.81977 8.38437,2.16934 7.52688,-0.74168 6.57654,-1.6577 8.71179,8.39716 1.01758,4.79173 1.02178,4.78782 -7.65079,7.1231 -3.38154,0.91055 -4.10243,1.57914 -4.66008,4.32202 -0.69785,3.43246 -0.0164,4.36066 6.89247,9.38757 l 2.9449,2.14273 -3.72301,5.60727 c -2.04766,3.084 -4.2146,5.60727 -4.81542,5.60727 -0.60083,0 -3.28802,-1.23421 -5.97154,-2.74269 -4.71702,-2.65157 -4.9711,-2.68662 -7.64738,-1.05497 -2.47194,1.50708 -2.72326,2.14853 -2.34792,5.9927 0.92361,9.45966 1.05411,9.15151 -4.42033,10.43798 -8.247518,1.93814 -8.221853,1.94924 -10.135333,-4.38302 z m 8.437783,-23.95183 c 4.76893,-3.56052 6.42832,-6.73513 6.42832,-12.29817 0,-11.42193 -12.444798,-18.82532 -21.926436,-13.044 -10.466177,6.38163 -9.82742,21.72135 1.110852,26.67707 3.972665,1.79987 11.070674,1.14129 14.387264,-1.3349 z M 178,201.38233 c -4.125,-1.82604 -7.83442,-3.44658 -8.24316,-3.6012 -0.40874,-0.15462 0.43791,-3.88273 1.88143,-8.28468 l 2.62459,-8.00355 -3.03118,-3.24488 -3.03117,-3.24488 -6.71773,2.07489 c -3.69476,1.1412 -7.34233,2.31458 -8.10571,2.60752 -1.39149,0.53396 -2.00426,-0.59164 -6.41782,-11.78895 l -1.97253,-5.00433 7.50664,-3.42089 C 159.36056,156.3419 160,155.79976 160,153.10703 c 0,-1.6189 0.26325,-3.62947 0.585,-4.46794 0.42247,-1.10095 -1.0361,-2.3514 -5.25,-4.50091 -10.55929,-5.38628 -10.23274,-4.67744 -6.34039,-13.76331 1.85545,-4.33118 3.45265,-7.9993 3.54933,-8.15139 0.0967,-0.15209 3.78188,1.0531 8.18935,2.67818 l 8.01359,2.95471 3.09157,-3.18969 3.09157,-3.18969 -2.44514,-7.92503 c -1.34483,-4.35876 -2.31329,-8.05689 -2.15212,-8.21805 0.7005,-0.7005 15.04905,-6.330619 16.05478,-6.299613 0.61185,0.01886 2.64479,3.393863 4.51765,7.500003 L 194.31037,114 h 4.27477 4.27477 L 207,106.5 c 2.27705,-4.125 4.29626,-7.5 4.48714,-7.5 0.19088,0 2.52186,0.936616 5.17995,2.08137 2.6581,1.14475 6.29243,2.69555 8.0763,3.44621 l 3.24338,1.36484 -2.83494,8.0112 -2.83493,8.0112 3.2605,3.1602 3.26051,3.16021 7.75719,-2.60813 c 4.26646,-1.43447 7.85134,-2.4999 7.9664,-2.36762 1.04623,1.20283 6.48089,15.85877 6.10265,16.45736 -0.27218,0.43074 -3.67566,2.35816 -7.5633,4.28316 l -7.06843,3.5 -0.0162,4.53071 -0.0162,4.53072 7.56049,3.74103 c 8.5381,4.22476 8.32294,3.31329 3.38181,14.32614 l -2.79932,6.23916 -8.08546,-2.65068 -8.08546,-2.65068 -3.11172,3.11172 -3.11173,3.11173 2.6246,7.80617 c 1.44353,4.2934 2.28759,8.0934 1.87569,8.44446 -0.41189,0.35106 -4.25218,2.03611 -8.53398,3.74456 l -7.78507,3.10628 -3.68421,-7.44566 L 202.56145,190 h -4.58752 -4.58753 l -3.42805,7.08614 c -1.88543,3.89737 -3.65986,7.20541 -3.94319,7.3512 -0.28333,0.14578 -3.89014,-1.22897 -8.01514,-3.05501 z m 28.54137,-32.26199 c 14.90399,-6.76995 14.86259,-27.37231 -0.0697,-34.678 -6.79935,-3.32662 -12.84228,-2.90474 -18.97167,1.32446 -10.56134,7.2872 -11.12278,22.85349 -1.1129,30.85618 5.92928,4.74034 13.2259,5.64448 20.15427,2.49736 z M 64.485646,134.63009 c -0.388748,-5.70345 -0.994552,-10.82197 -1.34623,-11.37449 -0.351679,-0.55252 -2.976085,-2.00536 -5.832013,-3.22854 l -5.192597,-2.22396 -8.429535,7.09845 C 39.049027,128.8057 34.85076,132 34.35579,132 c -0.49497,0 -4.634347,-3.7539 -9.198615,-8.342 l -8.298669,-8.34201 5.264414,-5.90799 c 2.895428,-3.2494 6.338535,-7.09548 7.651349,-8.54685 l 2.386933,-2.638847 -1.830601,-5.222227 C 29.212446,89.810272 27.721626,87.482215 26.5,87.018233 25.4,86.600444 20.1125,85.933432 14.75,85.535984 L 5,84.813351 V 72.545966 60.278582 l 5.25,-0.630599 c 2.8875,-0.346829 8.007634,-0.63451 11.378075,-0.639291 L 27.75615,59 l 2.221765,-5.940946 2.221766,-5.940945 -7.269314,-8.632439 -7.269313,-8.632438 8.596825,-8.596825 c 9.857093,-9.857093 7.990459,-9.891842 19.421494,0.361547 L 52.5,27.735907 58,25.10079 63.5,22.465672 64.359375,11.232836 65.21875,0 h 12.259782 12.259783 l 0.619837,3.75 c 0.34091,2.0625 0.624789,7.154694 0.630842,11.315986 L 91,22.631972 l 5.269326,2.184014 c 2.89813,1.201208 5.710634,2.173751 6.250004,2.161208 0.53937,-0.01254 4.48549,-3.162543 8.76915,-7 C 115.57214,16.139737 119.40708,13 119.81056,13 c 0.40348,0 4.50942,3.795542 9.12432,8.434539 l 8.39072,8.434538 -7.21543,8.568451 -7.21543,8.568451 2.18662,5.997011 2.18662,5.99701 6.11601,0.0087 c 3.36381,0.0048 8.47851,0.292462 11.36601,0.639291 L 150,60.27859 v 12.242432 12.242432 l -8.75,0.662659 c -13.86802,1.050259 -13.61953,0.940697 -16.1879,7.137357 l -2.27032,5.477565 5.85411,6.562775 c 9.94171,11.14519 9.93231,9.30372 0.0977,19.13832 l -8.59682,8.59683 -8.57596,-7.22176 -8.57596,-7.22175 -5.982749,2.30228 -5.982749,2.30228 -0.02568,7.5 c -0.01412,4.125 -0.304609,9.1875 -0.645519,11.25 L 89.738315,145 H 77.465388 65.19246 Z M 86.536678,97.332803 C 97.421126,93.624098 105.0306,81.349581 103.65352,69.72234 101.87155,54.676341 86.816716,43.708646 72.380404,46.939351 c -20.626149,4.61593 -28.213551,29.32274 -13.517931,44.01836 7.580659,7.580659 17.458134,9.856059 27.674205,6.375092 z" + id="path13667" /> + <path + style="fill:#feb096" + d="m 95.240297,249.78169 c -1.700116,-5.773 -2.078636,-6.27065 -5.285775,-6.94925 -3.015897,-0.63813 -3.708464,-0.39049 -5.454522,1.95041 -1.1,1.47475 -2.960989,3.79982 -4.135532,5.16683 l -2.135532,2.48548 -5.621388,-3.73239 -5.621387,-3.73239 3.025082,-5.99265 c 2.93407,-5.81236 2.973477,-6.07142 1.309822,-8.61047 -1.648515,-2.51596 -1.977216,-2.59348 -8.447185,-1.99216 l -6.731924,0.62567 -1.188447,-5.72472 c -0.653646,-3.14859 -1.380983,-6.22645 -1.616304,-6.83969 -0.251568,-0.65558 2.25838,-1.84211 6.091679,-2.87974 6.203742,-1.67927 6.551484,-1.93505 7.179114,-5.28061 0.576911,-3.0752 0.298142,-3.79936 -2.22421,-5.77791 -1.586083,-1.24413 -3.907137,-3.10267 -5.157897,-4.13008 L 56.951783,196.5 60.623851,191 c 2.019637,-3.025 3.77596,-5.63297 3.902939,-5.7955 0.126979,-0.16252 2.5552,1.07498 5.396047,2.75 5.968505,3.51916 6.337723,3.57611 9.548054,1.47262 2.251847,-1.47547 2.365274,-1.99335 1.831383,-8.3616 l -0.569141,-6.7887 6.678387,-1.26013 c 3.673113,-0.69306 6.820516,-1.09285 6.994229,-0.8884 0.173714,0.20444 0.957836,3.05671 1.742495,6.33837 1.341387,5.61006 1.633594,6.00972 4.889206,6.68695 3.00649,0.62542 3.74336,0.36639 5.59453,-1.96666 1.17259,-1.47782 3.03353,-3.79739 4.13544,-5.15459 l 2.00347,-2.46764 5.61455,3.72785 c 3.08801,2.05032 5.61456,3.95508 5.61456,4.23279 0,0.27772 -1.38356,2.95648 -3.07458,5.9528 -3.03412,5.37617 -3.05058,5.48157 -1.25,8.0091 1.73511,2.43565 2.15116,2.531 8.48492,1.9445 l 6.66034,-0.61673 1.45382,6.34248 c 0.7996,3.48837 1.17744,6.63017 0.83966,6.98178 -0.33779,0.3516 -3.15118,1.362 -6.25199,2.24532 -5.26618,1.50017 -5.68244,1.84382 -6.31449,5.2129 -0.37215,1.98377 -0.53513,3.69907 -0.36216,3.81178 0.17296,0.11271 2.33948,1.72853 4.81448,3.59071 2.475,1.86218 4.68072,3.5172 4.90159,3.67782 0.69113,0.50257 -6.86898,11.32218 -7.91128,11.32218 -0.5441,0 -3.21643,-1.2375 -5.93851,-2.75 -4.79984,-2.66699 -5.03381,-2.69858 -7.75052,-1.04672 -2.48585,1.51148 -2.7618,2.1871 -2.45065,6 0.8098,9.92348 1.25599,9.05249 -5.35063,10.44489 -3.3,0.69551 -6.321401,1.2842 -6.714225,1.3082 -0.392823,0.024 -1.538288,-2.75461 -2.545478,-6.17468 z M 103.01017,226.75 c 5.4516,-3.71033 7.49937,-7.25857 7.41625,-12.85041 -0.0827,-5.56729 -2.12278,-9.04689 -7.41625,-12.64959 -9.241707,-6.28985 -22.394785,1.19858 -22.394785,12.75 0,8.17444 6.773058,15 14.884615,15 2.713743,0 5.37626,-0.79767 7.51017,-2.25 z m 74.02215,-25.8751 c -3.55722,-1.63731 -6.66001,-3.16926 -6.89509,-3.40434 -0.23508,-0.23507 0.60956,-4.06928 1.87698,-8.52046 l 2.30439,-8.09304 -3.04733,-3.04732 -3.04732,-3.04733 -6.36197,2.06601 c -10.33509,3.35624 -9.61701,3.65379 -13.34044,-5.52803 l -3.32513,-8.19961 7.73513,-3.62987 7.73513,-3.62987 v -4.44248 -4.44247 l -7.37176,-4.0693 c -8.30002,-4.58171 -8.09939,-3.67851 -3.22859,-14.53461 l 2.80794,-6.25836 7.92548,2.89244 7.92549,2.89245 3.17668,-3.27751 3.17669,-3.27751 -2.49886,-7.86895 c -1.37437,-4.32792 -2.40456,-7.95013 -2.2893,-8.04936 C 170.95604,104.83239 185.3631,99 186.1129,99 c 0.49691,0 2.58347,3.39522 4.6368,7.54493 l 3.73333,7.54492 4.44015,-0.29492 c 4.36932,-0.29023 4.49824,-0.40245 8.08265,-7.03576 2.00338,-3.70746 3.87746,-6.975792 4.16462,-7.262956 0.28717,-0.287164 3.17879,0.657816 6.42583,2.099946 3.24705,1.44214 6.90989,3.00942 8.13966,3.48286 l 2.23595,0.86079 -2.91413,7.90354 -2.91413,7.90353 3.34714,3.24417 3.34714,3.24418 7.75719,-2.60813 c 4.26646,-1.43447 7.86383,-2.4999 7.99415,-2.36762 0.86913,0.88223 6.35961,16.01424 6.01368,16.57397 -0.23686,0.38326 -3.61942,2.23945 -7.51679,4.12488 L 236,147.38638 V 152 v 4.61362 l 7.08614,3.42805 c 3.89737,1.88543 7.26938,3.72456 7.49336,4.08696 0.39404,0.63758 -0.13008,2.06254 -4.43331,12.05306 l -2.01655,4.68169 -8.07879,-2.64849 -8.07879,-2.64849 -3.20283,3.20283 -3.20283,3.20283 2.60515,7.94658 2.60515,7.94657 -7.63835,3.07277 c -4.20109,1.69003 -7.94433,3.07035 -8.3183,3.0674 -0.37398,-0.003 -2.48121,-3.26788 -4.68275,-7.25538 l -4.00278,-7.25 -4.31726,0.008 -4.31726,0.008 -3.79883,7.24242 c -2.08935,3.98333 -4.33935,7.20908 -5,7.16833 -0.66064,-0.0407 -4.11162,-1.41371 -7.66885,-3.05101 z m 29.88173,-31.83105 c 13.44917,-6.86125 14.66881,-25.36294 2.21279,-33.56738 -9.89784,-6.51943 -23.39214,-2.70618 -28.24718,7.98216 -2.06199,4.53947 -2.40952,11.00576 -0.81833,15.22627 1.3946,3.69905 6.67378,9.20842 10.43867,10.89382 4.43008,1.98319 11.95915,1.73785 16.41405,-0.53487 z m -142.429528,-35.45147 -0.712775,-11.40762 -5.930588,-2.1624 -5.930588,-2.16241 -8.55992,7.20825 -8.559919,7.20825 -8.573465,-8.57347 -8.573465,-8.57346 2.428099,-2.9968 c 1.335454,-1.64823 4.608207,-5.48826 7.272783,-8.5334 l 4.844683,-5.536604 -1.75478,-4.781358 C 29.469458,90.651611 28.063069,87.990314 27.309278,87.367364 26.555487,86.744414 21.227531,85.91361 15.469375,85.521133 L 5,84.80754 V 72.548375 60.28921 l 6.75,-0.637496 c 3.7125,-0.350623 8.804694,-0.640695 11.315986,-0.644605 4.565434,-0.0071 4.566251,-0.0077 6.75,-5.276435 C 31.017194,50.832544 32,48.075004 32,47.602806 32,47.130608 28.790769,42.933245 24.868375,38.275333 L 17.736749,29.806401 26.096297,21.4032 C 30.694048,16.78144 34.742823,13 35.093574,13 c 0.350751,0 4.353705,3.317359 8.895454,7.371909 l 8.257725,7.37191 5.785755,-2.496425 5.785754,-2.496425 L 64.52903,11.375485 65.239797,0 h 12.240811 12.24081 l 0.630599,5.25 c 0.346829,2.8875 0.63451,7.956238 0.639291,11.263863 L 91,22.527726 l 5.836218,2.579448 5.836222,2.579449 8.30499,-7.343311 C 115.54518,16.30449 119.56632,13 119.91329,13 c 0.34698,0 4.39266,3.78144 8.99041,8.4032 l 8.35955,8.403201 -7.13162,8.468932 C 126.20923,42.933245 123,47.130608 123,47.602806 c 0,0.472198 0.98281,3.229738 2.18401,6.127868 2.18375,5.268689 2.18457,5.269327 6.75,5.276435 2.5113,0.0039 7.60349,0.293982 11.31599,0.644605 L 150,60.28921 v 12.271109 12.271109 l -10.98344,0.711866 c -6.11399,0.396264 -11.35778,1.209484 -11.8278,1.834286 -0.4644,0.617331 -1.63948,3.274062 -2.61127,5.903847 l -1.76691,4.781427 3.58562,4.218576 c 1.97209,2.32021 5.24605,6.15902 7.27547,8.53067 l 3.68984,4.3121 -8.60792,8.60793 -8.60793,8.60792 -8.52794,-7.24011 -8.52795,-7.24011 -6.044885,2.20408 L 91,122.26798 90.9913,128.38399 C 90.9865,131.7478 90.698838,136.8625 90.352009,139.75 L 89.72141,145 H 77.45935 65.19729 L 64.484514,133.59238 Z M 89.568214,96.222252 C 102.15299,89.795882 107.51468,73.360737 101.09075,60.902316 96.057778,51.14147 88.488344,46.523173 77.5,46.509018 66.679392,46.495078 58.680351,51.342955 53.973562,60.767387 c -7.337302,14.691524 0.149948,32.1516 16.019964,37.358148 4.290377,1.407563 15.160899,0.350602 19.574688,-1.903283 z" + id="path13665" /> + <path + style="fill:#fe8e69" + d="m 95.404741,249.809 c -1.794897,-5.61125 -2.309329,-6.2867 -5.397481,-7.08692 -3.07808,-0.79762 -3.614619,-0.60809 -5.460375,1.9288 -1.125787,1.54733 -2.97551,3.89416 -4.110496,5.21519 l -2.063612,2.40187 -5.678959,-3.77062 -5.678959,-3.77061 3.208309,-5.83592 3.208309,-5.83591 -2.064656,-2.76538 c -2.115871,-2.83398 -4.810913,-3.20236 -12.469318,-1.70442 -2.464677,0.48208 -2.663265,0.20645 -3.75,-5.2048 C 54.516376,220.23766 54,217.12579 54,216.46499 c 0,-0.66079 2.656058,-1.94669 5.902351,-2.85755 3.246294,-0.91087 6.171294,-2.35697 6.5,-3.21357 1.543667,-4.02273 0.55532,-6.25461 -4.3712,-9.871 l -4.968848,-3.64747 3.610428,-5.4377 C 62.658467,188.44696 64.685387,186 65.176998,186 c 0.491611,0 3.194706,1.31408 6.006878,2.92018 l 5.11304,2.92018 2.890709,-2.1372 c 2.825901,-2.08928 2.875969,-2.2868 2.233183,-8.81006 l -0.657528,-6.67287 5.36836,-0.84185 c 8.269716,-1.29684 8.058981,-1.40585 9.784023,5.06091 1.458143,5.46622 1.860823,6.0107 5.055557,6.83591 3.74541,0.96746 3.33011,1.25491 9.1429,-6.32842 l 2.61412,-3.41038 5.63588,3.74202 c 3.09974,2.0581 5.63588,3.94261 5.63588,4.18779 0,0.24518 -1.35,2.73538 -3,5.53379 -1.65,2.79841 -3,5.33624 -3,5.63964 0,0.30339 0.88181,1.79001 1.95958,3.30359 1.83979,2.58375 2.2524,2.7038 6.75,1.96398 7.94294,-1.30655 7.84434,-1.35163 9.11867,4.16908 1.90562,8.25559 1.8204,8.44867 -4.38595,9.93755 -5.76553,1.38313 -7.4423,3.01678 -7.4423,7.2509 0,1.7228 1.33491,3.3357 4.75,5.73915 2.6125,1.83861 4.89519,3.44758 5.07264,3.57549 C 134.20514,230.8551 126.89329,242 126.3299,242 c -0.21281,0 -2.96748,-1.30266 -6.12148,-2.89479 l -5.73455,-2.89479 -2.82737,2.25446 c -2.77141,2.20985 -2.80902,2.37569 -1.90036,8.37928 1.01977,6.73768 1.31366,6.34612 -5.74614,7.65584 -1.925,0.35712 -4.200035,0.84328 -5.055634,1.08036 -1.154866,0.31999 -2.066757,-1.16685 -3.539625,-5.77136 z m 7.585939,-22.66434 C 106.82066,225.09062 111,218.26011 111,214.05461 c 0,-4.35196 -4.14529,-11.22094 -7.9844,-13.23062 -4.469293,-2.33956 -10.609385,-2.32673 -15.006277,0.0314 C 84.276887,202.85706 80,209.71031 80,213.6894 c 0,5.32996 4.616533,12.3016 9.5,14.34639 3.477857,1.45624 9.905423,1.03167 13.49068,-0.89113 z M 177.25,200.81744 c -3.9875,-1.70316 -7.25,-3.63002 -7.25,-4.2819 0,-0.65188 1.08226,-4.36721 2.40502,-8.25628 l 2.40502,-7.07105 -3.34635,-3.2434 -3.34635,-3.24341 -8.00101,2.50349 -8.00101,2.5035 -3.14899,-7.81192 c -1.73194,-4.29655 -2.92165,-8.17975 -2.64379,-8.62933 0.27785,-0.44958 3.71465,-2.37005 7.63732,-4.26772 l 7.13212,-3.4503 -0.29599,-4.46622 c -0.29289,-4.41949 -0.36923,-4.5058 -7.29599,-8.249 -3.85,-2.08053 -7,-4.14705 -7,-4.59227 0,-2.39565 6.01598,-15.26163 7.13616,-15.26163 0.725,0 4.34439,1.13906 8.04309,2.53125 l 6.72492,2.53125 3.38167,-3.38168 3.38168,-3.38167 -2.46817,-8.03694 -2.46816,-8.03694 6.6344,-2.57542 c 3.64893,-1.41649 7.42503,-2.866513 8.39134,-3.222285 1.42824,-0.525846 2.40567,0.776725 5.22475,6.962785 l 3.46783,7.60965 4.77524,-0.004 4.77525,-0.004 3.81648,-7.43428 3.81647,-7.434281 8.15317,3.438571 c 4.48424,1.89121 8.23097,3.43857 8.32606,3.43857 0.0951,0 -1.15508,3.58449 -2.77817,7.96553 l -2.95106,7.96553 3.24576,3.41121 3.24575,3.41122 6.98792,-2.37674 C 239.20574,125.06954 242.89863,124 243.56881,124 c 1.01871,0 2.56272,3.18356 7.13543,14.71239 0.28945,0.72977 -2.54148,2.70789 -7.11168,4.96928 L 236,147.43857 V 152 v 4.56143 l 7.51396,3.718 7.51395,3.71801 -1.61164,3.75128 c -0.8864,2.0632 -2.33975,5.66378 -3.22966,8.00128 -0.8899,2.3375 -2.11713,4.25 -2.72716,4.25 -0.61003,0 -4.29112,-1.08226 -8.18019,-2.40502 l -7.07105,-2.40502 -3.31227,3.4174 -3.31227,3.4174 2.59651,7.92022 2.59652,7.92023 -7.83607,3.15872 c -4.30984,1.7373 -8.20391,2.93139 -8.65349,2.65353 -0.44958,-0.27785 -2.36004,-3.69395 -4.24547,-7.59132 L 202.61362,189 h -4.58753 -4.58752 l -3.7111,7.5 c -2.0411,4.125 -4.05228,7.48067 -4.46928,7.45705 -0.41701,-0.0236 -4.02069,-1.43645 -8.00819,-3.13961 z m 31.43134,-32.42885 c 5.36276,-4.00387 8.57944,-9.04722 9.0777,-14.23264 1.8998,-19.77158 -21.34841,-29.77704 -34.46829,-14.83431 -7.75212,8.82918 -4.695,24.21916 5.87752,29.5883 5.57687,2.83215 15.37195,2.57045 19.51307,-0.52135 z M 65.631661,143.25 c -0.276712,-0.9625 -0.804144,-6.05206 -1.172071,-11.31013 l -0.668958,-9.56013 -5.709744,-2.52355 -5.709744,-2.52355 -8.848886,7.39914 -8.848887,7.39913 -8.336685,-8.29338 c -4.585177,-4.56135 -8.329603,-8.52831 -8.320947,-8.81545 0.0087,-0.28715 3.320184,-4.26715 7.35895,-8.84446 L 32.7179,97.855246 30.415872,92.177623 28.113843,86.5 16.806921,85.5 5.5,84.5 5.2204111,72.398255 4.9408221,60.296509 16.529318,59.398255 28.117814,58.5 l 2.275805,-5.617985 2.275804,-5.617985 -7.456605,-8.738598 -7.456604,-8.738598 8.349815,-8.393417 c 4.592399,-4.616379 8.58475,-8.386334 8.871893,-8.377678 0.287143,0.0087 4.267148,3.320184 8.844455,7.35895 L 52.144754,27.7179 57.822377,25.41579 63.5,23.113679 64.648903,11.806839 C 65.2808,5.5880777 65.8433,0.3875 65.898903,0.25 65.954507,0.1125 71.356696,0 77.90377,0 h 11.90377 l 0.667909,10.75 c 0.367351,5.9125 0.757071,11.11425 0.866046,11.559445 0.108974,0.445195 2.744149,1.844222 5.855943,3.10895 l 5.657812,2.299505 8.32237,-7.343211 c 4.57731,-4.038766 8.55731,-7.350293 8.84446,-7.35895 0.28714,-0.0087 4.2541,3.73577 8.81545,8.320947 l 8.29338,8.336685 -7.38518,8.832198 -7.38518,8.832198 2.26082,5.581117 2.26082,5.581116 11.58849,0.898255 11.5885,0.898254 -0.27959,12.101746 L 149.5,84.5 l -11.06802,0.872533 -11.06802,0.872533 -2.5574,5.786346 -2.55741,5.786346 7.35968,8.341122 c 4.04783,4.58762 7.36677,8.57605 7.37543,8.8632 0.009,0.28714 -3.7613,4.27949 -8.37768,8.87189 l -8.39341,8.34982 -8.75608,-7.47152 -8.75608,-7.47152 -5.850504,2.58576 C 91.273155,122.35155 91,122.64096 91,126.08526 c 0,1.98714 -0.291031,7.05588 -0.646736,11.26386 L 89.706528,145 H 77.920652 c -10.366315,0 -11.846475,-0.21078 -12.288991,-1.75 z M 88,96.92146 C 109.57908,87.164764 109.10603,56.169737 87.253257,47.993566 69.474166,41.341555 51.019538,53.82322 51.019538,72.5 c 0,18.930561 19.964609,32.11495 36.980462,24.42146 z" + id="path13663" /> + <path + style="fill:#fe774a" + d="m 95.527536,249.46366 c -1.624126,-6.00001 -1.857313,-6.30294 -5.357128,-6.95951 -3.319335,-0.62271 -3.891745,-0.38285 -6.164748,2.58327 -6.121823,7.98859 -4.960672,7.62684 -11.194782,3.48763 l -5.556593,-3.68937 3.024332,-5.58384 c 3.013757,-5.5643 3.018063,-5.59547 1.231595,-8.91274 l -1.792736,-3.32891 -6.108738,0.60987 c -3.359806,0.33543 -6.31976,0.7954 -6.577675,1.02217 -0.508383,0.44699 -2.919493,-9.12947 -2.988693,-11.87051 -0.03096,-1.22632 1.417039,-2.00489 5.376834,-2.89105 6.99095,-1.56451 7.314929,-1.80525 7.726187,-5.74106 0.303643,-2.90591 -0.258362,-3.83461 -4.599707,-7.60083 l -4.945614,-4.29045 3.304211,-5.14916 C 62.721596,188.31712 64.591778,186 65.060239,186 c 0.468462,0 3.154062,1.35749 5.968001,3.01665 l 5.116252,3.01665 3.00684,-2.14106 c 2.893224,-2.06016 2.994405,-2.38928 2.677754,-8.71021 L 81.5,174.61287 l 5.996442,-1.2167 c 6.824067,-1.38463 6.724185,-1.45664 8.406544,6.06093 1.127692,5.03906 1.364552,5.32584 4.891044,5.92191 3.91425,0.66162 4.33236,0.37835 9.89156,-6.70152 l 2.1856,-2.78345 5.55889,3.6909 5.55889,3.69089 -3.11119,5.43779 -3.11119,5.43778 1.85832,3.45069 c 1.52342,2.82882 2.31037,3.36547 4.3667,2.97783 1.37962,-0.26008 4.35669,-0.75066 6.61573,-1.09019 l 4.10735,-0.61732 1.19508,6.07446 c 0.65729,3.34096 0.94787,6.47445 0.64574,6.96332 -0.30214,0.48887 -2.77844,1.4236 -5.5029,2.07719 -5.49582,1.31843 -6.55296,2.22964 -7.28253,6.2772 -0.43094,2.39083 0.15927,3.24729 4.3658,6.33517 2.67527,1.96382 4.86412,4.01368 4.86412,4.55524 0,0.75099 -4.47334,7.99603 -6.61653,10.71616 -0.16084,0.20413 -2.80891,-1.04907 -5.8846,-2.78488 l -5.59217,-3.15602 -3.02053,2.1508 c -2.96879,2.11397 -3.0089,2.25936 -2.34189,8.48785 0.75911,7.08847 1.62131,6.21469 -8.18149,8.29137 l -4.137215,0.87645 z m 9.395074,-23.21836 c 6.12477,-4.48527 7.81757,-15.09256 3.36249,-21.06979 -4.63816,-6.22289 -14.033218,-8.25881 -20.549471,-4.45312 -3.961517,2.31365 -7.697026,8.63733 -7.719179,13.06745 -0.02103,4.20609 3.283224,10.70518 6.521461,12.82696 5.443191,3.56651 13.221852,3.40933 18.384699,-0.3715 z M 178,200.96779 c -3.575,-1.58804 -6.88667,-3.03433 -7.35926,-3.21398 -0.47259,-0.17966 0.28365,-3.91026 1.68055,-8.29023 l 2.5398,-7.96358 -3.36295,-3.41574 -3.36295,-3.41574 -7.65949,2.27385 c -4.21271,1.25062 -8.00108,1.8877 -8.4186,1.41574 C 151.30724,177.51046 146,164.46042 146,163.46423 c 0,-0.2831 3.375,-2.05276 7.5,-3.93258 l 7.5,-3.41786 -0.0108,-4.8069 -0.0108,-4.80689 -7.41774,-3.89433 -7.41773,-3.89433 1.82548,-4.60567 c 1.90546,-4.80742 4.26871,-10.35247 4.67061,-10.95891 0.12875,-0.19429 3.86088,0.85458 8.29362,2.33082 l 8.05952,2.68407 3.0039,-3.0039 c 3.55498,-3.55499 3.60236,-4.10519 1.0039,-11.65775 -1.1,-3.19721 -2,-6.36218 -2,-7.03328 0,-1.02881 14.9154,-7.950525 15.54997,-7.216189 0.11857,0.137208 1.84899,3.511969 3.84538,7.499469 l 3.62979,7.25 h 4.74591 4.74591 l 3.93298,-7.34418 3.93297,-7.34418 7.30947,3.17844 c 4.02021,1.74814 7.58755,3.45652 7.92743,3.7964 0.33987,0.33987 -0.62847,4.03544 -2.15189,8.21238 l -2.76984,7.59442 3.25507,3.35838 3.25506,3.35838 7.07105,-2.40502 c 3.88907,-1.32276 7.5979,-2.40502 8.24182,-2.40502 0.64393,0 2.53327,3.4875 4.19854,7.75 l 3.02776,7.75 -7.37369,3.94884 -7.37369,3.94883 v 4.80935 4.80935 l 7.38611,3.65475 7.38611,3.65474 -2.98623,7.08707 c -1.64242,3.89789 -3.35425,7.47765 -3.80406,7.95502 -0.45618,0.48414 -4.14878,-0.25198 -8.35047,-1.66468 l -7.53264,-2.53263 -3.51438,3.3145 -3.51439,3.31449 2.58293,7.68223 c 1.42105,4.22656 2.19249,8.02814 1.71497,8.4512 -1.45351,1.28773 -14.44372,6.13814 -15.19518,5.67372 -0.38668,-0.23898 -2.24567,-3.62327 -4.1311,-7.52064 L 202.61362,189 h -4.58753 -4.58752 l -3.7111,7.5 c -2.0411,4.125 -4.05228,7.4674 -4.46928,7.42756 -0.41701,-0.0398 -3.68319,-1.37174 -7.25819,-2.95977 z m 30.92236,-32.79694 C 225.36105,158.24284 217.8121,132 198.51754,132 c -15.1376,0 -24.71068,15.96665 -17.4104,29.03827 5.81161,10.40605 17.45245,13.39108 27.81522,7.13258 z M 65.607678,140.75 c -0.283177,-2.3375 -0.87325,-7.53951 -1.311273,-11.56001 L 63.5,121.87997 l -5.690282,-2.30408 -5.690282,-2.30408 -8.777506,7.38916 -8.777506,7.38917 -8.456519,-8.45652 -8.456518,-8.45652 7.588164,-8.50583 7.588164,-8.505831 -2.355497,-5.81272 L 28.116721,86.5 17.30836,85.343892 C 11.363762,84.708032 6.1625,84.145532 5.75,84.093892 5.3375,84.042251 5,78.6 5,72 V 60 l 6.25,-0.0087 c 11.3886,-0.01584 16.819457,-1.05346 17.744328,-3.390236 0.45737,-1.15559 1.509577,-3.68754 2.338239,-5.626557 l 1.506656,-3.525484 -7.429439,-8.957545 -7.42944,-8.957544 8.446351,-8.446352 8.446352,-8.446351 7.642421,6.929381 c 4.203332,3.811159 8.169397,7.298437 8.813477,7.749506 0.684188,0.479158 3.524105,-0.226571 6.830814,-1.697481 l 5.659759,-2.517607 0.638773,-7.802519 C 64.809616,11.011134 65.339778,5.8125 65.63643,3.75 L 66.175796,0 H 78.087898 90 l 0.0071,4.75 c 0.0039,2.6125 0.297338,7.823437 0.652062,11.579859 l 0.644953,6.829859 5.4555,2.412681 c 3.000525,1.326975 5.969595,2.108351 6.597935,1.736392 0.62834,-0.37196 4.65368,-3.829153 8.94519,-7.682653 l 7.80274,-7.006362 8.45717,8.457172 8.45718,8.457173 -7.3831,8.770302 -7.3831,8.770301 2.31747,5.712638 c 2.21709,5.465189 2.50398,5.741914 6.62318,6.388515 2.36814,0.371732 7.56821,0.709232 11.55571,0.75 L 150,60 v 11.954687 11.954687 l -3.25,0.494548 c -1.7875,0.272002 -6.98931,0.854892 -11.55958,1.295313 L 126.88084,86.5 l -2.35428,5.812719 -2.35427,5.81272 7.58816,8.505831 7.58816,8.50583 -8.44127,8.44128 -8.44128,8.44128 -8.85843,-7.34723 -8.85842,-7.34723 -5.624606,2.28045 -5.624604,2.28045 -0.651103,5.30695 c -0.358107,2.91882 -0.695607,8.11945 -0.75,11.55695 L 90,145 H 78.061273 66.122546 Z M 87,97.799004 c 4.803232,-1.749874 9.963485,-6.067005 13.10663,-10.965167 2.54496,-3.965983 3.26555,-6.303311 3.66517,-11.888469 0.60377,-8.438591 -1.34149,-14.352151 -6.663166,-20.255882 -13.211373,-14.656354 -37.499366,-9.94401 -44.601871,8.653633 -2.748228,7.196133 -1.728116,17.078473 2.432178,23.561729 3.641937,5.675466 10.613244,10.769628 15.954806,11.658699 1.983439,0.330132 4.056253,0.745799 4.606253,0.923706 1.392339,0.450375 8.48964,-0.591539 11.5,-1.688249 z" + id="path13661" /> + <path + style="fill:#fe6532" + d="m 95.526191,249.0865 c -1.646053,-5.43654 -2.063471,-5.96471 -5.175337,-6.5485 -4.137061,-0.77612 -4.483494,-0.57273 -8.462872,4.96845 l -3.18305,4.43232 -2.867816,-1.69406 c -1.577298,-0.93173 -4.067049,-2.6503 -5.53278,-3.81903 l -2.664965,-2.12497 3.091175,-5.47726 3.091175,-5.47726 -2.007779,-3.17107 -2.00778,-3.17107 -6.739247,0.62635 -6.739248,0.62635 -1.163834,-5.79516 C 53.708269,215.2138 53.712701,215 55.318499,215 c 0.725174,0 3.591286,-0.67495 6.369138,-1.49988 4.658953,-1.38356 5.096423,-1.78201 5.641013,-5.13793 0.507145,-3.12516 0.21115,-3.9358 -2.099602,-5.75012 -1.479487,-1.16164 -3.783515,-3.05098 -5.120061,-4.19854 l -2.430086,-2.08648 3.322603,-4.91352 c 1.827431,-2.70244 3.44798,-5.07433 3.601219,-5.27087 0.153239,-0.19653 2.773792,1.07026 5.823452,2.8151 5.537795,3.16841 5.548805,3.17013 8.669799,1.35734 3.116193,-1.81001 3.123413,-1.83403 2.573042,-8.56074 -0.615672,-7.52482 -1.466543,-6.61426 8.071629,-8.63787 l 4.240645,-0.89969 0.953951,3.6416 c 0.524673,2.00288 1.241886,4.83615 1.593807,6.29615 0.501738,2.08155 1.429733,2.80274 4.299072,3.34103 3.4364,0.64467 3.90319,0.40641 7.66555,-3.91269 2.20348,-2.52954 4.31393,-4.5955 4.68988,-4.59103 0.37596,0.004 2.94847,1.41609 5.71669,3.13691 l 5.03314,3.12877 -2.63126,4.62123 c -1.4472,2.54168 -2.97407,5.01559 -3.39305,5.49759 -0.41899,0.482 0.21757,2.4045 1.41457,4.27223 2.30879,3.60251 2.72198,3.65899 12.79061,1.74824 2.41685,-0.45865 2.66588,-0.17143 3.29782,3.80353 0.37596,2.3648 0.9269,5.27658 1.22432,6.47062 0.47677,1.91409 -0.1501,2.37988 -5.29781,3.93643 -7.06546,2.13644 -6.95171,2.04187 -7.68963,6.39259 -0.56203,3.31366 -0.32891,3.67964 4.37871,6.8742 2.73479,1.85581 4.97234,3.79973 4.97234,4.31982 0,0.77111 -1.52932,3.25704 -6.49155,10.55215 -0.0921,0.13539 -2.71179,-1.13192 -5.82155,-2.81623 -5.63259,-3.05074 -5.66593,-3.05548 -8.76547,-1.24617 -3.10918,1.81494 -3.11093,1.82091 -2.46874,8.43551 l 0.64265,6.61928 -4.49049,1.13072 c -7.720603,1.94407 -8.095849,1.766 -10.078659,-4.78278 z m 7.970409,-21.96611 c 11.97425,-6.90706 9.22398,-24.49318 -4.396043,-28.10976 -11.077396,-2.94142 -20.844023,6.88236 -18.621334,18.73031 0.785064,4.18475 6.915578,10.79688 10.734817,11.57815 3.468924,0.70961 8.93785,-0.26939 12.28256,-2.1987 z M 178,200.73515 c -4.125,-1.70772 -7.65896,-3.21821 -7.85324,-3.35663 -0.19429,-0.13842 0.83003,-3.80474 2.27626,-8.14737 l 2.62951,-7.8957 -3.29361,-3.49223 -3.2936,-3.49224 -7.48266,2.30556 c -4.11546,1.26806 -7.76469,2.31409 -8.10939,2.32451 -0.63013,0.019 -7.08913,-15.12799 -6.62274,-15.53102 0.13721,-0.11857 3.51197,-1.84899 7.49947,-3.84538 l 7.25,-3.62979 v -4.80532 -4.80532 l -7.36573,-3.89294 -7.36572,-3.89294 2.96584,-7.03917 c 1.63121,-3.87154 3.28905,-7.38494 3.68409,-7.80754 0.39504,-0.4226 4.15866,0.469 8.36359,1.98135 l 7.64534,2.74971 3.40163,-3.29699 3.40163,-3.29699 -2.45304,-8.01331 c -1.34918,-4.40733 -2.30108,-8.16399 -2.11534,-8.34815 0.18574,-0.18416 3.71271,-1.68823 7.83771,-3.34239 l 7.5,-3.00757 3.22808,6.60561 c 1.77545,3.63308 3.35045,6.93551 3.5,7.33874 0.14956,0.40323 2.52192,0.87489 5.27192,1.04814 l 5,0.315 3.50924,-6.65829 c 1.93008,-3.66206 3.83266,-6.98173 4.22797,-7.37703 1.04022,-1.040221 15.93056,5.67322 15.47308,6.97618 -0.21134,0.6019 -1.44651,4.14796 -2.74483,7.88013 l -2.36058,6.78578 3.47152,3.47151 3.47151,3.47152 7.78315,-2.61685 c 4.28073,-1.43927 7.90465,-2.45505 8.05315,-2.25729 0.14851,0.19776 1.63866,3.77765 3.31145,7.95532 l 3.04144,7.59575 -7.36855,3.64606 L 236,146.98363 V 152 v 5.01637 l 7.36181,3.64272 7.36181,3.64273 -3.19607,7.35001 c -1.75784,4.04251 -3.41638,7.57034 -3.68566,7.83961 -0.26927,0.26928 -3.992,-0.68799 -8.27273,-2.12726 l -7.78315,-2.61686 -3.40777,3.40777 -3.40777,3.40778 2.51476,7.39372 c 1.38313,4.06654 2.51477,7.70942 2.51477,8.09529 0,0.68266 -15.12007,7.19508 -15.54997,6.69759 -0.11857,-0.13721 -1.84899,-3.51197 -3.84538,-7.49947 L 202.97486,189 h -4.97533 -4.97532 l -3.76211,7.42005 -3.7621,7.42005 z m 26.10078,-29.87325 c 9.38405,-3.1419 14.34473,-10.52436 13.7152,-20.41091 -0.70039,-10.99945 -7.31589,-17.56966 -18.40151,-18.27554 -5.47189,-0.34842 -6.9652,-0.0428 -10.81607,2.21402 -5.41518,3.1735 -8.1025,6.75549 -9.63542,12.84327 -3.65838,14.52873 11.04337,28.34815 25.1378,23.62916 z M 65.525587,138.25 C 63.970112,121.67891 64.134655,122.08936 58,119.47751 c -6.286772,-2.67661 -5.16042,-3.1059 -16.286016,6.20706 l -7.388314,6.18458 -8.320731,-8.36419 -8.320731,-8.36418 7.732178,-8.51684 7.732178,-8.516843 L 30.824282,92.151256 28.5,86.195415 21,85.554778 C 16.875,85.202428 11.573679,84.655293 9.2192868,84.338922 L 4.9385737,83.763701 5.2192868,72.131851 5.5,60.5 11,60.264013 c 3.025,-0.129793 8.215924,-0.492768 11.535387,-0.806611 l 6.035388,-0.570624 1.94692,-5.193389 c 1.070807,-2.856364 2.091637,-5.491153 2.268512,-5.855087 0.176876,-0.363935 -2.290163,-3.738935 -5.482308,-7.5 -3.192144,-3.761066 -6.443087,-7.651814 -7.224317,-8.646106 -1.293532,-1.646313 -0.670733,-2.561405 6.971849,-10.243895 l 8.392267,-8.436091 4.528151,4.25615 c 2.490483,2.340883 6.16842,5.755632 8.173192,7.588332 l 3.645042,3.332182 6.011064,-2.344437 L 63.812211,23.5 64.439079,17 c 0.344777,-3.575 0.88888,-8.8625 1.209117,-11.75 L 66.230447,0 H 78.115223 90 v 5.8533088 c 0,3.2193199 0.277802,8.5068202 0.617337,11.7500002 L 91.234674,23.5 l 5.936211,2.324282 5.936215,2.324282 8.27756,-7.514942 8.27756,-7.514941 8.334,8.377523 8.33401,8.377522 -5.91512,7.129101 c -9.172,11.054419 -8.71191,9.860585 -6.18773,16.055725 1.21941,2.992796 2.30908,5.595936 2.4215,5.784755 0.11242,0.188819 5.29991,0.638819 11.52776,1 L 149.5,60.5 l 0.28108,11.674161 0.28108,11.67416 -5.78108,0.622119 c -3.17959,0.342166 -8.38998,0.938794 -11.57863,1.32584 l -5.79756,0.70372 -2.58587,5.72727 -2.58588,5.72727 7.72527,8.65952 7.72528,8.65952 -8.29292,8.33623 c -7.12575,7.16295 -8.51093,8.15265 -9.84185,7.03192 -0.8519,-0.71736 -4.82297,-4.08022 -8.8246,-7.47301 C 106.2227,119.77592 102.78958,117 102.59517,117 c -0.19442,0 -2.82072,1.12954 -5.83623,2.51008 -5.444038,2.49237 -5.48719,2.54708 -6.112151,7.75 -0.346173,2.88196 -0.633316,8.05242 -0.638097,11.48992 L 90,145 H 78.079594 66.159188 Z M 89.704096,96.39255 C 105.82127,88.666328 109.40961,66.476277 96.611426,53.678093 90.535374,47.60204 87.618394,46.507608 77.5,46.507608 c -10.118394,0 -13.035374,1.094432 -19.111426,7.170485 -11.821938,11.821938 -9.647646,32.818333 4.290578,41.432629 8.616362,5.325208 17.69231,5.755688 27.024944,1.281828 z" + id="path13659" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/Instrument-Microscope-256.png b/doc/htmldoc/static/img/Instrument-Microscope-256.png new file mode 100644 index 0000000000..71a0b003f4 Binary files /dev/null and b/doc/htmldoc/static/img/Instrument-Microscope-256.png differ diff --git a/doc/htmldoc/static/img/Inventory-256.png b/doc/htmldoc/static/img/Inventory-256.png new file mode 100644 index 0000000000..c4a8a0e3de Binary files /dev/null and b/doc/htmldoc/static/img/Inventory-256.png differ diff --git a/doc/htmldoc/static/img/Node-256.png b/doc/htmldoc/static/img/Node-256.png new file mode 100644 index 0000000000..8f58d31b19 Binary files /dev/null and b/doc/htmldoc/static/img/Node-256.png differ diff --git a/doc/htmldoc/img/Node_distribution.svg b/doc/htmldoc/static/img/Node_distribution.svg similarity index 100% rename from doc/htmldoc/img/Node_distribution.svg rename to doc/htmldoc/static/img/Node_distribution.svg diff --git a/doc/htmldoc/static/img/Nodes-256.png b/doc/htmldoc/static/img/Nodes-256.png new file mode 100644 index 0000000000..23961782fb Binary files /dev/null and b/doc/htmldoc/static/img/Nodes-256.png differ diff --git a/doc/htmldoc/img/Process_vp_thread.svg b/doc/htmldoc/static/img/Process_vp_thread.svg similarity index 100% rename from doc/htmldoc/img/Process_vp_thread.svg rename to doc/htmldoc/static/img/Process_vp_thread.svg diff --git a/doc/htmldoc/static/img/arrow-up-circle.svg b/doc/htmldoc/static/img/arrow-up-circle.svg new file mode 100644 index 0000000000..41263b0566 --- /dev/null +++ b/doc/htmldoc/static/img/arrow-up-circle.svg @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg version="1.1" width="20" height="20" viewBox="0 0 20 20" id="svg4" sodipodi:docname="arrow-up-circle.svg" inkscape:version="1.1 (1:1.1+202105261518+ce6663b3b7)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <defs id="defs8"/> + <sodipodi:namedview id="namedview6" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="17.307883" inkscape:cx="-5.6910485" inkscape:cy="18.517574" inkscape:window-width="1916" inkscape:window-height="1012" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" inkscape:current-layer="svg4" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0"/> + <path d="M 11,16 V 8 l 3.5,3.5 1.42,-1.42 L 10,4.16 4.08,10.08 5.5,11.5 9,8 v 8 h 2 M 10,0 A 10,10 0 0 1 20,10 10,10 0 0 1 10,20 10,10 0 0 1 0,10 10,10 0 0 1 10,0 Z" id="path2"/> +</svg> \ No newline at end of file diff --git a/doc/htmldoc/static/img/astrocyte_tripartite.png b/doc/htmldoc/static/img/astrocyte_tripartite.png new file mode 100644 index 0000000000..bffc8da56f Binary files /dev/null and b/doc/htmldoc/static/img/astrocyte_tripartite.png differ diff --git a/doc/htmldoc/static/img/background-particles-flattened.png b/doc/htmldoc/static/img/background-particles-flattened.png new file mode 100644 index 0000000000..5d05f3a260 Binary files /dev/null and b/doc/htmldoc/static/img/background-particles-flattened.png differ diff --git a/doc/htmldoc/static/img/brainnetwork_orange128.png b/doc/htmldoc/static/img/brainnetwork_orange128.png new file mode 100644 index 0000000000..b6fe88933c Binary files /dev/null and b/doc/htmldoc/static/img/brainnetwork_orange128.png differ diff --git a/doc/htmldoc/static/img/brainnetwork_orange128.svg b/doc/htmldoc/static/img/brainnetwork_orange128.svg new file mode 100644 index 0000000000..9860f2400f --- /dev/null +++ b/doc/htmldoc/static/img/brainnetwork_orange128.svg @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg13556" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="brainnetwork_orange128.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs13560" /> + <sodipodi:namedview + id="namedview13558" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="129.65647" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g13562" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g13562"> + <g + id="g13566" + transform="translate(1.5393428,-0.44310663)"> + <path + style="fill:#fed9cc;stroke-width:2" + d="m 79.84336,251.4524 c -3.711496,-2.50116 -8.853202,-7.67616 -11.426014,-11.5 -2.572814,-3.82382 -7.09423,-8.18684 -10.047594,-9.6956 C 46.370048,224.12664 36,209.67668 36,199.08607 36,195.6386 32.859348,190.96632 26.199708,184.50639 8.2941836,167.13783 6.8760578,140.11064 22.93743,122.33262 c 6.086722,-6.73728 6.446284,-7.8201 4.103762,-12.35844 C 19.509743,95.382924 22.093332,76.427082 33.221716,64.627558 37.303686,60.29941 40.017472,55.36394 40.043924,52.220242 40.174404,36.713798 54.526056,21.88 69.962872,21.296176 c 6.195616,-0.23432 8.057782,-1.189458 8.916312,-4.573342 0.596844,-2.352442 4.274506,-7.0774416 8.172584,-10.5000002 5.997348,-5.26574118 8.691648,-6.22168395 17.517822,-6.21535768 6.93325,0.0049695 12.65172,1.36177148 17.05556,4.04671388 l 6.62516,4.039238 5.14456,-4.046714 C 137.22314,1.0353987 141.52296,0 150.20012,0 c 10.1972,0 12.55021,0.78100648 18.74811,6.2228338 3.89808,3.4225586 7.57574,8.1475582 8.17259,10.5000002 0.85853,3.383884 2.72069,4.339022 8.91631,4.573342 4.30713,0.1629 10.94693,2.221834 14.75511,4.575418 C 208.52036,30.647842 216,44.064354 216,53.150356 c 0,3.698128 1.46998,6.80548 3.95304,8.356168 11.16446,6.97233 16.70464,34.208504 9.66074,47.493476 -3.11462,5.87427 -3.0392,6.16407 3.59952,13.82982 15.8544,18.30709 14.3517,43.6806 -3.65794,61.76542 -5.52466,5.54771 -9.57388,11.45328 -9.59928,14 -0.1192,11.96108 -13.84672,29.7952 -25.11022,32.62216 -2.66522,0.66892 -4.84586,2.39962 -4.84586,3.84596 0,3.89 -9.64174,14.64866 -16.13891,18.00848 -6.70142,3.46544 -26.28709,3.87426 -32.49257,0.67824 -2.40269,-1.23746 -6.39352,-4.09434 -8.86852,-6.34864 l -4.5,-4.0987 -4.5,4.0987 C 116.01786,254.21634 110.81686,256 98.42725,256 c -8.998912,0 -13.453132,-1.08998 -18.58389,-4.5476 z m 33.48235,-11.72272 C 120.39586,233.86198 122,226.53312 122,200.09932 V 174 h -9.97162 c -9.41787,0 -10.26563,-0.44426 -15.265776,-8 -3.109898,-4.69937 -6.872318,-8 -9.119286,-8 -2.103824,0 -6.146744,-2.32161 -8.984264,-5.15913 -4.50952,-4.50952 -5.005298,-6.28145 -3.937416,-14.07249 C 76.66869,124.56309 73.896988,122 56.588498,122 c -13.229948,0 -15.0309,0.51064 -21.34104,6.05102 -3.79045,3.32805 -7.824948,8.72805 -8.965552,12 C 24.454972,145.29176 24.661076,146 28.01313,146 c 2.092778,0 6.055052,-2.25 8.805052,-5 C 46.825504,130.99268 64,137.94289 64,152 c 0,14.05711 -17.174496,21.00732 -27.181818,11 -2.75,-2.75 -6.674834,-5 -8.721852,-5 -5.50643,0 -3.015828,6.86498 5.885324,16.22203 L 41.380656,182 H 63.66195 85.943246 l 5.29415,8 c 3.620388,5.47078 6.744996,8 9.883214,8 5.12622,0 12.87939,8.53348 12.87939,14.17562 0,11.0332 -10.33243,19.32306 -20.80736,16.69402 C 85.189376,226.86094 81.23952,219.61386 82.606878,209.4472 84.378842,196.2722 81.53589,194 63.279514,194 49.74,194 48,194.42183 48,197.70423 c 0,6.50353 8.74965,17.15297 17.88551,21.76895 5.281558,2.66856 9.804262,6.70288 11.210602,10 6.17715,14.48218 24.789198,19.7512 36.229598,10.2565 z m 57.63268,-0.0542 5.49783,-4.32458 -5.22811,-2.73928 C 168.28953,231.07186 166,228.14852 166,225.93612 c 0,-4.2937 1.08863,-4.63978 13,-4.1328 9.72034,0.41374 19.43017,-5.13206 25.0108,-14.28504 C 210.1792,197.4013 209.35606,196 197.24489,196 c -11.40933,0 -16.26346,-3.01851 -14.06542,-8.7465 0.96504,-2.51485 4.0378,-3.2552 13.53451,-3.26098 18.9132,-0.0116 31.16582,-9.83285 34.53898,-27.68544 2.66068,-14.08179 -8.68916,-32.0815 -22.39892,-35.52242 -4.05368,-1.01742 -4.95022,-2.32884 -4.46332,-6.5289 0.47558,-4.10246 1.8522,-5.3981 6.27346,-5.90445 4.31438,-0.4941 6.367,-2.33075 8.6134,-7.70718 3.35344,-8.02592 2.38622,-14.849958 -3.46962,-24.479116 l -4.05838,-6.673466 -5.48422,5.254226 c -11.31374,10.839248 -21.44274,3.888192 -10.75055,-7.3776 3.32416,-3.502496 6.63289,-8.32711 7.35275,-10.721366 2.12216,-7.058508 -3.51463,-17.549038 -11.45381,-21.316422 -8.31078,-3.943722 -15.13047,-2.207828 -23.79435,6.056644 -3.20045,3.052902 -6.64455,4.647536 -8.5,3.935534 C 154.37949,43.503692 155.39001,35.270314 161,30 c 6.11594,-5.745626 6.19971,-7.465166 0.65137,-13.371098 -5.95815,-6.342162 -16.24668,-6.215406 -22.74228,0.280189 L 134,21.818182 v 43.956134 c 0,42.133764 -0.16509,44.008534 -3.9821,45.220004 C 123.89007,112.93922 122,110.55543 122,100.88197 V 92 H 108.34863 C 96.3731,92 94.12062,92.6138 90,97 83.239532,104.19619 71.836204,103.95911 65.95041,96.5 62.418926,92.024524 61.833404,89.362098 62.807124,82.207184 64.26287,71.510332 61.815072,68 52.90027,68 c -7.701876,0 -13.607472,6.220946 -17.159166,18.075444 -1.907406,6.366356 -1.674826,8.72637 1.50085,15.229206 L 41,109 l 18.521478,0.57534 18.521478,0.57533 5.244294,7.92467 C 86.359554,122.7179 90.115774,126 92.356682,126 c 2.103824,0 6.146744,2.32161 8.984268,5.15913 4.50952,4.50952 5.00529,6.28145 3.93741,14.07249 C 103.68302,156.8709 106.80383,162 115.48109,162 121.73688,162 122,161.68186 122,154.11803 c 0,-8.70868 2.02798,-11.01348 8.0179,-9.11235 3.80111,1.20643 3.9821,3.08026 3.9821,41.22842 0,42.7093 1.0199,48.05088 10.43359,54.6445 6.56676,4.59954 19.91774,3.99392 26.5248,-1.2032 z M 153.4177,192.75103 c -2.41142,-2.41142 -1.56426,-14.66625 1.41167,-20.42107 5.44445,-10.5284 19.52904,-13.78587 20.80931,-4.81275 0.46627,3.26798 -0.7334,4.998 -4.44414,6.40883 -4.70065,1.78718 -6.0473,4.44517 -7.6371,15.07396 -0.59427,3.97303 -7.40006,6.49072 -10.13974,3.75103 z m -30.64062,-61.61076 c -1.99134,-5.18934 0.79977,-9.47837 5.71398,-8.78054 C 131.79652,122.82911 133,124.33454 133,128 c 0,3.66546 -1.20348,5.17089 -4.50894,5.64027 -2.70456,0.38405 -4.99117,-0.61639 -5.71398,-2.5 z m 49.88441,-2.37621 C 164.90501,116.92616 170.43448,94 181.04611,94 c 5.90951,0 6.48045,4.325382 1.80741,13.69272 -2.86198,5.73698 -2.86198,6.87758 0,12.61456 4.67304,9.36734 4.1021,13.69272 -1.80741,13.69272 -3.13672,0 -6.21235,-1.92064 -8.38462,-5.23594 z M 148,66.604726 c -4.30722,-2.21805 -7.2463,-5.339238 -7.64027,-8.113668 -0.90404,-6.36642 4.49727,-7.736486 12.82322,-3.252666 6.66553,3.589624 7.22496,3.600594 13.05261,0.255986 C 175.11512,50.398206 180,50.916176 180,56.953894 c 0,10.31406 -19.36872,16.155444 -32,9.650832 z M 100.85995,211.77338 C 99.155728,209.0159 94,209.68726 94,212.66666 c 0,1.46668 0.592192,3.25886 1.315982,3.98266 1.808662,1.80866 6.905058,-2.67364 5.543968,-4.87594 z M 51.107702,153.82574 c 2.061042,-3.33484 -2.574418,-7.15902 -5.333438,-4.4 C 43.466416,151.73358 44.910822,156 48,156 c 0.970162,0 2.368628,-0.97842 3.107702,-2.17426 z m 42,-10 c 2.061042,-3.33484 -2.574418,-7.15902 -5.333438,-4.4 C 85.466416,141.73358 86.910822,146 90,146 c 0.970162,0 2.368628,-0.97842 3.107702,-2.17426 z m -12,-56.000004 c 2.061042,-3.334838 -2.574418,-7.15902 -5.333438,-4.4 C 73.466416,85.733584 74.910822,90 78,90 c 0.970162,0 2.368628,-0.97842 3.107702,-2.174264 z M 122,68 C 122,54.623162 120.08717,53.16381 112.82484,61 106.95843,67.329962 95.818044,67.818044 90,62 83.88374,55.88374 84.546416,43.43371 91.269718,38.14516 98.248528,32.655628 104.40238,32.913934 111.63526,39 120.41383,46.386682 122,45.45456 122,32.90909 122,19.408271 116.23179,12 105.71981,12 98.123754,12 90,18.700817 90,24.966368 c 0,2.348012 -1.212384,5.927146 -2.694184,7.95363 -2.320988,3.17414 -3.59132,3.371776 -9.170766,1.42677 C 68.784726,31.087228 58.792118,35.615702 54.928022,44.863784 50.696206,54.991944 51.140558,56 59.836882,56 c 6.768056,0 8.414906,0.935264 12.0751,6.857584 2.73075,4.418448 6.37954,7.327898 10.258496,8.17986 3.31115,0.72725 7.093846,3.041336 8.405992,5.142414 C 92.56883,79.370136 95.356058,80 107.48109,80 H 122 Z M 103.61926,50.5 C 102.80739,46.284314 99.257894,46.550132 98.353352,50.894358 97.976068,52.706326 99.078546,54 101,54 c 2.05992,0 3.04086,-1.310794 2.61926,-3.5 z" + id="path13574" /> + <path + style="fill:#feb299;stroke-width:2" + d="m 82.359254,252.63648 c -6.28189,-3.09558 -16.250068,-13.89542 -16.452598,-17.82526 -0.05134,-0.99618 -3.875744,-3.67128 -8.498678,-5.94466 -10.309746,-5.06998 -19.325498,-17.41384 -20.81169,-28.49424 -0.844932,-6.29943 -2.681876,-9.48832 -7.647406,-13.27571 -8.87636,-6.77033 -16.954067,-23.46521 -16.929344,-34.9893 0.02178,-10.15068 6.98896,-26.95142 13.622786,-32.85013 3.80768,-3.38574 3.946486,-4.25097 1.454932,-9.06911 C 19.520614,95.536464 21.827764,78.62969 33.10761,66.144248 37.325926,61.475076 40,56.450458 40,53.193362 c 0,-8.19085 4.798412,-17.826718 11.818988,-23.734144 6.327166,-5.323958 20.795596,-10.55152 23.89758,-8.634388 0.893352,0.552122 3.110964,-2.113757 4.928024,-5.924175 7.136358,-14.96509538 28.969748,-20.0155974 41.380958,-9.5722492 3.62741,3.0522648 6.89674,4.4978422 7.65345,3.384071 3.44223,-5.0664996 11.92901,-8.71188400854 20.26601,-8.70500068 11.35784,0.00937744 21.01074,5.66699948 25.4104,14.89317888 1.81706,3.810418 4.03467,6.476297 4.92802,5.924175 0.89335,-0.552122 5.47004,0.02994 10.17042,1.293448 12.34865,3.319466 22.89141,15.010146 24.64531,27.328764 0.90236,6.337788 3.22146,11.572334 6.8905,15.552958 3.0417,3.3 6.68836,8.24611 8.10368,10.991356 3.81552,7.400792 3.25536,26.108304 -0.99734,33.307544 -3.54124,5.99484 -3.52664,6.08863 1.77004,11.38532 7.53346,7.53345 13.03856,20.74864 13.09004,31.42309 0.0556,11.54521 -7.81282,27.78319 -16.7757,34.61951 -5.09326,3.88482 -6.88578,7.00341 -7.7564,13.49446 -1.4868,11.08484 -10.41254,23.49382 -20.60448,28.64528 -4.55151,2.30052 -9.28906,6.5898 -10.68375,9.67282 -8.29902,18.3454 -39.08676,23.56528 -53.85133,9.13018 l -6.42583,-6.28244 -5.4293,5.06206 c -2.98611,2.78414 -7.39512,6.07204 -9.79781,7.30644 -6.35597,3.26546 -22.592682,2.6652 -30.272226,-1.11914 z M 112,240.21694 c 8.63228,-6.21962 9.93904,-11.42504 9.97052,-39.71694 L 122,174 h -8.13148 C 103.43563,174 99.155872,171.61895 96.03166,164.07643 94.311524,159.92366 92.128038,158 89.134482,158 79.705222,158 71.474138,144.45665 75.889398,136.20666 77.63868,132.9381 77.410366,130.95937 74.82944,127.02038 71.78199,122.36938 70.390974,122 55.923826,122 c -14.647074,0 -15.984482,0.36835 -21.551958,5.93582 -3.264702,3.26471 -6.887116,8.66471 -8.049806,12 C 24.450752,145.30387 24.644876,146 28.01313,146 c 2.092778,0 6.055052,-2.25 8.805052,-5 12.083824,-12.08382 31.770142,1.09438 25.22821,16.888 -4.310416,10.40626 -16.835082,13.05492 -24.336472,5.14655 -2.590456,-2.73099 -6.688102,-4.98099 -9.10588,-5 -4.028786,-0.0317 -4.21939,0.47197 -2.281978,6.02963 1.16269,3.33529 4.756896,8.70709 7.987124,11.93731 5.746316,5.74632 6.37864,5.8853 29.281978,6.43583 L 87,183 l 4,7.4946 c 2.801492,5.24901 5.34832,7.49621 8.5,7.5 5.49559,0.007 11.95415,6.13418 13.6696,12.9691 1.57314,6.26788 -3.40702,14.46518 -10.4044,17.12556 -7.076894,2.69064 -7.705332,2.54432 -14.833638,-3.45376 C 82.058066,219.69328 81.651138,218.57854 82.762,210.47392 84.75048,195.96637 82.502602,194 63.929632,194 c -15.1885,0 -15.929284,0.20936 -15.922156,4.5 0.0162,9.71818 13.980336,23.5 23.810976,23.5 1.217664,0 3.632962,3.5465 5.367326,7.8811 6.048406,15.11646 21.721198,19.76948 34.814222,10.33584 z m 60,-0.40918 c 2.87006,-2.35536 4.05585,-4.49708 2.78362,-5.02766 -6.9598,-2.90262 -9.74515,-6.6086 -7.5988,-10.1104 1.63875,-2.67366 4.23606,-3.41646 10.39189,-2.972 14.36622,1.03726 26.20761,-7.1734 29.54971,-20.48938 1.29118,-5.14444 1.1705,-5.20832 -9.83924,-5.20832 -8.79133,0 -11.56411,-0.78042 -13.1232,-3.69361 C 181.10535,186.59129 185.40023,184 197.9312,184 c 14.57818,0 23.64854,-4.92411 29.51896,-16.02524 9.14248,-17.28873 3.01394,-36.96493 -14.18494,-45.54189 -7.5244,-3.75236 -9.37438,-5.64436 -8.88424,-9.08604 0.47786,-3.35564 1.98312,-4.34683 6.60126,-4.34683 5.17888,0 6.32558,-1.04427 8.53884,-7.7761 3.0399,-9.246166 1.53414,-19.342972 -3.91842,-26.274782 l -3.94566,-5.016082 -5.98194,5.033482 c -11.59549,9.756952 -21.0572,3.665992 -10.14292,-6.529476 11.7763,-11.0007 9.44794,-27.724682 -4.68182,-33.628474 -8.70115,-3.635574 -15.19448,-2.01674 -22.69894,5.659004 C 161.66822,47.098708 156,46.867474 156,39.97186 c 0,-2.284522 2.25,-6.403678 5,-9.153678 C 167.04517,24.773008 167.28084,21.280842 162,16 155.88374,9.8837396 143.43371,10.546415 138.14516,17.269717 134.24708,22.22532 134,25.071892 134,65.024828 134,100.34972 133.49438,107.92985 131,110 c -4.68631,3.8893 -9,-1.02106 -9,-10.24489 V 92 h -13.90909 c -12.169698,0 -14.534364,0.625272 -18.909092,5 -9.069486,9.06949 -23.122536,4.90119 -26.311402,-7.804254 -0.67723,-2.6983 -0.345678,-6.488568 0.736782,-8.422816 1.30838,-2.337944 1.261258,-5.068188 -0.14058,-8.144872 C 61.80815,68.988102 59.756418,68 53.856758,68 39.890252,68 30.454666,86.087476 36.336198,101.5859 l 2.81359,7.4141 18.925106,1 c 10.408808,0.55 19.93292,1.65569 21.16469,2.45709 1.231772,0.8014 3.36596,4.1764 4.742642,7.5 1.732682,4.18306 3.883304,6.04291 6.987688,6.04291 2.466548,0 6.95015,2.46552 9.963566,5.47893 4.81347,4.81348 5.33438,6.5335 4.28884,14.16159 C 103.60741,157.42254 106.36294,162 115.07037,162 121.60876,162 122,161.61862 122,155.24489 c 0,-8.293 4.53452,-12.95091 9,-9.24489 2.48794,2.06481 3,9.48025 3,43.44489 V 230.4 l 6.8,6.8 c 5.88462,5.88462 8.10576,6.79402 16.5,6.75552 6.7745,-0.031 11.20799,-1.282 14.7,-4.14776 z M 154.45837,191.65837 C 153.10627,190.30627 152,186.14 152,182.4 c 0,-12.38311 19.6768,-26.78131 23.38688,-17.113 0.84431,2.20023 -0.79687,5.01054 -4.96389,8.5 -4.38786,3.67438 -6.40199,7.27421 -6.82411,12.19662 -0.63661,7.42363 -4.80423,10.01103 -9.14051,5.67475 z m -31.79463,-60.81345 c -0.66589,-1.7353 0.26235,-4.62816 2.06277,-6.42857 3.03132,-3.03132 3.51971,-3.02728 6.60168,0.0547 2.74934,2.74933 2.88068,3.86742 0.75512,6.42857 -3.31658,3.99623 -7.87524,3.96975 -9.41957,-0.0547 z m 52.78544,-0.34858 c -8.30382,-9.17562 -8.77006,-21.73509 -1.16574,-31.40242 7.92672,-10.077192 14.56297,-4.13184 8.84292,7.92228 -3.08537,6.50194 -3.08537,7.46566 0,13.9676 5.22496,11.01079 -0.21793,17.75491 -7.67718,9.51254 z M 152,68.68849 c -4.83328,-1.929466 -12,-9.155844 -12,-12.099888 0,-4.605824 5.89421,-5.275454 12.95681,-1.471996 6.49321,3.496824 7.02757,3.497934 14.71679,0.03058 C 176.27066,51.270454 180,52.09969 180,57.888014 180,65.01105 161.07467,72.311142 152,68.68849 Z M 101.64665,213.33426 C 102.08266,211.0861 100.94257,210 98.146648,210 95.865992,210 94,211.2 94,212.66666 c 0,6.1255 6.47845,6.6911 7.64665,0.6676 z M 51,152 c 0,-1.61987 -1.575,-3.24854 -3.5,-3.61926 C 45.044302,147.90782 44,148.9877 44,152 c 0,3.0123 1.044302,4.09218 3.5,3.61926 C 49.425,155.24854 51,153.61987 51,152 Z m 43,-10 c 0,-4.14061 -4.82502,-5.51919 -7,-2 -1.67408,2.70872 0.584854,6 4.118034,6 C 92.703116,146 94,144.2 94,142 Z M 81.619258,86.5 C 81.248538,84.575 79.61987,83 78,83 76.38013,83 74.751462,84.575 74.380742,86.5 73.907818,88.955698 74.987702,90 78,90 c 3.012298,0 4.092182,-1.044302 3.619258,-3.5 z M 122,68 c 0,-13.56745 -2.31067,-15.184918 -10,-7 -9.15299,9.742914 -26,3.312804 -26,-9.923592 0,-14.415236 14.53212,-21.41909 25.42468,-12.253602 C 120.37318,46.352472 122,45.498228 122,33.269718 122,18.76648 116.86378,12 105.85484,12 96.700536,12 90,17.433657 90,24.857142 90,32.474786 85.169656,36.05623 77.76125,33.931528 73.474932,32.702228 69.570764,32.961682 65.263772,34.762054 57.406366,38.046542 54.364146,41.679268 52.761876,49.690616 51.508556,55.957224 51.556154,56 59.782358,56 c 7.496394,0 8.599126,0.664272 11.620424,7 1.946518,4.081892 4.804644,7 6.856116,7 1.934926,0 6.043234,2.221558 9.129574,4.936798 4.844268,4.261792 7.594102,4.945438 20.111528,5 L 122,80 Z M 104.52886,52.804468 C 106.47515,50.858178 103.80288,46 100.78602,46 99.25371,46 98,47.8 98,50 c 0,3.765166 3.89505,5.438282 6.52886,2.804468 z" + id="path13572" /> + <path + style="fill:#fe8b66;stroke-width:2" + d="m 81.92378,251.5 c -5.668028,-2.85822 -10.321802,-7.11106 -12.755658,-11.6567 -2.384872,-4.45416 -7.281862,-8.98564 -12.96792,-12 -10.275056,-5.44712 -17.351766,-16.03662 -19.29714,-28.876 -0.936844,-6.18312 -2.735552,-9.02808 -7.811766,-12.35562 -18.737811,-12.28293 -20.951088,-48.93371 -3.979884,-65.90491 5.211374,-5.21137 5.258922,-5.48375 2.110052,-12.087 -3.947318,-8.27761 -4.176236,-24.516796 -0.467786,-33.184008 1.514522,-3.539668 5.564522,-9.079144 9,-12.309944 4.722234,-4.440896 6.248146,-7.612864 6.253798,-13 0.0086,-8.26876 5.648122,-18.497494 12.77165,-23.16501 2.733548,-1.79109 9.083152,-3.86499 14.110232,-4.608668 C 76.762788,21.18739 78.512514,20.029884 81.51475,14 88.510126,-0.04996184 111.81955,-4.5034858 123.06527,6.0613142 L 128,10.697256 132.93473,6.0613142 c 11.24572,-10.5648 34.55514,-6.11127604 41.55052,7.9386858 3.00224,6.029884 4.75196,7.18739 12.62539,8.35214 5.02708,0.743678 11.37669,2.817578 14.11024,4.608668 7.13096,4.672386 12.76298,14.898918 12.77164,23.190564 0.006,5.115498 1.4863,8.531694 5.20212,12 12.32134,11.50064 16.05878,29.636562 9.49046,46.052428 -3.01146,7.52641 -3.0257,8.44658 -0.1554,10.05284 5.0581,2.83067 11.35974,14.50452 13.22806,24.50517 3.26516,17.47761 -4.5346,38.69659 -16.59734,45.15237 -3.32556,1.77979 -5.11046,4.97132 -6.04324,10.8058 -2.01416,12.59836 -9.62252,23.9313 -19.6307,29.24062 -5.36809,2.84776 -10.48927,7.67406 -13.27027,12.50614 -10.24719,17.8049 -39.62482,20.73446 -53.93146,5.3781 l -4.2818,-4.59598 -5.50144,5.24834 C 111.47861,257.01294 96.514846,258.85782 81.92384,251.5 Z M 115.4988,237.15278 122,230.05874 V 201.02938 172 h -10.54519 c -9.97063,0 -10.7476,-0.37585 -14.260134,-6.89822 -2.39777,-4.45239 -5.676534,-7.32907 -9.247422,-8.11337 C 78.872932,154.99536 75.315698,149.45582 76.479546,139.1302 78.097184,124.77855 74.907762,122 56.816226,122 46.460448,122 40.353608,122.98655 36.964856,125.20694 31.876612,128.54089 24,139.79799 24,143.73607 c 0,3.76707 8.876558,2.53778 12.535944,-1.73607 4.242096,-4.95441 17.706882,-5.47146 22.321198,-0.85714 4.123128,4.12312 4.025028,16.56739 -0.16712,21.19966 C 53.597302,167.96991 41.051394,167.23963 35.626102,161 31.212786,155.92424 24,154.18573 24,158.19774 c 0,5.4986 7.221596,16.48815 13.750106,20.92439 C 44.244388,183.53511 46.951012,184 66.149328,184 h 21.22079 l 3.673762,6.82176 c 2.368646,4.39831 5.59217,7.20545 9.07387,7.90179 8.07536,1.61507 11.88225,6.54041 11.88225,15.37321 0,6.06412 -1.08658,8.52298 -4.85845,10.9944 -7.06042,4.62616 -16.915764,3.0259 -21.795374,-3.53902 -3.451496,-4.64356 -3.735378,-6.47074 -1.922876,-12.3764 1.671404,-5.44592 1.508378,-7.81096 -0.76184,-11.05215 C 80.129046,194.50806 77.676,194 62.751816,194 c -16.716854,0 -16.997312,0.0805 -15.676768,4.5 2.991366,10.01128 8.527592,16.74638 17.672876,21.5 6.553146,3.40624 10.48097,7.05932 12.322578,11.46062 6.614528,15.80816 26.463288,18.74824 38.428298,5.69216 z M 170.05005,241.5 c 8.50312,-5.76128 9.81387,-9.5 3.33059,-9.5 -4.8908,0 -8.45251,-4.64764 -6.26909,-8.18048 0.61848,-1.00074 5.7964,-1.82288 11.50648,-1.827 12.25854,-0.008 21.72049,-4.97822 26.28487,-13.80476 5.01084,-9.68988 4.11182,-12.18407 -4.4029,-12.21507 -12.23929,-0.0446 -16.78996,-1.93746 -16.10494,-6.69901 0.53815,-3.74063 1.94591,-4.2087 12.75007,-4.23929 22.31205,-0.0632 36.21601,-14.59377 34.44137,-35.9936 -1.08278,-13.05684 -6.7635,-21.31738 -18.60046,-27.04755 C 202.07006,116.70891 200.37098,110 209.94864,110 223.8,110 226.21188,82.964882 213.31538,72.26174 210.91322,70.268122 209.42356,70.758252 205.27442,74.907406 199.1295,81.052314 192,81.72176 192,76.153846 c 0,-2.115384 2.7,-6.546154 6,-9.846154 8.61412,-8.614118 8.33018,-18.37752 -0.8,-27.507692 -4.31151,-4.31151 -8.73931,-6.8 -12.09932,-6.8 -6.5908,0 -16.2246,4.832194 -17.79555,8.92603 C 166.65636,42.616714 163.84729,44 161.06277,44 c -7.00494,0 -6.65429,-6.100788 0.77783,-13.532906 5.15453,-5.154526 5.56226,-6.39889 3.47107,-10.593392 C 157.74981,4.70612 136.70424,8.9788112 133.2223,26.388516 132.55003,29.749832 132,49.9375 132,71.25 132,107.93665 131.7984,110 128.21398,110 123.90299,110 122,106.27499 122,97.836426 V 92 H 107.48109 C 95.453698,92 92.560526,92.643162 90.621568,95.747928 85.229658,104.38175 67.132388,102.20815 64.730494,92.63825 64.06025,89.967784 63.999374,84.778712 64.595214,81.10698 67.084196,65.769176 53.73747,60.890004 42.109616,72.886906 33.422542,81.84969 31.632516,95.584638 37.859268,105.5 l 4.081938,6.5 h 18.661116 18.661114 l 4.496252,8 c 3.087044,5.49266 5.866524,8.0096 8.868282,8.03063 6.028032,0.0422 8.77033,2.12638 11.19741,8.51007 1.36785,3.59774 1.41543,7.19574 0.13952,10.55164 C 101.03183,154.80688 106.46738,162 115.23002,162 121.05694,162 122,161.32628 122,157.16357 122,149.77767 124.05288,146 128.06656,146 c 3.37704,0 3.68515,2.91143 4.28602,40.5 0.574,35.90728 1.08938,41.2306 4.54474,46.94262 7.42359,12.27186 21.78211,15.76154 33.15273,8.05738 z m -17.02301,-53.41481 c -1.65038,-5.19988 1.98955,-16.57526 6.65474,-20.79721 1.94217,-1.75763 5.6964,-3.44146 8.34274,-3.74184 6.99093,-0.79352 7.44987,5.37751 0.82379,11.07702 -3.44689,2.96489 -5.51059,6.81524 -5.64165,10.52591 -0.25964,7.35105 -8.06394,9.60205 -10.17962,2.93612 z m 22.05831,-57.99088 c -4.6157,-5.10029 -6.17414,-21.3848 -2.66986,-27.898 3.73277,-6.93789 8.84827,-9.73255 12.01622,-6.5646 2.05574,2.055738 1.87504,3.703578 -0.94495,8.61713 -4.3141,7.51687 -4.4658,14.44885 -0.39025,17.83126 3.81929,3.16972 3.0225,10.66603 -1.21952,11.47352 -1.71766,0.32696 -4.7739,-1.22973 -6.79164,-3.45931 z M 123,130 c -1.84661,-2.98788 0.72275,-6 5.11803,-6 2.54864,0 3.88197,1.37387 3.88197,4 0,4.24212 -6.69482,5.72986 -9,2 z m 21.61153,-66.874164 c -5.27597,-4.582694 -5.40941,-5.07954 -2.23148,-8.308616 3.15507,-3.205858 3.71614,-3.214232 8.42963,-0.12584 6.36169,4.16834 13.00728,4.214284 18.83807,0.13024 C 175.13786,50.976194 180,52.41538 180,57.88587 c 0,10.078532 -25.47518,13.850638 -35.38847,5.239966 z m -43.2832,151.739724 c 1.82002,-4.74288 -2.445618,-8.08792 -6.26823,-4.91544 -2.368842,1.96596 -2.568878,3.23192 -0.839872,5.31524 2.99496,3.6087 5.626702,3.46068 7.108102,-0.3998 z M 51.623682,151.47703 C 52.08588,149.07703 51.008846,148 48.146648,148 45.28445,148 44,149.28445 44,152.14665 c 0,5.12528 6.619658,4.54386 7.623682,-0.66962 z M 94,141.85335 c 0,-2.8622 -1.077032,-3.93923 -3.477032,-3.47703 C 85.309494,139.38034 84.728066,146 89.853352,146 92.71555,146 94,144.71555 94,141.85335 Z M 81.779772,84.734642 c -3.010752,-3.627734 -5.628384,-3.456306 -7.133976,0.467208 -1.5706,4.092918 3.354604,7.287596 6.81179,4.418388 1.9521,-1.6201 2.031616,-2.82586 0.322186,-4.885596 z M 122,69 c 0,-14.378842 -3.08031,-17.048804 -9.92173,-8.6 -5.02269,6.202752 -17.231924,6.081638 -22.335952,-0.221568 C 87.684044,57.63657 86,52.95657 86,49.778432 86,36.666368 103.50082,30.939222 112.82484,41 120.18847,48.945488 122,47.40108 122,33.177788 122,21.315088 121.53952,19.96811 115.84655,15.177787 112.46215,12.330004 107.44292,10 104.6927,10 97.43042,10 88,20.163356 88,27.990066 v 6.29776 L 77.027066,32.916848 c -10.640538,-1.329448 -11.185804,-1.15811 -18,5.656086 C 54.594602,43.005398 52,47.519994 52,50.8 c 0,4.69151 0.746278,5.2 7.631718,5.2 6.820962,0 8.109378,0.84988 12.12797,8 3.175418,5.649896 5.82506,8 9.019654,8 2.48787,0 6.637168,2.25 9.220658,5 4.12062,4.3862 6.3731,5 18.34863,5 H 122 Z M 105.11861,48.191922 c -1.71728,-2.778628 -6.48235,-2.839448 -8.172756,-0.10432 -0.709618,1.148186 -0.16504,3.443354 1.21016,5.100376 2.187576,2.63587 2.864226,2.648918 5.408826,0.10432 1.59965,-1.59965 2.29885,-3.89482 1.55377,-5.100378 z" + id="path13570" /> + <path + style="fill:#fe6532;stroke-width:2" + d="M 84.962814,253.21286 C 78.875792,250.56058 66,237.48598 66,233.95724 66,232.91028 63.06094,230.82566 59.468754,229.32476 47.537118,224.3394 36.059892,207.0559 36.011094,194 c -0.0062,-1.65 -3.163348,-5.51509 -7.01596,-8.5891 C 9.7309386,170.03997 8.491952,137.24066 26.539408,120.40123 l 4.928678,-4.59878 -3.734042,-7.32411 C 20.619122,94.522838 24.94019,71.843568 36.43709,62.800106 40.003144,59.995048 41.66739,56.335612 42.422086,49.639978 44.2117,33.762572 56.630766,22 71.604706,22 76.33908,22 78.473938,20.527084 81.724302,15.018126 90.54243,0.07251512 108.80797,-4.0695324 122.20817,5.837664 L 128,10.11975 133.79183,5.837664 c 3.18551,-2.355147 9.71051,-4.7115633 14.5,-5.23648058 C 158.86337,-0.55743278 169.35824,5.5147868 174,15.475653 c 2.52672,5.422151 4.10432,6.449797 10,6.513963 15.33628,0.16692 30,14.679762 30,29.69134 0,4.745704 1.42946,7.867782 4.82536,10.53899 11.99296,9.433668 16.63028,32.15625 9.4406,46.258394 l -3.73404,7.32411 4.92868,4.59878 C 237.84312,128.22265 242,138.69784 242,152 c 0,14.43007 -4.6644,24.95019 -14.76742,33.30655 -4.86534,4.02418 -7.30626,8.03898 -8.32534,13.69345 -0.79302,4.4 -2.62558,10.3414 -4.07238,13.20312 C 211.62478,218.55256 198.90672,230 195.0626,230 c -1.53902,0 -5.3327,3.74284 -8.43041,8.31742 -7.82527,11.55608 -14.71327,16.08536 -26.13053,17.18242 -10.67858,1.02608 -22.18238,-3.40396 -29.31261,-11.2881 l -3.81094,-4.21388 -2.95406,4.2175 c -6.83621,9.76006 -27.104908,14.3815 -39.461236,8.9975 z M 109.97791,243.01142 C 121.0026,237.31034 122,233.87962 122,201.6595 v -29.45046 l -10.4474,-0.60452 C 101.97906,171.05056 100.76623,170.4145 97.052602,164 c -2.622198,-4.52929 -5.77981,-7.19277 -8.946108,-7.54614 -8.84538,-0.9872 -12.637668,-6.35659 -11.516274,-16.30557 0.549378,-4.87406 0.04686,-10.95136 -1.116706,-13.50511 C 73.49753,122.30637 72.216128,122 56.053152,122 39.752126,122 38.450812,122.31903 33.618556,127.5 28.122088,133.39312 24,140.40794 24,143.86852 c 0,3.65453 9.198172,2.33245 13,-1.86852 4.487828,-4.95899 16.2067,-5.33788 21.342518,-0.69002 4.62401,4.18467 4.82071,16.08971 0.347506,21.03254 C 53.586462,167.98189 41.266726,167.2413 36.35732,161 31.978296,155.43297 24,154.20583 24,159.09932 c 0,5.48401 5.81226,14.55392 12.686678,19.79729 C 42.895374,183.63222 44.91825,184 64.756232,184 h 21.37867 l 4.1301,7 c 2.271556,3.85 5.71983,7 7.662832,7 1.943002,0 5.904106,1.86532 8.802446,4.14516 C 117.09008,210.29418 111.4162,228 98.445012,228 87.3823,228 79.269578,216.83888 83.960794,208.07326 c 1.443482,-2.69718 1.362112,-5.3711 -0.272626,-8.95897 C 81.442588,194.18578 80.710844,194 63.544194,194 c -16.85867,0 -17.752904,0.21446 -16.67897,4 0.624128,2.2 1.627832,5.74458 2.230458,7.87682 C 50.602108,211.20698 63.276226,222 68.028944,222 c 2.480998,0 5.276094,2.7163 7.717588,7.5 7.872932,15.42572 20.722046,20.49738 34.231378,13.51142 z m 63.14662,-3.1284 C 178.9181,234.44024 179.31293,232 174.4,232 c -4.70999,0 -8.36439,-3.76564 -7.02973,-7.24372 C 168.10232,222.8486 172.03519,222 180.14439,222 c 10.21871,0 12.6079,-0.78272 18.69034,-6.12318 3.83565,-3.36774 7.46697,-7.86774 8.06959,-10 3.28216,-11.61319 3.6533,-10.94999 -5.71102,-10.20522 C 191.54989,196.43857 184,193.47805 184,188.92963 c 0,-3.20944 0.79968,-3.38487 14,-3.07124 11.04964,0.26252 22.97582,-6.09114 29.44086,-15.68461 5.08384,-7.54391 6.31668,-25.01583 2.31476,-32.80526 -3.93648,-7.6621 -12.20568,-15.20685 -19.19532,-17.51363 -8.4034,-2.77338 -8.1706,-8.36347 0.4102,-9.84978 13.35748,-2.3137 15.05432,-29.195476 2.50052,-39.614202 -2.21012,-1.83424 -3.98462,-1.073698 -8.50606,3.645666 -10.79533,11.267892 -17.48952,4.644674 -7.17687,-7.100782 18.18779,-20.714754 -8.00913,-46.911676 -28.72388,-28.72388 -4.09342,3.594068 -8.33698,5.727636 -10.06959,5.06277 -4.41615,-1.694636 -3.7102,-4.320498 3.31164,-12.317926 l 6.30625,-7.18243 -4.01055,-5.387163 c -8.59091,-11.5397076 -22.90019,-10.7360552 -29.09885,1.634279 -2.99228,5.97153 -3.49734,12.967142 -3.5,48.478558 -0.003,39.38374 -0.19617,41.5 -3.78913,41.5 C 123.90299,110 122,106.27499 122,97.836426 V 92 h -14.21129 c -12.240796,0 -15.035208,0.693284 -20.153448,5 -7.285458,6.13031 -11.464878,6.2829 -18.589438,0.678726 -4.90773,-3.860422 -5.384996,-5.284892 -4.475172,-13.35682 C 65.9833,71.788922 62.998566,66 55.123982,66 38.295126,66 27.78839,89.867414 37.431216,106.19142 40.8261,111.9385 41.05877,112 59.406126,112 H 77.949822 L 83,120 c 3.537226,5.60333 6.447718,8 9.715114,8 8.252066,0 14.500276,10.54289 11.275266,19.02529 -1.27123,3.34361 -1.14677,6.63801 0.37714,9.98264 1.85033,4.06103 3.7067,4.99207 9.95351,4.99207 C 121.10934,162 122,161.43904 122,157.16357 122,149.70649 124.06314,146 128.21398,146 c 3.57967,0 3.79217,2.0984 3.8989,38.5 0.12798,43.6446 1.45858,50.037 11.88712,57.10736 8.80271,5.96806 21.75246,5.20136 29.12453,-1.72434 z m -19.91469,-52.75901 c -1.85847,-7.4047 3.42669,-18.31621 10.69134,-22.07291 3.41896,-1.76801 7.08986,-2.67467 8.15756,-2.0148 3.67748,2.27281 1.9306,8.3265 -3.05874,10.59979 -4.7131,2.14744 -5.29251,3.48334 -5.79612,13.36391 -0.32287,6.33451 -8.41012,6.43486 -9.99404,0.124 z M 173.97808,127.5 c -2.17972,-3.575 -3.96313,-9.65 -3.96313,-13.5 0,-6.97865 6.32236,-20 9.71076,-20 0.98148,0 2.87282,1.311338 4.20299,2.914084 1.91599,2.308634 1.7591,3.855466 -0.75511,7.445016 C 181.42811,106.85111 180,111.18951 180,114 c 0,2.81049 1.42811,7.14889 3.17359,9.6409 2.51421,3.58955 2.6711,5.13638 0.75511,7.44502 -3.58877,4.3242 -5.56109,3.61343 -9.95062,-3.58592 z M 124,128 c 0,-2.66667 1.33333,-4 4,-4 2.66667,0 4,1.33333 4,4 0,2.66667 -1.33333,4 -4,4 -2.66667,0 -4,-1.33333 -4,-4 z m 22.5,-63.97808 c -7.19935,-4.389528 -7.91012,-6.361848 -3.58592,-9.950616 2.30864,-1.915996 3.85547,-1.759108 7.44502,0.75511 5.72569,4.010428 14.42096,4.065134 20.42898,0.12852 4.19334,-2.747578 4.91281,-2.7252 7.36464,0.229074 2.35721,2.840266 1.9823,3.90635 -2.82924,8.04506 C 168.2932,69.276266 155.6865,69.623038 146.5,64.02192 Z M 102,214.11804 c 0,-5.38538 -3.783472,-7.19172 -7.428572,-3.54662 C 90.926328,214.21652 92.732662,218 98.118034,218 100.62732,218 102,216.62732 102,214.11804 Z M 52,152.21398 c 0,-4.84003 -5.00373,-6.82426 -8.025954,-3.18271 C 41.03647,152.57084 43.075638,156 48.118034,156 50.593534,156 52,154.62829 52,152.21398 Z m 41.92729,-7.12637 C 96.95217,141.44285 94.987128,138 89.881966,138 87.450968,138 86,139.3705 86,141.66667 c 0,6.54906 3.925336,8.243 7.92729,3.42094 z m -12,-56 C 84.95217,85.442852 82.987128,82 77.881966,82 75.450968,82 74,83.370496 74,85.666666 c 0,6.549064 3.925336,8.243004 7.92729,3.420944 z M 122,69 c 0,-11.421756 -0.45964,-13 -3.78602,-13 -2.08231,0 -4.30925,1.363508 -4.94875,3.030016 -1.92014,5.003806 -11.15702,7.500088 -17.70941,4.785998 C 85.442104,59.626776 83.166012,50.142266 90.14516,41.269718 95.774834,34.112748 106.12304,33.982914 111.64268,41 118.82931,50.136322 122,47.659452 122,32.90909 122,21.676768 121.30303,19.121212 117.09091,14.909091 107.42477,5.2429528 91.278568,11.46464 88.226266,26.03163 86.803208,32.823112 86.548148,32.9833 78.178414,32.342132 63.098882,31.186954 52,39.067512 52,50.929634 52,55.38753 52.842526,56 58.97491,56 c 5.920144,0 7.711848,1.167384 11.848092,7.719618 3.351896,5.309746 6.77647,8.100276 10.970042,8.93899 3.353272,0.670656 7.238122,3.046826 8.633,5.280382 C 92.596532,81.414492 95.055494,82 107.48109,82 H 122 Z M 105,50.860724 c 0,-2.09327 -1.57772,-4.109786 -3.50605,-4.481148 -4.430508,-0.853238 -7.066946,5.397848 -3.285384,7.789762 C 102.17168,56.676088 105,55.298202 105,50.860724 Z" + id="path13568" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/brainnetwork_orange64.png b/doc/htmldoc/static/img/brainnetwork_orange64.png new file mode 100644 index 0000000000..99ed068d66 Binary files /dev/null and b/doc/htmldoc/static/img/brainnetwork_orange64.png differ diff --git a/doc/htmldoc/static/img/class_black.png b/doc/htmldoc/static/img/class_black.png deleted file mode 100644 index 4b8c31710d..0000000000 Binary files a/doc/htmldoc/static/img/class_black.png and /dev/null differ diff --git a/doc/htmldoc/static/img/connect_orange128.png b/doc/htmldoc/static/img/connect_orange128.png new file mode 100644 index 0000000000..d6b0db4fd1 Binary files /dev/null and b/doc/htmldoc/static/img/connect_orange128.png differ diff --git a/doc/htmldoc/static/img/connect_orange128.svg b/doc/htmldoc/static/img/connect_orange128.svg new file mode 100644 index 0000000000..d7df5079dd --- /dev/null +++ b/doc/htmldoc/static/img/connect_orange128.svg @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg11678" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="connect_orange128.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs11682" /> + <sodipodi:namedview + id="namedview11680" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="128.15059" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g11684" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g11684"> + <g + id="g11688" + transform="translate(-2.2712509,-1.4232996)"> + <path + style="fill:#fed9cc;stroke-width:2" + d="M 106.13363,249.16102 C 102.5217,244.8089 105.26132,242 113.11803,242 117.81725,242 120,241.07414 120,239.08088 c 0,-2.27598 -3.63519,-3.04708 -16.5,-3.5 L 87,235 v -28 -28 l 16.5,-0.58088 16.5,-0.58089 V 166.91912 156 l -13.5,0.001 c -12.596036,0.001 -14.671806,0.68147 -31,10.15819 -16.640908,9.65821 -20.93775,14.6468 -14.683114,17.04693 5.229526,2.00676 7.865678,11.82479 4.859214,18.09756 -5.402938,11.27286 -21.427366,10.87098 -25.806572,-0.6472 -2.323964,-6.11249 0.574658,-15.63186 5.313586,-17.45036 C 52.104456,180.55051 47.116028,178 35,178 c -12.116028,0 -17.104456,2.55051 -10.183114,5.20648 4.738928,1.8185 7.63755,11.33787 5.313586,17.45036 C 25.820486,211.99296 9.7417946,212.6081 4.483978,201.63804 1.7102283,195.8508 3.8193474,187.13399 8.954196,183.16299 10.492512,181.97335 12.032129,178.3 12.375567,175 c 0.573681,-5.51234 1.315287,-6.04998 9.124433,-6.615 8.342068,-0.60356 11.243166,-3.45789 5.683114,-5.59148 -4.738928,-1.8185 -7.637549,-11.33787 -5.313586,-17.45036 4.379206,-11.51818 20.403634,-11.92006 25.806572,-0.64721 3.006464,6.27278 0.370312,16.09081 -4.859214,18.09757 C 37.717792,164.75023 39.878648,168 46.278802,168 c 3.5123,0 10.782364,-2.74905 16.5,-6.23918 13.104742,-7.99934 12.651674,-7.38227 7.876168,-10.72717 -11.14241,-7.80445 -10.85684,-25.2789 0.566998,-34.69539 l 7.072188,-5.8295 -12.972048,-7.25438 C 52.848914,96.278974 51.58959,96 32.57503,96 19.861118,96 11.943026,95.143026 10.4,93.6 8.8430692,92.04307 8,83.941606 8,70.53723 8,54.015306 8.6012038,49.643758 11,48.723252 c 1.726204,-0.662406 3,-3.650116 3,-7.03655 0,-7.351268 4.817786,-16.913266 9.889218,-19.627414 4.951306,-2.649858 17.270258,-2.649858 22.221564,0 C 51.182214,24.773436 56,34.335434 56,41.686702 c 0,3.386434 1.273796,6.374144 3,7.03655 2.388752,0.91665 3,5.209078 3,21.067198 v 19.915988 l 11.273088,6.449808 c 10.14564,5.804744 11.91006,6.219474 17.641996,4.146784 C 94.417984,99.036362 98.581678,98 100.16774,98 c 1.58606,0 3.77216,-2.016798 4.858,-4.481774 1.08584,-2.464976 4.86459,-6.289976 8.39722,-8.5 6.31884,-3.953088 6.42421,-4.269494 6.5,-19.518226 L 120,50 h -9.55499 C 105.03394,50 98.962264,48.649744 96.445012,46.886592 92.48082,44.109964 92,42.040498 92,27.75511 92,3.3300124 91.10677,4 123.67037,4 142.41564,4 151.96581,4.7658102 153.6,6.4 155.09651,7.896511 156,15.308894 156,26.090024 156,46.85448 153.80859,50 139.34252,50 H 130 v 14.783184 c 0,13.975352 0.2648,14.849646 4.84586,15.999416 7.8203,1.962772 16.90647,10.926672 19.35305,19.092634 l 2.27116,7.580456 8.76497,-4.89884 c 9.18891,-5.135778 10.08073,-6.441076 6.7063,-9.815512 -1.2707,-1.270702 -1.84483,-12.715004 -1.5,-29.9 L 171,35 209.99398,34.455084 c 34.89984,-0.487702 39.25712,-0.18508 41.5,2.88226 C 253.16062,39.61659 254,48.526194 254,63.937246 254,96.630364 254.61816,96 222.55812,96 h -25.21506 l -16.3841,9.19652 -16.38411,9.19651 4.71258,4.71258 c 5.68188,5.68188 6.46622,19.50068 1.50857,26.57871 -1.7622,2.51589 -2.8872,4.8079 -2.5,5.09334 0.3872,0.28544 5.61801,3.48522 11.62402,7.11062 7.49352,4.5233 11.18045,5.81032 11.75,4.10167 0.45649,-1.36947 2.51748,-4.17745 4.57998,-6.23995 3.08156,-3.08156 6.79646,-3.75 20.8409,-3.75 15.47924,0 17.55384,0.46293 22,4.90909 C 243.98444,161.80263 244,161.94837 244,202.9091 244,253.88762 245.02626,252 217.30998,252 191.18473,252 192,253.337 192,210.49282 V 176.30061 L 174.26265,166.1503 C 157.84207,156.75353 155.54073,156 143.26265,156 H 130 v 10.91912 10.91911 l 16.5,0.58089 L 163,179 v 28 28 l -16.5,0.58088 c -12.86481,0.45292 -16.5,1.22402 -16.5,3.5 0,2.01364 2.21448,2.91912 7.1391,2.91912 6.25955,0 7.06036,0.55442 6.5,4.5 -0.59866,4.21524 -1.72717,4.53628 -17.83329,5.0734 -13.32913,0.44452 -17.75121,-0.0978 -19.67218,-2.41238 z m 125.66649,-7.92018 c 1.58628,-1.91136 2.12244,-14.35596 1.7449,-40.5 L 233,163 219.31998,162.40452 c -8.36376,-0.36407 -14.77592,0.31402 -16.5,1.74489 -4.37794,3.63336 -4.08892,72.29593 0.32288,76.70773 4.08896,4.08898 25.34596,4.37358 28.65726,0.3837 z M 210.7994,236.46938 C 208.14264,234.6954 204,227.12298 204,224.04058 204,220.28992 213.5764,212 217.9091,212 c 10.14886,0 16.0278,15.8172 8.43342,22.69002 -3.79136,3.43112 -11.71146,4.33782 -15.54312,1.77936 z M 220,225 c 0,-1.65 -0.84688,-3 -1.88196,-3 -2.52196,0 -4.3282,3.12318 -2.73034,4.72104 C 217.64008,228.9734 220,228.09282 220,225 Z m -15.05414,-35.08761 c -2.96958,-4.80487 3.56266,-8.09984 14.87394,-7.50266 9.85884,0.52051 11.25574,1.12211 11.8193,5.09027 0.60662,4.27132 -0.0226,4.5 -12.38196,4.5 -7.1616,0 -13.60166,-0.93942 -14.31128,-2.08761 z m 0,-16 c -2.96958,-4.80487 3.56266,-8.09984 14.87394,-7.50266 9.85884,0.52051 11.25574,1.12211 11.8193,5.09027 0.60662,4.27132 -0.0226,4.5 -12.38196,4.5 -7.1616,0 -13.60166,-0.93942 -14.31128,-2.08761 z M 154,207 V 188 H 125 96 v 19 19 h 29 29 z M 21.054146,197.91239 c 0.709618,-1.14819 0.19332,-3.40928 -1.147324,-5.02466 -2.985543,-3.59736 -8.273958,-0.17162 -6.573963,4.2585 1.277702,3.32963 5.856193,3.78395 7.721287,0.76616 z m 35.612994,-0.76616 c 1.699996,-4.43012 -3.588418,-7.85586 -6.573962,-4.2585 -1.340646,1.61538 -1.856942,3.87647 -1.147324,5.02466 1.865094,3.01779 6.443586,2.56347 7.721286,-0.76616 z m -18,-48.29246 C 38.064838,147.2842 36.414624,146 35,146 c -3.541578,0 -5.167864,5.03214 -2.491298,7.7087 2.883898,2.8839 7.677864,-0.89537 6.158438,-4.85493 z m 119.57716,-4.98451 c 5.37454,-2.87637 7.69115,-9.82221 5.14203,-15.41721 -1.93469,-4.24639 -4.27671,-5.37011 -14.38633,-6.9027 -3.42067,-0.51856 -4.0032,-2.15082 -4.02211,-11.27005 -0.019,-9.17997 -0.79979,-11.332608 -5.61153,-15.471484 -9.98512,-8.588846 -21.01275,-5.597644 -27.2435,7.389694 -2.72547,5.68095 -4.19511,6.70187 -8.91385,6.1922 C 97.223526,107.74322 90,112.64873 90,117.35998 c 0,1.50701 -2.732288,3.28648 -6.07175,3.95437 C 72.935842,123.51283 68.662482,134.66248 76,142 c 3.712732,3.71273 6.666666,4 41.13148,4 22.44857,0 38.70582,-0.84256 41.11282,-2.13074 z M 52,71 V 56 H 35 18 V 71 86 H 35 52 Z M 192,64 V 42 h -6 c -5.84385,0 -6,0.253038 -6,9.722656 0,9.379582 0.18256,9.687756 5.17401,8.73358 4.5189,-0.86384 5.08868,-0.385562 4.5,3.777344 C 189.22032,67.441996 187.69252,69 185,69 c -2.78329,0 -4.39951,1.771134 -5.3134,5.822698 C 177.83049,83.05138 179.55244,86 186.21398,86 H 192 Z m 52,0 V 42 h -21 -21 v 22 22 h 21 21 z M 45.969374,41.5 C 45.910546,32.856096 37.849712,26.895462 31.051646,30.468992 25.80506,33.226958 24.06836,35.95556 24.030626,41.5 24.002552,45.624924 24.916852,46 35,46 45.083148,46 45.997448,45.624924 45.969374,41.5 Z M 146,30 c 0,-5.5 -0.51284,-10 -1.13965,-10 -0.62681,0 -5.06396,2.7 -9.86035,6 -4.79639,3.3 -9.68146,6 -10.85572,6 -1.17426,0 -6.6371,-3.234424 -12.13965,-7.18761 L 102,17.624779 V 28.81239 40 h 22 22 z M 131.45426,16 136.53943,12 123.76972,12.01318 111,12.026357 117,16 c 7.44965,4.933706 8.18207,4.933706 14.45426,0 z" + id="path11696" /> + <path + style="fill:#feb299;stroke-width:2" + d="M 106.13363,249.16102 C 102.5217,244.8089 105.26132,242 113.11803,242 117.81725,242 120,241.07414 120,239.08088 c 0,-2.27598 -3.63519,-3.04708 -16.5,-3.5 L 87,235 86.43955,208.1554 c -0.42034,-20.13359 0.07966,-27.2508 2,-28.46938 1.408248,-0.89362 9.08545,-1.63855 17.06045,-1.65539 L 120,178 v -11 -11 h -14.09319 c -13.119188,0 -15.204052,0.64075 -30.166872,9.2713 -8.84053,5.09921 -16.562458,10.545 -17.159842,12.10176 -0.597382,1.55675 0.940212,4.98743 3.416876,7.62372 6.15062,6.54703 5.80922,14.6561 -0.8585,20.39142 -7.057624,6.07072 -10.237868,5.8201 -17.431688,-1.37372 C 37.132838,197.44053 37.267958,192.49552 44.22987,184.8711 46.303442,182.6002 48,180.1252 48,179.3711 48,178.61699 42.15,178 35,178 c -7.15,0 -13,0.61699 -13,1.3711 0,0.7541 1.696558,3.2291 3.77013,5.5 6.961912,7.62442 7.097032,12.56943 0.523086,19.14338 -7.193821,7.19382 -10.374064,7.44444 -17.4316886,1.37372 C 2.3458292,199.78364 1.8246892,191.59035 7.5898466,185.39502 9.8392624,182.97776 11.976762,178.3 12.339847,175 c 0.605757,-5.50561 1.360539,-6.05067 9.160153,-6.615 4.675,-0.33824 8.5,-1.18024 8.5,-1.87109 0,-0.69086 -1.9125,-3.29187 -4.25,-5.78002 -5.915491,-6.29675 -5.464236,-14.46586 1.111528,-20.1221 7.057624,-6.07071 10.237868,-5.82009 17.431688,1.37373 6.573946,6.57395 6.438826,11.51896 -0.523086,19.14338 -2.073572,2.2709 -3.77013,4.7459 -3.77013,5.5 0,3.64835 14.223746,0.54787 24.478556,-5.33581 l 11.478554,-6.58582 -5.95365,-5.70395 C 58.91488,138.37978 60.736082,122.51705 73.939826,114.7174 l 5.960306,-3.52084 -13.097362,-7.59828 C 54.071812,96.212566 53.15869,96 34.16268,96 8.7451946,96 8,95.27617 8,70.587408 8,57.701722 8.7892772,51.834736 10.740637,50.215252 c 1.50735,-1.25099 3.251781,-6.08619 3.876512,-10.74489 C 17.993856,14.289844 51.571842,13.902007 55.340032,39 c 0.660612,4.4 2.39301,9.380706 3.849774,11.068236 1.68571,1.952744 2.859808,9.90573 3.229428,21.87518 L 63,90.750358 74.311786,97.35422 c 10.706062,6.25024 11.616378,6.445 17,3.63714 3.128518,-1.631694 7.111132,-2.972262 8.850254,-2.979038 1.73912,-0.0068 4.4073,-2.339104 5.92928,-5.18295 1.52198,-2.843844 5.27406,-6.466956 8.33796,-8.05136 C 119.81702,81.991902 120,81.373414 120,65.94864 V 50 H 110 C 94.978016,50 92,46.080596 92,26.309976 92,4.257932 92.38831,4 125.58711,4 156.71534,4 156,3.4412608 156,27.75511 156,42.040498 155.51918,44.109964 151.55499,46.886592 149.11023,48.598966 143.26023,50 138.55499,50 H 130 v 14.844896 14.844896 l 7.02208,2.317494 c 7.70238,2.542016 15.70177,11.822384 17.79012,20.638924 l 1.3374,5.64621 9.4252,-5.43889 c 12.1534,-7.013224 11.9863,-6.820886 7.90854,-9.102916 C 170.44556,92.050586 170,88.411514 170,65.30062 170,47.355694 170.77484,38.025162 172.4,36.4 174.09126,34.70874 185.5748,34 211.2866,34 256.20438,34 254,32.400134 254,65 c 0,31.57705 0.5995,31 -32.2066,31 h -25.97977 l -15.92735,9.18689 -15.92735,9.18688 5.02054,5.96657 c 5.77348,6.86139 6.76043,18.59479 2.08414,24.7774 -1.61502,2.13524 -2.96502,4.47135 -3,5.19134 -0.035,0.72 4.83722,4.07494 10.82712,7.45543 l 10.89072,6.14635 5.95543,-5.95543 C 201.3665,152.32581 202.58102,152 217.93706,152 c 14.58086,0 16.74758,0.50282 21.15384,4.90909 4.88338,4.88338 4.9091,5.11766 4.9091,44.73029 0,37.25762 -0.26686,40.16044 -4.14516,45.0909 C 235.9419,251.70478 234.73086,252 218.2371,252 192.21433,252 193.20306,253.55382 192,210.76762 l -1,-35.56438 -16.6697,-9.60162 C 158.81604,156.66552 156.70198,156 143.8303,156 H 130 v 11 11 h 14.6 c 8.68889,0 15.57169,0.97169 17,2.4 3.31783,3.31783 3.31783,49.88218 0,53.2 -1.42831,1.42832 -8.31111,2.4 -17,2.4 -11.35827,0 -14.6,0.63798 -14.6,2.87328 0,1.77976 2.47379,3.1118 6.5,3.5 4.95776,0.47802 6.5,1.5758 6.5,4.62672 0,3.64536 -1.52447,4.05084 -17.19419,4.5734 -13.32913,0.44452 -17.75121,-0.0978 -19.67218,-2.41238 z m 125.41079,-6.83714 c 1.94804,-1.23636 2.41682,-10.72204 2,-40.46938 L 233,163 218.17622,162.40585 c -10.50758,-0.42116 -15.30292,0.16118 -16.46936,2 -2.72821,4.30078 -2.09875,74.40227 0.69314,77.19415 2.68954,2.68954 25.1676,3.24784 29.14442,0.72388 z m -23.39926,-9.5936 c -5.37054,-6.82752 -5.22548,-9.83178 0.76394,-15.82118 5.9894,-5.98942 8.99366,-6.13448 15.82118,-0.76394 6.33286,4.98142 6.8514,12.27316 1.26972,17.85484 -5.58168,5.58168 -12.87342,5.06314 -17.85484,-1.26972 z M 220,225 c 0,-1.65 -1.35,-3 -3,-3 -1.65,0 -3,1.35 -3,3 0,1.65 1.35,3 3,3 1.65,0 3,-1.35 3,-3 z m -15.05414,-35.08761 c -2.58514,-4.18285 3.47156,-7.91263 12.79902,-7.88176 10.80952,0.0358 15.32996,2.28364 13.60932,6.76752 -0.93678,2.44124 -4.06616,3.20185 -13.1734,3.20185 -6.5696,0 -12.52532,-0.93942 -13.23494,-2.08761 z m 0,-16 c -2.58514,-4.18285 3.47156,-7.91263 12.79902,-7.88176 10.80952,0.0358 15.32996,2.28364 13.60932,6.76752 -0.93678,2.44124 -4.06616,3.20185 -13.1734,3.20185 -6.5696,0 -12.52532,-0.93942 -13.23494,-2.08761 z M 154,207 V 188 H 125 96 v 19 19 h 29 29 z M 21.575218,195.72869 c 0.731172,-3.79668 -3.815034,-6.05261 -7.54802,-3.7455 -3.63009,2.24352 -0.826732,8.46409 3.443787,7.64166 1.915694,-0.36893 3.762599,-2.1222 4.104233,-3.89616 z m 36,0 c 0.731172,-3.79668 -3.815034,-6.05261 -7.54802,-3.7455 -3.63009,2.24352 -0.826732,8.46409 3.443786,7.64166 1.915696,-0.36893 3.7626,-2.1222 4.104234,-3.89616 z M 39.624846,151.47098 C 40.42082,147.33782 34.647218,144.55278 31.6,147.6 c -3.047218,3.04722 -0.262176,8.82082 3.870984,8.02485 1.915696,-0.36893 3.784934,-2.23817 4.153862,-4.15387 z m 119.575744,-7.00161 c 5.17795,-3.4574 7.06579,-10.36833 4.37277,-16.00758 -2.03094,-4.25283 -4.37521,-5.68314 -10.59082,-6.46179 -7.92085,-0.99227 -7.97856,-1.06182 -7.46707,-9 0.6663,-10.34085 -2.52331,-17.905882 -8.74475,-20.74056 -11.04048,-5.03038 -20.7688,-0.922232 -25.6863,10.847 -2.53708,6.07208 -3.5063,6.70918 -8.64358,5.68173 C 96.381874,107.57637 90,111.75092 90,116.92604 c 0,1.45218 -2.475,3.25801 -5.5,4.01297 C 72.38889,123.96158 68.240446,134.24045 76,142 c 3.725284,3.72528 6.644146,3.9979 42.5,3.96937 21.175,-0.0168 39.49027,-0.69184 40.70059,-1.5 z M 52,71 V 56 H 35 18 V 71 86 H 35 52 Z M 192,64 V 42 h -6 c -5.8514,0 -6,0.243026 -6,9.81276 0,8.808108 0.40704,9.706318 3.9757,8.773094 4.63257,-1.211446 7.78432,4.454128 4.37463,7.863818 -1.5744,1.574402 -2.96445,1.53043 -4.99905,-0.15814 -2.32877,-1.932708 -3.01471,-0.874178 -3.94944,6.094712 C 178.00766,84.780674 178.71279,86 186.11803,86 H 192 Z m 52,0 V 42 h -21 -21 v 22 22 h 21 21 z M 45.626716,39.562392 c -0.43766,-4.495626 -2.216334,-7.325524 -5.896254,-9.381024 -4.719294,-2.636068 -5.8157,-2.585558 -10.5,0.483714 C 25.528654,33.0906 24,35.832296 24,40.046106 24,45.937832 24.116178,46 35.126716,46 H 46.253434 Z M 146,28.97957 V 17.959142 l -11.04043,7.330434 -11.04043,7.330432 -8.45957,-5.97464 C 101.40931,16.722253 102,16.624097 102,28.881966 V 40 h 22 22 z M 130.20201,12.373283 c -3.41111,-0.344694 -9.12701,-0.344694 -12.70201,0 L 111,13 l 6.83322,4.313511 6.83323,4.313511 5.86878,-4.313511 L 136.40402,13 Z" + id="path11694" /> + <path + style="fill:#fe8b66;stroke-width:2" + d="m 196,248 c -3.68705,-3.68704 -4.00342,-6.6992 -4.04368,-38.5 l -0.0437,-34.5 -18.94,-10.59586 c -17.97841,-10.0579 -19.57546,-10.5656 -31.45632,-10 L 129,155 v 12 12 l 16.5,0.58088 16.5,0.58089 V 207 233.83824 l -16.47788,0.58088 c -13.58072,0.47874 -16.59113,1.17374 -17.122,3.95288 -0.49744,2.60416 1.08769,3.515 6.96125,4 5.34288,0.44118 7.80268,1.6692 8.26865,4.128 0.59426,3.1358 -1.32912,3.5 -18.48337,3.5 C 107.33333,250 106,249.72144 106,246 c 0,-3.34534 1.33333,-4 8.14665,-4 6.67925,0 8.02661,-0.63044 7.48024,-3.5 -0.55367,-2.90794 -3.53881,-3.66916 -17.64665,-4.5 L 87,233 v -26 -26 l 16.5,-0.58088 16.5,-0.58089 V 166.91912 154 H 107.62736 C 96.303142,154 93.591534,154.9417 75.627356,165.1131 64.83231,171.22531 56,177.19711 56,178.38376 c 0,1.18666 2.25,4.24279 5,6.7914 C 70.635076,194.10465 65.553264,208 52.652494,208 c -12.371478,0 -16.979312,-14.18104 -7.471088,-22.99296 2.849772,-2.64108 4.596658,-5.74811 3.881966,-6.9045 -1.782778,-2.8846 -26.451844,-2.71005 -28.250284,0.1999 -0.820955,1.32833 0.821398,3.93734 3.881966,6.16681 C 35.250478,192.15833 29.835964,208 16.652494,208 4.416512,208 -0.33532638,193.82685 9,185.17516 c 2.896233,-2.68414 5,-6.85149 5,-9.9045 C 14,170.46805 14.699934,170 21.881966,170 c 10.090354,0 11.829232,-2.95543 5.29944,-9.00704 C 17.372212,151.90211 22.309636,138 35.347506,138 c 12.514376,0 17.542888,16.10397 7.347548,23.53076 C 36.585352,165.98137 37.812618,170 45.281506,170 c 3.809306,0 26.05284,-10.98011 30.308238,-14.96111 0.324358,-0.30344 -2.150642,-3.2921 -5.5,-6.64145 -10.791026,-10.79103 -7.660814,-27.24557 6.739276,-35.42626 3.045096,-1.72992 1.38996,-3.27685 -11.234482,-10.5 C 51.039722,94.143554 50.466944,94 31.794412,94 19.687647,94 11.929725,93.129726 10.4,91.6 8.8832508,90.08325 8,82.468884 8,70.909976 8,55.159934 8.5554904,52.117238 12,49 14.51547,46.723532 16,42.840066 16,38.536178 16,28.85636 25.077968,20 35,20 c 9.922032,0 19,8.85636 19,18.536178 0,4.303888 1.48453,8.187354 4,10.463822 3.471618,3.14177 4,6.159934 4,22.848326 v 19.228376 l 11.940072,6.564088 c 9.560132,5.25571 12.723106,6.14502 15.868518,4.46165 C 91.969234,100.9461 95.54532,100 97.755444,100 c 2.301696,0 5.464166,-2.447468 7.402566,-5.728918 1.86129,-3.150904 5.96217,-7.251786 9.11307,-9.113072 C 119.85677,81.858464 120,81.35166 120,64.886928 V 48 h -9.83643 C 93.990152,48 94,48.01268 94,27.186022 94,15.552449 94.881424,7.9185762 96.4,6.4 98.015264,4.7847362 107.12381,4 124.25714,4 155.82401,4 156,4.120645 156,25.760598 c 0,19.501868 -1.69567,21.903204 -16,22.658546 L 129,49 128.41533,64.530278 c -0.50719,13.472132 -0.10962,15.683634 3,16.68747 11.66967,3.767168 15.44596,6.100106 18.81373,11.62287 2.06579,3.38766 3.75935,8.184382 3.76346,10.659382 0.01,5.72387 1.44731,5.64932 12.7367,-0.66044 C 176.75537,97.235836 179.90454,94 175.33201,94 170.79153,94 170,89.4332 170,63.236426 170,46.896984 170.79524,38.004762 172.4,36.4 c 3.69843,-3.698428 74.31784,-3.354752 77.41472,0.376746 1.55208,1.870154 2.12178,11.501738 1.74488,29.5 L 251,93 l -27,1 -27,1 -16.69336,9.66528 -16.69335,9.66528 4.27255,4.54793 c 6.34633,6.75535 7.46016,17.50987 2.65666,25.65119 l -3.95321,6.70018 12.35327,7.06367 12.35327,7.06366 3.25906,-5.6786 C 197.77417,154.06932 198.0453,154 216.76412,154 c 14.56076,0 19.67814,0.72798 22.09302,3.14286 C 241.51822,159.80393 242,166.83818 242,203.02944 242,254.18018 243.13282,252 216.55498,252 202.66666,252 199.35568,251.35568 196,248 Z m 37.92964,-7.86852 C 235.1271,237.894 236,221.72808 236,201.78896 236,160.86759 235.6379,160 218.55854,160 199.38172,160 200,158.61174 200,201.67036 c 0,26.52306 0.70386,38.2335 2.4,39.92964 1.39364,1.39364 8.07326,2.4 15.92964,2.4 11.32944,0 13.8663,-0.6291 15.6,-3.86852 z M 208.4,233.6 c -2.94844,-2.94844 -3.10752,-10.54094 -0.32964,-15.73148 3.16146,-5.90722 14.91962,-5.26926 19.0494,1.03356 3.33062,5.08316 2.40126,12.74074 -1.88932,15.5673 C 221.70704,236.79052 211.0395,236.2395 208.4,233.6 Z m 12.45994,-9.82662 C 219.15572,221.0159 214,221.68726 214,224.66666 c 0,1.46668 0.5922,3.25886 1.31598,3.98266 1.80866,1.80866 6.90506,-2.67364 5.54396,-4.87594 z M 206,188.09543 C 206,184.38355 207.23122,184 219.14664,184 c 11.44128,0 13.06016,0.45402 12.47992,3.5 -0.53484,2.80765 -3.13542,3.61778 -13.14664,4.09543 -11.43738,0.5457 -12.47992,0.25332 -12.47992,-3.5 z m 0,-16 C 206,168.38355 207.23122,168 219.14664,168 c 11.44128,0 13.06016,0.45402 12.47992,3.5 -0.53484,2.80765 -3.13542,3.61778 -13.14664,4.09543 C 207.04254,176.14113 206,175.84875 206,172.09543 Z M 155.57242,207.5 156.14485,188 H 125.07242 94 v 18.66666 c 0,10.26668 0.623068,19.28974 1.384596,20.05128 0.76153,0.76152 14.486534,1.13652 30.500004,0.83332 L 155,227 Z M 21.624846,195.47098 C 22.42082,191.33782 16.647218,188.55278 13.6,191.6 c -3.047218,3.04722 -0.262177,8.82082 3.870985,8.02485 1.915694,-0.36893 3.784933,-2.23817 4.153861,-4.15387 z m 36,0 C 58.42082,191.33782 52.647218,188.55278 49.6,191.6 c -3.047218,3.04722 -0.262176,8.82082 3.870984,8.02485 1.915696,-0.36893 3.784934,-2.23817 4.153862,-4.15387 z m -18,-44 C 40.42082,147.33782 34.647218,144.55278 31.6,147.6 c -3.047218,3.04722 -0.262176,8.82082 3.870984,8.02485 1.915696,-0.36893 3.784934,-2.23817 4.153862,-4.15387 z M 162,142 c 2.2,-2.2 4,-5.84091 4,-8.09091 C 166,127.69387 157.18675,120 150.06727,120 c -6.02838,0 -6.09625,-0.1144 -4.81635,-8.11846 1.62329,-10.15146 -1.61681,-16.65034 -10.37275,-20.805304 -4.68866,-2.224912 -7.93279,-2.576268 -11.44783,-1.239852 C 118.02659,91.890888 110,101.04583 110,105.15472 c 0,1.64611 -3.1444,2.84319 -8.48506,3.23028 -6.98831,0.50652 -8.947948,1.58519 -11.109136,6.115 -1.443236,3.025 -4.091952,5.5 -5.886034,5.5 C 79.452746,120 72,128.15004 72,133.69115 c 0,2.74664 1.489488,6.63975 3.309976,8.65137 C 78.304802,145.65176 82.398908,146 118.30998,146 155.33333,146 158.26875,145.73125 162,142 Z M 53,71 V 55 H 35 17 l -0.598254,13.80157 c -0.32904,7.590864 -0.118758,15.051118 0.467293,16.578344 0.821417,2.140578 5.082511,2.644266 18.598255,2.198428 L 53,87 Z M 192,65 V 42 h -7 -7 v 21.666666 c 0,11.916668 0.6,22.266668 1.33333,23 C 180.06667,87.4 183.21667,88 186.33333,88 H 192 Z m -10,-1 c 0,-3.012298 1.0443,-4.092182 3.5,-3.619258 1.925,0.37072 3.5,1.999388 3.5,3.619258 0,1.61987 -1.575,3.248538 -3.5,3.619258 C 183.0443,68.092182 182,67.012298 182,64 Z m 62,1 V 42 h -22 -22 v 21.666666 c 0,11.916668 0.6,22.266668 1.33334,23 C 202.06666,87.4 211.96666,88 223.33334,88 H 244 Z M 46.590226,41.25718 C 45.427018,24.955272 27.936498,23.633152 23.107466,39.482102 20.938814,46.599648 23.47299,48.235286 35.676464,47.594542 46.7842,47.01133 46.99219,46.890556 46.590226,41.25718 Z M 148,29 c 0,-6.05 -0.76497,-11 -1.69992,-11 -0.93496,0 -5.42717,2.7 -9.98269,6 -4.55551,3.3 -9.95551,6 -12,6 -2.04448,0 -7.44448,-2.7 -12,-6 -4.55551,-3.3 -9.19055,-6 -10.30007,-6 -2.215424,0 -2.828434,18.522218 -0.68399,20.666666 C 102.06667,39.4 112.86667,40 125.33333,40 H 148 Z M 131.57038,17 138.92854,12 124.96427,12.0099 111,12.0198 l 6,4.91814 c 3.3,2.704977 6.27275,4.950505 6.60611,4.990065 C 123.93947,21.967634 127.52339,19.75 131.57038,17 Z" + id="path11692" /> + <path + style="fill:#fe6532;stroke-width:2" + d="M 196.90909,247.0909 C 192.08577,242.26758 192,241.59356 192,208.5115 V 174.8412 L 173.7876,164.4206 C 156.67411,154.62876 154.74328,154 141.7876,154 H 128 v 13 13 h 17 17 v 27 27 h -17 c -15.49031,0 -17,0.3445 -17,3.87926 0,3.03904 1.62449,4.01372 7.5,4.5 5.05745,0.41858 7.5,1.59776 7.5,3.62074 0,2.41108 -3.66336,3.1133 -18.66151,3.57718 -17.01472,0.52626 -18.60167,0.26152 -17.98337,-3 0.48006,-2.53228 2.86405,-3.7585 8.16151,-4.19792 5.802,-0.48126 7.48337,-1.47482 7.48337,-4.42212 0,-3.40156 -1.84077,-3.8622 -17.5,-4.37928 L 87,233 v -26 -26 l 16.5,-0.58088 16.5,-0.58089 V 166.91912 154 h -13.01575 c -11.996574,0 -14.438936,0.80918 -31.190878,10.33384 -9.996316,5.68361 -18.666882,11.61534 -19.267924,13.18163 -0.604436,1.57513 1.268446,5.03728 4.190874,7.7471 C 63.667752,187.99929 66,192.33318 66,195.08094 66,206.49922 49.464082,212.62184 43.113408,203.55498 38.599756,197.11085 39.285408,190.59488 45,185.6261 53.733484,178.03244 51.622104,176 35,176 c -16.622104,0 -18.733484,2.03244 -10,9.6261 5.714592,4.96878 6.400244,11.48475 1.886592,17.92888 C 20.624968,212.4947 4,206.53356 4,195.34863 4,192.79037 6.25,188.58349 9,186 c 3.045451,-2.86105 5,-6.90643 5,-10.34863 C 14,170.28678 14.456712,170 23,170 c 10.304628,0 11.339302,-2.37332 4,-9.17516 C 20.954144,155.22173 20.54174,147.45826 26,142 c 7.957854,-7.95785 22,-2.15239 22,9.0955 0,2.86617 -2.187544,7.12284 -5,9.72934 -12.2843,11.3847 1.275524,12.54021 20.942674,1.78463 l 13.513978,-7.39052 -6.728326,-6.34563 C 65.27115,143.72654 64,141.0174 64,134.53356 c 0,-9.10376 5.655328,-17.74112 13.591684,-20.75852 4.850412,-1.84412 4.416476,-2.30668 -10.179168,-10.85064 L 52.166954,94 H 32.153844 C 8.1455598,94 8,93.85616 8,70.131482 8,56.666666 8.6612328,53.338768 12,50 14.495726,47.504274 16,43.333334 16,38.90909 16,26.026354 29.961904,17.013657 42.118476,22.049074 49.92807,25.283914 54,31.245696 54,39.445012 c 0,3.950822 1.635914,8.190902 4.117788,10.672776 3.6216,3.6216 4.069782,6.301832 3.719396,22.242856 l -0.398392,18.125068 10.780604,6.711972 C 83.291934,104.09141 88.831922,105.50802 91,102 c 0.679838,-1.1 3.657952,-2.00569 6.618034,-2.012646 3.878306,-0.0092 6.333946,-1.68563 8.789326,-6.000668 1.87405,-3.293414 5.69905,-7.032188 8.5,-8.308386 C 119.80513,83.446728 120,82.681454 120,65.67897 V 48 H 109.4 C 103.57,48 97.72,46.92 96.4,45.6 94.89843,44.09843 94,36.63786 94,25.670368 94,10.386245 94.49555,7.8755252 97.868518,6.0703676 99.996202,4.9316654 112.54517,4 125.75511,4 154.97439,4 156,4.7845104 156,27.135038 156,44.870138 153.35128,48 138.34252,48 H 128 v 17 c 0,16.736012 0.0766,17 4.93041,17 7.52501,0 18.59857,10.851478 20.47674,20.06608 l 1.59285,7.81475 12.68807,-7.16222 c 12.23324,-6.905474 12.52002,-7.245888 8,-9.496036 -4.49775,-2.239068 -4.71073,-3.3586 -5.24632,-27.577084 -0.46418,-20.989328 -0.0188,-25.782716 2.64285,-28.44438 C 175.77867,34.507046 181.90202,34 211.74286,34 c 24.9111,0 36.17098,0.713832 37.85714,2.4 3.32526,3.325262 3.32526,51.874738 0,55.2 -1.60748,1.607486 -10.55404,2.4 -27.09318,2.4 h -24.69319 l -16.40682,9.34477 c -9.02374,5.13962 -16.67629,9.5341 -17.00566,9.76551 -0.32937,0.23142 1.77119,3.90127 4.6679,8.15524 5.91101,8.6806 5.78218,18.26895 -0.33631,25.02979 -2.04827,2.26332 -2.68923,4.46732 -1.58548,5.45188 C 171.97044,156.04953 192,166.04273 192,164.14678 192,162.96605 193.8,160.2 196,158 c 3.39702,-3.39702 6.66666,-4 21.69002,-4 C 243.0601,154 242,151.87818 242,202.65748 242,253.287 242.62836,252 217.9091,252 c -14.41752,0 -16.60144,-0.51052 -21.00001,-4.9091 z M 233.6,241.6 c 1.69112,-1.69112 2.4,-13.16826 2.4,-38.85714 C 236,159.5738 236.1869,160 217.25714,160 c -7.02222,0 -13.50424,1.04709 -14.85714,2.4 -2.59321,2.59321 -3.59186,77.74148 -1.06666,80.26666 2.36952,2.36954 29.73512,1.46488 32.26666,-1.06666 z m -24.45714,-8.74286 c -7.3633,-7.3633 -0.59352,-19.74704 10.11718,-18.50706 3.56858,0.41314 6.68638,2.56972 8.5579,5.91946 2.6369,4.71968 2.5865,5.8153 -0.48302,10.5 -3.974,6.06508 -13.1604,7.11926 -18.19206,2.0876 z m 12.21134,-6.05898 c 1.41492,-3.68722 -3.42192,-7.53044 -6.10304,-4.84932 -2.183,2.183 -0.17948,8.05116 2.74884,8.05116 1.16904,0 2.67844,-1.44084 3.3542,-3.20184 z M 207.4206,190.75392 C 206.63926,189.9726 206,188.09039 206,186.57123 c 0,-2.11836 2.91328,-2.62333 12.5,-2.16666 9.51314,0.45315 12.5,1.31228 12.5,3.59543 0,2.23496 -2.82538,3.14976 -11.0794,3.58726 -6.09368,0.32299 -11.71868,-0.052 -12.5,-0.83334 z m 0,-16 C 206.63926,173.9726 206,172.09039 206,170.57123 c 0,-2.11836 2.91328,-2.62333 12.5,-2.16666 9.51314,0.45315 12.5,1.31228 12.5,3.59543 0,2.23496 -2.82538,3.14976 -11.0794,3.58726 -6.09368,0.32299 -11.71868,-0.052 -12.5,-0.83334 z M 156,208 V 188 H 125 94 v 20 20 h 31 31 z M 21.639102,195.5 C 21.21962,192.54637 19.625451,191 17,191 c -2.625451,0 -4.219619,1.54637 -4.639102,4.5 -0.524257,3.69136 0.309379,4.5 4.639102,4.5 4.329724,0 5.163358,-0.80864 4.639102,-4.5 z m 36,0 C 57.21962,192.54637 55.625452,191 53,191 c -2.625452,0 -4.21962,1.54637 -4.639102,4.5 -0.524256,3.69136 0.309378,4.5 4.639102,4.5 4.329724,0 5.163358,-0.80864 4.639102,-4.5 z m -18,-45.02043 C 40.158854,146.83655 39.31849,146 35.139102,146 31.489064,146 30,147.06242 30,149.66667 c 0,7.75203 8.546266,8.47277 9.639102,0.8129 z m 122.703418,-7.78955 c 8.45856,-7.65489 2.24711,-20.65538 -10.84096,-22.69002 -6.18275,-0.96116 -6.40898,-1.32489 -5.82397,-9.36406 0.78122,-10.73539 -2.26557,-16.250068 -10.99252,-19.896422 -6.31953,-2.640468 -7.70041,-2.576012 -14.33902,0.669316 -5.21688,2.550308 -7.91261,5.517498 -9.30079,10.237396 -1.67039,5.67945 -2.68553,6.50652 -6.97871,5.68583 -6.261684,-1.197 -11.818846,1.64989 -13.829288,7.08463 -0.845412,2.28537 -4.59618,5.15153 -8.335042,6.36926 -8.398932,2.73549 -12.364246,9.73843 -9.612478,16.97613 1.078276,2.83608 3.029198,5.83605 4.33538,6.66659 1.306184,0.83054 20.304012,1.52386 42.217398,1.5407 34.29556,0.0264 40.35172,-0.43019 43.5,-3.27935 z M 53.580884,71.5 53,55 H 35 17 L 16.419115,71.5 15.838231,88 H 35 54.16177 Z M 192,65 V 42 h -7 -7 v 23 23 h 7 7 z m -10,0.11804 c 0,-4.10821 4.1405,-6.126762 6.09164,-2.969756 0.90444,1.463406 1.2007,3.37871 0.65836,4.25623 -1.68085,2.719664 -6.75,1.753542 -6.75,-1.28648 z M 244,65 V 42 h -22 -22 v 23 23 h 22 22 z M 48,44.094106 C 48,27.86125 29.252214,21.793182 24.167162,36.380166 20.31391,47.433614 20.841936,48 35,48 46.562262,48 48,47.568026 48,44.094106 Z M 148,27.929632 C 148,14.460213 148.02238,14.465169 134.11144,24.85504 130.32273,27.684768 125.93022,30 124.3503,30 122.77038,30 117.09315,26.85 111.73423,23 106.37531,19.15 101.54282,16 100.99537,16 100.44792,16 100,21.4 100,28 v 12 h 24 24 z M 131.26393,17.836881 C 134.96877,15.547166 138,13.297166 138,12.836881 138,12.376596 131.5004,12 123.55644,12 h -14.44356 l 6.94356,4.901926 c 3.81896,2.696059 7.28733,4.946058 7.70749,5 0.42016,0.05394 3.79516,-1.77533 7.5,-4.065045 z" + id="path11690" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/connect_orange64.png b/doc/htmldoc/static/img/connect_orange64.png new file mode 100644 index 0000000000..5d82b5eed5 Binary files /dev/null and b/doc/htmldoc/static/img/connect_orange64.png differ diff --git a/doc/htmldoc/static/img/dev_black.png b/doc/htmldoc/static/img/dev_black.png deleted file mode 100644 index 287653266f..0000000000 Binary files a/doc/htmldoc/static/img/dev_black.png and /dev/null differ diff --git a/doc/htmldoc/static/img/dev_orange.png b/doc/htmldoc/static/img/dev_orange.png new file mode 100644 index 0000000000..9e785d8923 Binary files /dev/null and b/doc/htmldoc/static/img/dev_orange.png differ diff --git a/doc/htmldoc/static/img/dev_orange.svg b/doc/htmldoc/static/img/dev_orange.svg new file mode 100644 index 0000000000..1b00aaa7e9 --- /dev/null +++ b/doc/htmldoc/static/img/dev_orange.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg9881" + width="390.66666" + height="396" + viewBox="0 0 390.66666 396" + sodipodi:docname="dev_orange.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs9885" /> + <sodipodi:namedview + id="namedview9883" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="2.1464646" + inkscape:cx="117.40235" + inkscape:cy="198.23294" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g9887" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g9887"> + <path + style="fill:#fe6532;stroke-width:1.33333" + d="m 161.58233,379.24325 c -12.64752,-2.28216 -29.72964,-7.87827 -42.66666,-13.97761 -5.13334,-2.42019 -9.93334,-4.43868 -10.66667,-4.48556 -0.73333,-0.0468 -4.03333,-2.06915 -7.33333,-4.49394 -3.300001,-2.4248 -9.000002,-5.93626 -12.666672,-7.80325 -8.91289,-4.53827 -26.74299,-22.01203 -30.97673,-30.35767 -1.86009,-3.66666 -5.17197,-9.27752 -7.35972,-12.46856 -10.98784,-16.02681 -21.90779,-43.72366 -25.57402,-64.86477 -2.6954,-15.54287 -2.6954,-44.45713 0,-60 3.90071,-22.49325 13.35264,-45.97085 26.59982,-66.07116 8.41381,-12.76651 33.13966,-37.492355 45.906165,-45.906169 29.758047,-19.612148 60.135077,-28.680826 96.071157,-28.680826 35.93608,0 66.3131,9.068678 96.07116,28.680826 12.7665,8.413814 37.49234,33.139659 45.90615,45.906169 19.61215,29.75805 28.68083,60.13508 28.68083,96.07116 0,35.93608 -9.06868,66.31311 -28.68083,96.07116 -8.41381,12.76651 -33.13965,37.49235 -45.90615,45.90616 -20.10032,13.24719 -43.57791,22.69911 -66.07116,26.59983 -14.96527,2.59522 -46.61338,2.53032 -61.33334,-0.12574 z m 69.85766,-23.68096 c 15.02528,-4.18427 31.73754,-11.81723 43.89008,-20.04584 15.41752,-10.43937 14.23496,-8.2406 11.09986,-20.63821 -7.0469,-27.86671 -25.55244,-50.69226 -51.51426,-63.53998 -27.21714,-13.46893 -56.79348,-13.3506 -84.66667,0.33878 -10.71,5.26 -14.5286,8.09221 -24.72009,18.33458 -13.95754,14.02724 -21.68414,27.29548 -26.127505,44.86662 -3.135093,12.39761 -4.317657,10.19884 11.099865,20.63821 16.19948,10.96884 37.7154,19.58272 58.30692,23.34312 3.35912,0.61344 16.00748,0.90725 28.10748,0.65292 18.72729,-0.39363 23.8631,-0.98125 34.52432,-3.9502 z m -51.74926,-3.92817 c -3.97372,-0.83886 -7.46765,-2.25334 -7.76432,-3.14331 -0.52668,-1.58004 0.53136,-7.06495 11.60718,-60.17195 2.96014,-14.1935 5.38208,-26.43242 5.38208,-27.19762 0,-1.69507 21.21006,-0.31928 23.0227,1.49336 0.71367,0.71366 0.0391,6.81634 -1.66073,15.02293 -4.39167,21.20312 -14.57641,69.45276 -15.37139,72.82103 -0.81009,3.4323 -3.52976,3.64244 -15.21552,1.17556 z m -40.87197,-28.98147 c -7.04011,-6.89008 -13.38999,-13.61579 -14.11085,-14.946 -1.09307,-2.01709 0.75211,-4.52628 11.11522,-15.11523 6.83423,-6.98314 13.37587,-13.21238 14.53699,-13.84274 1.58024,-0.85788 4.01112,0.67957 9.66667,6.11388 4.15554,3.99298 7.55554,7.98786 7.55554,8.87752 0,0.88964 -2.40276,4.06578 -5.33948,7.05808 l -5.33948,5.44053 5.33948,5.21387 c 2.93672,2.86762 5.27172,6.14209 5.1889,7.2766 -0.0828,1.1345 -3.67458,5.30008 -7.98168,9.25682 l -7.83111,7.1941 z m 84.56539,4.36772 -8.29336,-8.29336 5.5791,-5.68469 c 3.06851,-3.12659 5.57911,-6.18258 5.57911,-6.7911 0,-0.60852 -2.38915,-3.49553 -5.30921,-6.4156 -6.2346,-6.2346 -6.08664,-6.83573 4.00624,-16.27644 l 6.90021,-6.45434 13.20139,13.15184 c 8.0903,8.05996 13.20137,14.20365 13.20137,15.86854 0,1.66606 -5.13804,7.83547 -13.28575,15.9526 l -13.28576,13.2359 z M 80.857698,301.12522 c 2.04091,-6.8132 10.4176,-23.46741 15.797074,-31.4071 9.824858,-14.50075 27.789008,-29.87319 44.009378,-37.6601 l 9.3815,-4.50377 -8.89833,-9.39889 c -14.95539,-15.79671 -20.94829,-32.02344 -19.92862,-53.95995 1.15019,-24.74421 12.27596,-43.88481 33.47182,-57.58436 11.63572,-7.520535 22.44545,-10.485835 38.22515,-10.485835 15.77969,0 26.58942,2.9653 38.22514,10.485835 21.19587,13.69955 32.32164,32.84015 33.47183,57.58436 1.01967,21.93651 -4.97323,38.16324 -19.92863,53.95995 l -8.89833,9.39889 9.03872,4.33921 c 17.88188,8.58455 34.1134,22.75523 45.31905,39.5651 6.27524,9.41365 13.85513,24.89702 15.50241,31.66666 0.49072,2.01667 1.27718,3.65687 1.74768,3.64488 2.02664,-0.0516 15.33786,-20.63952 20.80047,-32.1712 9.45509,-19.9599 12.82245,-34.21176 13.65837,-57.80701 0.78834,-22.25228 -1.0389,-35.95221 -7.20226,-54 -14.47718,-42.39262 -48.01765,-76.796605 -90.26768,-92.591636 -31.1136,-11.631712 -71.81995,-11.631712 -102.93355,0 -42.250026,15.795031 -75.790502,50.199016 -90.267682,92.591636 -6.16336,18.04779 -7.99059,31.74772 -7.20225,54 0.83591,23.59525 4.20327,37.84711 13.65837,57.80701 5.37357,11.34371 18.76152,32.11672 20.73396,32.1712 0.43392,0.012 1.55281,-2.52821 2.48641,-5.64488 z M 214.59504,213.71589 c 10.38684,-5.11343 19.79289,-14.72955 24.74721,-25.29991 3.08987,-6.59242 3.57342,-9.3381 3.57342,-20.29076 0,-11.4041 -0.41127,-13.53052 -4.12607,-21.33333 -8.79091,-18.46501 -25.7478,-29.29285 -45.87393,-29.29285 -20.12614,0 -37.08303,10.82784 -45.87394,29.29285 -3.7148,7.80281 -4.12606,9.92923 -4.12606,21.33333 0,10.92972 0.48642,13.7043 3.54721,20.23354 6.25816,13.34982 18.30592,24.05265 32.16751,28.57654 3.46797,1.13182 9.78037,1.67695 16.49132,1.42418 9.01445,-0.33952 12.34264,-1.13316 19.47333,-4.64359 z" + id="path9891" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/device_orange128.png b/doc/htmldoc/static/img/device_orange128.png new file mode 100644 index 0000000000..3ea4e5c8d7 Binary files /dev/null and b/doc/htmldoc/static/img/device_orange128.png differ diff --git a/doc/htmldoc/static/img/device_orange128.svg b/doc/htmldoc/static/img/device_orange128.svg new file mode 100644 index 0000000000..9294265ac5 --- /dev/null +++ b/doc/htmldoc/static/img/device_orange128.svg @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg8050" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="device_orange128.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs8054" /> + <sodipodi:namedview + id="namedview8052" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="128.15059" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g8060" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g8056"> + <g + id="g8060" + transform="translate(-3.3582544,2.7586213)"> + <path + style="fill:#fed9cc;stroke-width:2" + d="m 146,217.24488 c 0,-0.4153 1.575,-1.9903 3.5,-3.5 3.17211,-2.48774 3.24285,-2.417 0.75511,0.75512 C 147.64237,217.8315 146,218.89096 146,217.24488 Z m -100,-4 c 0,-0.4153 1.575,-1.9903 3.5,-3.5 3.172112,-2.48774 3.242852,-2.417 0.75511,0.75512 C 47.642372,213.8315 46,214.89096 46,213.24488 Z M 27.74489,170.5 c -2.487742,-3.17211 -2.417002,-3.24285 0.75511,-0.75511 1.925,1.50969 3.5,3.08469 3.5,3.5 0,1.64607 -1.642372,0.58661 -4.25511,-2.74489 z M 224,173.24489 c 0,-0.41531 1.575,-1.99031 3.5,-3.5 3.17212,-2.48774 3.24286,-2.417 0.75512,0.75511 C 225.64238,173.8315 224,174.89096 224,173.24489 Z" + id="path8068" /> + <path + style="fill:#feb299;stroke-width:2" + d="m 76.5,220.50152 c 28.325,-0.31298 74.675,-0.31298 103,0 28.325,0.31298 5.15,0.56904 -51.5,0.56904 -56.65,0 -79.825,-0.25606 -51.5,-0.56904 z M 8.6562804,203 c 0.00888,-7.7 0.3703648,-10.60493 0.8033158,-6.45539 0.432951,4.14953 0.4256916,10.44953 -0.01614,13.99999 C 9.0016404,214.09508 8.6474078,210.7 8.6562804,203 Z M 37.5,214.67544 c 1.375,-0.55482 3.625,-0.55482 5,0 1.375,0.55482 0.25,1.00878 -2.5,1.00878 -2.75,0 -3.875,-0.45396 -2.5,-1.00878 z M 246.65628,203 c 0.008,-7.7 0.37036,-10.60493 0.80332,-6.45539 0.43294,4.14953 0.42568,10.44953 -0.016,13.99999 -0.44182,3.55048 -0.79606,0.1554 -0.78718,-7.5446 z m -230.036542,0 c 0.01122,-6.6 0.384602,-9.05888 0.829725,-5.46418 0.445122,3.5947 0.435938,8.9947 -0.02041,12 C 16.972704,212.54112 16.608513,209.6 16.619738,203 Z M 198.34941,204.59544 198,194.19087 l -12.5,-0.71008 -12.5,-0.71007 12.56277,-0.38536 c 14.28636,-0.43823 15.11399,0.3878 13.91282,13.88584 -0.775,8.70896 -0.77756,8.70516 -1.12618,-1.67576 z M 202.84394,203 l 0.156,-10 11.51002,-0.1644 11.51,-0.1644 -10.90884,0.7612 -10.90886,0.76119 -0.75722,9.4032 -0.75722,9.40322 0.156,-10 z m 25.72808,2 c 0.016,-5.5 0.40344,-7.51263 0.86314,-4.4725 0.45972,3.04012 0.44742,7.54012 -0.0272,10 -0.47472,2.45988 -0.85084,-0.0276 -0.83584,-5.5275 z m 10.04772,-2 c 0.012,-6.6 0.3846,-9.05888 0.82972,-5.46418 0.44512,3.5947 0.43594,8.9947 -0.0204,12 -0.45636,3.0053 -0.82054,0.0642 -0.80932,-6.53582 z m -142.028328,7.51174 c 8.575278,-0.3758 22.075278,-0.37352 29.999998,0.006 7.92473,0.3786 0.90859,0.68608 -15.59141,0.68328 -16.5,-0.002 -22.983864,-0.31258 -14.408588,-0.68838 z M 68.504366,203 c 0.0222,-4.4 0.43177,-5.96451 0.910156,-3.47668 0.478386,2.48782 0.460224,6.08782 -0.04036,8 C 68.873576,209.4355 68.482168,207.4 68.504366,203 Z m -42.114468,0 c 0.04076,-3.3 0.488996,-4.40787 0.996084,-2.46194 0.507086,1.94594 0.473738,4.64594 -0.0741,6 C 26.764028,207.89212 26.349138,206.3 26.389898,203 Z m 49.925892,1 c 0,-2.75 0.453946,-3.875 1.008772,-2.5 0.554824,1.375 0.554824,3.625 0,5 -0.554826,1.375 -1.008772,0.25 -1.008772,-2.5 z M 220,205.46618 c 0,-1.95612 -2.13842,-3.52444 -5.5,-4.03368 l -5.5,-0.83318 5.56276,-0.29966 c 5.30432,-0.28574 9.55852,4.24572 6.68432,7.11992 -0.6859,0.6859 -1.24708,-0.19314 -1.24708,-1.9534 z m -37.5,-4.84484 c 1.925,-0.50304 5.075,-0.50304 7,0 1.925,0.50306 0.35,0.91466 -3.5,0.91466 -3.85,0 -5.425,-0.4116 -3.5,-0.91466 z m -90,-12.11048 c 9.625,-0.36662 25.375,-0.36662 35,0 9.625,0.36663 1.75,0.6666 -17.5,0.6666 -19.25,0 -27.125,-0.29997 -17.5,-0.6666 z m -16,-4.00934 c 28.325,-0.31298 74.675,-0.31298 103,0 28.325,0.31297 5.15,0.56905 -51.5,0.56905 -56.65,0 -79.825,-0.25608 -51.5,-0.56905 z M 14.882772,107 c 9.49e-4,-31.9 0.277089,-44.669944 0.613644,-28.377652 0.336555,16.292292 0.335778,42.392292 -0.0017,58.000002 C 15.157187,152.23006 14.881823,138.9 14.882772,107 Z m 226.000008,0 c 9.4e-4,-31.9 0.27708,-44.669944 0.61364,-28.377652 0.33656,16.292292 0.33578,42.392292 -0.002,58.000002 C 241.15718,152.23006 240.88182,138.9 240.88278,107 Z m -62.72489,35.83333 c 0.096,-2.32988 0.56989,-2.8038 1.20834,-1.20833 0.57774,1.44375 0.50669,3.16875 -0.1579,3.83333 -0.66459,0.66459 -1.13728,-0.51666 -1.05044,-2.625 z m -103.999996,-12 c 0.09596,-2.32988 0.569882,-2.8038 1.208334,-1.20833 0.577742,1.44375 0.506688,3.16875 -0.1579,3.83333 -0.664584,0.66459 -1.137282,-0.51666 -1.05044,-2.625 z m 105.999996,-4 c 0.096,-2.32988 0.56989,-2.8038 1.20834,-1.20833 0.57774,1.44375 0.50669,3.16875 -0.1579,3.83333 -0.66459,0.66459 -1.13728,-0.51666 -1.05044,-2.625 z m -31.14373,-4.81042 c -0.70068,-1.13372 0.10212,-1.46902 1.88196,-0.78602 3.46484,1.32958 4.09878,2.76311 1.22191,2.76311 -1.03508,0 -2.43182,-0.88969 -3.10387,-1.97709 z m -76.856266,-7.18958 c 0.09596,-2.32988 0.569882,-2.8038 1.208334,-1.20833 0.577742,1.44375 0.506688,3.16875 -0.1579,3.83333 -0.664584,0.66459 -1.137282,-0.51666 -1.05044,-2.625 z M 174.31579,110 c 0,-2.75 0.45395,-3.875 1.00877,-2.5 0.55483,1.375 0.55483,3.625 0,5 -0.55482,1.375 -1.00877,0.25 -1.00877,-2.5 z m 7.8421,0.83333 c 0.096,-2.32988 0.56989,-2.8038 1.20834,-1.20833 0.57774,1.44375 0.50669,3.16875 -0.1579,3.83333 -0.66459,0.66459 -1.13728,-0.51666 -1.05044,-2.625 z M 196,108.11803 c 0,-1.03508 0.88969,-2.43182 1.97709,-3.10387 1.13372,-0.70068 1.46902,0.10212 0.78602,1.88196 C 197.43353,110.36096 196,110.9949 196,108.11803 Z m 27.52332,0.46745 c 2.48782,-0.47839 6.08782,-0.46023 8,0.0404 1.91218,0.50058 -0.1234,0.89199 -4.52332,0.86979 -4.4,-0.0222 -5.9645,-0.43177 -3.47668,-0.91015 z M 55.128586,100.58626 c -1.08537,-2.8504 -0.855642,-3.080128 1.11959,-1.119594 1.366836,1.356664 1.981342,2.970484 1.365568,3.586254 -0.615774,0.61578 -1.734096,-0.49422 -2.485158,-2.46666 z m 15.029308,-1.752926 c 0.09596,-2.329886 0.569882,-2.8038 1.208334,-1.208334 0.577742,1.44375 0.506688,3.16875 -0.1579,3.83333 -0.664584,0.66459 -1.137282,-0.51666 -1.05044,-2.624996 z M 78.31579,98 c 0,-2.75 0.453946,-3.875 1.008772,-2.5 0.554824,1.375 0.554824,3.625 0,5 -0.554826,1.375 -1.008772,0.25 -1.008772,-2.5 z m 47.23708,2.53301 c 4.70407,-0.42249 11.90407,-0.41655 16,0.0132 4.09592,0.42976 0.24713,0.77543 -8.55287,0.76817 -8.8,-0.007 -12.15121,-0.35888 -7.44713,-0.78137 z m 94.97463,0.0318 c 3.04012,-0.45971 7.54012,-0.44743 10,0.0273 2.45988,0.47472 -0.0276,0.85084 -5.5275,0.83583 -5.5,-0.015 -7.51262,-0.40343 -4.4725,-0.86313 z m -35.19417,-1.898184 c -0.73333,-0.733332 -1.30596,-2.758332 -1.27251,-4.5 0.0499,-2.600614 0.44022,-2.514214 2.18333,0.48334 2.15354,3.70338 1.52921,6.456684 -0.91082,4.01666 z M 176.31579,94 c 0,-2.75 0.45395,-3.875 1.00877,-2.5 0.55483,1.375 0.55483,3.625 0,5 -0.55482,1.375 -1.00877,0.25 -1.00877,-2.5 z M 66.157894,92.833334 c 0.09596,-2.329886 0.569882,-2.8038 1.208334,-1.208334 0.577742,1.44375 0.506688,3.16875 -0.1579,3.833334 -0.664584,0.664582 -1.137282,-0.516668 -1.05044,-2.625 z M 76.31579,82 c 0,-2.75 0.453946,-3.875 1.008772,-2.5 0.554824,1.375 0.554824,3.625 0,5 C 76.769736,85.875 76.31579,84.75 76.31579,82 Z M 60.157894,80.833334 c 0.09596,-2.329886 0.569882,-2.8038 1.208334,-1.208334 0.577742,1.44375 0.506688,3.16875 -0.1579,3.833334 -0.664584,0.664582 -1.137282,-0.516668 -1.05044,-2.625 z M 178.31579,78 c 0,-2.75 0.45395,-3.875 1.00877,-2.5 0.55483,1.375 0.55483,3.625 0,5 -0.55482,1.375 -1.00877,0.25 -1.00877,-2.5 z M 89.466666,75.751824 c 1.356668,-1.366836 2.970482,-1.981342 3.586256,-1.365568 0.615776,0.615774 -0.494224,1.734096 -2.466666,2.485158 -2.850396,1.08537 -3.080124,0.855642 -1.11959,-1.11959 z M 74.31579,66 c 0,-2.75 0.453946,-3.875 1.008772,-2.5 0.554824,1.375 0.554824,3.625 0,5 C 74.769736,69.875 74.31579,68.75 74.31579,66 Z M 22.157894,52.833334 c 0.09596,-2.329886 0.569882,-2.8038 1.208334,-1.208334 0.577742,1.44375 0.506688,3.16875 -0.1579,3.833334 -0.664584,0.664582 -1.137282,-0.516668 -1.05044,-2.625 z m 210.000006,0 c 0.096,-2.329886 0.56988,-2.8038 1.20832,-1.208334 0.57774,1.44375 0.5067,3.16875 -0.1578,3.833334 -0.6646,0.664582 -1.13728,-0.516668 -1.05044,-2.625 z" + id="path8066" /> + <path + style="fill:#fe8b66;stroke-width:2" + d="M 70,54 C 68.197416,52.83508 67.950734,52.049028 69.381966,52.030626 70.692048,52.013782 72.320162,52.9 73,54 c 1.53461,2.48305 0.842246,2.48305 -3,0 z" + id="path8064" /> + <path + style="fill:#fe6532;stroke-width:2" + d="m 14.828047,223.00986 c -4.629316,-4.62932 -4.948122,-6.17868 -4.409091,-21.42774 0.562043,-15.90008 0.784712,-16.57462 6.809201,-20.62735 6.186897,-4.16199 6.203459,-4.22025 2.5,-8.79383 C 16.275868,167.89755 16,163.11935 16,107.58702 16,39.79649 16.118165,39.204172 31.08776,31.957516 38.85706,28.196462 43.668058,28 128,28 c 84.33194,0 89.14294,0.19646 96.91224,3.957516 C 239.88184,39.204172 240,39.79649 240,107.58702 c 0,55.53233 -0.27586,60.31053 -3.72816,64.57392 -3.70346,4.57358 -3.6869,4.63184 2.5,8.79383 6.0245,4.05273 6.24716,4.72727 6.8092,20.62735 0.53904,15.24906 0.22022,16.79842 -4.40908,21.42774 L 236.18182,228 H 128 19.818182 Z M 236,218 c 3.10264,-3.10264 4,-6.66666 4,-15.8866 C 240,182.78548 247.50972,184 128,184 8.4902872,184 16,182.78548 16,202.1134 16,223.52862 7.3909118,222 128,222 c 101.33334,0 104.10256,-0.1026 108,-4 z M 73.309976,214.34252 C 69.442956,210.06952 68.857112,195.94289 72.4,192.4 c 1.686316,-1.68632 12.952576,-2.4 37.88659,-2.4 34.4036,0 35.58161,0.13566 38.6,4.44501 4.29036,6.12535 3.89842,14.76997 -0.88659,19.55499 -3.68339,3.68338 -6.66667,4 -37.69002,4 -30.09837,0 -34.042902,-0.38992 -37.000004,-3.65748 z m 67.526454,-3.5565 C 142.86717,210.00676 144,207.12474 144,202.73766 v -6.83438 l -33.5,0.54836 c -33.270374,0.5446 -33.50448,0.57996 -34.153528,5.15844 C 75.021346,210.95774 78.305152,212 109.08131,212 c 15.72535,0 30.01515,-0.54628 31.75512,-1.21398 z m 31.96753,2.4243 c -0.58877,-1.53432 -0.78553,-6.25932 -0.43723,-10.5 L 173,195 185.5,194.40457 198,193.80913 V 204.90456 216 h -12.06277 c -8.47328,0 -12.38132,-0.83012 -13.13327,-2.78968 z M 192,204 c 0,-3.11112 -1.33333,-4 -6,-4 -4.66667,0 -6,0.88888 -6,4 0,3.11112 1.33333,4 6,4 4.66667,0 6,-0.88888 6,-4 z m 12,1.0998 V 194 h 12.10452 12.10452 L 227.60452,204.5 227,215 215.5,215.5998 204,216.19962 Z M 222,204 c 0,-3.11112 -1.33334,-4 -6,-4 -4.66666,0 -6,0.88888 -6,4 0,3.11112 1.33334,4 6,4 4.66666,0 6,-0.88888 6,-4 z m -190.5,7.89026 c -5.51866,-3.29388 -4.652352,-15.043 1.401662,-19.00974 6.383928,-4.18291 10.713402,-3.1689 15.845314,3.71114 3.84857,5.15954 3.937406,6.0096 1.149566,11 -3.306536,5.91888 -12.200144,7.99698 -18.396542,4.2986 z m 12.139102,-9.4107 C 44.119328,199.11359 43.278592,198 40.257136,198 c -4.787022,0 -7.059154,3.02522 -5.44041,7.24358 1.710802,4.45828 8.076502,2.46394 8.822376,-2.76402 z M 227.2,171.2 234,164.4 V 136.2 108 h -6.97316 c -6.1115,0 -7.34366,0.88675 -9.97154,7.17615 -3.22668,7.72252 -7.64258,8.31534 -8.6944,1.16719 -1.0246,-6.96316 -3.64456,-5.04515 -6.3609,4.65666 -1.39488,4.98201 -3.72612,9 -5.22182,9 -2.86544,0 -3.08429,-0.66696 -7.83822,-23.8873 -1.67634,-8.188014 -3.3091,-15.148508 -3.62836,-15.467764 -0.31925,-0.319256 -2.22293,13.396374 -4.2304,30.479184 -3.04155,25.88247 -4.17097,30.95931 -6.7758,30.45766 -2.93777,-0.56576 -5.41894,-9.95739 -11.23419,-42.52324 -1.59277,-8.91961 -3.66972,-7.00583 -5.90538,5.44146 -1.71646,9.55653 -6.14983,9.76627 -10.56861,0.5 l -3.33807,-7 h -15.69234 c -12.10377,0 -15.95561,-0.68605 -16.84356,-3 -1.72415,-4.49307 -4.13296,-3.62418 -5.54454,2 -1.83541,7.31287 -4.85895,6.13328 -8.971286,-3.5 L 92.578872,95 90.42453,105 c -1.184888,5.5 -3.277112,16.1098 -4.649388,23.57733 -1.924104,10.47042 -3.213586,13.43936 -5.635094,12.9744 C 77.023988,140.95341 76.516658,138.35766 71.04166,95 69.24752,80.79184 67.688056,83.337996 63.934984,106.60314 c -1.364484,8.4584 -3.62893,16.94895 -5.0321,18.8679 -2.358702,3.22572 -2.710252,3.11321 -4.658762,-1.49102 -1.15915,-2.73901 -3.127434,-9.00731 -4.373966,-13.92954 -1.998872,-7.89305 -2.56418,-8.54232 -4.788774,-5.5 C 43.259604,107.04191 39.703936,108 32.279514,108 H 22 v 28.2 28.2 l 6.8,6.8 6.8,6.8 H 128 220.4 Z M 178.0413,89.396534 c 2.69807,-24.207084 6.15604,-32.488742 9.65111,-23.113914 0.96729,2.594558 3.38901,13.448584 5.38161,24.120056 1.99259,10.671474 4.26406,19.006414 5.04771,18.522094 0.78365,-0.48433 2.01763,-4.04053 2.74217,-7.90268 1.66852,-8.893956 6.20216,-9.131432 9.96722,-0.52209 1.56342,3.575 2.916,5.375 3.00574,4 C 213.9442,102.85509 217.42034,102 224,102 h 10 V 76.90068 C 234,49.292012 232.06868,42.495874 223.05588,38.38937 214.73608,34.598614 39.693988,35.021284 32.29005,38.850008 23.790542,43.245276 22,49.726014 22,76.094106 V 100 h 8.69662 c 8.288976,0 8.843922,-0.374992 11.83911,-8 3.110696,-7.919064 6.807786,-10.33165 8.428296,-5.5 0.461166,1.375 1.905074,6.55 3.208684,11.5 1.303608,4.95 2.630686,8.1 2.949062,7 0.318374,-1.1 2.578728,-13.065474 5.023008,-26.58994 3.627948,-20.073838 5.032862,-24.476892 7.649682,-23.974402 3.182386,0.611094 3.89949,4.257552 9.092008,46.232722 0.793888,6.41761 1.942892,11.16892 2.553344,10.55847 0.610452,-0.61045 2.598372,-8.55605 4.417598,-17.656888 4.12341,-20.627726 8.342328,-23.151922 12.377944,-7.405776 l 2.659254,10.375848 2.61761,-6.415046 c 3.33813,-8.18086 6.5041,-7.07602 10.02945,3.500012 l 2.79166,8.375 h 15.43334 c 8.78331,0 16.40472,0.97139 17.68774,2.25441 2.2226,2.2226 3.11693,0.0297 7.65634,-18.773306 1.54227,-6.38833 4.69907,-9.024894 6.77805,-5.661032 0.79287,1.282892 3.07582,11.523196 5.07323,22.756228 4.22638,23.76831 5.10293,22.49588 9.07927,-13.179766 z" + id="path8062" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/device_orange64.png b/doc/htmldoc/static/img/device_orange64.png new file mode 100644 index 0000000000..875d33c9dd Binary files /dev/null and b/doc/htmldoc/static/img/device_orange64.png differ diff --git a/doc/htmldoc/static/img/email_orange.png b/doc/htmldoc/static/img/email_orange.png new file mode 100644 index 0000000000..857ccdfac9 Binary files /dev/null and b/doc/htmldoc/static/img/email_orange.png differ diff --git a/doc/htmldoc/static/img/email_orange.svg b/doc/htmldoc/static/img/email_orange.svg new file mode 100644 index 0000000000..1f912940e1 --- /dev/null +++ b/doc/htmldoc/static/img/email_orange.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg6303" + width="546.1333" + height="546.1333" + viewBox="0 0 546.1333 546.1333" + sodipodi:docname="email_orange.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs6307" /> + <sodipodi:namedview + id="namedview6305" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="1.5563966" + inkscape:cx="165.76752" + inkscape:cy="273.38791" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g6309" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g6309"> + <path + style="fill:#fe6532;stroke-width:1.06667" + d="m 33.145687,502.24587 c -14.2604,-5.06963 -25.292272,-16.25332 -30.251626,-30.66794 -1.97482,-5.73989 -2.03955,-11.30054 -2.03955,-175.19406 0,-163.89353 0.0647,-169.45417 2.03955,-175.19406 5.032495,-14.62722 16.101527,-25.720934 30.662125,-30.730514 5.904668,-2.03151 10.990146,-2.07542 240.364974,-2.07542 227.96286,0 234.49382,0.0554 240.26072,2.03955 14.62722,5.0325 25.72094,16.101534 30.73052,30.662134 2.02205,5.87718 2.07541,10.38487 2.07541,175.29831 0,164.91344 -0.0533,169.42113 -2.07541,175.29831 -5.00958,14.5606 -16.1033,25.62963 -30.73052,30.66212 -5.76978,1.9851 -12.19578,2.03748 -240.69437,1.96161 -225.975184,-0.075 -234.975118,-0.15216 -240.341823,-2.06004 z M 414.99042,396.38833 338.9949,320.39281 312.59136,346.64334 c -14.52194,14.4378 -27.59034,27.03579 -29.04088,27.99553 -3.52148,2.32999 -13.60374,2.33003 -17.12531,7e-5 -1.45054,-0.95971 -14.7589,-13.79773 -29.57413,-28.52894 l -26.93679,-26.78402 -76.52894,76.52893 -76.528945,76.52895 H 273.92115 490.98595 Z M 185.12187,295.20545 c -0.14705,-0.3571 -34.46737,-34.61223 -76.26737,-76.12251 L 32.854508,143.60971 v 152.38428 152.38428 l 76.267362,-76.26178 c 41.94705,-41.94396 76.14705,-76.55393 76,-76.91104 z m 329.86594,0.91269 v -151.7324 l -75.99812,75.99813 -75.99811,75.99812 75.72863,75.73427 c 41.65075,41.65384 75.84991,75.73427 75.99812,75.73427 0.14821,0 0.26948,-68.27958 0.26948,-151.73239 z M 383.25449,228.11721 490.98386,120.38388 H 274.18584 c -119.2389,0 -216.798,0.16332 -216.798,0.36293 0,0.80093 216.45772,215.10372 217.2667,215.10372 0.47882,0 49.34879,-48.47999 108.59995,-107.73332 z" + id="path6313" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/email_orange128.png b/doc/htmldoc/static/img/email_orange128.png new file mode 100644 index 0000000000..c04dfcb33e Binary files /dev/null and b/doc/htmldoc/static/img/email_orange128.png differ diff --git a/doc/htmldoc/static/img/email_orange64.png b/doc/htmldoc/static/img/email_orange64.png new file mode 100644 index 0000000000..035be0b303 Binary files /dev/null and b/doc/htmldoc/static/img/email_orange64.png differ diff --git a/doc/htmldoc/static/img/error-jupyter-ebrains.png b/doc/htmldoc/static/img/error-jupyter-ebrains.png new file mode 100644 index 0000000000..56acb74ffc Binary files /dev/null and b/doc/htmldoc/static/img/error-jupyter-ebrains.png differ diff --git a/doc/htmldoc/static/img/eu_logo.jpg b/doc/htmldoc/static/img/eu_logo.jpg new file mode 100644 index 0000000000..20bd92e6c2 Binary files /dev/null and b/doc/htmldoc/static/img/eu_logo.jpg differ diff --git a/doc/htmldoc/static/img/eu_logo.png b/doc/htmldoc/static/img/eu_logo.png new file mode 100644 index 0000000000..5d910c8a7e Binary files /dev/null and b/doc/htmldoc/static/img/eu_logo.png differ diff --git a/doc/htmldoc/static/img/glossary_orange128.png b/doc/htmldoc/static/img/glossary_orange128.png new file mode 100644 index 0000000000..c5a2d9fe95 Binary files /dev/null and b/doc/htmldoc/static/img/glossary_orange128.png differ diff --git a/doc/htmldoc/static/img/glossary_orange128.svg b/doc/htmldoc/static/img/glossary_orange128.svg new file mode 100644 index 0000000000..eb9329bee6 --- /dev/null +++ b/doc/htmldoc/static/img/glossary_orange128.svg @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg6210" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="glossary_orange128.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs6214" /> + <sodipodi:namedview + id="namedview6212" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="114.29647" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g6216" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g6216"> + <g + id="g6222" + transform="translate(-0.21253868,0.69662706)"> + <path + style="fill:#fed9cc;stroke-width:2" + d="M 83.74489,146.5 C 81.257148,143.32789 81.327888,143.25715 84.5,145.74489 87.831496,148.35763 88.890958,150 87.24489,150 c -0.415312,0 -1.990312,-1.575 -3.5,-3.5 z M 172,149.24489 c 0,-0.41531 1.575,-1.99031 3.5,-3.5 3.17211,-2.48774 3.24285,-2.417 0.75511,0.75511 C 173.64237,149.8315 172,150.89096 172,149.24489 Z m -90,-16 c 0,-0.41531 1.575,-1.99031 3.5,-3.5 3.172112,-2.48774 3.242852,-2.417 0.75511,0.75511 C 83.642372,133.8315 82,134.89096 82,133.24489 Z M 173.74489,130.5 c -2.48774,-3.17211 -2.417,-3.24285 0.75511,-0.75511 1.925,1.50969 3.5,3.08469 3.5,3.5 0,1.64607 -1.64237,0.58661 -4.25511,-2.74489 z m 61.99999,-22 c -2.48774,-3.17211 -2.417,-3.24285 0.75512,-0.75511 3.3315,2.61274 4.39096,4.25511 2.74488,4.25511 -0.4153,0 -1.9903,-1.575 -3.5,-3.5 z" + id="path6230" /> + <path + style="fill:#feb299;stroke-width:2" + d="M 204.29966,239.5 204,232 h -78.88197 c -43.385078,0 -79.299568,-0.675 -79.809976,-1.5 -0.510408,-0.825 35.022452,-1.25486 78.961906,-0.95524 86.76776,0.59164 82.93964,0.0358 81.17886,11.7863 -0.71436,4.76722 -0.89716,4.47596 -1.14916,-1.83106 z M 24.31579,226 c 0,-2.75 0.453946,-3.875 1.008772,-2.5 0.554824,1.375 0.554824,3.625 0,5 -0.554826,1.375 -1.008772,0.25 -1.008772,-2.5 z M 204.29966,213.52244 204,206.04486 l -81.5,-0.5455 -81.5,-0.5455 81.56277,-0.47692 c 88.88565,-0.51976 84.67307,-1.0714 82.88605,10.85412 -0.71654,4.78166 -0.8964,4.4986 -1.14916,-1.80862 z M 24.917816,114 c 0,-47.85 0.261044,-67.425 0.580096,-43.5 0.319054,23.925 0.319054,63.075 0,87 -0.319052,23.925 -0.580096,4.35 -0.580096,-43.5 z m 30.00478,-12 c 0,-51.15 0.259004,-72.075 0.575562,-46.5 0.31656,25.575 0.31656,67.425 0,93 -0.316558,25.575 -0.575562,4.65 -0.575562,-46.5 z m 150.000004,0 c 0,-51.15 0.259,-72.075 0.57556,-46.5 0.31656,25.575 0.31656,67.425 0,93 -0.31656,25.575 -0.57556,4.65 -0.57556,-46.5 z m 25.83374,40 c 0,-12.65 0.32474,-17.825 0.72164,-11.5 0.3969,6.325 0.3969,16.675 0,23 -0.3969,6.325 -0.72164,1.15 -0.72164,-11.5 z M 109.5,150.50824 c 11.275,-0.3565 29.725,-0.3565 41,0 11.275,0.35649 2.05,0.64817 -20.5,0.64817 -22.55,0 -31.775,-0.29168 -20.5,-0.64817 z M 80.157894,138.83333 c 0.09596,-2.32988 0.569882,-2.8038 1.208334,-1.20833 0.577742,1.44375 0.506688,3.16875 -0.1579,3.83333 -0.664584,0.66459 -1.137282,-0.51666 -1.05044,-2.625 z m 97.999996,0 c 0.096,-2.32988 0.56989,-2.8038 1.20834,-1.20833 0.57774,1.44375 0.50669,3.16875 -0.1579,3.83333 -0.66459,0.66459 -1.13728,-0.51666 -1.05044,-2.625 z M 109.5,126.50824 c 11.275,-0.3565 29.725,-0.3565 41,0 11.275,0.35649 2.05,0.64817 -20.5,0.64817 -22.55,0 -31.775,-0.29168 -20.5,-0.64817 z m 54.05287,-33.975234 c 4.70407,-0.42249 11.90407,-0.416546 16,0.0132 4.09592,0.429764 0.24713,0.775438 -8.55287,0.768174 -8.8,-0.0073 -12.15121,-0.358882 -7.44713,-0.781374 z m -53.39498,-5.699672 c 0.096,-2.329886 0.56989,-2.8038 1.20834,-1.208334 0.57774,1.44375 0.50669,3.16875 -0.1579,3.833334 -0.66459,0.664582 -1.13728,-0.516668 -1.05044,-2.625 z M 230.75634,68 c 0,-12.65 0.32474,-17.825 0.72164,-11.5 0.3969,6.325 0.3969,16.675 0,23 -0.3969,6.325 -0.72164,1.15 -0.72164,-11.5 z M 91,84 83,82.567622 90.381966,82.28381 C 94.442048,82.127714 98.320162,82.9 99,84 c 0.679838,1.1 0.957952,1.872286 0.618034,1.71619 C 99.278116,85.560094 95.4,84.787808 91,84 Z M 89.625,72.633772 c 1.44375,-0.577742 3.16875,-0.506688 3.833334,0.1579 0.664582,0.664584 -0.516668,1.137282 -2.625,1.05044 -2.329886,-0.09596 -2.8038,-0.569882 -1.208334,-1.208334 z m 35.83039,-10.077236 c 3.55047,-0.441824 9.85047,-0.449084 14,-0.0162 4.14954,0.433018 1.24461,0.79451 -6.45539,0.803384 -7.7,0.0088 -11.09507,-0.34536 -7.54461,-0.787184 z m 38,-20 c 3.55047,-0.441824 9.85047,-0.449084 14,-0.0162 4.14954,0.433018 1.24461,0.79451 -6.45539,0.803384 -7.7,0.0088 -11.09507,-0.34536 -7.54461,-0.787184 z M 146.15789,4.8333334 c 0.096,-2.329886 0.56989,-2.8037988 1.20834,-1.2083334 0.57774,1.44375 0.50669,3.16875 -0.1579,3.8333334 -0.66459,0.6645832 -1.13728,-0.5166668 -1.05044,-2.625 z" + id="path6228" /> + <path + style="fill:#fe8b66;stroke-width:2" + d="m 28,213.24488 c 0,-0.4153 1.575,-1.9903 3.5,-3.5 3.172112,-2.48774 3.242852,-2.417 0.75511,0.75512 C 29.642372,213.8315 28,214.89096 28,213.24488 Z M 75.74489,154.5 c -2.487742,-3.17211 -2.417002,-3.24285 0.75511,-0.75511 1.925,1.50969 3.5,3.08469 3.5,3.5 0,1.64607 -1.642372,0.58661 -4.25511,-2.74489 z M 74,125.24489 c 0,-0.41531 1.575,-1.99031 3.5,-3.5 3.172112,-2.48774 3.242852,-2.417 0.75511,0.75511 C 75.642372,125.8315 74,126.89096 74,125.24489 Z M 181.74489,122.5 c -2.48774,-3.17211 -2.417,-3.24285 0.75511,-0.75511 3.3315,2.61274 4.39096,4.25511 2.74489,4.25511 -0.41531,0 -1.99031,-1.575 -3.5,-3.5 z" + id="path6226" /> + <path + style="fill:#fe6532;stroke-width:2" + d="M 32.830372,253.16822 C 25.210076,249.8367 18.671651,241.75868 15.882124,232.2292 14.479502,227.43762 13.974003,190.94378 14.382974,124 14.97437,27.19535 15.166152,22.717918 19,16.209061 c 2.2,-3.735017 6.538818,-8.6850166 9.641818,-11 C 33.929732,1.2640303 36.752538,1 73.641818,1 111.66667,1 113,1.1355076 113,5 113,8.7941936 111.48218,9.0284768 83.5,9.5534662 L 54,10.106932 V 102.05347 194 h 76 76 V 102.05491 10.109826 L 177.5,9.5549132 C 150.5183,9.0295624 149,8.7869046 149,5 c 0,-3.8383838 1.33333,-4 33,-4 h 33 l 1,10.334736 c 0.94606,9.777224 1.53724,10.694296 10.95894,17 14.26938,9.550124 15.24174,12.34913 14.5943,42.010298 -0.50334,23.058898 -0.95594,25.77313 -5.01772,30.091086 l -4.46446,4.74605 4.46446,4.45877 c 4.08222,4.07701 4.51184,6.63787 5.01772,29.90892 0.64722,29.77411 -0.31554,32.55325 -14.5943,42.12864 L 217,188.35701 216,221.6785 215,255 l -88,0.43276 c -70.194286,0.34522 -89.248348,-0.113 -94.169628,-2.26454 z M 206,238 v -8 H 126.11803 C 44.750264,230 37.948238,229.3715 47.076708,222.6966 50.02036,220.54414 66.4269,220 128.38226,220 H 206 v -8 -8 h -82.09932 c -90.428516,0 -90.71391,0.0362 -97.043828,12.27682 -4.403274,8.515 -2.302012,18.15158 5.364608,24.60262 L 38.306902,246 H 122.15345 206 Z M 44,101.60306 C 44,3.604128 44.28901,6.2184032 34.233746,13.261385 24.338836,20.19205 24,23.585868 24,115.7637 v 85.89218 L 34,197.431 44,193.20613 Z M 225.31122,170.89822 232,165.79643 v -22.89821 c 0,-20.4592 -0.43916,-23.33738 -4.12296,-27.02119 -2.26764,-2.26763 -5.64264,-3.83123 -7.5,-3.47467 -2.97038,0.57024 -3.44336,4.43844 -3.92782,32.12297 -0.30294,17.31107 0.0621,31.47467 0.81122,31.47467 0.7491,0 4.37194,-2.2958 8.05078,-5.10178 z M 229.5,92.380456 c 1.66572,-2.095458 2.5,-10.65882 2.5,-25.660932 V 44.203566 l -6.68878,-5.101784 C 221.63238,36.295802 218.03238,34 217.31122,34 216.59004,34 216,49.403508 216,68.23002 v 34.23002 l 5.5,-3.467304 c 3.025,-1.907018 6.625,-4.882544 8,-6.61228 z M 85,160.09194 c -8.406718,-3.47725 -14,-11.95291 -14,-21.21461 0,-7.27262 1.135106,-9.93551 6.538462,-15.33887 L 84.076924,117 h 45.830216 45.83021 l 6.10642,5.85032 c 7.77346,7.44745 9.59593,16.51122 5.18779,25.80069 -5.75685,12.13167 -11.11002,13.3662 -57.33382,13.22222 C 107.31398,161.8035 87.2,161.00193 85,160.09194 Z m 89.73028,-12.2371 c 6.79619,-5.34588 6.79619,-12.3638 0,-17.70968 C 169.80347,126.26973 166.8928,126 130,126 93.1072,126 90.196526,126.26973 85.269718,130.14516 82.242158,132.52664 80,136.29419 80,139 c 0,2.70581 2.242158,6.47336 5.269718,8.85484 C 90.196526,151.73027 93.1072,152 130,152 c 36.8928,0 39.80347,-0.26973 44.73028,-4.14516 z M 70.977122,89.962982 c -1.448498,-2.34372 12.296314,-39.571052 16.14807,-43.73647 1.410554,-1.52542 3.829492,-2.28812 5.375418,-1.694894 C 95.497448,45.681614 110,81.89583 110,88.229218 110,93.810734 103.06395,92.925944 100.36391,87 98.506478,82.923388 96.659704,82 90.363908,82 c -6.295798,0 -8.142572,0.923388 -10,5 -2.326902,5.106992 -7.125566,6.621712 -9.386786,2.962982 z M 93.260572,69.5 c -0.663274,-2.475 -1.250134,-5.4 -1.304134,-6.5 -0.10534,-2.145992 -5.767106,6.992756 -5.885568,9.5 -0.03898,0.825 1.834098,1.5 4.162392,1.5 3.414038,0 3.999886,-0.870846 3.02731,-4.5 z m 61.556848,19.745388 c -0.58138,-1.515036 3.57573,-9.840036 9.238,-18.5 L 174.35047,55 166.70059,54.350974 c -8.85455,-0.751234 -12.926,-3.436418 -11.36773,-7.4972 1.51083,-3.93717 31.75571,-4.113688 33.25979,-0.19412 0.56134,1.462812 -3.35106,9.337812 -8.69421,17.5 -5.34315,8.162186 -9.75613,15.51534 -9.80663,16.34034 -0.0505,0.825 3.28319,1.513782 7.40819,1.530626 9.16345,0.03742 13.48914,2.506942 11.8542,6.767524 -1.66405,4.33646 -32.88918,4.740814 -34.53678,0.447238 z M 120.07271,71.08761 C 115.91884,66.082508 119.77031,64 133.1808,64 c 10.02415,0 13.22195,0.722402 14.1734,3.20185 1.7624,4.592726 -2.85666,6.732426 -14.60931,6.767524 -6.57027,0.0196 -11.12361,-1.015846 -12.67218,-2.881764 z M 126.72839,7.0133782 C 126.03565,5.2081418 126.42788,2.7721216 127.6,1.6 c 3.04722,-3.0472179 8.82082,-0.2621768 8.02485,3.8709846 -0.88661,4.6037634 -7.29534,5.7148564 -8.89646,1.5423936 z" + id="path6224" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/glossary_orange64.png b/doc/htmldoc/static/img/glossary_orange64.png new file mode 100644 index 0000000000..83a725156c Binary files /dev/null and b/doc/htmldoc/static/img/glossary_orange64.png differ diff --git a/doc/htmldoc/static/img/glossary_transparent128.png b/doc/htmldoc/static/img/glossary_transparent128.png new file mode 100644 index 0000000000..c147e8e2b8 Binary files /dev/null and b/doc/htmldoc/static/img/glossary_transparent128.png differ diff --git a/doc/htmldoc/static/img/hpc-hardware.svg b/doc/htmldoc/static/img/hpc-hardware.svg new file mode 100644 index 0000000000..6511a2bacd --- /dev/null +++ b/doc/htmldoc/static/img/hpc-hardware.svg @@ -0,0 +1,1201 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="106.81866mm" + height="119.92892mm" + viewBox="0 0 106.81866 119.92892" + version="1.1" + id="svg5" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + sodipodi:docname="hpc-hardware.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview7" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + showgrid="false" + inkscape:zoom="1.1775429" + inkscape:cx="128.23312" + inkscape:cy="87.894886" + inkscape:window-width="1846" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" + showguides="true"> + <sodipodi:guide + position="16.38154,206.10899" + orientation="0,-1" + id="guide8041" + inkscape:locked="false" /> + <sodipodi:guide + position="108.61982,232.49289" + orientation="0,-1" + id="guide8043" + inkscape:locked="false" /> + <sodipodi:guide + position="3.5218164,28.323828" + orientation="0,-1" + id="guide24171" + inkscape:locked="false" /> + <sodipodi:guide + position="-35.79499,11.473546" + orientation="1,0" + id="guide24269" + inkscape:locked="false" /> + <sodipodi:guide + position="64.595303,3.9983531" + orientation="0,-1" + id="guide25869" + inkscape:locked="false" /> + <sodipodi:guide + position="23.287055,65.77773" + orientation="0,-1" + id="guide26930" + inkscape:locked="false" /> + </sodipodi:namedview> + <defs + id="defs2"> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-7" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-4" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-1" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-8" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-3" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-80" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-0" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-9" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-93" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-8" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-4" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-4-4" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-4-4-2" /> + <rect + x="211.022" + y="958.54419" + width="101.24367" + height="30.093094" + id="rect26840-34-4-4-7" /> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-50.037667,-170.90713)"> + <path + id="rect5544-6-9-4" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.009587)" + d="m 212.43814,-92.355469 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect5544-6-9-4-5" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.020837)" + d="m 212.42062,-66.785072 h 15.92529 v 6.580576 h -15.92529 z" /> + <path + id="rect5544-6-9-4-1" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(89.992079)" + d="m 212.37923,-75.207726 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect5544-6-9-4-1-8" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.06467)" + d="m 212.35039,-84.181168 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect15587" + style="fill:none;stroke:#0963af;stroke-width:1.27322;stroke-linecap:round;stroke-linejoin:round" + d="M 50.674278,180.81956 H 155.63836 v 56.91895 H 50.674278 Z" /> + <path + id="rect15587-2" + style="fill:none;stroke:#06497f;stroke-width:1.273;stroke-linecap:round;stroke-linejoin:round" + d="M 51.041481,242.28316 H 156.21984 v 39.29223 H 51.041481 Z" /> + <path + id="rect15587-4" + style="fill:none;stroke:#c56800;stroke-width:0.741664;stroke-linecap:round;stroke-linejoin:round" + d="m 58.933085,188.06105 h 34.991534 c 2.334957,0 4.214724,1.87977 4.214724,4.21472 v 38.25785 c 0,2.33496 -1.879767,4.21472 -4.214724,4.21472 H 58.933085 c -2.334957,0 -4.214724,-1.87976 -4.214724,-4.21472 v -38.25785 c 0,-2.33495 1.879767,-4.21472 4.214724,-4.21472 z" /> + <path + id="rect15587-4-7" + style="fill:none;stroke:#0963af;stroke-width:0.601443;stroke-linecap:round;stroke-linejoin:round" + d="m 58.17012,194.61502 h 35.986592 v 37.04512 H 58.17012 Z" /> + <path + id="rect15587-4-7-4" + style="fill:#0862ad;fill-opacity:0.133333;stroke:#0963af;stroke-width:0.477;stroke-linecap:round;stroke-linejoin:round" + d="m 61.242849,246.17159 h 29.424466 c 1.852318,0 3.343534,1.49121 3.343534,3.34353 v 16.48482 c 0,1.85232 -1.491216,3.34353 -3.343534,3.34353 H 61.242849 c -1.852318,0 -3.343534,-1.49121 -3.343534,-3.34353 v -16.48482 c 0,-1.85232 1.491216,-3.34353 3.343534,-3.34353 z" /> + <path + id="rect15587-4-7-4-6" + style="fill:#0862ad;fill-opacity:0.133333;stroke:#0963af;stroke-width:0.486251;stroke-linecap:round;stroke-linejoin:round" + d="m 114.91997,245.49907 h 28.58501 c 2.08215,0 3.75839,1.67624 3.75839,3.75839 v 16.61982 c 0,2.08215 -1.67624,3.75839 -3.75839,3.75839 h -28.58501 c -2.08215,0 -3.75839,-1.67624 -3.75839,-3.75839 v -16.61982 c 0,-2.08215 1.67624,-3.75839 3.75839,-3.75839 z" /> + <path + id="rect15587-4-7-6" + style="fill:none;stroke:#0963af;stroke-width:0.603325;stroke-linecap:round;stroke-linejoin:round" + d="m 111.07133,194.50952 h 35.81633 v 37.4545 h -35.81633 z" /> + <path + id="rect15587-4-4" + style="fill:none;stroke:#c56800;stroke-width:0.741069;stroke-linecap:round;stroke-linejoin:round" + d="m 111.30508,188.07896 h 34.83657 c 2.27921,0 4.1141,1.83489 4.1141,4.1141 v 38.76976 c 0,2.27921 -1.83489,4.1141 -4.1141,4.1141 h -34.83657 c -2.27921,0 -4.1141,-1.83489 -4.1141,-4.1141 v -38.76976 c 0,-2.27921 1.83489,-4.1141 4.1141,-4.1141 z" /> + <path + id="rect21149" + style="fill:#cfcccb;stroke:#06497f;stroke-width:0.62;stroke-linecap:round;stroke-linejoin:round" + d="m 63.067963,198.79463 h 25.931511 v 4.27754 H 63.067963 Z" /> + <path + id="rect21149-8" + style="fill:#cfcccb;stroke:#06497f;stroke-width:0.551534;stroke-linecap:round;stroke-linejoin:round" + d="M 63.163971,204.46294 H 74.456882 V 207.993 H 63.163971 Z" /> + <path + id="rect21149-8-8" + style="fill:#cfcccb;stroke:#06497f;stroke-width:0.52074;stroke-linecap:round;stroke-linejoin:round" + d="m 77.524979,204.87625 h 11.323706 v 3.13832 H 77.524979 Z" /> + <path + id="rect5544-6-9-4-54" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.009587)" + d="m 212.64815,-145.21533 h 15.92528 v 6.58057 h -15.92528 z" /> + <path + id="rect5544-6-9-4-5-0" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.020837)" + d="m 212.62025,-119.64498 h 15.92529 v 6.58057 h -15.92529 z" /> + <path + id="rect5544-6-9-4-1-5" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(89.992079)" + d="m 212.60539,-128.06754 h 15.92528 v 6.58058 h -15.92528 z" /> + <path + id="rect5544-6-9-4-1-8-9" + style="fill:#ffd5c7;fill-rule:evenodd;stroke:#f37f00;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.06467)" + d="m 212.50957,-137.04121 h 15.92528 v 6.58057 h -15.92528 z" /> + <path + id="rect5544-6-9-4-4" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.009587)" + d="m 249.11882,-92.19194 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect5544-6-9-4-5-06" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.020837)" + d="m 249.10132,-66.628731 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect5544-6-9-4-1-2" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(89.992079)" + d="m 249.05986,-75.032974 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect5544-6-9-4-1-8-99" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.06467)" + d="m 249.03122,-84.052887 h 15.92528 v 6.580576 h -15.92528 z" /> + <path + id="rect5544-6-9-4-54-0" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.009587)" + d="m 249.23129,-145.41461 h 15.92528 v 6.58057 h -15.92528 z" /> + <path + id="rect5544-6-9-4-5-0-8" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.020837)" + d="m 249.20335,-119.85142 h 15.92529 v 6.58058 h -15.92529 z" /> + <path + id="rect5544-6-9-4-1-5-1" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(89.992079)" + d="m 249.1886,-128.25563 h 15.92528 v 6.58058 H 249.1886 Z" /> + <path + id="rect5544-6-9-4-1-8-9-3" + style="fill:#ffffff;fill-rule:evenodd;stroke:#c56800;stroke-width:0.656686;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.5" + transform="rotate(90.06467)" + d="m 249.09251,-137.27565 h 15.92529 v 6.58058 h -15.92529 z" /> + <path + id="rect21149-4" + style="fill:#cfcccb;stroke:#06497f;stroke-width:0.62;stroke-linecap:round;stroke-linejoin:round" + d="m 115.9278,199.01349 h 25.93151 v 4.27754 H 115.9278 Z" /> + <path + id="rect21149-8-6" + style="fill:#cfcccb;stroke:#06497f;stroke-width:0.52074;stroke-linecap:round;stroke-linejoin:round" + d="m 116.00841,205.08894 h 11.3237 v 3.13832 h -11.3237 z" /> + <path + id="rect21149-8-8-9" + style="fill:#cfcccb;stroke:#06497f;stroke-width:0.52074;stroke-linecap:round;stroke-linejoin:round" + d="m 130.38483,205.09511 h 11.3237 v 3.13831 h -11.3237 z" /> + <path + id="rect24316" + style="fill-opacity:0;stroke:#0963af;stroke-width:1.273;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.866667" + d="m 91.794914,171.54362 h 21.794336 v 9.2252 H 91.794914 Z" /> + <path + id="rect24316-8" + style="fill:none;stroke:#06497f;stroke-width:1.273;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.866667" + d="m 69.983627,281.60092 h 65.827343 v 8.59861 H 69.983627 Z" /> + <path + id="rect24316-4" + style="fill-opacity:0;stroke:#c56800;stroke-width:0.836;stroke-linecap:round;stroke-linejoin:round" + d="m 117.54829,183.71756 h 23.98745 v 4.31903 h -23.98745 z" /> + <path + id="rect24316-4-3" + style="fill-opacity:0;stroke:#c56800;stroke-width:0.836;stroke-linecap:round;stroke-linejoin:round" + d="m 64.667031,183.71465 h 23.987444 v 4.31902 H 64.667031 Z" /> + <path + id="rect24316-4-3-3" + style="fill:none;stroke:#0963af;stroke-width:0.537289;stroke-linecap:round;stroke-linejoin:round" + d="m 69.18457,190.85629 h 13.668376 v 3.79315 H 69.18457 Z" /> + <path + id="rect24316-4-3-3-8" + style="fill:none;stroke:#0963af;stroke-width:0.537289;stroke-linecap:round;stroke-linejoin:round" + d="m 121.81507,190.70882 h 13.66838 v 3.79314 h -13.66838 z" /> + <g + aria-label="Node" + id="text25481" + style="font-size:5.64444px;-inkscape-font-specification:sans-serif;fill:none;stroke:#0963af;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 95.686684,174.42575 h 0.749652 l 1.824522,3.44234 v -3.44234 h 0.54019 v 4.11482 h -0.749652 l -1.824521,-3.44233 v 3.44233 h -0.540191 z" + style="fill:#171615;stroke:none;stroke-width:0.682" + id="path5268" /> + <path + d="m 101.08308,175.8093 q -0.4079,0 -0.64492,0.31971 -0.23703,0.31695 -0.23703,0.87092 0,0.55397 0.23427,0.87367 0.23702,0.31695 0.64768,0.31695 0.40514,0 0.64216,-0.3197 0.23703,-0.31971 0.23703,-0.87092 0,-0.54846 -0.23703,-0.86817 -0.23702,-0.32246 -0.64216,-0.32246 z m 0,-0.42994 q 0.66146,0 1.03904,0.42994 0.37758,0.42995 0.37758,1.19063 0,0.75792 -0.37758,1.19062 -0.37758,0.42995 -1.03904,0.42995 -0.66422,0 -1.0418,-0.42995 -0.374825,-0.4327 -0.374825,-1.19062 0,-0.76068 0.374825,-1.19063 0.37758,-0.42994 1.0418,-0.42994 z" + style="fill:#171615;stroke:none;stroke-width:0.682" + id="path5270" /> + <path + d="m 105.37153,175.9223 v -1.67018 h 0.50712 v 4.28845 h -0.50712 v -0.46302 q -0.15985,0.27561 -0.40514,0.41066 -0.24254,0.13229 -0.58429,0.13229 -0.55948,0 -0.91226,-0.44648 -0.35002,-0.44649 -0.35002,-1.17409 0,-0.72761 0.35002,-1.17409 0.35278,-0.44648 0.91226,-0.44648 0.34175,0 0.58429,0.13504 0.24529,0.1323 0.40514,0.4079 z m -1.72806,1.07763 q 0,0.55948 0.22875,0.87919 0.23152,0.31694 0.6339,0.31694 0.40239,0 0.6339,-0.31694 0.23151,-0.31971 0.23151,-0.87919 0,-0.55949 -0.23151,-0.87643 -0.23151,-0.31971 -0.6339,-0.31971 -0.40238,0 -0.6339,0.31971 -0.22875,0.31694 -0.22875,0.87643 z" + style="fill:#171615;stroke:none;stroke-width:0.682" + id="path5272" /> + <path + d="m 109.56352,176.87039 v 0.24805 h -2.33164 q 0.0331,0.52365 0.31419,0.79926 0.28388,0.27285 0.78824,0.27285 0.29214,0 0.56499,-0.0717 0.27561,-0.0717 0.54571,-0.21497 v 0.47956 q -0.27285,0.11575 -0.55949,0.17639 -0.28663,0.0606 -0.58153,0.0606 -0.73863,0 -1.17133,-0.42995 -0.42995,-0.42995 -0.42995,-1.16306 0,-0.75792 0.4079,-1.20165 0.41066,-0.44648 1.10519,-0.44648 0.62287,0 0.98392,0.40238 0.3638,0.39963 0.3638,1.08865 z m -0.50712,-0.14883 q -0.006,-0.41616 -0.23427,-0.66421 -0.22599,-0.24805 -0.60082,-0.24805 -0.42443,0 -0.68075,0.23978 -0.25356,0.23978 -0.29214,0.67524 z" + style="fill:#171615;stroke:none;stroke-width:0.682" + id="path5274" /> + </g> + <g + aria-label="Socket" + id="text25689" + style="font-size:3.52778px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + transform="translate(-1.0583333)"> + <path + d="m 73.044049,184.73693 v 0.33934 q -0.198093,-0.0947 -0.373793,-0.14125 -0.1757,-0.0465 -0.339342,-0.0465 -0.284221,0 -0.43925,0.11025 -0.153307,0.11024 -0.153307,0.3135 0,0.17053 0.10163,0.25838 0.103353,0.0861 0.389296,0.13953 l 0.210151,0.0431 q 0.389296,0.0741 0.573609,0.26183 0.186036,0.18603 0.186036,0.49954 0,0.37379 -0.251493,0.56672 -0.249769,0.19292 -0.733805,0.19292 -0.182591,0 -0.389296,-0.0413 -0.204984,-0.0413 -0.42547,-0.1223 v -0.35829 q 0.211873,0.11886 0.415134,0.17915 0.203261,0.0603 0.399632,0.0603 0.298001,0 0.45992,-0.11713 0.16192,-0.11713 0.16192,-0.33417 0,-0.18948 -0.117134,-0.29628 -0.11541,-0.1068 -0.380683,-0.1602 l -0.211873,-0.0413 q -0.389296,-0.0775 -0.563274,-0.24288 -0.173977,-0.16536 -0.173977,-0.45992 0,-0.34106 0.239434,-0.53743 0.241157,-0.19638 0.663181,-0.19638 0.180868,0 0.368626,0.0327 0.187758,0.0327 0.384128,0.0982 z" + style="stroke-width:0.682" + id="path5277" /> + <path + d="m 74.475487,185.51724 q -0.254937,0 -0.403076,0.19982 -0.148139,0.19809 -0.148139,0.54432 0,0.34624 0.146416,0.54605 0.14814,0.1981 0.404799,0.1981 0.253215,0 0.401354,-0.19982 0.148139,-0.19982 0.148139,-0.54433 0,-0.34278 -0.148139,-0.5426 -0.148139,-0.20154 -0.401354,-0.20154 z m 0,-0.26871 q 0.413412,0 0.649401,0.26871 0.235989,0.26872 0.235989,0.74414 0,0.47371 -0.235989,0.74415 -0.235989,0.26871 -0.649401,0.26871 -0.415134,0 -0.651123,-0.26871 -0.234267,-0.27044 -0.234267,-0.74415 0,-0.47542 0.234267,-0.74414 0.235989,-0.26871 0.651123,-0.26871 z" + style="stroke-width:0.682" + id="path5279" /> + <path + d="m 77.274629,185.3691 v 0.29628 q -0.134359,-0.0741 -0.27044,-0.11024 -0.134359,-0.0379 -0.272163,-0.0379 -0.308336,0 -0.478868,0.19637 -0.170533,0.19465 -0.170533,0.54777 0,0.35313 0.170533,0.5495 0.170532,0.19465 0.478868,0.19465 0.137804,0 0.272163,-0.0362 0.136081,-0.0379 0.27044,-0.11196 v 0.29283 q -0.132636,0.062 -0.275608,0.093 -0.141249,0.031 -0.301446,0.031 -0.435804,0 -0.692464,-0.27388 -0.25666,-0.27389 -0.25666,-0.73898 0,-0.47197 0.258382,-0.74241 0.260105,-0.27044 0.711413,-0.27044 0.146417,0 0.285943,0.031 0.139527,0.0293 0.27044,0.0896 z" + style="stroke-width:0.682" + id="path5281" /> + <path + d="m 77.813787,184.544 h 0.318672 v 1.58303 l 0.945679,-0.832 h 0.404799 l -1.023194,0.90262 1.066258,1.02664 h -0.413412 l -0.98013,-0.94224 v 0.94224 h -0.318672 z" + style="stroke-width:0.682" + id="path5283" /> + <path + d="m 81.393244,186.18042 v 0.15503 h -1.457276 q 0.02067,0.32729 0.19637,0.49954 0.177423,0.17054 0.492649,0.17054 0.18259,0 0.353123,-0.0448 0.172255,-0.0448 0.341064,-0.13436 v 0.29972 q -0.170532,0.0724 -0.349677,0.11025 -0.179145,0.0379 -0.363458,0.0379 -0.461643,0 -0.732083,-0.26871 -0.268718,-0.26872 -0.268718,-0.72692 0,-0.4737 0.254937,-0.75103 0.25666,-0.27905 0.690743,-0.27905 0.389296,0 0.614949,0.25149 0.227377,0.24977 0.227377,0.6804 z m -0.316949,-0.093 q -0.0034,-0.26011 -0.146417,-0.41514 -0.141249,-0.15503 -0.375515,-0.15503 -0.265273,0 -0.42547,0.14986 -0.158474,0.14987 -0.18259,0.42203 z" + style="stroke-width:0.682" + id="path5285" /> + <path + d="m 82.226957,184.74726 v 0.54777 h 0.652846 v 0.24633 h -0.652846 v 1.04731 q 0,0.23599 0.06373,0.30317 0.06546,0.0672 0.26355,0.0672 h 0.325562 v 0.26527 h -0.325562 q -0.366903,0 -0.506429,-0.13608 -0.139526,-0.13781 -0.139526,-0.49954 v -1.04731 h -0.232545 v -0.24633 h 0.232545 v -0.54777 z" + style="stroke-width:0.682" + id="path5287" /> + </g> + <g + aria-label="Socket" + id="text25689-8" + style="font-size:3.52778px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + transform="translate(-0.44938208)"> + <path + d="m 125.21319,184.67603 v 0.33934 q -0.1981,-0.0947 -0.3738,-0.14125 -0.1757,-0.0465 -0.33934,-0.0465 -0.28422,0 -0.43925,0.11025 -0.15331,0.11024 -0.15331,0.3135 0,0.17053 0.10163,0.25838 0.10336,0.0861 0.3893,0.13953 l 0.21015,0.0431 q 0.3893,0.0741 0.57361,0.26183 0.18603,0.18604 0.18603,0.49954 0,0.37379 -0.25149,0.56672 -0.24977,0.19293 -0.7338,0.19293 -0.18259,0 -0.3893,-0.0413 -0.20498,-0.0413 -0.42547,-0.1223 v -0.35829 q 0.21187,0.11886 0.41514,0.17915 0.20326,0.0603 0.39963,0.0603 0.298,0 0.45992,-0.11714 0.16192,-0.11713 0.16192,-0.33417 0,-0.18948 -0.11714,-0.29628 -0.11541,-0.1068 -0.38068,-0.1602 l -0.21187,-0.0413 q -0.3893,-0.0775 -0.56328,-0.24288 -0.17397,-0.16536 -0.17397,-0.45992 0,-0.34106 0.23943,-0.53743 0.24116,-0.19637 0.66318,-0.19637 0.18087,0 0.36863,0.0327 0.18775,0.0327 0.38413,0.0982 z" + style="stroke-width:0.682" + id="path5290" /> + <path + d="m 126.64462,185.45635 q -0.25493,0 -0.40307,0.19981 -0.14814,0.19809 -0.14814,0.54433 0,0.34623 0.14641,0.54604 0.14814,0.1981 0.4048,0.1981 0.25322,0 0.40136,-0.19982 0.14814,-0.19981 0.14814,-0.54432 0,-0.34279 -0.14814,-0.54261 -0.14814,-0.20153 -0.40136,-0.20153 z m 0,-0.26872 q 0.41342,0 0.6494,0.26872 0.23599,0.26871 0.23599,0.74414 0,0.4737 -0.23599,0.74414 -0.23598,0.26872 -0.6494,0.26872 -0.41513,0 -0.65112,-0.26872 -0.23427,-0.27044 -0.23427,-0.74414 0,-0.47543 0.23427,-0.74414 0.23599,-0.26872 0.65112,-0.26872 z" + style="stroke-width:0.682" + id="path5292" /> + <path + d="m 129.44377,185.30821 v 0.29627 q -0.13436,-0.0741 -0.27044,-0.11024 -0.13436,-0.0379 -0.27217,-0.0379 -0.30833,0 -0.47887,0.19637 -0.17053,0.19464 -0.17053,0.54777 0,0.35312 0.17053,0.54949 0.17054,0.19465 0.47887,0.19465 0.13781,0 0.27217,-0.0362 0.13608,-0.0379 0.27044,-0.11196 v 0.29283 q -0.13264,0.062 -0.27561,0.093 -0.14125,0.031 -0.30145,0.031 -0.4358,0 -0.69246,-0.27389 -0.25666,-0.27389 -0.25666,-0.73897 0,-0.47198 0.25838,-0.74242 0.2601,-0.27044 0.71141,-0.27044 0.14642,0 0.28595,0.031 0.13952,0.0293 0.27044,0.0896 z" + style="stroke-width:0.682" + id="path5294" /> + <path + d="m 129.98292,184.48311 h 0.31867 v 1.58302 l 0.94568,-0.83199 h 0.4048 l -1.02319,0.90261 1.06626,1.02664 h -0.41342 l -0.98013,-0.94223 v 0.94223 h -0.31867 z" + style="stroke-width:0.682" + id="path5296" /> + <path + d="m 133.56238,186.11953 v 0.15503 h -1.45728 q 0.0207,0.32728 0.19637,0.49954 0.17743,0.17053 0.49265,0.17053 0.18259,0 0.35313,-0.0448 0.17225,-0.0448 0.34106,-0.13436 v 0.29973 q -0.17053,0.0723 -0.34968,0.11024 -0.17914,0.0379 -0.36345,0.0379 -0.46165,0 -0.73209,-0.26872 -0.26872,-0.26872 -0.26872,-0.72692 0,-0.4737 0.25494,-0.75103 0.25666,-0.27905 0.69074,-0.27905 0.3893,0 0.61495,0.25149 0.22738,0.24977 0.22738,0.68041 z m -0.31695,-0.093 q -0.003,-0.26011 -0.14642,-0.41514 -0.14124,-0.15502 -0.37551,-0.15502 -0.26527,0 -0.42547,0.14986 -0.15848,0.14986 -0.18259,0.42202 z" + style="stroke-width:0.682" + id="path5298" /> + <path + d="m 134.39609,184.68637 v 0.54777 h 0.65285 v 0.24632 h -0.65285 v 1.04731 q 0,0.23599 0.0637,0.30317 0.0654,0.0672 0.26355,0.0672 h 0.32556 v 0.26527 h -0.32556 q -0.36691,0 -0.50643,-0.13608 -0.13953,-0.1378 -0.13953,-0.49954 v -1.04731 h -0.23254 v -0.24632 h 0.23254 v -0.54777 z" + style="stroke-width:0.682" + id="path5300" /> + </g> + <g + aria-label="CPU" + id="text25689-8-0" + style="font-size:3.175px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 74.966803,191.96256 v 0.33021 q -0.15813,-0.14728 -0.337964,-0.22014 -0.178284,-0.0729 -0.379822,-0.0729 -0.396875,0 -0.607715,0.24339 -0.210839,0.24185 -0.210839,0.70073 0,0.45734 0.210839,0.70074 0.21084,0.24184 0.607715,0.24184 0.201538,0 0.379822,-0.0729 0.179834,-0.0729 0.337964,-0.22014 v 0.32711 q -0.164331,0.11162 -0.348816,0.16743 -0.182935,0.0558 -0.387573,0.0558 -0.52555,0 -0.827857,-0.32091 -0.302307,-0.32246 -0.302307,-0.87902 0,-0.5581 0.302307,-0.87901 0.302307,-0.32246 0.827857,-0.32246 0.207739,0 0.390674,0.0558 0.184484,0.0543 0.345715,0.16433 z" + style="stroke-width:0.682" + id="path5303" /> + <path + d="m 75.763654,192.04162 v 0.86972 h 0.393774 q 0.218591,0 0.337964,-0.11317 0.119372,-0.11318 0.119372,-0.32247 0,-0.20773 -0.119372,-0.32091 -0.119373,-0.11317 -0.337964,-0.11317 z m -0.31316,-0.25735 h 0.706934 q 0.389123,0 0.587561,0.17674 0.199988,0.17518 0.199988,0.51469 0,0.34262 -0.199988,0.5178 -0.198438,0.17519 -0.587561,0.17519 h -0.393774 v 0.93017 h -0.31316 z" + style="stroke-width:0.682" + id="path5305" /> + <path + d="m 77.329449,191.78427 h 0.31471 v 1.40612 q 0,0.37207 0.134875,0.5364 0.134876,0.16278 0.437183,0.16278 0.300757,0 0.435632,-0.16278 0.134876,-0.16433 0.134876,-0.5364 v -1.40612 h 0.314709 v 1.44488 q 0,0.45268 -0.224792,0.68368 -0.223242,0.23099 -0.660425,0.23099 -0.438733,0 -0.663525,-0.23099 -0.223243,-0.231 -0.223243,-0.68368 z" + style="stroke-width:0.682" + id="path5307" /> + </g> + <g + aria-label="CPU" + id="text25689-8-0-8" + style="font-size:3.175px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 127.40224,191.58776 v 0.33021 q -0.15813,-0.14728 -0.33796,-0.22014 -0.17828,-0.0729 -0.37982,-0.0729 -0.39688,0 -0.60772,0.2434 -0.21084,0.24185 -0.21084,0.70073 0,0.45734 0.21084,0.70073 0.21084,0.24185 0.60772,0.24185 0.20154,0 0.37982,-0.0729 0.17983,-0.0729 0.33796,-0.22015 v 0.32712 q -0.16433,0.11162 -0.34881,0.16743 -0.18294,0.0558 -0.38758,0.0558 -0.52555,0 -0.82785,-0.32091 -0.30231,-0.32246 -0.30231,-0.87902 0,-0.5581 0.30231,-0.87901 0.3023,-0.32247 0.82785,-0.32247 0.20774,0 0.39068,0.0558 0.18448,0.0543 0.34571,0.16433 z" + style="stroke-width:0.682" + id="path5310" /> + <path + d="m 128.19909,191.66682 v 0.86972 h 0.39378 q 0.21859,0 0.33796,-0.11318 0.11937,-0.11317 0.11937,-0.32246 0,-0.20774 -0.11937,-0.32091 -0.11937,-0.11317 -0.33796,-0.11317 z m -0.31316,-0.25735 h 0.70694 q 0.38912,0 0.58756,0.17674 0.19999,0.17518 0.19999,0.51469 0,0.34262 -0.19999,0.5178 -0.19844,0.17518 -0.58756,0.17518 h -0.39378 v 0.93018 h -0.31316 z" + style="stroke-width:0.682" + id="path5312" /> + <path + d="m 129.76489,191.40947 h 0.31471 v 1.40612 q 0,0.37207 0.13487,0.5364 0.13488,0.16278 0.43719,0.16278 0.30075,0 0.43563,-0.16278 0.13487,-0.16433 0.13487,-0.5364 v -1.40612 h 0.31471 v 1.44488 q 0,0.45268 -0.22479,0.68367 -0.22324,0.231 -0.66042,0.231 -0.43874,0 -0.66353,-0.231 -0.22324,-0.23099 -0.22324,-0.68367 z" + style="stroke-width:0.682" + id="path5314" /> + </g> + <g + aria-label="Cache (L1)" + id="text26770" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="0.28273461" + inkscape:transform-center-y="-0.65097615" + transform="translate(-0.11357477,-0.12381512)"> + <path + d="m 70.17574,199.91489 v 0.29352 q -0.14056,-0.13091 -0.300413,-0.19568 -0.158474,-0.0648 -0.337619,-0.0648 -0.352777,0 -0.54019,0.21635 -0.187413,0.21497 -0.187413,0.62287 0,0.40652 0.187413,0.62287 0.187413,0.21498 0.54019,0.21498 0.179145,0 0.337619,-0.0648 0.159853,-0.0648 0.300413,-0.19568 v 0.29076 q -0.146072,0.0992 -0.310059,0.14883 -0.162608,0.0496 -0.344509,0.0496 -0.467155,0 -0.735872,-0.28525 -0.268717,-0.28663 -0.268717,-0.78135 0,-0.49609 0.268717,-0.78135 0.268717,-0.28663 0.735872,-0.28663 0.184657,0 0.347265,0.0496 0.163987,0.0482 0.307303,0.14607 z" + style="stroke-width:0.682" + id="path5317" /> + <path + d="m 71.296084,201.03799 q -0.307303,0 -0.425814,0.0703 -0.118511,0.0703 -0.118511,0.23978 0,0.13505 0.08819,0.21497 0.08957,0.0786 0.242535,0.0786 0.21084,0 0.337619,-0.14883 0.128157,-0.1502 0.128157,-0.39825 v -0.0565 z m 0.505739,-0.10473 v 0.88057 h -0.253559 v -0.23427 q -0.08682,0.14056 -0.216351,0.20808 -0.129536,0.0661 -0.316949,0.0661 -0.237022,0 -0.377582,-0.13229 -0.139182,-0.13367 -0.139182,-0.35691 0,-0.26045 0.173633,-0.39274 0.175011,-0.13229 0.520898,-0.13229 h 0.355533 v -0.0248 q 0,-0.17501 -0.115755,-0.27009 -0.114377,-0.0965 -0.32246,-0.0965 -0.132292,0 -0.257693,0.0317 -0.125402,0.0317 -0.241157,0.0951 v -0.23426 q 0.139182,-0.0538 0.270096,-0.0799 0.130913,-0.0276 0.254936,-0.0276 0.334863,0 0.500228,0.17363 0.165364,0.17363 0.165364,0.52641 z" + style="stroke-width:0.682" + id="path5319" /> + <path + d="m 73.434797,200.32968 v 0.23702 q -0.107486,-0.0592 -0.216351,-0.0882 -0.107487,-0.0303 -0.21773,-0.0303 -0.246669,0 -0.383095,0.1571 -0.136425,0.15572 -0.136425,0.43821 0,0.2825 0.136425,0.4396 0.136426,0.15572 0.383095,0.15572 0.110243,0 0.21773,-0.0289 0.108865,-0.0303 0.216351,-0.0896 v 0.23426 q -0.106108,0.0496 -0.220485,0.0744 -0.113,0.0248 -0.241157,0.0248 -0.348643,0 -0.553971,-0.21911 -0.205327,-0.21911 -0.205327,-0.59118 0,-0.37758 0.206705,-0.59393 0.208084,-0.21635 0.569129,-0.21635 0.117134,0 0.228755,0.0248 0.111621,0.0234 0.216351,0.0717 z" + style="stroke-width:0.682" + id="path5321" /> + <path + d="m 75.158722,200.88227 v 0.93156 h -0.253559 v -0.92329 q 0,-0.21911 -0.08544,-0.32797 -0.08544,-0.10887 -0.256315,-0.10887 -0.205328,0 -0.323839,0.13092 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -2.14423 h 0.254937 v 0.8406 q 0.09095,-0.13918 0.213596,-0.20808 0.124023,-0.0689 0.285253,-0.0689 0.265961,0 0.402387,0.16536 0.136426,0.16399 0.136426,0.48369 z" + style="stroke-width:0.682" + id="path5323" /> + <path + d="m 76.984621,200.97874 v 0.12402 h -1.165819 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282497,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214973,-0.21498 -0.214973,-0.58153 0,-0.37897 0.203949,-0.60083 0.205328,-0.22324 0.552593,-0.22324 0.311436,0 0.491959,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.3321 -0.112999,-0.12403 -0.300412,-0.12403 -0.212218,0 -0.340375,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" + style="stroke-width:0.682" + id="path5325" /> + <path + d="m 78.906983,199.67236 q -0.184657,0.31695 -0.27423,0.627 -0.08957,0.31006 -0.08957,0.62839 0,0.31833 0.08957,0.63114 0.09095,0.31144 0.27423,0.62701 h -0.220486 q -0.206706,-0.32384 -0.310059,-0.63666 -0.101974,-0.31281 -0.101974,-0.62149 0,-0.3073 0.101974,-0.61874 0.101975,-0.31144 0.310059,-0.63665 z" + style="stroke-width:0.682" + id="path5327" /> + <path + d="m 79.409967,199.75642 h 0.278363 v 1.82314 h 1.001833 v 0.23427 h -1.280196 z" + style="stroke-width:0.682" + id="path5329" /> + <path + d="m 82.726902,199.67236 h 0.220486 q 0.206706,0.32521 0.30868,0.63665 0.103353,0.31144 0.103353,0.61874 0,0.30868 -0.103353,0.62149 -0.101974,0.31282 -0.30868,0.63666 h -0.220486 q 0.183279,-0.31557 0.272852,-0.62701 0.09095,-0.31281 0.09095,-0.63114 0,-0.31833 -0.09095,-0.62839 -0.08957,-0.31005 -0.272852,-0.627 z" + style="stroke-width:0.682" + id="path5333" /> + </g> + <g + aria-label="Cache (L1)" + id="text26770-1" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="0.28273461" + inkscape:transform-center-y="-0.65097615"> + <path + d="m 122.98762,200.04803 v 0.29352 q -0.14056,-0.13092 -0.30041,-0.19568 -0.15847,-0.0648 -0.33762,-0.0648 -0.35278,0 -0.54019,0.21635 -0.18741,0.21497 -0.18741,0.62287 0,0.40652 0.18741,0.62288 0.18741,0.21497 0.54019,0.21497 0.17915,0 0.33762,-0.0648 0.15985,-0.0648 0.30041,-0.19568 v 0.29077 q -0.14607,0.0992 -0.31006,0.14882 -0.16261,0.0496 -0.34451,0.0496 -0.46715,0 -0.73587,-0.28525 -0.26872,-0.28663 -0.26872,-0.78135 0,-0.49609 0.26872,-0.78134 0.26872,-0.28664 0.73587,-0.28664 0.18466,0 0.34727,0.0496 0.16399,0.0482 0.3073,0.14608 z" + style="stroke-width:0.682" + id="path5336" /> + <path + d="m 124.10797,201.17113 q -0.30731,0 -0.42582,0.0703 -0.11851,0.0703 -0.11851,0.23977 0,0.13505 0.0882,0.21498 0.0896,0.0786 0.24253,0.0786 0.21084,0 0.33762,-0.14883 0.12816,-0.15021 0.12816,-0.39825 v -0.0565 z m 0.50574,-0.10474 v 0.88057 h -0.25356 v -0.23427 q -0.0868,0.14056 -0.21636,0.20809 -0.12953,0.0661 -0.31694,0.0661 -0.23703,0 -0.37759,-0.13229 -0.13918,-0.13367 -0.13918,-0.35691 0,-0.26045 0.17363,-0.39274 0.17502,-0.13229 0.5209,-0.13229 h 0.35554 v -0.0248 q 0,-0.17501 -0.11576,-0.27009 -0.11438,-0.0965 -0.32246,-0.0965 -0.13229,0 -0.25769,0.0317 -0.1254,0.0317 -0.24116,0.0951 v -0.23427 q 0.13918,-0.0537 0.2701,-0.0799 0.13091,-0.0276 0.25493,-0.0276 0.33487,0 0.50023,0.17363 0.16537,0.17364 0.16537,0.52641 z" + style="stroke-width:0.682" + id="path5338" /> + <path + d="m 126.24668,200.46281 v 0.23703 q -0.10749,-0.0593 -0.21635,-0.0882 -0.10749,-0.0303 -0.21773,-0.0303 -0.24667,0 -0.3831,0.15709 -0.13642,0.15572 -0.13642,0.43822 0,0.2825 0.13642,0.43959 0.13643,0.15572 0.3831,0.15572 0.11024,0 0.21773,-0.0289 0.10886,-0.0303 0.21635,-0.0896 v 0.23426 q -0.10611,0.0496 -0.22049,0.0744 -0.113,0.0248 -0.24115,0.0248 -0.34865,0 -0.55397,-0.2191 -0.20533,-0.21911 -0.20533,-0.59118 0,-0.37758 0.2067,-0.59394 0.20809,-0.21635 0.56913,-0.21635 0.11714,0 0.22876,0.0248 0.11162,0.0234 0.21635,0.0716 z" + style="stroke-width:0.682" + id="path5340" /> + <path + d="m 127.9706,201.01541 v 0.93155 h -0.25356 v -0.92328 q 0,-0.21911 -0.0854,-0.32798 -0.0854,-0.10886 -0.25632,-0.10886 -0.20533,0 -0.32384,0.13091 -0.11851,0.13091 -0.11851,0.35691 v 0.8723 H 126.678 v -2.14423 h 0.25494 v 0.84061 q 0.0909,-0.13918 0.2136,-0.20809 0.12402,-0.0689 0.28525,-0.0689 0.26596,0 0.40239,0.16537 0.13642,0.16398 0.13642,0.48369 z" + style="stroke-width:0.682" + id="path5342" /> + <path + d="m 129.7965,201.11187 v 0.12402 h -1.16582 q 0.0165,0.26183 0.1571,0.39963 0.14194,0.13643 0.39412,0.13643 0.14607,0 0.2825,-0.0358 0.1378,-0.0358 0.27285,-0.10749 v 0.23978 q -0.13643,0.0579 -0.27974,0.0882 -0.14332,0.0303 -0.29077,0.0303 -0.36931,0 -0.58567,-0.21497 -0.21497,-0.21497 -0.21497,-0.58153 0,-0.37896 0.20395,-0.60083 0.20533,-0.22324 0.55259,-0.22324 0.31144,0 0.49196,0.2012 0.1819,0.19981 0.1819,0.54432 z m -0.25356,-0.0744 q -0.003,-0.20809 -0.11713,-0.33211 -0.113,-0.12402 -0.30041,-0.12402 -0.21222,0 -0.34038,0.11988 -0.12678,0.11989 -0.14607,0.33762 z" + style="stroke-width:0.682" + id="path5344" /> + <path + d="m 131.71886,199.80549 q -0.18465,0.31695 -0.27422,0.62701 -0.0896,0.31006 -0.0896,0.62838 0,0.31833 0.0896,0.63114 0.091,0.31144 0.27422,0.62701 h -0.22048 q -0.20671,-0.32384 -0.31006,-0.63665 -0.10197,-0.31282 -0.10197,-0.6215 0,-0.3073 0.10197,-0.61874 0.10198,-0.31143 0.31006,-0.63665 z" + style="stroke-width:0.682" + id="path5346" /> + <path + d="m 132.22185,199.88955 h 0.27836 v 1.82314 h 1.00184 v 0.23427 h -1.2802 z" + style="stroke-width:0.682" + id="path5348" /> + <path + d="m 135.53878,199.80549 h 0.22049 q 0.20671,0.32522 0.30868,0.63665 0.10335,0.31144 0.10335,0.61874 0,0.30868 -0.10335,0.6215 -0.10197,0.31281 -0.30868,0.63665 h -0.22049 q 0.18328,-0.31557 0.27286,-0.62701 0.0909,-0.31281 0.0909,-0.63114 0,-0.31832 -0.0909,-0.62838 -0.0896,-0.31006 -0.27286,-0.62701 z" + style="stroke-width:0.682" + id="path5352" /> + </g> + <g + aria-label="L2" + id="text26770-2" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="-8.119414" + inkscape:transform-center-y="-3.3466291"> + <path + d="m 67.117462,205.20309 h 0.278364 v 1.82314 h 1.001833 v 0.23427 h -1.280197 z" + style="stroke-width:0.682" + id="path5355" /> + <path + d="m 68.954386,207.02623 h 0.971516 v 0.23427 h -1.306379 v -0.23427 q 0.158474,-0.16398 0.431326,-0.43959 0.274229,-0.27699 0.344509,-0.35691 0.133669,-0.15021 0.186035,-0.25356 0.05374,-0.10473 0.05374,-0.20533 0,-0.16399 -0.115755,-0.26734 -0.114377,-0.10335 -0.299034,-0.10335 -0.130913,0 -0.276985,0.0455 -0.144694,0.0455 -0.310059,0.13781 v -0.28112 q 0.168121,-0.0675 0.314193,-0.10198 0.146072,-0.0345 0.267339,-0.0345 0.319705,0 0.509874,0.15985 0.190169,0.15986 0.190169,0.4272 0,0.12677 -0.04823,0.24115 -0.04685,0.113 -0.172255,0.26734 -0.03445,0.04 -0.219108,0.23151 -0.184657,0.19017 -0.520898,0.5333 z" + style="stroke-width:0.682" + id="path5357" /> + <path + d="m 83.081464,207.2306 h 0.971516 v 0.23427 h -1.306379 v -0.23427 q 0.158474,-0.16398 0.431326,-0.43959 0.274229,-0.27699 0.344509,-0.35691 0.133669,-0.15021 0.186035,-0.25356 0.05374,-0.10473 0.05374,-0.20533 0,-0.16399 -0.115755,-0.26734 -0.114377,-0.10335 -0.299034,-0.10335 -0.130913,0 -0.276985,0.0455 -0.144694,0.0455 -0.310059,0.13781 v -0.28112 q 0.168121,-0.0675 0.314193,-0.10198 0.146072,-0.0345 0.267339,-0.0345 0.319705,0 0.509874,0.15985 0.190169,0.15986 0.190169,0.4272 0,0.12677 -0.04823,0.24115 -0.04685,0.113 -0.172255,0.26734 -0.03445,0.04 -0.219108,0.23151 -0.184657,0.19017 -0.520898,0.5333 z" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682;stroke-linecap:round;stroke-linejoin:round" + id="path5357-3" /> + </g> + <g + aria-label="L2" + id="text26770-2-8" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="-8.119414" + inkscape:transform-center-y="-3.3466291"> + <path + d="m 119.72077,205.68438 h 0.27837 v 1.82314 h 1.00183 v 0.23427 h -1.2802 z" + style="stroke-width:0.682" + id="path5360" /> + <path + d="m 121.5577,207.50752 h 0.97151 v 0.23427 h -1.30638 v -0.23427 q 0.15848,-0.16398 0.43133,-0.43959 0.27423,-0.27698 0.34451,-0.35691 0.13367,-0.15021 0.18603,-0.25356 0.0537,-0.10473 0.0537,-0.20533 0,-0.16398 -0.11576,-0.26734 -0.11438,-0.10335 -0.29903,-0.10335 -0.13092,0 -0.27699,0.0455 -0.14469,0.0455 -0.31006,0.1378 v -0.28112 q 0.16812,-0.0675 0.3142,-0.10197 0.14607,-0.0345 0.26733,-0.0345 0.31971,0 0.50988,0.15986 0.19017,0.15985 0.19017,0.42719 0,0.12678 -0.0482,0.24115 -0.0469,0.113 -0.17226,0.26734 -0.0345,0.04 -0.21911,0.23151 -0.18465,0.19017 -0.52089,0.5333 z" + style="stroke-width:0.682" + id="path5362" /> + <path + d="m 135.88909,207.58529 h 0.97151 v 0.23427 h -1.30638 v -0.23427 q 0.15848,-0.16398 0.43133,-0.43959 0.27423,-0.27698 0.34451,-0.35691 0.13367,-0.15021 0.18603,-0.25356 0.0537,-0.10473 0.0537,-0.20533 0,-0.16398 -0.11576,-0.26734 -0.11438,-0.10335 -0.29903,-0.10335 -0.13092,0 -0.27699,0.0455 -0.14469,0.0455 -0.31006,0.1378 v -0.28112 q 0.16812,-0.0675 0.3142,-0.10197 0.14607,-0.0345 0.26733,-0.0345 0.31971,0 0.50988,0.15986 0.19017,0.15985 0.19017,0.42719 0,0.12678 -0.0482,0.24115 -0.0469,0.113 -0.17226,0.26734 -0.0345,0.04 -0.21911,0.23151 -0.18465,0.19017 -0.52089,0.5333 z" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682;stroke-linecap:round;stroke-linejoin:round" + id="path5362-7" /> + </g> + <g + aria-label="L3" + id="text26770-2-4" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682001;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="-8.119414" + inkscape:transform-center-y="-3.3466291"> + <path + d="m 133.89167,205.73565 h 0.27836 v 1.82314 h 1.00184 v 0.23427 h -1.2802 z" + style="stroke-width:0.682" + id="path5365" /> + <path + d="m 134.67783,200.83836 q 0.19982,0.0427 0.31144,0.17777 0.113,0.13504 0.113,0.33348 0,0.30455 -0.20946,0.47129 -0.20946,0.16674 -0.59531,0.16674 -0.12954,0 -0.26734,-0.0262 -0.13643,-0.0248 -0.2825,-0.0758 v -0.26872 q 0.11575,0.0675 0.25356,0.10198 0.1378,0.0344 0.28801,0.0344 0.26182,0 0.39825,-0.10336 0.1378,-0.10335 0.1378,-0.30041 0,-0.1819 -0.12815,-0.28387 -0.12678,-0.10336 -0.35416,-0.10336 h -0.23978 v -0.22875 h 0.25081 q 0.20532,0 0.31419,-0.0813 0.10886,-0.0827 0.10886,-0.23703 0,-0.15847 -0.113,-0.24253 -0.11162,-0.0854 -0.32108,-0.0854 -0.11438,0 -0.24529,0.0248 -0.13091,0.0248 -0.28801,0.0772 v -0.24804 q 0.15848,-0.0441 0.29628,-0.0661 0.13918,-0.0221 0.26183,-0.0221 0.31694,0 0.5016,0.1447 0.18466,0.14331 0.18466,0.3886 0,0.17088 -0.0978,0.28939 -0.0978,0.11714 -0.27837,0.16261 z" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682;stroke-linecap:round;stroke-linejoin:round" + id="path5367-6" /> + </g> + <path + d="m 80.996933,205.32986 h 0.278364 v 1.82314 h 1.001833 v 0.23427 h -1.280197 z" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682;stroke-linecap:round;stroke-linejoin:round" + id="path5370" /> + <path + d="m 81.762985,200.61402 q 0.199815,0.0427 0.311436,0.17776 0.113,0.13505 0.113,0.33349 0,0.30455 -0.209462,0.47129 -0.209462,0.16674 -0.595312,0.16674 -0.129536,0 -0.267339,-0.0262 -0.136426,-0.0248 -0.282498,-0.0758 v -0.26872 q 0.115755,0.0675 0.253559,0.10197 0.137804,0.0344 0.28801,0.0344 0.261827,0 0.398252,-0.10335 0.137804,-0.10335 0.137804,-0.30041 0,-0.1819 -0.128157,-0.28388 -0.12678,-0.10335 -0.354156,-0.10335 h -0.239778 v -0.22875 h 0.250802 q 0.205328,0 0.314193,-0.0813 0.108865,-0.0827 0.108865,-0.23702 0,-0.15847 -0.112999,-0.24253 -0.111621,-0.0854 -0.321083,-0.0854 -0.114377,0 -0.245291,0.0248 -0.130913,0.0248 -0.288009,0.0772 v -0.24804 q 0.158474,-0.0441 0.296278,-0.0662 0.139181,-0.022 0.261827,-0.022 0.316948,0 0.501605,0.1447 0.184657,0.14331 0.184657,0.3886 0,0.17088 -0.09784,0.28939 -0.09784,0.11713 -0.278364,0.16261 z" + style="font-size:2.82222px;-inkscape-font-specification:sans-serif;fill:#171615;stroke-width:0.682;stroke-linecap:round;stroke-linejoin:round" + id="path5372" /> + <g + aria-label="Core 1" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-191.32035,282.28201)" + id="text26838" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5375" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5377" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5379" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5381" /> + <path + d="m 240.42262,967.09703 h 1.71876 v -5.93231 l -1.8698,0.375 v -0.95833 l 1.85938,-0.375 h 1.05209 v 6.89064 h 1.71875 v 0.88542 h -4.47918 z" + id="path5383" /> + </g> + <g + aria-label="Thread 1" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-191.71993,320.59756)" + id="text26838-0" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5386" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5388" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5390" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5392" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5394" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5396" /> + <path + d="m 253.03203,967.09703 h 1.71876 v -5.93231 l -1.8698,0.375 v -0.95833 l 1.85938,-0.375 h 1.05209 v 6.89064 h 1.71876 v 0.88542 h -4.47919 z" + id="path5398" /> + </g> + <g + aria-label="Thread 5" + transform="matrix(3.8165545e-4,-0.26458306,0.26458306,3.8165545e-4,-138.9853,318.41449)" + id="text26838-0-00" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-4);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5401" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5403" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5405" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5407" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5409" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5411" /> + <path + d="m 252.86016,960.20639 h 4.13022 v 0.88541 h -3.16668 v 1.90626 q 0.22917,-0.0781 0.45834,-0.11458 0.22917,-0.0417 0.45833,-0.0417 1.30209,0 2.06251,0.71354 0.76042,0.71355 0.76042,1.9323 0,1.25521 -0.78125,1.95313 -0.78126,0.69271 -2.20314,0.69271 -0.48958,0 -1,-0.0833 -0.50521,-0.0833 -1.04688,-0.25 v -1.0573 q 0.46875,0.25521 0.96876,0.38021 0.5,0.125 1.05729,0.125 0.90105,0 1.42709,-0.47396 0.52604,-0.47396 0.52604,-1.28646 0,-0.8125 -0.52604,-1.28646 -0.52604,-0.47396 -1.42709,-0.47396 -0.42187,0 -0.84375,0.0937 -0.41667,0.0937 -0.85417,0.29167 z" + id="path5413" /> + </g> + <g + aria-label="Thread 6" + transform="matrix(3.8165545e-4,-0.26458306,0.26458306,3.8165545e-4,-130.22297,318.35615)" + id="text26838-0-00-6" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-4-4);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5416" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5418" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5420" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5422" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5424" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5426" /> + <path + d="m 255.22996,963.67515 q -0.70834,0 -1.12501,0.48437 -0.41145,0.48438 -0.41145,1.32813 0,0.83855 0.41145,1.32813 0.41667,0.48438 1.12501,0.48438 0.70833,0 1.11979,-0.48438 0.41667,-0.48958 0.41667,-1.32813 0,-0.84375 -0.41667,-1.32813 -0.41146,-0.48437 -1.11979,-0.48437 z m 2.08855,-3.29689 v 0.95834 q -0.39584,-0.1875 -0.80209,-0.28646 -0.40104,-0.099 -0.79688,-0.099 -1.04167,0 -1.59375,0.70313 -0.54688,0.70312 -0.625,2.125 0.30729,-0.45312 0.77083,-0.69271 0.46355,-0.24479 1.02084,-0.24479 1.17188,0 1.84896,0.71354 0.6823,0.70834 0.6823,1.9323 0,1.19792 -0.70834,1.92188 -0.70833,0.72396 -1.88542,0.72396 -1.34896,0 -2.06251,-1.03125 -0.71354,-1.03646 -0.71354,-3.00001 0,-1.84375 0.875,-2.93751 0.875,-1.09896 2.34897,-1.09896 0.39583,0 0.79687,0.0781 0.40626,0.0781 0.84376,0.23437 z" + id="path5428" /> + </g> + <g + aria-label="Thread 7" + transform="matrix(3.8165545e-4,-0.26458306,0.26458306,3.8165545e-4,-121.44797,318.39406)" + id="text26838-0-00-6-6" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-4-4-2);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5431" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5433" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5435" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5437" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5439" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5441" /> + <path + d="m 252.58412,960.20639 h 5.00001 v 0.44791 l -2.82292,7.32815 h -1.09896 l 2.65625,-6.89065 h -3.73438 z" + id="path5443" /> + </g> + <g + aria-label="Thread 8" + transform="matrix(3.8165545e-4,-0.26458306,0.26458306,3.8165545e-4,-112.83984,318.49205)" + id="text26838-0-00-6-5" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-4-4-7);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5446" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5448" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5450" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5452" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5454" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5456" /> + <path + d="m 255.09975,964.28973 q -0.75,0 -1.1823,0.40104 -0.42708,0.40105 -0.42708,1.10417 0,0.70313 0.42708,1.10417 0.4323,0.40105 1.1823,0.40105 0.75,0 1.1823,-0.40105 0.43229,-0.40625 0.43229,-1.10417 0,-0.70312 -0.43229,-1.10417 -0.42709,-0.40104 -1.1823,-0.40104 z m -1.05209,-0.44792 q -0.67708,-0.16666 -1.05729,-0.63021 -0.375,-0.46354 -0.375,-1.13021 0,-0.93229 0.66146,-1.47396 0.66667,-0.54167 1.82292,-0.54167 1.16146,0 1.82292,0.54167 0.66146,0.54167 0.66146,1.47396 0,0.66667 -0.38021,1.13021 -0.375,0.46355 -1.04688,0.63021 0.76042,0.17709 1.1823,0.69271 0.42708,0.51563 0.42708,1.26042 0,1.13022 -0.69271,1.73439 -0.6875,0.60416 -1.97396,0.60416 -1.28646,0 -1.97917,-0.60416 -0.68751,-0.60417 -0.68751,-1.73439 0,-0.74479 0.42709,-1.26042 0.42708,-0.51562 1.1875,-0.69271 z m -0.38541,-1.66146 q 0,0.60417 0.375,0.94271 0.38021,0.33854 1.0625,0.33854 0.67709,0 1.05729,-0.33854 0.38542,-0.33854 0.38542,-0.94271 0,-0.60417 -0.38542,-0.94271 -0.3802,-0.33854 -1.05729,-0.33854 -0.68229,0 -1.0625,0.33854 -0.375,0.33854 -0.375,0.94271 z" + id="path5458" /> + </g> + <g + aria-label="Thread 2" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-183.09272,320.60632)" + id="text26838-0-6" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-9);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5461" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5463" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5465" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5467" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5469" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5471" /> + <path + d="m 253.756,967.09703 h 3.67188 v 0.88542 h -4.93751 v -0.88542 q 0.59896,-0.61979 1.63021,-1.66146 1.03646,-1.04688 1.30209,-1.34896 0.50521,-0.56771 0.70312,-0.95834 0.20313,-0.39583 0.20313,-0.77604 0,-0.6198 -0.4375,-1.01042 -0.43229,-0.39063 -1.13021,-0.39063 -0.4948,0 -1.04688,0.17188 -0.54688,0.17187 -1.17188,0.52083 v -1.0625 q 0.63542,-0.25521 1.1875,-0.38542 0.55209,-0.13021 1.01042,-0.13021 1.20834,0 1.92709,0.60417 0.71876,0.60417 0.71876,1.61459 0,0.47917 -0.1823,0.91146 -0.17708,0.42708 -0.65104,1.01042 -0.13021,0.15104 -0.82813,0.875 -0.69792,0.71875 -1.96875,2.01563 z" + id="path5473" /> + </g> + <g + aria-label="Thread 3" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-174.38225,320.61762)" + id="text26838-0-3" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-93);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5476" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5478" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5480" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5482" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5484" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5486" /> + <path + d="m 256.03725,963.78973 q 0.75521,0.16146 1.17709,0.67188 0.42708,0.51042 0.42708,1.26042 0,1.15104 -0.79166,1.78125 -0.79167,0.63021 -2.25001,0.63021 -0.48959,0 -1.01042,-0.099 -0.51563,-0.0938 -1.06771,-0.28646 v -1.01563 q 0.4375,0.25521 0.95833,0.38542 0.52084,0.1302 1.08855,0.1302 0.98958,0 1.50521,-0.39062 0.52084,-0.39063 0.52084,-1.13542 0,-0.6875 -0.48438,-1.07292 -0.47917,-0.39063 -1.33855,-0.39063 h -0.90625 v -0.86458 h 0.94792 q 0.77604,0 1.1875,-0.3073 0.41146,-0.3125 0.41146,-0.89583 0,-0.59896 -0.42708,-0.91667 -0.42188,-0.32292 -1.21355,-0.32292 -0.43229,0 -0.92708,0.0937 -0.4948,0.0937 -1.08855,0.29167 v -0.93751 q 0.59896,-0.16666 1.1198,-0.25 0.52604,-0.0833 0.98958,-0.0833 1.19792,0 1.89584,0.54688 0.69792,0.54167 0.69792,1.46875 0,0.64584 -0.36979,1.09375 -0.36979,0.44271 -1.05209,0.61459 z" + id="path5488" /> + </g> + <g + aria-label="Thread 4" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-165.84718,320.60447)" + id="text26838-0-0" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-34-8);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 210.99023,960.20639 h 6.57815 v 0.88541 h -2.76043 v 6.89065 h -1.05729 v -6.89065 h -2.76043 z" + id="path5491" /> + <path + d="m 223.39132,964.46161 v 3.52084 h -0.95834 v -3.48959 q 0,-0.82813 -0.32292,-1.23959 -0.32292,-0.41146 -0.96875,-0.41146 -0.77605,0 -1.22396,0.49479 -0.44792,0.4948 -0.44792,1.34897 v 3.29688 h -0.96355 v -8.10419 h 0.96355 v 3.17709 q 0.34375,-0.52604 0.80729,-0.78646 0.46875,-0.26042 1.07813,-0.26042 1.00521,0 1.52084,0.62501 0.51563,0.61979 0.51563,1.82813 z" + id="path5493" /> + <path + d="m 228.683,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.43229,0.52604 -0.43229,1.51563 v 3.07292 h -0.96355 v -5.83335 h 0.96355 v 0.90625 q 0.30208,-0.53125 0.78646,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5495" /> + <path + d="m 234.44343,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55209,0 1.06771,-0.13542 0.52084,-0.13541 1.03126,-0.40625 v 0.90626 q -0.51563,0.21875 -1.0573,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28646,0.45312 -0.47917,0.45313 -0.55209,1.27605 z" + id="path5497" /> + <path + d="m 238.6674,965.05015 q -1.16146,0 -1.60938,0.26563 -0.44791,0.26562 -0.44791,0.90625 0,0.51042 0.33333,0.8125 0.33854,0.29688 0.91667,0.29688 0.79688,0 1.27605,-0.5625 0.48437,-0.56771 0.48437,-1.50522 v -0.21354 z m 1.91147,-0.39583 v 3.32813 h -0.95834 v -0.88542 q -0.32812,0.53125 -0.81771,0.78646 -0.48958,0.25 -1.19792,0.25 -0.89584,0 -1.42709,-0.5 -0.52604,-0.50521 -0.52604,-1.34896 0,-0.98438 0.65625,-1.48438 0.66146,-0.5 1.96876,-0.5 h 1.34375 v -0.0937 q 0,-0.66146 -0.4375,-1.02084 -0.43229,-0.36458 -1.21875,-0.36458 -0.5,0 -0.97396,0.11979 -0.47396,0.11979 -0.91147,0.35938 v -0.88542 q 0.52605,-0.20313 1.02084,-0.30209 0.49479,-0.10417 0.96355,-0.10417 1.26562,0 1.89063,0.65626 0.625,0.65625 0.625,1.98959 z" + id="path5499" /> + <path + d="m 246.39139,963.03452 v -3.15626 h 0.95833 v 8.10419 h -0.95833 v -0.875 q -0.30209,0.52083 -0.76563,0.77604 -0.45833,0.25 -1.10417,0.25 -1.05729,0 -1.72396,-0.84375 -0.66146,-0.84375 -0.66146,-2.21876 0,-1.375 0.66146,-2.21875 0.66667,-0.84376 1.72396,-0.84376 0.64584,0 1.10417,0.25521 0.46354,0.25 0.76563,0.77084 z m -3.26564,2.03646 q 0,1.0573 0.4323,1.66147 0.4375,0.59896 1.19792,0.59896 0.76042,0 1.19792,-0.59896 0.4375,-0.60417 0.4375,-1.66147 0,-1.05729 -0.4375,-1.65625 -0.4375,-0.60417 -1.19792,-0.60417 -0.76042,0 -1.19792,0.60417 -0.4323,0.59896 -0.4323,1.65625 z" + id="path5501" /> + <path + d="m 255.74038,961.12306 -2.65626,4.15105 h 2.65626 z m -0.27605,-0.91667 h 1.32293 v 5.06772 h 1.10937 v 0.875 h -1.10937 v 1.83334 h -1.04688 v -1.83334 h -3.51043 v -1.01563 z" + id="path5503" /> + </g> + <g + aria-label="Core 5" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-138.61509,282.29084)" + id="text26838-9" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-8);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5506" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5508" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5510" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5512" /> + <path + d="m 240.25074,960.20639 h 4.13023 v 0.88541 h -3.16668 v 1.90626 q 0.22917,-0.0781 0.45833,-0.11458 0.22917,-0.0417 0.45834,-0.0417 1.30209,0 2.06251,0.71354 0.76041,0.71355 0.76041,1.9323 0,1.25521 -0.78125,1.95313 -0.78125,0.69271 -2.20313,0.69271 -0.48959,0 -1,-0.0833 -0.50521,-0.0833 -1.04688,-0.25 v -1.0573 q 0.46875,0.25521 0.96875,0.38021 0.5,0.125 1.0573,0.125 0.90104,0 1.42708,-0.47396 0.52605,-0.47396 0.52605,-1.28646 0,-0.8125 -0.52605,-1.28646 -0.52604,-0.47396 -1.42708,-0.47396 -0.42188,0 -0.84376,0.0937 -0.41666,0.0937 -0.85417,0.29167 z" + id="path5514" /> + </g> + <g + aria-label="Core 6" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-129.99275,282.26656)" + id="text26838-6" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-3);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5517" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5519" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5521" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5523" /> + <path + d="m 242.62054,963.67515 q -0.70833,0 -1.125,0.48437 -0.41146,0.48438 -0.41146,1.32813 0,0.83855 0.41146,1.32813 0.41667,0.48438 1.125,0.48438 0.70834,0 1.1198,-0.48438 0.41667,-0.48958 0.41667,-1.32813 0,-0.84375 -0.41667,-1.32813 -0.41146,-0.48437 -1.1198,-0.48437 z m 2.08855,-3.29689 v 0.95834 q -0.39583,-0.1875 -0.80208,-0.28646 -0.40105,-0.099 -0.79688,-0.099 -1.04167,0 -1.59376,0.70313 -0.54687,0.70312 -0.625,2.125 0.30729,-0.45312 0.77084,-0.69271 0.46354,-0.24479 1.02083,-0.24479 1.17188,0 1.84897,0.71354 0.68229,0.70834 0.68229,1.9323 0,1.19792 -0.70833,1.92188 -0.70834,0.72396 -1.88543,0.72396 -1.34896,0 -2.0625,-1.03125 -0.71355,-1.03646 -0.71355,-3.00001 0,-1.84375 0.87501,-2.93751 0.875,-1.09896 2.34896,-1.09896 0.39584,0 0.79688,0.0781 0.40625,0.0781 0.84375,0.23437 z" + id="path5525" /> + </g> + <g + aria-label="Core 7" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-121.08449,282.22637)" + id="text26838-21" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-80);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5528" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5530" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5532" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5534" /> + <path + d="m 239.9747,960.20639 h 5.00002 v 0.44791 l -2.82293,7.32815 h -1.09896 l 2.65626,-6.89065 h -3.73439 z" + id="path5536" /> + </g> + <g + aria-label="Core 8" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-112.54648,282.27664)" + id="text26838-51" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-0);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5539" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5541" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5543" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5545" /> + <path + d="m 242.49033,964.28973 q -0.75,0 -1.18229,0.40104 -0.42709,0.40105 -0.42709,1.10417 0,0.70313 0.42709,1.10417 0.43229,0.40105 1.18229,0.40105 0.75001,0 1.1823,-0.40105 0.43229,-0.40625 0.43229,-1.10417 0,-0.70312 -0.43229,-1.10417 -0.42708,-0.40104 -1.1823,-0.40104 z m -1.05208,-0.44792 q -0.67709,-0.16666 -1.0573,-0.63021 -0.375,-0.46354 -0.375,-1.13021 0,-0.93229 0.66146,-1.47396 0.66667,-0.54167 1.82292,-0.54167 1.16147,0 1.82293,0.54167 0.66146,0.54167 0.66146,1.47396 0,0.66667 -0.38021,1.13021 -0.375,0.46355 -1.04688,0.63021 0.76042,0.17709 1.1823,0.69271 0.42708,0.51563 0.42708,1.26042 0,1.13022 -0.69271,1.73439 -0.6875,0.60416 -1.97397,0.60416 -1.28646,0 -1.97917,-0.60416 -0.6875,-0.60417 -0.6875,-1.73439 0,-0.74479 0.42708,-1.26042 0.42709,-0.51562 1.18751,-0.69271 z m -0.38542,-1.66146 q 0,0.60417 0.375,0.94271 0.38021,0.33854 1.0625,0.33854 0.67709,0 1.0573,-0.33854 0.38542,-0.33854 0.38542,-0.94271 0,-0.60417 -0.38542,-0.94271 -0.38021,-0.33854 -1.0573,-0.33854 -0.68229,0 -1.0625,0.33854 -0.375,0.33854 -0.375,0.94271 z" + id="path5547" /> + </g> + <g + aria-label="Core 2" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-182.98644,282.25855)" + id="text26838-5" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-7);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="8.0234223" + inkscape:transform-center-y="-0.053842548"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5550" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5552" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5554" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5556" /> + <path + d="m 241.14658,967.09703 h 3.67189 v 0.88542 h -4.93752 v -0.88542 q 0.59896,-0.61979 1.63021,-1.66146 1.03647,-1.04688 1.30209,-1.34896 0.50521,-0.56771 0.70313,-0.95834 0.20313,-0.39583 0.20313,-0.77604 0,-0.6198 -0.43751,-1.01042 -0.43229,-0.39063 -1.13021,-0.39063 -0.49479,0 -1.04688,0.17188 -0.54687,0.17187 -1.17188,0.52083 v -1.0625 q 0.63542,-0.25521 1.18751,-0.38542 0.55208,-0.13021 1.01042,-0.13021 1.20834,0 1.92709,0.60417 0.71875,0.60417 0.71875,1.61459 0,0.47917 -0.18229,0.91146 -0.17709,0.42708 -0.65105,1.01042 -0.1302,0.15104 -0.82812,0.875 -0.69792,0.71875 -1.96876,2.01563 z" + id="path5558" /> + </g> + <g + aria-label="Core 3" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-174.19863,282.27092)" + id="text26838-8" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-4);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="7.3731191" + inkscape:transform-center-y="0.047884561"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5561" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5563" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5565" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5567" /> + <path + d="m 243.42784,963.78973 q 0.75521,0.16146 1.17708,0.67188 0.42709,0.51042 0.42709,1.26042 0,1.15104 -0.79167,1.78125 -0.79167,0.63021 -2.25001,0.63021 -0.48958,0 -1.01042,-0.099 -0.51562,-0.0938 -1.06771,-0.28646 v -1.01563 q 0.4375,0.25521 0.95834,0.38542 0.52083,0.1302 1.08854,0.1302 0.98959,0 1.50522,-0.39062 0.52083,-0.39063 0.52083,-1.13542 0,-0.6875 -0.48438,-1.07292 -0.47916,-0.39063 -1.33854,-0.39063 h -0.90625 v -0.86458 h 0.94792 q 0.77604,0 1.1875,-0.3073 0.41146,-0.3125 0.41146,-0.89583 0,-0.59896 -0.42709,-0.91667 -0.42187,-0.32292 -1.21354,-0.32292 -0.43229,0 -0.92709,0.0937 -0.49479,0.0937 -1.08854,0.29167 v -0.93751 q 0.59896,-0.16666 1.11979,-0.25 0.52605,-0.0833 0.98959,-0.0833 1.19792,0 1.89584,0.54688 0.69792,0.54167 0.69792,1.46875 0,0.64584 -0.3698,1.09375 -0.36979,0.44271 -1.05208,0.61459 z" + id="path5569" /> + </g> + <g + aria-label="Core 4" + transform="matrix(-0.00128175,-0.26458023,0.26458023,-0.00128175,-165.82104,282.2658)" + id="text26838-2" + style="font-size:10.6667px;-inkscape-font-specification:sans-serif;white-space:pre;shape-inside:url(#rect26840-1);display:inline;fill:#171615;stroke-width:2.57764;stroke-linecap:round;stroke-linejoin:round" + inkscape:transform-center-x="4.8356787" + inkscape:transform-center-y="-0.80432823"> + <path + d="m 217.8913,960.80535 v 1.10937 q -0.53125,-0.49479 -1.13542,-0.73958 -0.59896,-0.24479 -1.27605,-0.24479 -1.33334,0 -2.04167,0.81771 -0.70834,0.8125 -0.70834,2.35417 0,1.53646 0.70834,2.35418 0.70833,0.8125 2.04167,0.8125 0.67709,0 1.27605,-0.24479 0.60417,-0.2448 1.13542,-0.73959 v 1.09896 q -0.55209,0.375 -1.17188,0.5625 -0.61459,0.1875 -1.30209,0.1875 -1.76563,0 -2.78126,-1.07812 -1.01563,-1.08334 -1.01563,-2.95314 0,-1.875 1.01563,-2.95313 1.01563,-1.08334 2.78126,-1.08334 0.69792,0 1.31251,0.1875 0.61979,0.18229 1.16146,0.55209 z" + id="path5572" /> + <path + d="m 221.73506,962.82098 q -0.77084,0 -1.21875,0.60417 -0.44792,0.59896 -0.44792,1.64583 0,1.04688 0.44271,1.65105 0.44792,0.59896 1.22396,0.59896 0.76563,0 1.21355,-0.60417 0.44791,-0.60417 0.44791,-1.64584 0,-1.03646 -0.44791,-1.64063 -0.44792,-0.60937 -1.21355,-0.60937 z m 0,-0.81251 q 1.25,0 1.96355,0.81251 0.71354,0.8125 0.71354,2.25 0,1.4323 -0.71354,2.25001 -0.71355,0.8125 -1.96355,0.8125 -1.25521,0 -1.96876,-0.8125 -0.70833,-0.81771 -0.70833,-2.25001 0,-1.4375 0.70833,-2.25 0.71355,-0.81251 1.96876,-0.81251 z" + id="path5574" /> + <path + d="m 229.38092,963.04494 q -0.16146,-0.0937 -0.35417,-0.13542 -0.1875,-0.0469 -0.41667,-0.0469 -0.8125,0 -1.25,0.53126 -0.4323,0.52604 -0.4323,1.51563 v 3.07292 h -0.96354 v -5.83335 h 0.96354 v 0.90625 q 0.30209,-0.53125 0.78647,-0.78646 0.48437,-0.26042 1.17708,-0.26042 0.099,0 0.21875,0.0156 0.1198,0.0104 0.26563,0.0365 z" + id="path5576" /> + <path + d="m 235.14135,964.82619 v 0.46875 h -4.40626 q 0.0625,0.98959 0.59375,1.51042 0.53646,0.51563 1.48959,0.51563 0.55208,0 1.06771,-0.13542 0.52083,-0.13541 1.03125,-0.40625 v 0.90626 q -0.51562,0.21875 -1.05729,0.33333 -0.54167,0.11458 -1.09896,0.11458 -1.39584,0 -2.21355,-0.8125 -0.8125,-0.8125 -0.8125,-2.19792 0,-1.4323 0.77083,-2.27084 0.77605,-0.84376 2.08855,-0.84376 1.17709,0 1.85938,0.76042 0.6875,0.75521 0.6875,2.0573 z m -0.95833,-0.28125 q -0.0104,-0.78646 -0.44271,-1.25521 -0.42709,-0.46875 -1.13542,-0.46875 -0.80209,0 -1.28647,0.45312 -0.47916,0.45313 -0.55208,1.27605 z" + id="path5578" /> + <path + d="m 243.13096,961.12306 -2.65626,4.15105 h 2.65626 z m -0.27604,-0.91667 h 1.32292 v 5.06772 h 1.10938 v 0.875 h -1.10938 v 1.83334 h -1.04688 v -1.83334 h -3.51043 v -1.01563 z" + id="path5580" /> + </g> + <path + id="rect32135" + style="fill:#0862ad;fill-opacity:0.133333;stroke:#0963af;stroke-width:0.477;stroke-linecap:round;stroke-linejoin:round" + d="m 66.823914,269.33499 h 20.213022 v 6.28016 H 66.823914 Z" /> + <path + id="rect32135-1" + style="fill:#0862ad;fill-opacity:0.133333;stroke:#0963af;stroke-width:0.477;stroke-linecap:round;stroke-linejoin:round" + d="m 118.4912,269.58221 h 20.21303 v 6.28016 H 118.4912 Z" /> + <g + aria-label="MPI process" + id="text32847" + style="font-size:2.82223px;-inkscape-font-specification:sans-serif;fill:#0862ad;fill-opacity:0.133333;stroke:#0963af;stroke-width:0.476999;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 68.278818,271.1375 h 0.41479 l 0.525034,1.40009 0.52779,-1.40009 h 0.414791 v 2.05742 h -0.271474 v -1.80662 l -0.530547,1.41112 H 69.07946 l -0.530546,-1.41112 v 1.80662 h -0.270096 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5585" /> + <path + d="m 70.992182,271.36625 v 0.77309 h 0.350023 q 0.194304,0 0.300413,-0.1006 0.106109,-0.1006 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28526 -0.106109,-0.1006 -0.300413,-0.1006 z m -0.278364,-0.22875 h 0.628387 q 0.345888,0 0.522278,0.1571 0.177767,0.15571 0.177767,0.45751 0,0.30454 -0.177767,0.46026 -0.17639,0.15572 -0.522278,0.15572 h -0.350023 v 0.82683 h -0.278364 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5587" /> + <path + d="m 72.415699,271.1375 h 0.278365 v 2.05742 h -0.278365 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5589" /> + <path + d="m 74.37941,272.9634 v 0.81856 h -0.254938 v -2.13045 h 0.254938 v 0.23427 q 0.07993,-0.13781 0.201194,-0.20395 0.122645,-0.0675 0.292145,-0.0675 0.28112,0 0.456132,0.22324 0.176389,0.22325 0.176389,0.58705 0,0.3638 -0.176389,0.58705 -0.175012,0.22324 -0.456132,0.22324 -0.1695,0 -0.292145,-0.0661 -0.121268,-0.0675 -0.201194,-0.20533 z m 0.862654,-0.53881 q 0,-0.27974 -0.115756,-0.43822 -0.114377,-0.15985 -0.315571,-0.15985 -0.201194,0 -0.31695,0.15985 -0.114377,0.15848 -0.114377,0.43822 0,0.27974 0.114377,0.4396 0.115756,0.15847 0.31695,0.15847 0.201194,0 0.315571,-0.15847 0.115756,-0.15986 0.115756,-0.4396 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5591" /> + <path + d="m 76.819922,271.88853 q -0.04272,-0.0248 -0.09371,-0.0358 -0.04961,-0.0124 -0.110243,-0.0124 -0.214975,0 -0.33073,0.14056 -0.114378,0.13918 -0.114378,0.40101 v 0.81305 h -0.254937 v -1.54341 h 0.254937 v 0.23978 q 0.07993,-0.14056 0.208085,-0.20809 0.128158,-0.0689 0.311437,-0.0689 0.02618,0 0.05788,0.004 0.03169,0.003 0.07028,0.01 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5593" /> + <path + d="m 77.621942,271.82928 q -0.20395,0 -0.322462,0.15985 -0.118511,0.15847 -0.118511,0.43546 0,0.27699 0.117133,0.43684 0.118512,0.15847 0.32384,0.15847 0.202572,0 0.321084,-0.15985 0.118512,-0.15985 0.118512,-0.43546 0,-0.27423 -0.118512,-0.43408 -0.118512,-0.16123 -0.321084,-0.16123 z m 0,-0.21498 q 0.33073,0 0.519522,0.21498 0.188792,0.21497 0.188792,0.59531 0,0.37896 -0.188792,0.59531 -0.188792,0.21498 -0.519522,0.21498 -0.332108,0 -0.5209,-0.21498 -0.187413,-0.21635 -0.187413,-0.59531 0,-0.38034 0.187413,-0.59531 0.188792,-0.21498 0.5209,-0.21498 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5595" /> + <path + d="m 79.861261,271.71076 v 0.23703 q -0.107487,-0.0593 -0.216352,-0.0882 -0.107488,-0.0303 -0.217731,-0.0303 -0.24667,0 -0.383096,0.15709 -0.136426,0.15572 -0.136426,0.43822 0,0.2825 0.136426,0.4396 0.136426,0.15571 0.383096,0.15571 0.110243,0 0.217731,-0.0289 0.108865,-0.0303 0.216352,-0.0896 v 0.23427 q -0.106109,0.0496 -0.220487,0.0744 -0.112999,0.0248 -0.241157,0.0248 -0.348645,0 -0.553973,-0.21911 -0.205328,-0.21911 -0.205328,-0.59118 0,-0.37758 0.206706,-0.59394 0.208085,-0.21635 0.569132,-0.21635 0.117133,0 0.228755,0.0248 0.111621,0.0234 0.216352,0.0716 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5597" /> + <path + d="m 81.622398,272.35982 v 0.12403 h -1.165823 q 0.01654,0.26182 0.157097,0.39963 0.141938,0.13642 0.39412,0.13642 0.146072,0 0.282498,-0.0358 0.137805,-0.0358 0.272853,-0.10749 v 0.23978 q -0.136427,0.0579 -0.279743,0.0882 -0.143316,0.0303 -0.290767,0.0303 -0.369315,0 -0.585668,-0.21498 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60083 0.205328,-0.22324 0.552595,-0.22324 0.311437,0 0.491961,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117134,-0.33211 -0.112999,-0.12402 -0.300413,-0.12402 -0.212219,0 -0.340376,0.11989 -0.12678,0.11989 -0.146073,0.33762 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5599" /> + <path + d="m 83.022489,271.69698 v 0.23978 q -0.107487,-0.0551 -0.223243,-0.0827 -0.115755,-0.0276 -0.239779,-0.0276 -0.188792,0 -0.283877,0.0579 -0.09371,0.0579 -0.09371,0.17363 0,0.0882 0.06752,0.13918 0.06752,0.0496 0.271475,0.0951 l 0.08682,0.0193 q 0.270097,0.0579 0.383096,0.16399 0.114378,0.10473 0.114378,0.29352 0,0.21498 -0.170878,0.34038 -0.169499,0.1254 -0.467156,0.1254 -0.124024,0 -0.259072,-0.0248 -0.13367,-0.0234 -0.282498,-0.0716 v -0.26183 q 0.14056,0.073 0.276986,0.11024 0.136426,0.0358 0.270096,0.0358 0.179146,0 0.275609,-0.0606 0.09646,-0.062 0.09646,-0.17364 0,-0.10335 -0.07028,-0.15847 -0.0689,-0.0551 -0.304548,-0.10611 l -0.08819,-0.0207 q -0.235646,-0.0496 -0.340377,-0.15159 -0.104731,-0.10335 -0.104731,-0.28249 0,-0.21774 0.154341,-0.33625 0.15434,-0.11851 0.438217,-0.11851 0.14056,0 0.264584,0.0207 0.124024,0.0207 0.228755,0.062 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5601" /> + <path + d="m 84.49286,271.69698 v 0.23978 q -0.107487,-0.0551 -0.223242,-0.0827 -0.115756,-0.0276 -0.23978,-0.0276 -0.188792,0 -0.283876,0.0579 -0.09371,0.0579 -0.09371,0.17363 0,0.0882 0.06752,0.13918 0.06752,0.0496 0.271474,0.0951 l 0.08682,0.0193 q 0.270096,0.0579 0.383095,0.16399 0.114378,0.10473 0.114378,0.29352 0,0.21498 -0.170877,0.34038 -0.1695,0.1254 -0.467157,0.1254 -0.124023,0 -0.259072,-0.0248 -0.13367,-0.0234 -0.282498,-0.0716 v -0.26183 q 0.14056,0.073 0.276986,0.11024 0.136426,0.0358 0.270097,0.0358 0.179145,0 0.275608,-0.0606 0.09646,-0.062 0.09646,-0.17364 0,-0.10335 -0.07028,-0.15847 -0.0689,-0.0551 -0.304548,-0.10611 l -0.08819,-0.0207 q -0.235645,-0.0496 -0.340377,-0.15159 -0.104731,-0.10335 -0.104731,-0.28249 0,-0.21774 0.154341,-0.33625 0.154341,-0.11851 0.438217,-0.11851 0.140561,0 0.264584,0.0207 0.124024,0.0207 0.228755,0.062 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5603" /> + </g> + <g + aria-label="MPI process" + id="text32847-1" + style="font-size:2.82223px;-inkscape-font-specification:sans-serif;fill:#0862ad;fill-opacity:0.133333;stroke:#0963af;stroke-width:0.476999;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 120.88009,271.37401 h 0.41479 l 0.52503,1.40009 0.52779,-1.40009 h 0.4148 v 2.05742 h -0.27148 v -1.80662 l -0.53054,1.41112 h -0.27975 l -0.53054,-1.41112 v 1.80662 h -0.2701 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5606" /> + <path + d="m 123.59345,271.60277 v 0.77308 h 0.35003 q 0.1943,0 0.30041,-0.1006 0.10611,-0.1006 0.10611,-0.28663 0,-0.18466 -0.10611,-0.28526 -0.10611,-0.10059 -0.30041,-0.10059 z m -0.27836,-0.22876 h 0.62839 q 0.34589,0 0.52228,0.1571 0.17776,0.15572 0.17776,0.45751 0,0.30454 -0.17776,0.46026 -0.17639,0.15572 -0.52228,0.15572 h -0.35003 v 0.82683 h -0.27836 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5608" /> + <path + d="m 125.01697,271.37401 h 0.27837 v 2.05742 h -0.27837 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5610" /> + <path + d="m 126.98068,273.19992 v 0.81855 h -0.25494 v -2.13045 h 0.25494 v 0.23427 q 0.0799,-0.13781 0.2012,-0.20395 0.12264,-0.0675 0.29214,-0.0675 0.28112,0 0.45613,0.22325 0.17639,0.22324 0.17639,0.58704 0,0.3638 -0.17639,0.58705 -0.17501,0.22324 -0.45613,0.22324 -0.1695,0 -0.29214,-0.0661 -0.12127,-0.0675 -0.2012,-0.20532 z m 0.86266,-0.53882 q 0,-0.27974 -0.11576,-0.43822 -0.11438,-0.15985 -0.31557,-0.15985 -0.20119,0 -0.31695,0.15985 -0.11438,0.15848 -0.11438,0.43822 0,0.27974 0.11438,0.4396 0.11576,0.15847 0.31695,0.15847 0.20119,0 0.31557,-0.15847 0.11576,-0.15986 0.11576,-0.4396 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5612" /> + <path + d="m 129.42119,272.12504 q -0.0427,-0.0248 -0.0937,-0.0358 -0.0496,-0.0124 -0.11025,-0.0124 -0.21497,0 -0.33073,0.14056 -0.11437,0.13918 -0.11437,0.40101 v 0.81305 h -0.25494 v -1.54341 h 0.25494 v 0.23978 q 0.0799,-0.14056 0.20808,-0.20809 0.12816,-0.0689 0.31144,-0.0689 0.0262,0 0.0579,0.004 0.0317,0.003 0.0703,0.01 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5614" /> + <path + d="m 130.22321,272.06579 q -0.20395,0 -0.32246,0.15985 -0.11851,0.15848 -0.11851,0.43546 0,0.27699 0.11713,0.43684 0.11852,0.15848 0.32384,0.15848 0.20258,0 0.32109,-0.15986 0.11851,-0.15985 0.11851,-0.43546 0,-0.27423 -0.11851,-0.43408 -0.11851,-0.16123 -0.32109,-0.16123 z m 0,-0.21498 q 0.33073,0 0.51953,0.21498 0.18879,0.21497 0.18879,0.59531 0,0.37896 -0.18879,0.59532 -0.1888,0.21497 -0.51953,0.21497 -0.3321,0 -0.5209,-0.21497 -0.18741,-0.21636 -0.18741,-0.59532 0,-0.38034 0.18741,-0.59531 0.1888,-0.21498 0.5209,-0.21498 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5616" /> + <path + d="m 132.46253,271.94728 v 0.23702 q -0.10748,-0.0593 -0.21635,-0.0882 -0.10749,-0.0303 -0.21773,-0.0303 -0.24667,0 -0.3831,0.15709 -0.13642,0.15572 -0.13642,0.43822 0,0.2825 0.13642,0.4396 0.13643,0.15572 0.3831,0.15572 0.11024,0 0.21773,-0.0289 0.10887,-0.0303 0.21635,-0.0896 v 0.23427 q -0.10611,0.0496 -0.22048,0.0744 -0.113,0.0248 -0.24116,0.0248 -0.34864,0 -0.55397,-0.21911 -0.20533,-0.21911 -0.20533,-0.59118 0,-0.37758 0.2067,-0.59393 0.20809,-0.21636 0.56914,-0.21636 0.11713,0 0.22875,0.0248 0.11162,0.0234 0.21635,0.0717 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5618" /> + <path + d="m 134.22367,272.59633 v 0.12403 h -1.16582 q 0.0165,0.26183 0.15709,0.39963 0.14194,0.13643 0.39412,0.13643 0.14608,0 0.2825,-0.0358 0.13781,-0.0358 0.27286,-0.10749 v 0.23978 q -0.13643,0.0579 -0.27975,0.0882 -0.14331,0.0303 -0.29076,0.0303 -0.36932,0 -0.58567,-0.21497 -0.21498,-0.21498 -0.21498,-0.58154 0,-0.37896 0.20395,-0.60082 0.20533,-0.22325 0.5526,-0.22325 0.31144,0 0.49196,0.2012 0.1819,0.19981 0.1819,0.54432 z m -0.25356,-0.0744 q -0.003,-0.20809 -0.11713,-0.33211 -0.113,-0.12402 -0.30042,-0.12402 -0.21221,0 -0.34037,0.11989 -0.12678,0.11989 -0.14607,0.33762 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5620" /> + <path + d="m 135.62376,271.9335 v 0.23977 q -0.10749,-0.0551 -0.22324,-0.0827 -0.11576,-0.0276 -0.23978,-0.0276 -0.18879,0 -0.28388,0.0579 -0.0937,0.0579 -0.0937,0.17363 0,0.0882 0.0675,0.13918 0.0675,0.0496 0.27147,0.0951 l 0.0868,0.0193 q 0.2701,0.0579 0.3831,0.16399 0.11437,0.10473 0.11437,0.29352 0,0.21498 -0.17087,0.34038 -0.1695,0.1254 -0.46716,0.1254 -0.12402,0 -0.25907,-0.0248 -0.13367,-0.0234 -0.2825,-0.0717 v -0.26183 q 0.14056,0.073 0.27699,0.11024 0.13642,0.0358 0.27009,0.0358 0.17915,0 0.27561,-0.0606 0.0965,-0.062 0.0965,-0.17364 0,-0.10335 -0.0703,-0.15847 -0.0689,-0.0551 -0.30454,-0.10611 l -0.0882,-0.0207 q -0.23564,-0.0496 -0.34037,-0.15158 -0.10474,-0.10336 -0.10474,-0.2825 0,-0.21773 0.15435,-0.33625 0.15434,-0.11851 0.43821,-0.11851 0.14056,0 0.26459,0.0207 0.12402,0.0207 0.22875,0.062 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5622" /> + <path + d="m 137.09413,271.9335 v 0.23977 q -0.10748,-0.0551 -0.22324,-0.0827 -0.11576,-0.0276 -0.23978,-0.0276 -0.18879,0 -0.28388,0.0579 -0.0937,0.0579 -0.0937,0.17363 0,0.0882 0.0675,0.13918 0.0675,0.0496 0.27148,0.0951 l 0.0868,0.0193 q 0.2701,0.0579 0.3831,0.16399 0.11438,0.10473 0.11438,0.29352 0,0.21498 -0.17088,0.34038 -0.1695,0.1254 -0.46716,0.1254 -0.12402,0 -0.25907,-0.0248 -0.13367,-0.0234 -0.2825,-0.0717 v -0.26183 q 0.14056,0.073 0.27699,0.11024 0.13642,0.0358 0.27009,0.0358 0.17915,0 0.27561,-0.0606 0.0965,-0.062 0.0965,-0.17364 0,-0.10335 -0.0703,-0.15847 -0.0689,-0.0551 -0.30455,-0.10611 l -0.0882,-0.0207 q -0.23564,-0.0496 -0.34037,-0.15158 -0.10473,-0.10336 -0.10473,-0.2825 0,-0.21773 0.15434,-0.33625 0.15434,-0.11851 0.43821,-0.11851 0.14056,0 0.26459,0.0207 0.12402,0.0207 0.22875,0.062 z" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.477" + id="path5624" /> + </g> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.436083;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 63.460622,228.39231 c -0.08476,20.77371 -0.05886,20.77087 -0.05886,20.77087" + id="path33162" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.481662;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 71.904687,228.30973 c -0.10498,20.46109 -0.07291,20.4583 -0.07291,20.4583" + id="path33162-3" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.482798;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 80.562051,228.30054 c -0.104404,20.67102 -0.07251,20.66819 -0.07251,20.66819" + id="path33162-9" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.482438;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 89.092215,228.44457 c -0.104586,20.60426 -0.07263,20.60145 -0.07263,20.60145" + id="path33162-1" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.480377;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 116.40678,228.62266 c -0.10563,20.22623 -0.0734,20.22347 -0.0734,20.22347" + id="path33162-6" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.481933;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 124.87773,228.52364 c -0.10485,20.51131 -0.0728,20.50851 -0.0728,20.50851" + id="path33162-3-9" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.480978;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 133.53548,228.51271 c -0.10533,20.33601 -0.0731,20.33324 -0.0731,20.33324" + id="path33162-9-8" + sodipodi:nodetypes="cc" /> + <path + style="fill:#000000;fill-opacity:1;stroke:#f37f00;stroke-width:0.480839;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 142.0656,228.65692 c -0.10539,20.31013 -0.0733,20.30736 -0.0733,20.30736" + id="path33162-1-7" + sodipodi:nodetypes="cc" /> + <g + aria-label="Allocation in software" + id="text35045" + style="font-size:5.64444px;-inkscape-font-specification:sans-serif;stroke:#f37f00;stroke-width:0.476999;stroke-linecap:round;stroke-linejoin:round"> + <path + d="m 74.668395,284.26689 -0.755164,2.04777 h 1.513085 z m -0.314192,-0.54846 h 0.631141 l 1.568206,4.11482 h -0.578775 l -0.374827,-1.05557 H 73.74511 l -0.374826,1.05557 h -0.587043 z" + style="stroke:none;stroke-width:0.477" + id="path5627" /> + <path + d="m 77.132326,283.5448 h 0.507118 v 4.28845 h -0.507118 z" + style="stroke:none;stroke-width:0.477" + id="path5629" /> + <path + d="m 78.700532,283.5448 h 0.507118 v 4.28845 h -0.507118 z" + style="stroke:none;stroke-width:0.477" + id="path5631" /> + <path + d="m 81.464875,285.10198 q -0.407899,0 -0.644921,0.31971 -0.237023,0.31695 -0.237023,0.87092 0,0.55397 0.234267,0.87367 0.237022,0.31695 0.647677,0.31695 0.405143,0 0.642165,-0.3197 0.237023,-0.31971 0.237023,-0.87092 0,-0.54846 -0.237023,-0.86817 -0.237022,-0.32246 -0.642165,-0.32246 z m 0,-0.42995 q 0.661458,0 1.03904,0.42995 0.377582,0.42995 0.377582,1.19063 0,0.75792 -0.377582,1.19062 -0.377582,0.42995 -1.03904,0.42995 -0.664214,0 -1.041796,-0.42995 -0.374826,-0.4327 -0.374826,-1.19062 0,-0.76068 0.374826,-1.19063 0.377582,-0.42995 1.041796,-0.42995 z" + style="stroke:none;stroke-width:0.477" + id="path5633" /> + <path + d="m 85.943495,284.86496 v 0.47404 q -0.214974,-0.11851 -0.432703,-0.17638 -0.214974,-0.0606 -0.43546,-0.0606 -0.493338,0 -0.766189,0.31419 -0.272851,0.31144 -0.272851,0.87644 0,0.56499 0.272851,0.87918 0.272851,0.31144 0.766189,0.31144 0.220486,0 0.43546,-0.0579 0.217729,-0.0606 0.432703,-0.17914 v 0.46853 q -0.212218,0.0992 -0.440972,0.14883 -0.225998,0.0496 -0.482313,0.0496 -0.697286,0 -1.107942,-0.43822 -0.410655,-0.43821 -0.410655,-1.18235 0,-0.75517 0.413412,-1.18787 0.416167,-0.43271 1.138258,-0.43271 0.234267,0 0.457509,0.0496 0.223242,0.0469 0.432703,0.14332 z" + style="stroke:none;stroke-width:0.477" + id="path5635" /> + <path + d="m 88.228281,286.28158 q -0.614604,0 -0.851627,0.14056 -0.237022,0.14056 -0.237022,0.47956 0,0.27009 0.176389,0.42995 0.179145,0.15709 0.485069,0.15709 0.421679,0 0.675238,-0.29765 0.256315,-0.30042 0.256315,-0.79651 v -0.113 z m 1.01148,-0.20946 v 1.76113 h -0.507118 v -0.46853 q -0.173633,0.28112 -0.432704,0.41617 -0.259071,0.13229 -0.633897,0.13229 -0.474045,0 -0.755164,-0.26459 -0.278364,-0.26733 -0.278364,-0.71382 0,-0.5209 0.347266,-0.78548 0.350021,-0.26458 1.041796,-0.26458 h 0.711067 v -0.0496 q 0,-0.35002 -0.23151,-0.54019 -0.228755,-0.19293 -0.644922,-0.19293 -0.264583,0 -0.515386,0.0634 -0.250802,0.0634 -0.482313,0.19017 v -0.46853 q 0.278364,-0.10749 0.540191,-0.15985 0.261827,-0.0551 0.509874,-0.0551 0.669726,0 1.000455,0.34727 0.330729,0.34727 0.330729,1.05282 z" + style="stroke:none;stroke-width:0.477" + id="path5637" /> + <path + d="m 90.785918,283.87002 v 0.87643 h 1.044552 v 0.39412 h -1.044552 v 1.67569 q 0,0.37758 0.101975,0.48507 0.10473,0.10749 0.421679,0.10749 h 0.520898 v 0.42443 h -0.520898 q -0.587044,0 -0.810286,-0.21773 -0.223242,-0.22048 -0.223242,-0.79926 v -1.67569 h -0.37207 v -0.39412 h 0.37207 v -0.87643 z" + style="stroke:none;stroke-width:0.477" + id="path5639" /> + <path + d="m 92.497439,284.74645 h 0.507118 v 3.0868 h -0.507118 z m 0,-1.20165 h 0.507118 v 0.64217 h -0.507118 z" + style="stroke:none;stroke-width:0.477" + id="path5641" /> + <path + d="m 95.261782,285.10198 q -0.407899,0 -0.644921,0.31971 -0.237022,0.31695 -0.237022,0.87092 0,0.55397 0.234266,0.87367 0.237022,0.31695 0.647677,0.31695 0.405143,0 0.642166,-0.3197 0.237022,-0.31971 0.237022,-0.87092 0,-0.54846 -0.237022,-0.86817 -0.237023,-0.32246 -0.642166,-0.32246 z m 0,-0.42995 q 0.661458,0 1.03904,0.42995 0.377583,0.42995 0.377583,1.19063 0,0.75792 -0.377583,1.19062 -0.377582,0.42995 -1.03904,0.42995 -0.664213,0 -1.041796,-0.42995 -0.374826,-0.4327 -0.374826,-1.19062 0,-0.76068 0.374826,-1.19063 0.377583,-0.42995 1.041796,-0.42995 z" + style="stroke:none;stroke-width:0.477" + id="path5643" /> + <path + d="m 100.08491,285.97015 v 1.8631 h -0.507115 v -1.84657 q 0,-0.43821 -0.170876,-0.65594 -0.170877,-0.21773 -0.51263,-0.21773 -0.410655,0 -0.647678,0.26182 -0.237022,0.26183 -0.237022,0.71383 v 1.74459 h -0.509874 v -3.0868 h 0.509874 v 0.47956 q 0.181901,-0.27837 0.427191,-0.41617 0.248047,-0.13781 0.570508,-0.13781 0.531922,0 0.804774,0.33073 0.272848,0.32798 0.272848,0.96739 z" + style="stroke:none;stroke-width:0.477" + id="path5645" /> + <path + d="m 102.8906,284.74645 h 0.50711 v 3.0868 h -0.50711 z m 0,-1.20165 h 0.50711 v 0.64217 h -0.50711 z" + style="stroke:none;stroke-width:0.477" + id="path5647" /> + <path + d="m 107.02471,285.97015 v 1.8631 h -0.50712 v -1.84657 q 0,-0.43821 -0.17088,-0.65594 -0.17087,-0.21773 -0.51263,-0.21773 -0.41065,0 -0.64767,0.26182 -0.23703,0.26183 -0.23703,0.71383 v 1.74459 h -0.50987 v -3.0868 h 0.50987 v 0.47956 q 0.1819,-0.27837 0.42719,-0.41617 0.24805,-0.13781 0.57051,-0.13781 0.53192,0 0.80478,0.33073 0.27285,0.32798 0.27285,0.96739 z" + style="stroke:none;stroke-width:0.477" + id="path5649" /> + <path + d="m 111.79823,284.8374 v 0.47956 q -0.21497,-0.11025 -0.44649,-0.16537 -0.23151,-0.0551 -0.47955,-0.0551 -0.37758,0 -0.56775,0.11576 -0.18742,0.11575 -0.18742,0.34726 0,0.17639 0.13505,0.27836 0.13505,0.0992 0.54295,0.19017 l 0.17363,0.0386 q 0.54019,0.11575 0.76619,0.32797 0.22875,0.20946 0.22875,0.58704 0,0.42995 -0.34175,0.68076 -0.339,0.2508 -0.93431,0.2508 -0.24805,0 -0.51814,-0.0496 -0.26734,-0.0469 -0.565,-0.14332 v -0.52365 q 0.28112,0.14607 0.55397,0.22048 0.27286,0.0717 0.5402,0.0717 0.35828,0 0.55121,-0.12126 0.19293,-0.12403 0.19293,-0.34727 0,-0.20671 -0.14056,-0.31695 -0.13781,-0.11024 -0.6091,-0.21222 l -0.17639,-0.0413 q -0.47128,-0.0992 -0.68075,-0.30317 -0.20946,-0.2067 -0.20946,-0.56499 0,-0.43546 0.30868,-0.67248 0.30868,-0.23703 0.87643,-0.23703 0.28112,0 0.52917,0.0413 0.24805,0.0413 0.45751,0.12402 z" + style="stroke:none;stroke-width:0.477" + id="path5651" /> + <path + d="m 113.96726,285.10198 q -0.4079,0 -0.64492,0.31971 -0.23702,0.31695 -0.23702,0.87092 0,0.55397 0.23426,0.87367 0.23702,0.31695 0.64768,0.31695 0.40514,0 0.64216,-0.3197 0.23703,-0.31971 0.23703,-0.87092 0,-0.54846 -0.23703,-0.86817 -0.23702,-0.32246 -0.64216,-0.32246 z m 0,-0.42995 q 0.66146,0 1.03904,0.42995 0.37758,0.42995 0.37758,1.19063 0,0.75792 -0.37758,1.19062 -0.37758,0.42995 -1.03904,0.42995 -0.66421,0 -1.0418,-0.42995 -0.37482,-0.4327 -0.37482,-1.19062 0,-0.76068 0.37482,-1.19063 0.37759,-0.42995 1.0418,-0.42995 z" + style="stroke:none;stroke-width:0.477" + id="path5653" /> + <path + d="m 117.78718,283.5448 v 0.42168 h -0.48507 q -0.27285,0 -0.38034,0.11024 -0.10473,0.11025 -0.10473,0.39688 v 0.27285 h 0.83509 v 0.39412 h -0.83509 v 2.69268 h -0.50987 v -2.69268 h -0.48507 v -0.39412 h 0.48507 v -0.21498 q 0,-0.51538 0.23978,-0.74965 0.23977,-0.23702 0.76067,-0.23702 z" + style="stroke:none;stroke-width:0.477" + id="path5655" /> + <path + d="m 118.614,283.87002 v 0.87643 h 1.04455 v 0.39412 H 118.614 v 1.67569 q 0,0.37758 0.10197,0.48507 0.10473,0.10749 0.42168,0.10749 h 0.5209 v 0.42443 h -0.5209 q -0.58704,0 -0.81028,-0.21773 -0.22324,-0.22048 -0.22324,-0.79926 v -1.67569 h -0.37207 v -0.39412 h 0.37207 v -0.87643 z" + style="stroke:none;stroke-width:0.477" + id="path5657" /> + <path + d="m 120.03062,284.74645 h 0.50712 l 0.6339,2.40881 0.63114,-2.40881 h 0.59806 l 0.6339,2.40881 0.63114,-2.40881 h 0.50712 l -0.80753,3.0868 h -0.59807 l -0.66421,-2.53007 -0.66697,2.53007 h -0.59807 z" + style="stroke:none;stroke-width:0.477" + id="path5659" /> + <path + d="m 126.34479,286.28158 q -0.61461,0 -0.85163,0.14056 -0.23702,0.14056 -0.23702,0.47956 0,0.27009 0.17639,0.42995 0.17914,0.15709 0.48507,0.15709 0.42167,0 0.67523,-0.29765 0.25632,-0.30042 0.25632,-0.79651 v -0.113 z m 1.01148,-0.20946 v 1.76113 h -0.50712 v -0.46853 q -0.17363,0.28112 -0.43271,0.41617 -0.25907,0.13229 -0.63389,0.13229 -0.47405,0 -0.75517,-0.26459 -0.27836,-0.26733 -0.27836,-0.71382 0,-0.5209 0.34727,-0.78548 0.35002,-0.26458 1.04179,-0.26458 h 0.71107 v -0.0496 q 0,-0.35002 -0.23151,-0.54019 -0.22876,-0.19293 -0.64492,-0.19293 -0.26459,0 -0.51539,0.0634 -0.2508,0.0634 -0.48231,0.19017 v -0.46853 q 0.27836,-0.10749 0.54019,-0.15985 0.26183,-0.0551 0.50987,-0.0551 0.66973,0 1.00046,0.34727 0.33073,0.34727 0.33073,1.05282 z" + style="stroke:none;stroke-width:0.477" + id="path5661" /> + <path + d="m 130.18951,285.22049 q -0.0854,-0.0496 -0.18741,-0.0716 -0.0992,-0.0248 -0.22049,-0.0248 -0.42995,0 -0.66146,0.28112 -0.22875,0.27836 -0.22875,0.80202 v 1.62608 h -0.50987 v -3.0868 h 0.50987 v 0.47956 q 0.15985,-0.28112 0.41617,-0.41617 0.25631,-0.13781 0.62287,-0.13781 0.0524,0 0.11576,0.008 0.0634,0.006 0.14055,0.0193 z" + style="stroke:none;stroke-width:0.477" + id="path5663" /> + <path + d="m 133.23773,286.16307 v 0.24805 h -2.33164 q 0.0331,0.52365 0.3142,0.79926 0.28387,0.27285 0.78823,0.27285 0.29215,0 0.565,-0.0717 0.27561,-0.0717 0.5457,-0.21497 v 0.47956 q -0.27285,0.11575 -0.55948,0.17638 -0.28663,0.0606 -0.58153,0.0606 -0.73863,0 -1.17134,-0.42995 -0.42994,-0.42995 -0.42994,-1.16306 0,-0.75792 0.4079,-1.20165 0.41065,-0.44649 1.10518,-0.44649 0.62287,0 0.98392,0.40239 0.3638,0.39963 0.3638,1.08865 z m -0.50712,-0.14883 q -0.006,-0.41616 -0.23426,-0.66421 -0.226,-0.24805 -0.60083,-0.24805 -0.42443,0 -0.68075,0.23978 -0.25356,0.23978 -0.29214,0.67524 z" + style="stroke:none;stroke-width:0.477" + id="path5665" /> + </g> + </g> +</svg> diff --git a/doc/htmldoc/static/img/hpc_orange128.png b/doc/htmldoc/static/img/hpc_orange128.png new file mode 100644 index 0000000000..87322a150a Binary files /dev/null and b/doc/htmldoc/static/img/hpc_orange128.png differ diff --git a/doc/htmldoc/static/img/hpc_orange128.svg b/doc/htmldoc/static/img/hpc_orange128.svg new file mode 100644 index 0000000000..0f0ca575fd --- /dev/null +++ b/doc/htmldoc/static/img/hpc_orange128.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg4533" + width="256" + height="256" + viewBox="0 0 256 256" + sodipodi:docname="hpc_orange128.svg" + inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs4537" /> + <sodipodi:namedview + id="namedview4535" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="3.3203125" + inkscape:cx="77.703529" + inkscape:cy="128.15059" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g4539" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g4539"> + <path + style="fill:#ff6634;stroke:none;stroke-width:2" + d="m 72.629559,89.931232 c -7.6582,0 -18.8636,-1.9944 -25.7038,2.0556 -11.8834,7.0362 -6.2962,37.979798 -6.2962,49.944398 -8.8614,0 -24.12122,-2.8956 -31.3641997,3.2068 -11.191442,9.4292 -4.66324,49.032 -4.6358,62.7932 0.01268,6.36 -0.7834,14.228 4.6358,18.794 6.9123997,5.824 20.9633997,3.206 29.3641997,3.206 22.2402,0 69.636601,10.76 70.000001,-20 h 32 c 0.3634,30.76 47.7598,20 69.99999,20 8.4,0 22.452,2.618 29.364,-3.206 5.42,-4.566 4.624,-12.434 4.636,-18.794 0.028,-13.7612 6.556,-53.364 -4.636,-62.7932 -7.242,-6.1024 -22.502,-3.2068 -31.364,-3.2068 0,-11.9646 5.588,-42.908198 -6.296,-49.944398 -6.84039,-4.05 -18.04579,-2.0556 -25.70399,-2.0556 -0.074,-13.405 5.7242,-44.764 -3.2068,-55.3642 -4.9372,-5.8598 -13.9652,-4.6328 -20.7932,-4.6358 H 96.629559 c -6.828,0.003 -15.856,-1.224 -20.7932,4.6358 -8.9312,10.6004 -3.1328,41.9592 -3.2068,55.3642 m 12.6358,-50.7932 c 14.1348,-6.9552 43.657001,-1.2068 59.364201,-1.2068 5.7658,0 14.0324,-1.4168 19.3642,1.2068 7.257,3.5708 7.257,26.0154 0,29.5864 -14.1348,6.9552 -43.657,1.2068 -59.3642,1.2068 -5.765801,0 -14.032401,1.4168 -19.364201,-1.2068 -7.257,-3.5708 -7.257,-26.0156 0,-29.5864 m 3.3642,4.7932 v 20 h 20.000001 v -20 H 88.629559 m 28.000001,0 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m -44,8 v 4 h -4.000001 v -4 h 4.000001 m 16,4 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m -59.364201,23.2068 c 14.1348,-6.9552 43.657001,-1.2068 59.364201,-1.2068 5.7658,0 14.0324,-1.4168 19.3642,1.2068 7.257,3.5708 7.257,26.015598 0,29.586398 -14.1348,6.9552 -43.657,1.2068 -59.3642,1.2068 -5.765801,0 -14.032401,1.4168 -19.364201,-1.2068 -7.257,-3.5708 -7.257,-26.015598 0,-29.586398 m 3.3642,4.7932 V 103.93123 H 108.62956 V 83.931232 H 88.629559 m 28.000001,0 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m -44,8 v 4 h -4.000001 v -4 h 4.000001 m 16,4 v 7.999998 h 16 v -7.999998 h -16 m 28,0 v 7.999998 h 16 v -7.999998 h -16 m -72.000001,2 c 0.234,7.212598 1.076,14.088998 8.1172,17.944398 15.3904,8.427 48.501601,2.0556 65.882801,2.0556 6.8348,0 15.654,1.355 21.8828,-2.0556 7.0412,-3.8554 7.8832,-10.7318 8.1172,-17.944398 30.43999,0 23.99999,18.497198 23.99999,43.999998 -13.82979,0 -44.93759,-5.7908 -55.36419,4.6358 -10.3148,10.3148 -4.3608,41.5986 -4.6358,55.3642 h -32 c -0.275,-13.7656 5.679,-45.0494 -4.6358,-55.3642 -10.426601,-10.4266 -41.534201,-4.6358 -55.364201,-4.6358 0,-25.5028 -6.4404,-43.999998 24,-43.999998 m -55.3642,53.206798 c 5.3318,-2.6236 13.5984,-1.2068 19.3642,-1.2068 15.7072,0 45.2294,-5.7484 59.3642,1.2068 7.257001,3.571 7.257001,26.0154 0,29.5864 -5.3318,2.6236 -13.5984,1.2068 -19.3642,1.2068 -15.7072,0 -45.2294,5.7484 -59.3642,-1.2068 -7.25702,-3.571 -7.25702,-26.0154 0,-29.5864 m 136.000001,0 c 14.1348,-6.9552 43.6562,-1.2068 59.36419,-1.2068 5.766,0 14.032,-1.4168 19.364,1.2068 7.258,3.571 7.258,26.0154 0,29.5864 -5.332,2.6236 -13.598,1.2068 -19.364,1.2068 -15.70799,0 -45.22939,5.7484 -59.36419,-1.2068 -7.257,-3.571 -7.257,-26.0154 0,-29.5864 m -132.635801,4.7932 v 20 h 20 v -20 h -20 m 28,0 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m 80.000001,0 v 20 h 20 v -20 h -20 m 28,0 v 8 h 15.99999 v -8 h -15.99999 m 27.99999,0 v 8 h 16 v -8 h -16 m -179.999991,8 v 4 h -4 v -4 h 4 m 136.000001,0 v 4 h -4 v -4 h 4 m -120.000001,4 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m 108.000001,0 v 8 h 15.99999 v -8 h -15.99999 m 27.99999,0 v 8 h 16 v -8 h -16 m -195.364191,23.2068 c 14.1348,-6.9552 43.657,-1.2068 59.3642,-1.2068 5.7658,0 14.0324,-1.4168 19.3642,1.2068 7.257001,3.571 7.257001,26.0152 0,29.5872 -5.3318,2.622 -13.5984,1.206 -19.3642,1.206 -15.7072,0 -45.2294,5.748 -59.3642,-1.206 -7.25702,-3.572 -7.25702,-26.0162 0,-29.5872 m 136.000001,0 c 5.3318,-2.6236 13.5984,-1.2068 19.3642,-1.2068 15.7072,0 45.22999,-5.7484 59.36399,1.2068 7.258,3.571 7.258,26.0152 0,29.5872 -5.332,2.622 -13.598,1.206 -19.364,1.206 -15.70799,0 -45.22939,5.748 -59.36419,-1.206 -7.257,-3.572 -7.257,-26.0164 0,-29.5872 m -132.635801,4.7932 v 20 h 20 v -20 h -20 m 28,0 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m 80.000001,0 v 20 h 20 v -20 h -20 m 28,0 v 8 h 15.99999 v -8 h -15.99999 m 27.99999,0 v 8 h 16 v -8 h -16 m -179.999991,8 v 4 h -4 v -4 h 4 m 136.000001,0 v 4 h -4 v -4 h 4 m -120.000001,4 v 8 h 16 v -8 h -16 m 28,0 v 8 h 16 v -8 h -16 m 108.000001,0 v 8 h 15.99999 v -8 h -15.99999 m 27.99999,0 v 8 h 16 v -8 z" + id="path4543" /> + </g> +</svg> diff --git a/doc/htmldoc/static/img/hpc_orange64.png b/doc/htmldoc/static/img/hpc_orange64.png new file mode 100644 index 0000000000..01aad89b43 Binary files /dev/null and b/doc/htmldoc/static/img/hpc_orange64.png differ diff --git a/doc/htmldoc/static/img/hubcontrol-notebook.png b/doc/htmldoc/static/img/hubcontrol-notebook.png new file mode 100644 index 0000000000..311e65d4aa Binary files /dev/null and b/doc/htmldoc/static/img/hubcontrol-notebook.png differ diff --git a/doc/htmldoc/static/img/insert_cell.png b/doc/htmldoc/static/img/insert_cell.png new file mode 100644 index 0000000000..a89fbc8de3 Binary files /dev/null and b/doc/htmldoc/static/img/insert_cell.png differ diff --git a/doc/htmldoc/static/img/kernel-version-jupyter.png b/doc/htmldoc/static/img/kernel-version-jupyter.png new file mode 100644 index 0000000000..7329649d8a Binary files /dev/null and b/doc/htmldoc/static/img/kernel-version-jupyter.png differ diff --git a/doc/htmldoc/static/img/lab-execution-site-de.png b/doc/htmldoc/static/img/lab-execution-site-de.png new file mode 100644 index 0000000000..1ce7418b21 Binary files /dev/null and b/doc/htmldoc/static/img/lab-execution-site-de.png differ diff --git a/doc/htmldoc/static/img/leaky-integrate-and-fire.svg b/doc/htmldoc/static/img/leaky-integrate-and-fire.svg new file mode 100644 index 0000000000..c162705b17 --- /dev/null +++ b/doc/htmldoc/static/img/leaky-integrate-and-fire.svg @@ -0,0 +1,61 @@ +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="27.121ex" height="6.009ex" style="vertical-align: -2.171ex;" viewBox="0 -1652.5 11677.1 2587.3" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" aria-labelledby="MathJax-SVG-1-Title"> +<title id="MathJax-SVG-1-Title">{\displaystyle C_{\mathrm {m} }{\frac {dV_{\mathrm {m} }(t)}{dt}}=I(t)-{\frac {V_{\mathrm {m} }(t)}{R_{\mathrm {m} }}}} + + + \ No newline at end of file diff --git a/doc/htmldoc/static/img/math_orange128.png b/doc/htmldoc/static/img/math_orange128.png new file mode 100644 index 0000000000..d0c25e8245 Binary files /dev/null and b/doc/htmldoc/static/img/math_orange128.png differ diff --git a/doc/htmldoc/static/img/math_orange128.svg b/doc/htmldoc/static/img/math_orange128.svg new file mode 100644 index 0000000000..11014a42b0 --- /dev/null +++ b/doc/htmldoc/static/img/math_orange128.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + diff --git a/doc/htmldoc/static/img/math_orange64.png b/doc/htmldoc/static/img/math_orange64.png new file mode 100644 index 0000000000..6bc3b21064 Binary files /dev/null and b/doc/htmldoc/static/img/math_orange64.png differ diff --git a/doc/htmldoc/static/img/multi-area-model_5faa0e9c.png b/doc/htmldoc/static/img/multi-area-model_5faa0e9c.png new file mode 100644 index 0000000000..94945cc542 Binary files /dev/null and b/doc/htmldoc/static/img/multi-area-model_5faa0e9c.png differ diff --git a/doc/htmldoc/static/img/nb-logo.svg b/doc/htmldoc/static/img/nb-logo.svg new file mode 100644 index 0000000000..3f08a6d98b --- /dev/null +++ b/doc/htmldoc/static/img/nb-logo.svg @@ -0,0 +1,90 @@ + +Group.svg +Created using Figma 0.90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +