diff --git a/.gitignore b/.gitignore index 1377554..634f87e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.swp +outdir diff --git a/doc/tinytalk/.latexmkrc b/doc/tinytalk/.latexmkrc deleted file mode 100644 index fbd0724..0000000 --- a/doc/tinytalk/.latexmkrc +++ /dev/null @@ -1,20 +0,0 @@ -$pdf_mode = 1; -$pdf_previewer = 'start evince'; - -@default_files = ('tinytalk.tex'); - -# Make latexmk -c remove .bbl file -$bibtex_use = 2; - -# Make the glossaries package happy -add_cus_dep('glo', 'gls', 0, 'run_makeglossaries'); -add_cus_dep('acn', 'acr', 0, 'run_makeglossaries'); - -sub run_makeglossaries { - my ($base_name, $path) = fileparse($_[0]); - system("makeglossaries '$base_name'"); -} - -push @generated_exts, 'glo', 'gls', 'glg'; -push @generated_exts, 'acn', 'acr', 'alg'; -$clean_ext .= ' %R.ist %R.xdy'; diff --git a/doc/tinytalk/IEEEtran.bst b/doc/tinytalk/IEEEtran.bst deleted file mode 100644 index faabdfd..0000000 --- a/doc/tinytalk/IEEEtran.bst +++ /dev/null @@ -1,2426 +0,0 @@ -%% Encoding: ISO8859-1 %% - -%% IEEEtran.bst -%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted) -%% Version 1.13 (2008/09/30) -%% -%% Copyright (c) 2003-2008 Michael Shell -%% -%% Original starting code base and algorithms obtained from the output of -%% Patrick W. Daly's makebst package as well as from prior versions of -%% IEEE BibTeX styles: -%% -%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988) -%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993) -%% -%% Support sites: -%% http://www.michaelshell.org/tex/ieeetran/ -%% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ -%% and/or -%% http://www.ieee.org/ -%% -%% For use with BibTeX version 0.99a or later -%% -%% This is a numerical citation style. -%% -%%************************************************************************* -%% Legal Notice: -%% This code is offered as-is without any warranty either expressed or -%% implied; without even the implied warranty of MERCHANTABILITY or -%% FITNESS FOR A PARTICULAR PURPOSE! -%% User assumes all risk. -%% In no event shall IEEE or any contributor to this code be liable for -%% any damages or losses, including, but not limited to, incidental, -%% consequential, or any other damages, resulting from the use or misuse -%% of any information contained here. -%% -%% All comments are the opinions of their respective authors and are not -%% necessarily endorsed by the IEEE. -%% -%% This work is distributed under the LaTeX Project Public License (LPPL) -%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, -%% distributed and modified. A copy of the LPPL, version 1.3, is included -%% in the base LaTeX documentation of all distributions of LaTeX released -%% 2003/12/01 or later. -%% Retain all contribution notices and credits. -%% ** Modified files should be clearly indicated as such, including ** -%% ** renaming them and changing author support contact information. ** -%% -%% File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib, -%% IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst, -%% IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf -%%************************************************************************* -% -% -% Changelog: -% -% 1.00 (2002/08/13) Initial release -% -% 1.10 (2002/09/27) -% 1. Corrected minor bug for improperly formed warning message when a -% book was not given a title. Thanks to Ming Kin Lai for reporting this. -% 2. Added support for CTLname_format_string and CTLname_latex_cmd fields -% in the BST control entry type. -% -% 1.11 (2003/04/02) -% 1. Fixed bug with URLs containing underscores when using url.sty. Thanks -% to Ming Kin Lai for reporting this. -% -% 1.12 (2007/01/11) -% 1. Fixed bug with unwanted comma before "et al." when an entry contained -% more than two author names. Thanks to Pallav Gupta for reporting this. -% 2. Fixed bug with anomalous closing quote in tech reports that have a -% type, but without a number or address. Thanks to Mehrdad Mirreza for -% reporting this. -% 3. Use braces in \providecommand in begin.bib to better support -% latex2html. TeX style length assignments OK with recent versions -% of latex2html - 1.71 (2002/2/1) or later is strongly recommended. -% Use of the language field still causes trouble with latex2html. -% Thanks to Federico Beffa for reporting this. -% 4. Added IEEEtran.bst ID and version comment string to .bbl output. -% 5. Provide a \BIBdecl hook that allows the user to execute commands -% just prior to the first entry. -% 6. Use default urlstyle (is using url.sty) of "same" rather than rm to -% better work with a wider variety of bibliography styles. -% 7. Changed month abbreviations from Sept., July and June to Sep., Jul., -% and Jun., respectively, as IEEE now does. Thanks to Moritz Borgmann -% for reporting this. -% 8. Control entry types should not be considered when calculating longest -% label width. -% 9. Added alias www for electronic/online. -% 10. Added CTLname_url_prefix control entry type. -% -% 1.13 (2008/09/30) -% 1. Fixed bug with edition number to ordinal conversion. Thanks to -% Michael Roland for reporting this and correcting the algorithm. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% These are the defaults for the user adjustable controls. The values used -% here can be overridden by the user via IEEEtranBSTCTL entry type. - -% NOTE: The recommended LaTeX command to invoke a control entry type is: -% -%\makeatletter -%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} -%\def\@bstctlcite[#1]#2{\@bsphack -% \@for\@citeb:=#2\do{% -% \edef\@citeb{\expandafter\@firstofone\@citeb}% -% \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% -% \@esphack} -%\makeatother -% -% It is called at the start of the document, before the first \cite, like: -% \bstctlcite{IEEEexample:BSTcontrol} -% -% IEEEtran.cls V1.6 and later does provide this command. - - - -% #0 turns off the display of the number for articles. -% #1 enables -FUNCTION {default.is.use.number.for.article} { #1 } - - -% #0 turns off the display of the paper and type fields in @inproceedings. -% #1 enables -FUNCTION {default.is.use.paper} { #1 } - - -% #0 turns off the forced use of "et al." -% #1 enables -FUNCTION {default.is.forced.et.al} { #0 } - -% The maximum number of names that can be present beyond which an "et al." -% usage is forced. Be sure that num.names.shown.with.forced.et.al (below) -% is not greater than this value! -% Note: There are many instances of references in IEEE journals which have -% a very large number of authors as well as instances in which "et al." is -% used profusely. -FUNCTION {default.max.num.names.before.forced.et.al} { #10 } - -% The number of names that will be shown with a forced "et al.". -% Must be less than or equal to max.num.names.before.forced.et.al -FUNCTION {default.num.names.shown.with.forced.et.al} { #1 } - - -% #0 turns off the alternate interword spacing for entries with URLs. -% #1 enables -FUNCTION {default.is.use.alt.interword.spacing} { #1 } - -% If alternate interword spacing for entries with URLs is enabled, this is -% the interword spacing stretch factor that will be used. For example, the -% default "4" here means that the interword spacing in entries with URLs can -% stretch to four times normal. Does not have to be an integer. Note that -% the value specified here can be overridden by the user in their LaTeX -% code via a command such as: -% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to -% that via the IEEEtranBSTCTL entry type. -FUNCTION {default.ALTinterwordstretchfactor} { "4" } - - -% #0 turns off the "dashification" of repeated (i.e., identical to those -% of the previous entry) names. IEEE normally does this. -% #1 enables -FUNCTION {default.is.dash.repeated.names} { #1 } - - -% The default name format control string. -FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" } - - -% The default LaTeX font command for the names. -FUNCTION {default.name.latex.cmd}{ "" } - - -% The default URL prefix. -FUNCTION {default.name.url.prefix}{ "[Online]. Available:" } - - -% Other controls that cannot be accessed via IEEEtranBSTCTL entry type. - -% #0 turns off the terminal startup banner/completed message so as to -% operate more quietly. -% #1 enables -FUNCTION {is.print.banners.to.terminal} { #1 } - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% FILE VERSION AND BANNER %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION{bst.file.version} { "1.13" } -FUNCTION{bst.file.date} { "2008/09/30" } -FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" } - -FUNCTION {banner.message} -{ is.print.banners.to.terminal - { "-- IEEEtran.bst version" " " * bst.file.version * - " (" * bst.file.date * ") " * "by Michael Shell." * - top$ - "-- " bst.file.website * - top$ - "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." * - top$ - } - { skip$ } - if$ -} - -FUNCTION {completed.message} -{ is.print.banners.to.terminal - { "" - top$ - "Done." - top$ - } - { skip$ } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%%% -%% STRING CONSTANTS %% -%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {bbl.and}{ "and" } -FUNCTION {bbl.etal}{ "et~al." } -FUNCTION {bbl.editors}{ "eds." } -FUNCTION {bbl.editor}{ "ed." } -FUNCTION {bbl.edition}{ "ed." } -FUNCTION {bbl.volume}{ "vol." } -FUNCTION {bbl.of}{ "of" } -FUNCTION {bbl.number}{ "no." } -FUNCTION {bbl.in}{ "in" } -FUNCTION {bbl.pages}{ "pp." } -FUNCTION {bbl.page}{ "p." } -FUNCTION {bbl.chapter}{ "ch." } -FUNCTION {bbl.paper}{ "paper" } -FUNCTION {bbl.part}{ "pt." } -FUNCTION {bbl.patent}{ "Patent" } -FUNCTION {bbl.patentUS}{ "U.S." } -FUNCTION {bbl.revision}{ "Rev." } -FUNCTION {bbl.series}{ "ser." } -FUNCTION {bbl.standard}{ "Std." } -FUNCTION {bbl.techrep}{ "Tech. Rep." } -FUNCTION {bbl.mthesis}{ "Master's thesis" } -FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" } -FUNCTION {bbl.st}{ "st" } -FUNCTION {bbl.nd}{ "nd" } -FUNCTION {bbl.rd}{ "rd" } -FUNCTION {bbl.th}{ "th" } - - -% This is the LaTeX spacer that is used when a larger than normal space -% is called for (such as just before the address:publisher). -FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " } - -% The LaTeX code for dashes that are used to represent repeated names. -% Note: Some older IEEE journals used something like -% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along -% the baseline. However, IEEE now uses a thinner, above baseline, -% six dash long sequence. -FUNCTION {repeated.name.dashes} { "------" } - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% PREDEFINED STRING MACROS %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -MACRO {jan} {"Jan."} -MACRO {feb} {"Feb."} -MACRO {mar} {"Mar."} -MACRO {apr} {"Apr."} -MACRO {may} {"May"} -MACRO {jun} {"Jun."} -MACRO {jul} {"Jul."} -MACRO {aug} {"Aug."} -MACRO {sep} {"Sep."} -MACRO {oct} {"Oct."} -MACRO {nov} {"Nov."} -MACRO {dec} {"Dec."} - - - -%%%%%%%%%%%%%%%%%% -%% ENTRY FIELDS %% -%%%%%%%%%%%%%%%%%% - -ENTRY - { address - assignee - author - booktitle - chapter - day - dayfiled - edition - editor - howpublished - institution - intype - journal - key - language - month - monthfiled - nationality - note - number - organization - pages - paper - publisher - school - series - revision - title - type - url - volume - year - yearfiled - CTLuse_article_number - CTLuse_paper - CTLuse_forced_etal - CTLmax_names_forced_etal - CTLnames_show_etal - CTLuse_alt_spacing - CTLalt_stretch_factor - CTLdash_repeated_names - CTLname_format_string - CTLname_latex_cmd - CTLname_url_prefix - } - {} - { label } - - - - -%%%%%%%%%%%%%%%%%%%%%%% -%% INTEGER VARIABLES %% -%%%%%%%%%%%%%%%%%%%%%%% - -INTEGERS { prev.status.punct this.status.punct punct.std - punct.no punct.comma punct.period - prev.status.space this.status.space space.std - space.no space.normal space.large - prev.status.quote this.status.quote quote.std - quote.no quote.close - prev.status.nline this.status.nline nline.std - nline.no nline.newblock - status.cap cap.std - cap.no cap.yes} - -INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames } - -INTEGERS { is.use.number.for.article - is.use.paper - is.forced.et.al - max.num.names.before.forced.et.al - num.names.shown.with.forced.et.al - is.use.alt.interword.spacing - is.dash.repeated.names} - - -%%%%%%%%%%%%%%%%%%%%%% -%% STRING VARIABLES %% -%%%%%%%%%%%%%%%%%%%%%% - -STRINGS { bibinfo - longest.label - oldname - s - t - ALTinterwordstretchfactor - name.format.string - name.latex.cmd - name.url.prefix} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOW LEVEL FUNCTIONS %% -%%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {initialize.controls} -{ default.is.use.number.for.article 'is.use.number.for.article := - default.is.use.paper 'is.use.paper := - default.is.forced.et.al 'is.forced.et.al := - default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al := - default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al := - default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing := - default.is.dash.repeated.names 'is.dash.repeated.names := - default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor := - default.name.format.string 'name.format.string := - default.name.latex.cmd 'name.latex.cmd := - default.name.url.prefix 'name.url.prefix := -} - - -% This IEEEtran.bst features a very powerful and flexible mechanism for -% controlling the capitalization, punctuation, spacing, quotation, and -% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need -% or use the newline/newblock feature, but it has been implemented for -% possible future use.) The output states of IEEEtran.bst consist of -% multiple independent attributes and, as such, can be thought of as being -% vectors, rather than the simple scalar values ("before.all", -% "mid.sentence", etc.) used in most other .bst files. -% -% The more flexible and complex design used here was motivated in part by -% IEEE's rather unusual bibliography style. For example, IEEE ends the -% previous field item with a period and large space prior to the publisher -% address; the @electronic entry types use periods as inter-item punctuation -% rather than the commas used by the other entry types; and URLs are never -% followed by periods even though they are the last item in the entry. -% Although it is possible to accommodate these features with the conventional -% output state system, the seemingly endless exceptions make for convoluted, -% unreliable and difficult to maintain code. -% -% IEEEtran.bst's output state system can be easily understood via a simple -% illustration of two most recently formatted entry fields (on the stack): -% -% CURRENT_ITEM -% "PREVIOUS_ITEM -% -% which, in this example, is to eventually appear in the bibliography as: -% -% "PREVIOUS_ITEM," CURRENT_ITEM -% -% It is the job of the output routine to take the previous item off of the -% stack (while leaving the current item at the top of the stack), apply its -% trailing punctuation (including closing quote marks) and spacing, and then -% to write the result to BibTeX's output buffer: -% -% "PREVIOUS_ITEM," -% -% Punctuation (and spacing) between items is often determined by both of the -% items rather than just the first one. The presence of quotation marks -% further complicates the situation because, in standard English, trailing -% punctuation marks are supposed to be contained within the quotes. -% -% IEEEtran.bst maintains two output state (aka "status") vectors which -% correspond to the previous and current (aka "this") items. Each vector -% consists of several independent attributes which track punctuation, -% spacing, quotation, and newlines. Capitalization status is handled by a -% separate scalar because the format routines, not the output routine, -% handle capitalization and, therefore, there is no need to maintain the -% capitalization attribute for both the "previous" and "this" items. -% -% When a format routine adds a new item, it copies the current output status -% vector to the previous output status vector and (usually) resets the -% current (this) output status vector to a "standard status" vector. Using a -% "standard status" vector in this way allows us to redefine what we mean by -% "standard status" at the start of each entry handler and reuse the same -% format routines under the various inter-item separation schemes. For -% example, the standard status vector for the @book entry type may use -% commas for item separators, while the @electronic type may use periods, -% yet both entry handlers exploit many of the exact same format routines. -% -% Because format routines have write access to the output status vector of -% the previous item, they can override the punctuation choices of the -% previous format routine! Therefore, it becomes trivial to implement rules -% such as "Always use a period and a large space before the publisher." By -% pushing the generation of the closing quote mark to the output routine, we -% avoid all the problems caused by having to close a quote before having all -% the information required to determine what the punctuation should be. -% -% The IEEEtran.bst output state system can easily be expanded if needed. -% For instance, it is easy to add a "space.tie" attribute value if the -% bibliography rules mandate that two items have to be joined with an -% unbreakable space. - -FUNCTION {initialize.status.constants} -{ #0 'punct.no := - #1 'punct.comma := - #2 'punct.period := - #0 'space.no := - #1 'space.normal := - #2 'space.large := - #0 'quote.no := - #1 'quote.close := - #0 'cap.no := - #1 'cap.yes := - #0 'nline.no := - #1 'nline.newblock := -} - -FUNCTION {std.status.using.comma} -{ punct.comma 'punct.std := - space.normal 'space.std := - quote.no 'quote.std := - nline.no 'nline.std := - cap.no 'cap.std := -} - -FUNCTION {std.status.using.period} -{ punct.period 'punct.std := - space.normal 'space.std := - quote.no 'quote.std := - nline.no 'nline.std := - cap.yes 'cap.std := -} - -FUNCTION {initialize.prev.this.status} -{ punct.no 'prev.status.punct := - space.no 'prev.status.space := - quote.no 'prev.status.quote := - nline.no 'prev.status.nline := - punct.no 'this.status.punct := - space.no 'this.status.space := - quote.no 'this.status.quote := - nline.no 'this.status.nline := - cap.yes 'status.cap := -} - -FUNCTION {this.status.std} -{ punct.std 'this.status.punct := - space.std 'this.status.space := - quote.std 'this.status.quote := - nline.std 'this.status.nline := -} - -FUNCTION {cap.status.std}{ cap.std 'status.cap := } - -FUNCTION {this.to.prev.status} -{ this.status.punct 'prev.status.punct := - this.status.space 'prev.status.space := - this.status.quote 'prev.status.quote := - this.status.nline 'prev.status.nline := -} - - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ { skip$ } - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - { skip$ } - if$ -} - - -% convert the strings "yes" or "no" to #1 or #0 respectively -FUNCTION {yes.no.to.int} -{ "l" change.case$ duplicate$ - "yes" = - { pop$ #1 } - { duplicate$ "no" = - { pop$ #0 } - { "unknown boolean " quote$ * swap$ * quote$ * - " in " * cite$ * warning$ - #0 - } - if$ - } - if$ -} - - -% pushes true if the single char string on the stack is in the -% range of "0" to "9" -FUNCTION {is.num} -{ chr.to.int$ - duplicate$ "0" chr.to.int$ < not - swap$ "9" chr.to.int$ > not and -} - -% multiplies the integer on the stack by a factor of 10 -FUNCTION {bump.int.mag} -{ #0 'multiresult := - { duplicate$ #0 > } - { #1 - - multiresult #10 + - 'multiresult := - } - while$ -pop$ -multiresult -} - -% converts a single character string on the stack to an integer -FUNCTION {char.to.integer} -{ duplicate$ - is.num - { chr.to.int$ "0" chr.to.int$ - } - {"noninteger character " quote$ * swap$ * quote$ * - " in integer field of " * cite$ * warning$ - #0 - } - if$ -} - -% converts a string on the stack to an integer -FUNCTION {string.to.integer} -{ duplicate$ text.length$ 'namesleft := - #1 'nameptr := - #0 'numnames := - { nameptr namesleft > not } - { duplicate$ nameptr #1 substring$ - char.to.integer numnames bump.int.mag + - 'numnames := - nameptr #1 + - 'nameptr := - } - while$ -pop$ -numnames -} - - - - -% The output routines write out the *next* to the top (previous) item on the -% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains -% the output status for the top two items on the stack, these output -% routines have to consider the previous output status (which corresponds to -% the item that is being output). Full independent control of punctuation, -% closing quote marks, spacing, and newblock is provided. -% -% "output.nonnull" does not check for the presence of a previous empty -% item. -% -% "output" does check for the presence of a previous empty item and will -% remove an empty item rather than outputing it. -% -% "output.warn" is like "output", but will issue a warning if it detects -% an empty item. - -FUNCTION {output.nonnull} -{ swap$ - prev.status.punct punct.comma = - { "," * } - { skip$ } - if$ - prev.status.punct punct.period = - { add.period$ } - { skip$ } - if$ - prev.status.quote quote.close = - { "''" * } - { skip$ } - if$ - prev.status.space space.normal = - { " " * } - { skip$ } - if$ - prev.status.space space.large = - { large.space * } - { skip$ } - if$ - write$ - prev.status.nline nline.newblock = - { newline$ "\newblock " write$ } - { skip$ } - if$ -} - -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} - -FUNCTION {output.warn} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} - -% "fin.entry" is the output routine that handles the last item of the entry -% (which will be on the top of the stack when "fin.entry" is called). - -FUNCTION {fin.entry} -{ this.status.punct punct.no = - { skip$ } - { add.period$ } - if$ - this.status.quote quote.close = - { "''" * } - { skip$ } - if$ -write$ -newline$ -} - - -FUNCTION {is.last.char.not.punct} -{ duplicate$ - "}" * add.period$ - #-1 #1 substring$ "." = -} - -FUNCTION {is.multiple.pages} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ } - -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "\emph{" swap$ * "}" * } - if$ -} - -FUNCTION {do.name.latex.cmd} -{ name.latex.cmd - empty$ - { skip$ } - { name.latex.cmd "{" * swap$ * "}" * } - if$ -} - -% IEEEtran.bst uses its own \BIBforeignlanguage command which directly -% invokes the TeX hyphenation patterns without the need of the Babel -% package. Babel does a lot more than switch hyphenation patterns and -% its loading can cause unintended effects in many class files (such as -% IEEEtran.cls). -FUNCTION {select.language} -{ duplicate$ empty$ 'pop$ - { language empty$ 'skip$ - { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * } - if$ - } - if$ -} - -FUNCTION {tie.or.space.prefix} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } - if$ - swap$ -} - -FUNCTION {get.bbl.editor} -{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } - -FUNCTION {space.word}{ " " swap$ * " " * } - - -% Field Conditioners, Converters, Checkers and External Interfaces - -FUNCTION {empty.field.to.null.string} -{ duplicate$ empty$ - { pop$ "" } - { skip$ } - if$ -} - -FUNCTION {either.or.check} -{ empty$ - { pop$ } - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {empty.entry.warn} -{ author empty$ title empty$ howpublished empty$ - month empty$ year empty$ note empty$ url empty$ - and and and and and and - { "all relevant fields are empty in " cite$ * warning$ } - 'skip$ - if$ -} - - -% The bibinfo system provides a way for the electronic parsing/acquisition -% of a bibliography's contents as is done by ReVTeX. For example, a field -% could be entered into the bibliography as: -% \bibinfo{volume}{2} -% Only the "2" would show up in the document, but the LaTeX \bibinfo command -% could do additional things with the information. IEEEtran.bst does provide -% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is -% currently not used as the bogus bibinfo functions defined here output the -% entry values directly without the \bibinfo wrapper. The bibinfo functions -% themselves (and the calls to them) are retained for possible future use. -% -% bibinfo.check avoids acting on missing fields while bibinfo.warn will -% issue a warning message if a missing field is detected. Prior to calling -% the bibinfo functions, the user should push the field value and then its -% name string, in that order. - -FUNCTION {bibinfo.check} -{ swap$ duplicate$ missing$ - { pop$ pop$ "" } - { duplicate$ empty$ - { swap$ pop$ } - { swap$ pop$ } - if$ - } - if$ -} - -FUNCTION {bibinfo.warn} -{ swap$ duplicate$ missing$ - { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } - { duplicate$ empty$ - { swap$ "empty " swap$ * " in " * cite$ * warning$ } - { swap$ pop$ } - if$ - } - if$ -} - - -% IEEE separates large numbers with more than 4 digits into groups of -% three. IEEE uses a small space to separate these number groups. -% Typical applications include patent and page numbers. - -% number of consecutive digits required to trigger the group separation. -FUNCTION {large.number.trigger}{ #5 } - -% For numbers longer than the trigger, this is the blocksize of the groups. -% The blocksize must be less than the trigger threshold, and 2 * blocksize -% must be greater than the trigger threshold (can't do more than one -% separation on the initial trigger). -FUNCTION {large.number.blocksize}{ #3 } - -% What is actually inserted between the number groups. -FUNCTION {large.number.separator}{ "\," } - -% So as to save on integer variables by reusing existing ones, numnames -% holds the current number of consecutive digits read and nameptr holds -% the number that will trigger an inserted space. -FUNCTION {large.number.separate} -{ 't := - "" - #0 'numnames := - large.number.trigger 'nameptr := - { t empty$ not } - { t #-1 #1 substring$ is.num - { numnames #1 + 'numnames := } - { #0 'numnames := - large.number.trigger 'nameptr := - } - if$ - t #-1 #1 substring$ swap$ * - t #-2 global.max$ substring$ 't := - numnames nameptr = - { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$ - nameptr large.number.blocksize - #1 + global.max$ substring$ - large.number.separator swap$ * * - nameptr large.number.blocksize - 'numnames := - large.number.blocksize #1 + 'nameptr := - } - { skip$ } - if$ - } - while$ -} - -% Converts all single dashes "-" to double dashes "--". -FUNCTION {n.dashify} -{ large.number.separate - 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - - -% This function detects entries with names that are identical to that of -% the previous entry and replaces the repeated names with dashes (if the -% "is.dash.repeated.names" user control is nonzero). -FUNCTION {name.or.dash} -{ 's := - oldname empty$ - { s 'oldname := s } - { s oldname = - { is.dash.repeated.names - { repeated.name.dashes } - { s 'oldname := s } - if$ - } - { s 'oldname := s } - if$ - } - if$ -} - -% Converts the number string on the top of the stack to -% "numerical ordinal form" (e.g., "7" to "7th"). There is -% no artificial limit to the upper bound of the numbers as the -% two least significant digits determine the ordinal form. -FUNCTION {num.to.ordinal} -{ duplicate$ #-2 #1 substring$ "1" = - { bbl.th * } - { duplicate$ #-1 #1 substring$ "1" = - { bbl.st * } - { duplicate$ #-1 #1 substring$ "2" = - { bbl.nd * } - { duplicate$ #-1 #1 substring$ "3" = - { bbl.rd * } - { bbl.th * } - if$ - } - if$ - } - if$ - } - if$ -} - -% If the string on the top of the stack begins with a number, -% (e.g., 11th) then replace the string with the leading number -% it contains. Otherwise retain the string as-is. s holds the -% extracted number, t holds the part of the string that remains -% to be scanned. -FUNCTION {extract.num} -{ duplicate$ 't := - "" 's := - { t empty$ not } - { t #1 #1 substring$ - t #2 global.max$ substring$ 't := - duplicate$ is.num - { s swap$ * 's := } - { pop$ "" 't := } - if$ - } - while$ - s empty$ - 'skip$ - { pop$ s } - if$ -} - -% Converts the word number string on the top of the stack to -% Arabic string form. Will be successful up to "tenth". -FUNCTION {word.to.num} -{ duplicate$ "l" change.case$ 's := - s "first" = - { pop$ "1" } - { skip$ } - if$ - s "second" = - { pop$ "2" } - { skip$ } - if$ - s "third" = - { pop$ "3" } - { skip$ } - if$ - s "fourth" = - { pop$ "4" } - { skip$ } - if$ - s "fifth" = - { pop$ "5" } - { skip$ } - if$ - s "sixth" = - { pop$ "6" } - { skip$ } - if$ - s "seventh" = - { pop$ "7" } - { skip$ } - if$ - s "eighth" = - { pop$ "8" } - { skip$ } - if$ - s "ninth" = - { pop$ "9" } - { skip$ } - if$ - s "tenth" = - { pop$ "10" } - { skip$ } - if$ -} - - -% Converts the string on the top of the stack to numerical -% ordinal (e.g., "11th") form. -FUNCTION {convert.edition} -{ duplicate$ empty$ 'skip$ - { duplicate$ #1 #1 substring$ is.num - { extract.num - num.to.ordinal - } - { word.to.num - duplicate$ #1 #1 substring$ is.num - { num.to.ordinal } - { "edition ordinal word " quote$ * edition * quote$ * - " may be too high (or improper) for conversion" * " in " * cite$ * warning$ - } - if$ - } - if$ - } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LATEX BIBLIOGRAPHY CODE %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {start.entry} -{ newline$ - "\bibitem{" write$ - cite$ write$ - "}" write$ - newline$ - "" - initialize.prev.this.status -} - -% Here we write out all the LaTeX code that we will need. The most involved -% code sequences are those that control the alternate interword spacing and -% foreign language hyphenation patterns. The heavy use of \providecommand -% gives users a way to override the defaults. Special thanks to Javier Bezos, -% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all -% the other gurus on comp.text.tex for their help and advice on the topic of -% \selectlanguage, Babel and BibTeX. -FUNCTION {begin.bib} -{ "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" * - write$ newline$ - preamble$ empty$ 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{" longest.label * "}" * - write$ newline$ - "\providecommand{\url}[1]{#1}" - write$ newline$ - "\csname url@samestyle\endcsname" - write$ newline$ - "\providecommand{\newblock}{\relax}" - write$ newline$ - "\providecommand{\bibinfo}[2]{#2}" - write$ newline$ - "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}" - write$ newline$ - "\providecommand{\BIBentryALTinterwordstretchfactor}{" - ALTinterwordstretchfactor * "}" * - write$ newline$ - "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus " - write$ newline$ - "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}" - write$ newline$ - "\providecommand{\BIBforeignlanguage}[2]{{%" - write$ newline$ - "\expandafter\ifx\csname l@#1\endcsname\relax" - write$ newline$ - "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%" - write$ newline$ - "\typeout{** loaded for the language `#1'. Using the pattern for}%" - write$ newline$ - "\typeout{** the default language instead.}%" - write$ newline$ - "\else" - write$ newline$ - "\language=\csname l@#1\endcsname" - write$ newline$ - "\fi" - write$ newline$ - "#2}}" - write$ newline$ - "\providecommand{\BIBdecl}{\relax}" - write$ newline$ - "\BIBdecl" - write$ newline$ -} - -FUNCTION {end.bib} -{ newline$ "\end{thebibliography}" write$ newline$ } - -FUNCTION {if.url.alt.interword.spacing} -{ is.use.alt.interword.spacing - {url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$} - { skip$ } - if$ -} - -FUNCTION {if.url.std.interword.spacing} -{ is.use.alt.interword.spacing - {url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$} - { skip$ } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%%%%% -%% LONGEST LABEL PASS %% -%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {initialize.longest.label} -{ "" 'longest.label := - #1 'number.label := - #0 'longest.label.width := -} - -FUNCTION {longest.label.pass} -{ type$ "ieeetranbstctl" = - { skip$ } - { number.label int.to.str$ 'label := - number.label #1 + 'number.label := - label width$ longest.label.width > - { label 'longest.label := - label width$ 'longest.label.width := - } - { skip$ } - if$ - } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%% -%% FORMAT HANDLERS %% -%%%%%%%%%%%%%%%%%%%%% - -%% Lower Level Formats (used by higher level formats) - -FUNCTION {format.address.org.or.pub.date} -{ 't := - "" - year empty$ - { "empty year in " cite$ * warning$ } - { skip$ } - if$ - address empty$ t empty$ and - year empty$ and month empty$ and - { skip$ } - { this.to.prev.status - this.status.std - cap.status.std - address "address" bibinfo.check * - t empty$ - { skip$ } - { punct.period 'prev.status.punct := - space.large 'prev.status.space := - address empty$ - { skip$ } - { ": " * } - if$ - t * - } - if$ - year empty$ month empty$ and - { skip$ } - { t empty$ address empty$ and - { skip$ } - { ", " * } - if$ - month empty$ - { year empty$ - { skip$ } - { year "year" bibinfo.check * } - if$ - } - { month "month" bibinfo.check * - year empty$ - { skip$ } - { " " * year "year" bibinfo.check * } - if$ - } - if$ - } - if$ - } - if$ -} - - -FUNCTION {format.names} -{ 'bibinfo := - duplicate$ empty$ 'skip$ { - this.to.prev.status - this.status.std - 's := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - name.format.string - format.name$ - bibinfo bibinfo.check - 't := - nameptr #1 > - { nameptr num.names.shown.with.forced.et.al #1 + = - numnames max.num.names.before.forced.et.al > - is.forced.et.al and and - { "others" 't := - #1 'namesleft := - } - { skip$ } - if$ - namesleft #1 > - { ", " * t do.name.latex.cmd * } - { s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ - t "others" = - { " " * bbl.etal emphasize * } - { numnames #2 > - { "," * } - { skip$ } - if$ - bbl.and - space.word * t do.name.latex.cmd * - } - if$ - } - if$ - } - { t do.name.latex.cmd } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - cap.status.std - } if$ -} - - - - -%% Higher Level Formats - -%% addresses/locations - -FUNCTION {format.address} -{ address duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - - - -%% author/editor names - -FUNCTION {format.authors}{ author "author" format.names } - -FUNCTION {format.editors} -{ editor "editor" format.names duplicate$ empty$ 'skip$ - { ", " * - get.bbl.editor - capitalize - * - } - if$ -} - - - -%% date - -FUNCTION {format.date} -{ - month "month" bibinfo.check duplicate$ empty$ - year "year" bibinfo.check duplicate$ empty$ - { swap$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - "there's a month but no year in " cite$ * warning$ } - if$ - * - } - { this.to.prev.status - this.status.std - cap.status.std - swap$ 'skip$ - { - swap$ - " " * swap$ - } - if$ - * - } - if$ -} - -FUNCTION {format.date.electronic} -{ month "month" bibinfo.check duplicate$ empty$ - year "year" bibinfo.check duplicate$ empty$ - { swap$ - { pop$ } - { "there's a month but no year in " cite$ * warning$ - pop$ ")" * "(" swap$ * - this.to.prev.status - punct.no 'this.status.punct := - space.normal 'this.status.space := - quote.no 'this.status.quote := - cap.yes 'status.cap := - } - if$ - } - { swap$ - { swap$ pop$ ")" * "(" swap$ * } - { "(" swap$ * ", " * swap$ * ")" * } - if$ - this.to.prev.status - punct.no 'this.status.punct := - space.normal 'this.status.space := - quote.no 'this.status.quote := - cap.yes 'status.cap := - } - if$ -} - - - -%% edition/title - -% Note: IEEE considers the edition to be closely associated with -% the title of a book. So, in IEEEtran.bst the edition is normally handled -% within the formatting of the title. The format.edition function is -% retained here for possible future use. -FUNCTION {format.edition} -{ edition duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - convert.edition - status.cap - { "t" } - { "l" } - if$ change.case$ - "edition" bibinfo.check - "~" * bbl.edition * - cap.status.std - } - if$ -} - -% This is used to format the booktitle of a conference proceedings. -% Here we use the "intype" field to provide the user a way to -% override the word "in" (e.g., with things like "presented at") -% Use of intype stops the emphasis of the booktitle to indicate that -% we no longer mean the written conference proceedings, but the -% conference itself. -FUNCTION {format.in.booktitle} -{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - select.language - intype missing$ - { emphasize - bbl.in " " * - } - { intype " " * } - if$ - swap$ * - cap.status.std - } - if$ -} - -% This is used to format the booktitle of collection. -% Here the "intype" field is not supported, but "edition" is. -FUNCTION {format.in.booktitle.edition} -{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - select.language - emphasize - edition empty$ 'skip$ - { ", " * - edition - convert.edition - "l" change.case$ - * "~" * bbl.edition * - } - if$ - bbl.in " " * swap$ * - cap.status.std - } - if$ -} - -FUNCTION {format.article.title} -{ title duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - "t" change.case$ - } - if$ - "title" bibinfo.check - duplicate$ empty$ 'skip$ - { quote.close 'this.status.quote := - is.last.char.not.punct - { punct.std 'this.status.punct := } - { punct.no 'this.status.punct := } - if$ - select.language - "``" swap$ * - cap.status.std - } - if$ -} - -FUNCTION {format.article.title.electronic} -{ title duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - "t" change.case$ - } - if$ - "title" bibinfo.check - duplicate$ empty$ - { skip$ } - { select.language } - if$ -} - -FUNCTION {format.book.title.edition} -{ title "title" bibinfo.check - duplicate$ empty$ - { "empty title in " cite$ * warning$ } - { this.to.prev.status - this.status.std - select.language - emphasize - edition empty$ 'skip$ - { ", " * - edition - convert.edition - status.cap - { "t" } - { "l" } - if$ - change.case$ - * "~" * bbl.edition * - } - if$ - cap.status.std - } - if$ -} - -FUNCTION {format.book.title} -{ title "title" bibinfo.check - duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - select.language - emphasize - } - if$ -} - - - -%% journal - -FUNCTION {format.journal} -{ journal duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - select.language - emphasize - } - if$ -} - - - -%% how published - -FUNCTION {format.howpublished} -{ howpublished duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - - - -%% institutions/organization/publishers/school - -FUNCTION {format.institution} -{ institution duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - -FUNCTION {format.organization} -{ organization duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - -FUNCTION {format.address.publisher.date} -{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date } - -FUNCTION {format.address.publisher.date.nowarn} -{ publisher "publisher" bibinfo.check format.address.org.or.pub.date } - -FUNCTION {format.address.organization.date} -{ organization "organization" bibinfo.check format.address.org.or.pub.date } - -FUNCTION {format.school} -{ school duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - - - -%% volume/number/series/chapter/pages - -FUNCTION {format.volume} -{ volume empty.field.to.null.string - duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - bbl.volume - status.cap - { capitalize } - { skip$ } - if$ - swap$ tie.or.space.prefix - "volume" bibinfo.check - * * - cap.status.std - } - if$ -} - -FUNCTION {format.number} -{ number empty.field.to.null.string - duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - status.cap - { bbl.number capitalize } - { bbl.number } - if$ - swap$ tie.or.space.prefix - "number" bibinfo.check - * * - cap.status.std - } - if$ -} - -FUNCTION {format.number.if.use.for.article} -{ is.use.number.for.article - { format.number } - { "" } - if$ -} - -% IEEE does not seem to tie the series so closely with the volume -% and number as is done in other bibliography styles. Instead the -% series is treated somewhat like an extension of the title. -FUNCTION {format.series} -{ series empty$ - { "" } - { this.to.prev.status - this.status.std - bbl.series " " * - series "series" bibinfo.check * - cap.status.std - } - if$ -} - - -FUNCTION {format.chapter} -{ chapter empty$ - { "" } - { this.to.prev.status - this.status.std - type empty$ - { bbl.chapter } - { type "l" change.case$ - "type" bibinfo.check - } - if$ - chapter tie.or.space.prefix - "chapter" bibinfo.check - * * - cap.status.std - } - if$ -} - - -% The intended use of format.paper is for paper numbers of inproceedings. -% The paper type can be overridden via the type field. -% We allow the type to be displayed even if the paper number is absent -% for things like "postdeadline paper" -FUNCTION {format.paper} -{ is.use.paper - { paper empty$ - { type empty$ - { "" } - { this.to.prev.status - this.status.std - type "type" bibinfo.check - cap.status.std - } - if$ - } - { this.to.prev.status - this.status.std - type empty$ - { bbl.paper } - { type "type" bibinfo.check } - if$ - " " * paper - "paper" bibinfo.check - * - cap.status.std - } - if$ - } - { "" } - if$ -} - - -FUNCTION {format.pages} -{ pages duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - duplicate$ is.multiple.pages - { - bbl.pages swap$ - n.dashify - } - { - bbl.page swap$ - } - if$ - tie.or.space.prefix - "pages" bibinfo.check - * * - cap.status.std - } - if$ -} - - - -%% technical report number - -FUNCTION {format.tech.report.number} -{ number "number" bibinfo.check - this.to.prev.status - this.status.std - cap.status.std - type duplicate$ empty$ - { pop$ - bbl.techrep - } - { skip$ } - if$ - "type" bibinfo.check - swap$ duplicate$ empty$ - { pop$ } - { tie.or.space.prefix * * } - if$ -} - - - -%% note - -FUNCTION {format.note} -{ note empty$ - { "" } - { this.to.prev.status - this.status.std - punct.period 'this.status.punct := - note #1 #1 substring$ - duplicate$ "{" = - { skip$ } - { status.cap - { "u" } - { "l" } - if$ - change.case$ - } - if$ - note #2 global.max$ substring$ * "note" bibinfo.check - cap.yes 'status.cap := - } - if$ -} - - - -%% patent - -FUNCTION {format.patent.date} -{ this.to.prev.status - this.status.std - year empty$ - { monthfiled duplicate$ empty$ - { "monthfiled" bibinfo.check pop$ "" } - { "monthfiled" bibinfo.check } - if$ - dayfiled duplicate$ empty$ - { "dayfiled" bibinfo.check pop$ "" * } - { "dayfiled" bibinfo.check - monthfiled empty$ - { "dayfiled without a monthfiled in " cite$ * warning$ - * - } - { " " swap$ * * } - if$ - } - if$ - yearfiled empty$ - { "no year or yearfiled in " cite$ * warning$ } - { yearfiled "yearfiled" bibinfo.check - swap$ - duplicate$ empty$ - { pop$ } - { ", " * swap$ * } - if$ - } - if$ - } - { month duplicate$ empty$ - { "month" bibinfo.check pop$ "" } - { "month" bibinfo.check } - if$ - day duplicate$ empty$ - { "day" bibinfo.check pop$ "" * } - { "day" bibinfo.check - month empty$ - { "day without a month in " cite$ * warning$ - * - } - { " " swap$ * * } - if$ - } - if$ - year "year" bibinfo.check - swap$ - duplicate$ empty$ - { pop$ } - { ", " * swap$ * } - if$ - } - if$ - cap.status.std -} - -FUNCTION {format.patent.nationality.type.number} -{ this.to.prev.status - this.status.std - nationality duplicate$ empty$ - { "nationality" bibinfo.warn pop$ "" } - { "nationality" bibinfo.check - duplicate$ "l" change.case$ "united states" = - { pop$ bbl.patentUS } - { skip$ } - if$ - " " * - } - if$ - type empty$ - { bbl.patent "type" bibinfo.check } - { type "type" bibinfo.check } - if$ - * - number duplicate$ empty$ - { "number" bibinfo.warn pop$ } - { "number" bibinfo.check - large.number.separate - swap$ " " * swap$ * - } - if$ - cap.status.std -} - - - -%% standard - -FUNCTION {format.organization.institution.standard.type.number} -{ this.to.prev.status - this.status.std - organization duplicate$ empty$ - { pop$ - institution duplicate$ empty$ - { "institution" bibinfo.warn } - { "institution" bibinfo.warn " " * } - if$ - } - { "organization" bibinfo.warn " " * } - if$ - type empty$ - { bbl.standard "type" bibinfo.check } - { type "type" bibinfo.check } - if$ - * - number duplicate$ empty$ - { "number" bibinfo.check pop$ } - { "number" bibinfo.check - large.number.separate - swap$ " " * swap$ * - } - if$ - cap.status.std -} - -FUNCTION {format.revision} -{ revision empty$ - { "" } - { this.to.prev.status - this.status.std - bbl.revision - revision tie.or.space.prefix - "revision" bibinfo.check - * * - cap.status.std - } - if$ -} - - -%% thesis - -FUNCTION {format.master.thesis.type} -{ this.to.prev.status - this.status.std - type empty$ - { - bbl.mthesis - } - { - type "type" bibinfo.check - } - if$ -cap.status.std -} - -FUNCTION {format.phd.thesis.type} -{ this.to.prev.status - this.status.std - type empty$ - { - bbl.phdthesis - } - { - type "type" bibinfo.check - } - if$ -cap.status.std -} - - - -%% URL - -FUNCTION {format.url} -{ url empty$ - { "" } - { this.to.prev.status - this.status.std - cap.yes 'status.cap := - name.url.prefix " " * - "\url{" * url * "}" * - punct.no 'this.status.punct := - punct.period 'prev.status.punct := - space.normal 'this.status.space := - space.normal 'prev.status.space := - quote.no 'this.status.quote := - } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%% -%% ENTRY HANDLERS %% -%%%%%%%%%%%%%%%%%%%% - - -% Note: In many journals, IEEE (or the authors) tend not to show the number -% for articles, so the display of the number is controlled here by the -% switch "is.use.number.for.article" -FUNCTION {article} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.journal "journal" bibinfo.check "journal" output.warn - format.volume output - format.number.if.use.for.article output - format.pages output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {book} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - author empty$ - { format.editors "author and editor" output.warn } - { format.authors output.nonnull } - if$ - name.or.dash - format.book.title.edition output - format.series output - author empty$ - { skip$ } - { format.editors output } - if$ - format.address.publisher.date output - format.volume output - format.number output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {booklet} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.article.title "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.date output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {electronic} -{ std.status.using.period - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.date.electronic output - format.article.title.electronic output - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.note output - format.url output - fin.entry - empty.entry.warn - if.url.std.interword.spacing -} - -FUNCTION {inbook} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - author empty$ - { format.editors "author and editor" output.warn } - { format.authors output.nonnull } - if$ - name.or.dash - format.book.title.edition output - format.series output - format.address.publisher.date output - format.volume output - format.number output - format.chapter output - format.pages output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {incollection} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.in.booktitle.edition "booktitle" output.warn - format.series output - format.editors output - format.address.publisher.date.nowarn output - format.volume output - format.number output - format.chapter output - format.pages output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {inproceedings} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.in.booktitle "booktitle" output.warn - format.series output - format.editors output - format.volume output - format.number output - publisher empty$ - { format.address.organization.date output } - { format.organization "organization" bibinfo.check output - format.address.publisher.date output - } - if$ - format.paper output - format.pages output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {manual} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.book.title.edition "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.date output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {mastersthesis} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.master.thesis.type output.nonnull - format.school "school" bibinfo.warn output - format.address "address" bibinfo.check output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {misc} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.article.title output - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.pages output - format.date output - format.note output - format.url output - fin.entry - empty.entry.warn - if.url.std.interword.spacing -} - -FUNCTION {patent} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.article.title output - format.patent.nationality.type.number output - format.patent.date output - format.note output - format.url output - fin.entry - empty.entry.warn - if.url.std.interword.spacing -} - -FUNCTION {periodical} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.editors output - name.or.dash - format.book.title "title" output.warn - format.series output - format.volume output - format.number output - format.organization "organization" bibinfo.check output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {phdthesis} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.phd.thesis.type output.nonnull - format.school "school" bibinfo.warn output - format.address "address" bibinfo.check output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {proceedings} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.editors output - name.or.dash - format.book.title "title" output.warn - format.series output - format.volume output - format.number output - publisher empty$ - { format.address.organization.date output } - { format.organization "organization" bibinfo.check output - format.address.publisher.date output - } - if$ - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {standard} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.book.title "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.organization.institution.standard.type.number output - format.revision output - format.date output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {techreport} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.institution "institution" bibinfo.warn output - format.address "address" bibinfo.check output - format.tech.report.number output.nonnull - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {unpublished} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.date output - format.note "note" output.warn - format.url output - fin.entry - if.url.std.interword.spacing -} - - -% The special entry type which provides the user interface to the -% BST controls -FUNCTION {IEEEtranBSTCTL} -{ is.print.banners.to.terminal - { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." * - top$ - } - { skip$ } - if$ - CTLuse_article_number - empty$ - { skip$ } - { CTLuse_article_number - yes.no.to.int - 'is.use.number.for.article := - } - if$ - CTLuse_paper - empty$ - { skip$ } - { CTLuse_paper - yes.no.to.int - 'is.use.paper := - } - if$ - CTLuse_forced_etal - empty$ - { skip$ } - { CTLuse_forced_etal - yes.no.to.int - 'is.forced.et.al := - } - if$ - CTLmax_names_forced_etal - empty$ - { skip$ } - { CTLmax_names_forced_etal - string.to.integer - 'max.num.names.before.forced.et.al := - } - if$ - CTLnames_show_etal - empty$ - { skip$ } - { CTLnames_show_etal - string.to.integer - 'num.names.shown.with.forced.et.al := - } - if$ - CTLuse_alt_spacing - empty$ - { skip$ } - { CTLuse_alt_spacing - yes.no.to.int - 'is.use.alt.interword.spacing := - } - if$ - CTLalt_stretch_factor - empty$ - { skip$ } - { CTLalt_stretch_factor - 'ALTinterwordstretchfactor := - "\renewcommand{\BIBentryALTinterwordstretchfactor}{" - ALTinterwordstretchfactor * "}" * - write$ newline$ - } - if$ - CTLdash_repeated_names - empty$ - { skip$ } - { CTLdash_repeated_names - yes.no.to.int - 'is.dash.repeated.names := - } - if$ - CTLname_format_string - empty$ - { skip$ } - { CTLname_format_string - 'name.format.string := - } - if$ - CTLname_latex_cmd - empty$ - { skip$ } - { CTLname_latex_cmd - 'name.latex.cmd := - } - if$ - CTLname_url_prefix - missing$ - { skip$ } - { CTLname_url_prefix - 'name.url.prefix := - } - if$ - - - num.names.shown.with.forced.et.al max.num.names.before.forced.et.al > - { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ - max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al := - } - { skip$ } - if$ -} - - -%%%%%%%%%%%%%%%%%%% -%% ENTRY ALIASES %% -%%%%%%%%%%%%%%%%%%% -FUNCTION {conference}{inproceedings} -FUNCTION {online}{electronic} -FUNCTION {internet}{electronic} -FUNCTION {webpage}{electronic} -FUNCTION {www}{electronic} -FUNCTION {default.type}{misc} - - - -%%%%%%%%%%%%%%%%%% -%% MAIN PROGRAM %% -%%%%%%%%%%%%%%%%%% - -READ - -EXECUTE {initialize.controls} -EXECUTE {initialize.status.constants} -EXECUTE {banner.message} - -EXECUTE {initialize.longest.label} -ITERATE {longest.label.pass} - -EXECUTE {begin.bib} -ITERATE {call.type$} -EXECUTE {end.bib} - -EXECUTE{completed.message} - - -%% That's all folks, mds. diff --git a/doc/tinytalk/ReadMe.txt b/doc/tinytalk/ReadMe.txt deleted file mode 100644 index 8ad3e91..0000000 --- a/doc/tinytalk/ReadMe.txt +++ /dev/null @@ -1,4 +0,0 @@ -* Sprache: Englisch -* Codierung: ISO8859-1 -* Makefile existiert - diff --git a/doc/tinytalk/beamercolorthemekit.sty b/doc/tinytalk/beamercolorthemekit.sty deleted file mode 100644 index 6774018..0000000 --- a/doc/tinytalk/beamercolorthemekit.sty +++ /dev/null @@ -1,73 +0,0 @@ -%% Encoding: ISO8859-1 %% - -% Copyright 2007 by Till Tantau -% -% This file may be distributed and/or modified -% -% 1. under the LaTeX Project Public License and/or -% 2. under the GNU Public License. -% -% See the file doc/licenses/LICENSE for more details. - -%Modificated Seagull Color Theme - -%EB: official KIT colors :-) -\definecolor{kit-green100}{rgb}{0,.59,.51} -\definecolor{kit-green70}{rgb}{.3,.71,.65} -\definecolor{kit-green50}{rgb}{.50,.79,.75} -\definecolor{kit-green30}{rgb}{.69,.87,.85} -\definecolor{kit-green15}{rgb}{.85,.93,.93} - -\definecolor{kit-blue100}{rgb}{.27,.39,.67} -\definecolor{kit-blue70}{rgb}{.49,.57,.76} -\definecolor{kit-blue50}{rgb}{.64,.69,.83} -\definecolor{kit-blue30}{rgb}{.78,.82,.9} -\definecolor{kit-blue15}{rgb}{.89,.91,.95} - - -%\definecolor{kit-green100}{cmyk}{1,0,.6,0} -%\definecolor{kit-green70}{cmyk}{.7,0,.42,0} -%\definecolor{kit-green50}{cmyk}{.5,0,.3,0} -%\definecolor{kit-green30}{cmyk}{.3,0,.18,0} -%\definecolor{kit-green15}{cmyk}{.15,0,.09,0} - -\mode - -\setbeamercolor*{normal text}{fg=black,bg=white} -\setbeamercolor*{alerted text}{fg=red} -\setbeamercolor*{example text}{fg=black} -\setbeamercolor*{structure}{fg=black} - -%\setbeamerfont{alerted text}{series=\bfseries} - -\setbeamercolor*{palette primary}{fg=black,bg=black!15} -\setbeamercolor*{palette secondary}{fg=black,bg=black!15} -\setbeamercolor*{palette tertiary}{fg=black,bg=black!15} -\setbeamercolor*{palette quaternary}{fg=black,bg=black!15} - -\setbeamercolor{sidebar}{bg=black!20} - -\setbeamercolor*{palette sidebar primary}{fg=black} -\setbeamercolor*{palette sidebar secondary}{fg=black} -\setbeamercolor*{palette sidebar tertiary}{fg=black} -\setbeamercolor*{palette sidebar quaternary}{fg=black} - -\setbeamercolor*{item projected}{fg=black,bg=kit-green100} - -\setbeamercolor*{block title}{fg=white,bg=kit-green100} -\setbeamercolor{block title alerted}{use=alerted text,fg=white,bg=alerted text.fg!75!black} -\setbeamercolor*{block title example}{fg=white,bg=kit-blue100} - -\setbeamercolor*{block body}{fg=black,bg=kit-green15} -\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!10!bg} -\setbeamercolor*{block body example}{fg=black,bg=kit-blue15} - -\setbeamercolor*{separation line}{} -\setbeamercolor*{fine separation line}{} - -\setbeamercolor*{background canvas}{bg=black!15} -\setbeamercolor*{background}{bg=black!15} - -\pagecolor{black!15} -\mode - diff --git a/doc/tinytalk/beamerthemekit.sty b/doc/tinytalk/beamerthemekit.sty deleted file mode 100644 index af3dd65..0000000 --- a/doc/tinytalk/beamerthemekit.sty +++ /dev/null @@ -1,225 +0,0 @@ -%% Encoding: ISO8859-1 %% - -%% LaTeX-Beamer template for KIT design -%% by Erik Burger, Christian Hammer -%% -%% modified by Christian Henrich for IKS -%% -%% version 1.2 -%% -%% mostly compatible to KIT corporate design v1.2 -%% http://www.uni-karlsruhe.de/download/uka/Gestaltungsrichtlinien_komplett.pdf -%% -%% Problems, bugs and comments to -%% burger@ipd.uka.de - -\usepackage[latin1]{inputenc} -\usepackage[english,ngerman]{babel} -\usepackage{ifthen} %For choosing the language, see below -\usepackage{hyperref} -\usepackage[absolute,overlay]{textpos} -\usepackage{semirounded} -\usepackage[abs]{overpic} - -\usepackage{times} - -\setbeamercovered{transparent} - -\useinnertheme{rounded} -\usecolortheme{kit} - -%save space in the footer -\beamer@compresstrue - -\newcommand{\titleimage}{IKS-beamer-motiv} - -%CH: KIT-point -\setbeamertemplate{itemize items}{ -\begin{pgfpicture}{0mm}{0mm}{1ex}{1ex} -{\pgfsetcornersarced{\pgfpoint{.3ex}{.3ex}} -\pgfpathmoveto{\pgfpoint{0cm}{1ex}} -\pgfpathlineto{\pgfpoint{1ex}{1ex}} -\pgfpathlineto{\pgfpoint{1ex}{0cm}}} -{\pgfsetcornersarced{\pgfpoint{.3ex}{.3ex}} -\pgfpathmoveto{\pgfpoint{1ex}{0cm}} -\pgfpathlineto{\pgfpointorigin} -\pgfpathlineto{\pgfpoint{0cm}{1ex}}} -\color{kit-green100} -\pgfusepath{fill} -\end{pgfpicture}% -} - -\setbeamertemplate{title page} -{ -\thispagestyle{empty} - -%middle block with name of institute -\begin{textblock*}{\paperwidth}(1mm,42.25mm) -\begin{pgfpicture}{0mm}{0mm}{\paperwidth-2mm}{6mm} - \color{black!50} - \pgfpathrectangle{\pgfpoint{0mm}{0mm}}{\pgfpoint{\paperwidth-2mm}{6mm}} - \pgfusepath{fill} - \pgftext[at=\pgfpoint{8.5mm}{3mm},left,center]{\textcolor{white}{\tiny\textsc{\insertinstitute}}} -\end{pgfpicture} -\end{textblock*} - - -%elements on title page - -%KIT logo -\begin{textblock*}{16mm}(4mm,4mm) - \iflanguage{english}{ - \includegraphics[width=15mm]{logos/kitlogo_rgb} - }{ - \includegraphics[width=15mm]{logos/kit_logo_de_4c_positiv} - } -\end{textblock*} - -%title -\begin{textblock*}{120mm}(9.5mm,16mm) -\begin{beamercolorbox}[wd=118mm,ht=14mm,dp=3mm,left]{white}% -\LARGE\textbf{\inserttitle} -\end{beamercolorbox} -\end{textblock*} - -%subtitle -\begin{textblock*}{120mm}(9.5mm,33mm) -\tiny \insertsubtitle -\end{textblock*} - -%author -\begin{textblock*}{120mm}(9.5mm,36mm) -\tiny\insertauthor%~\textbar~\insertshortdate -\end{textblock*} - -%Universit�t Karlsruhe logo -%\begin{textblock*}{23mm}(106mm,89.6mm) -%\iflanguage{english}{ -%\includegraphics[width=20mm]{logos/uka_wortbild_en} -%}{ -%\includegraphics[width=20mm]{logos/uka_wortbild_de} -%} -%\end{textblock*} - -%Forschungszentrum Karlsruhe logo -%\begin{textblock*}{21mm}(81mm,89.6mm) -%\includegraphics[width=20mm]{logos/fzk_wortbild} -%\end{textblock*} - -%legal KIT text -\begin{textblock*}{80mm}[0,1](4mm,94mm) -\fontsize{4pt}{6pt}\selectfont -\iflanguage{english}{ -KIT -- The Research University in the Helmholtz Association} -{KIT -- Die Forschungsuniversit{\"a}t in der Helmholtz-Gemeinschaft} -\end{textblock*} - -\begin{textblock*}{20mm}[0,1](110mm,92mm) -\fontsize{8pt}{8pt}\selectfont -\bfseries -\textcolor{black!75}{ - \href{http://www.kit.edu}{www.kit.edu} -} -\end{textblock*} - -% title image - -\begin{textblock*}{\paperwidth}(1mm,48.5mm) -\begin{overpic}[width=158mm,height=40mm]{logos/\titleimage} -\put(-6,-3){ - %mask curve for lower left corner of title image - \begin{pgfpicture}{0mm}{0mm}{3mm}{3mm} - \pgfpathqmoveto{0mm}{0mm} - \pgfpathlineto{\pgfpoint{3mm}{0mm}} - \pgfpathlineto{\pgfpoint{3mm}{1mm}} - - {\pgfsetcornersarced{\pgfpoint{2mm}{2mm}} - \pgfpathlineto{\pgfpoint{1mm}{1mm}} - \pgfpathlineto{\pgfpoint{1mm}{3mm}}} - - \pgfpathmoveto{\pgfpoint{1mm}{3mm}} - \pgfpathlineto{\pgfpoint{0mm}{3mm}} - \pgfpathlineto{\pgfpoint{0mm}{0mm}} - \pgfpathclose - - \color{black!15} - \pgfusepath{fill} - \end{pgfpicture} -} -\end{overpic} -\end{textblock*} - -} - -%background for pages -%CH: for plain frames -\newlength{\kitbottom} -\usebackgroundtemplate{ - \setlength{\kitbottom}{\ifbeamer@plainframe1mm\else9mm\fi}% -\begin{pgfpicture}{0mm}{0mm}{\paperwidth}{\paperheight} - - {\pgfsetcornersarced{\pgfpoint{2mm}{2mm}} - \pgfpathmoveto{\pgfpoint{\paperwidth-1mm}{\kitbottom}} - \pgfpathlineto{\pgfpoint{1mm}{\kitbottom}} - \pgfpathlineto{\pgfpoint{1mm}{\paperheight-1mm}}} - - {\pgfsetcornersarced{\pgfpoint{2mm}{2mm}} - \pgfpathmoveto{\pgfpoint{1mm}{\paperheight-1mm}} - \pgfpathlineto{\pgfpoint{\paperwidth-1mm}{\paperheight-1mm}} - \pgfpathlineto{\pgfpoint{\paperwidth-1mm}{\kitbottom}}} - - \color{white} - \pgfusepath{fill} - -\end{pgfpicture}% -} - -%frametitle -\setbeamertemplate{frametitle} -{ -\vspace{2mm} \hspace*{-4mm} -\vbox{\hsize=9cm\bfseries\insertframetitle} - -\begin{textblock*}{15mm}(140mm,4mm) - \iflanguage{english}{ - \includegraphics[width=14mm]{logos/kitlogo_rgb} - }{ - \includegraphics[width=14mm]{logos/kit_logo_de_4c_positiv} - } -\end{textblock*} - -\begin{textblock*}{1.5mm}(1mm,1mm) -\begin{pgfpicture}{0mm}{0mm}{1.5mm}{9mm} - \color{kit-green100} - \pgfpathrectangle{\pgfpoint{0mm}{0mm}}{\pgfpoint{1.5mm}{9mm}} - \pgfusepath{fill} -\end{pgfpicture}% -\end{textblock*} - -} - - -\setbeamertemplate{headline} -{ -} - -%footer -\setbeamertemplate{footline} -{ -\vskip.4mm -\begin{beamercolorbox}[ht=2.4mm, dp=3mm]{section in head/foot} - %include mini frame navigation - \insertnavigation{\paperwidth} -\end{beamercolorbox} - -\begin{beamercolorbox}[wd=0.7\textwidth,ht=2.2mm,dp=1.5mm,leftskip=1.3em,rightskip=.5em]{author in head/foot}% -\usebeamerfont{author in head/foot}% -\insertshortauthor\hspace{2.5pt}--\hspace{2.5pt}\insertshorttitle -\end{beamercolorbox}% -\vspace*{-4mm}\hspace*{0.7\textwidth}% -\begin{beamercolorbox}[wd=0.3\textwidth,ht=2.2mm,dp=1.5mm,left,leftskip=.5em]{title in head/foot}% -\usebeamerfont{title in head/foot}% -\hfill\hspace{65pt}\insertframenumber{}/\inserttotalframenumber -% vorher: \hfill\insertshortdate\hspace{30pt}\insertframenumber{}/\inserttotalframenumber -\end{beamercolorbox}% -} diff --git a/doc/tinytalk/ecm-cells.png b/doc/tinytalk/ecm-cells.png deleted file mode 100644 index 3df41b6..0000000 Binary files a/doc/tinytalk/ecm-cells.png and /dev/null differ diff --git a/doc/tinytalk/elm.png b/doc/tinytalk/elm.png deleted file mode 100644 index 08b806b..0000000 Binary files a/doc/tinytalk/elm.png and /dev/null differ diff --git a/doc/tinytalk/lbm.png b/doc/tinytalk/lbm.png deleted file mode 100644 index 6c74f7a..0000000 Binary files a/doc/tinytalk/lbm.png and /dev/null differ diff --git a/doc/tinytalk/logos/IKS-beamer-motiv-klein.jpg b/doc/tinytalk/logos/IKS-beamer-motiv-klein.jpg deleted file mode 100644 index 97ddc57..0000000 Binary files a/doc/tinytalk/logos/IKS-beamer-motiv-klein.jpg and /dev/null differ diff --git a/doc/tinytalk/logos/IKS-beamer-motiv.jpg b/doc/tinytalk/logos/IKS-beamer-motiv.jpg deleted file mode 100644 index afb24c4..0000000 Binary files a/doc/tinytalk/logos/IKS-beamer-motiv.jpg and /dev/null differ diff --git a/doc/tinytalk/logos/collagen.jpg b/doc/tinytalk/logos/collagen.jpg deleted file mode 100644 index 6c5872c..0000000 Binary files a/doc/tinytalk/logos/collagen.jpg and /dev/null differ diff --git a/doc/tinytalk/logos/kit_logo_de_4c_positiv.pdf b/doc/tinytalk/logos/kit_logo_de_4c_positiv.pdf deleted file mode 100644 index dde09d5..0000000 Binary files a/doc/tinytalk/logos/kit_logo_de_4c_positiv.pdf and /dev/null differ diff --git a/doc/tinytalk/logos/kitlogo_rgb.eps b/doc/tinytalk/logos/kitlogo_rgb.eps deleted file mode 100644 index 198caf6..0000000 --- a/doc/tinytalk/logos/kitlogo_rgb.eps +++ /dev/null @@ -1,680 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: 0.46 -%%Pages: 1 -%%Orientation: Portrait -%%BoundingBox: 182 370 378 462 -%%HiResBoundingBox: 182.1344 370.7806 377.8656 461.2194 -%%EndComments -%%Page: 1 1 -0 842 translate -0.8 -0.8 scale -0 0 0 setrgbcolor -[] 0 setdash -1 setlinewidth -0 setlinejoin -0 setlinecap -gsave [1 0 0 1 0 0] concat -gsave -0 0 0 setrgbcolor -newpath -380.56825 563.5558 moveto -353.8495 563.5558 lineto -322.09425 529.40105 lineto -322.09425 509.89293 lineto -352.88325 475.83793 lineto -380.37575 475.83793 lineto -344.94325 519.98605 lineto -380.56825 563.5558 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -384.627 563.54218 moveto -408.63575 563.54218 lineto -408.63575 475.90543 lineto -384.627 475.90543 lineto -384.627 563.54218 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -472.332 475.90168 moveto -414.43825 475.90168 lineto -414.43825 495.68418 lineto -431.38075 495.68418 lineto -431.38075 563.62418 lineto -455.3895 563.62418 lineto -455.3895 495.68418 lineto -472.332 495.68418 lineto -472.332 475.90168 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -316.35838 563.54755 moveto -316.34475 563.51918 lineto -316.34475 563.53143 lineto -316.35838 563.54755 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -316.34475 563.53931 moveto -316.34475 563.53143 lineto -316.34175 563.52755 lineto -316.34475 563.53931 lineto -fill -grestore -gsave -0 0.58823532 0.50980395 setrgbcolor -newpath -247.81925 507.97293 moveto -243.22463 513.53418 239.309 519.67355 236.17825 526.25855 curveto -316.34425 563.55543 lineto -247.81925 507.97293 lineto -fill -grestore -gsave -0 0.58823532 0.50980395 setrgbcolor -newpath -316.33488 563.5173 moveto -278.92863 484.03043 lineto -272.32862 487.07168 266.16938 490.90043 260.57275 495.40543 curveto -316.34275 563.54706 lineto -316.33488 563.5173 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -316.34175 563.52755 moveto -316.34475 563.53143 lineto -316.34475 563.51918 lineto -316.334 563.4968 lineto -316.34175 563.52755 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -316.34175 563.52755 moveto -316.34475 563.53143 lineto -316.34475 563.51918 lineto -316.334 563.4968 lineto -316.34175 563.52755 lineto -fill -grestore -gsave -0 0.58823532 0.50980395 setrgbcolor -newpath -230.43937 542.08368 moveto -228.67912 548.9523 227.73387 556.14718 227.69725 563.5573 curveto -316.31687 563.5573 lineto -230.43937 542.08368 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -316.34562 563.53931 moveto -316.38675 475.98543 lineto -316.1655 475.98418 315.94675 475.96918 315.72512 475.96918 curveto -308.58787 475.96918 301.65762 476.83918 295.01362 478.44293 curveto -316.33488 563.5173 lineto -316.34562 563.53931 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -227.668 574.15893 moveto -229.269 574.15893 lineto -229.269 579.07193 lineto -234.0395 574.15893 lineto -236.16837 574.15893 lineto -230.918 579.44205 lineto -236.5845 585.33268 lineto -234.2475 585.33268 lineto -229.269 579.85718 lineto -229.269 585.33268 lineto -227.668 585.33268 lineto -227.668 574.15893 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -242.82812 581.44255 moveto -242.50725 581.44255 242.1875 581.40981 241.86712 581.40981 curveto -241.05125 581.40981 239.03363 581.5393 239.03363 582.98068 curveto -239.03363 583.84293 239.86575 584.3078 240.55462 584.3078 curveto -242.043 584.3078 242.82812 583.37905 242.82812 582.1628 curveto -242.82812 581.44255 lineto -closepath -238.36175 577.7453 moveto -239.11375 577.29605 240.01075 576.97731 241.05125 576.97731 curveto -243.38813 576.97731 244.333 578.12855 244.333 580.35368 curveto -244.333 583.73168 lineto -244.333 584.6603 244.36475 585.09293 244.3965 585.33268 curveto -242.98725 585.33268 lineto -242.98725 584.27555 lineto -242.9555 584.27555 lineto -242.604 584.77168 241.80325 585.52418 240.42625 585.52418 curveto -238.666 585.52418 237.43312 584.75655 237.43312 582.98068 curveto -237.43312 580.92993 239.67325 580.29018 241.227 580.29018 curveto -241.81887 580.29018 242.23537 580.29018 242.82812 580.32193 curveto -242.82812 578.9123 242.31488 578.19305 240.8105 578.19305 curveto -239.96287 578.19305 239.05025 578.51293 238.44137 579.02455 curveto -238.36175 577.7453 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -246.77 577.16768 moveto -248.17862 577.16768 lineto -248.17862 578.4338 lineto -248.21037 578.4338 lineto -248.61075 577.58518 249.47512 576.97731 250.33988 576.97731 curveto -250.7885 576.97731 251.01262 577.02368 251.332 577.08855 curveto -251.332 578.4338 lineto -251.061 578.32143 250.75637 578.2883 250.5 578.2883 curveto -249.15525 578.2883 248.27488 579.56905 248.27488 581.61793 curveto -248.27488 585.33268 lineto -246.77 585.33268 lineto -246.77 577.16768 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -252.997 585.33268 moveto -254.5014 585.33268 lineto -254.5014 573.32633 lineto -252.997 573.32633 lineto -252.997 585.33268 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -256.67087 583.73168 moveto -257.26313 584.11543 258.11225 584.3078 258.54388 584.3078 curveto -259.23138 584.3078 260.0805 584.01918 260.0805 583.1403 curveto -260.0805 581.65155 256.543 581.77805 256.543 579.48943 curveto -256.543 577.79268 257.80712 576.97731 259.42375 576.97731 curveto -260.12887 576.97731 260.7045 577.1203 261.29787 577.29605 curveto -261.16888 578.60805 lineto -260.8335 578.40055 259.9365 578.19305 259.5845 578.19305 curveto -258.81538 578.19305 258.144 578.51293 258.144 579.18568 curveto -258.144 580.8493 261.68162 580.3708 261.68162 582.98068 curveto -261.68162 584.7243 260.2885 585.52418 258.8325 585.52418 curveto -258.0635 585.52418 257.27925 585.44555 256.59075 585.07543 curveto -256.67087 583.73168 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -263.50637 577.16768 moveto -264.9155 577.16768 lineto -264.9155 578.4338 lineto -264.94725 578.4338 lineto -265.34713 577.58518 266.21087 576.97731 267.07662 576.97731 curveto -267.52437 576.97731 267.749 577.02368 268.06838 577.08855 curveto -268.06838 578.4338 lineto -267.79688 578.32143 267.49262 578.2883 267.23625 578.2883 curveto -265.892 578.2883 265.01125 579.56905 265.01125 581.61793 curveto -265.01125 585.33268 lineto -263.50637 585.33268 lineto -263.50637 577.16768 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -276.85737 585.33268 moveto -275.40137 585.33268 lineto -275.40137 584.0368 lineto -275.36863 584.0368 lineto -274.91987 584.96405 273.832 585.52418 272.69525 585.52418 curveto -270.5825 585.52418 269.63763 584.21305 269.63763 582.01918 curveto -269.63763 577.16768 lineto -271.142 577.16768 lineto -271.142 581.3938 lineto -271.142 583.29805 271.559 584.2268 272.87113 584.3078 curveto -274.5845 584.3078 275.353 582.9318 275.353 580.94605 curveto -275.353 577.16768 lineto -276.85737 577.16768 lineto -276.85737 585.33268 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -279.33488 573.3263 moveto -280.83988 573.3263 lineto -280.83988 578.33705 lineto -280.872 578.33705 lineto -281.416 577.4728 282.36075 576.97731 283.4975 576.97731 curveto -285.61075 576.97731 286.55512 578.2883 286.55512 580.48218 curveto -286.55512 585.33268 lineto -285.05025 585.33268 lineto -285.05025 581.10718 lineto -285.05025 579.2028 284.63475 578.27368 283.32175 578.19305 curveto -281.60838 578.19305 280.83988 579.56905 280.83988 581.55493 curveto -280.83988 585.33268 lineto -279.33488 585.33268 lineto -279.33488 573.3263 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -294.35688 580.46505 moveto -294.35688 579.21743 293.62113 578.19305 292.32425 578.19305 curveto -290.8515 578.19305 290.24313 579.40893 290.13137 580.46505 curveto -294.35688 580.46505 lineto -closepath -295.3335 584.9968 moveto -294.75775 585.2053 294.101 585.52418 292.75675 585.52418 curveto -289.85938 585.52418 288.53025 583.76293 288.53025 581.10718 curveto -288.53025 578.68868 290.05075 576.97731 292.35587 576.97731 curveto -295.07763 576.97731 295.9585 578.96118 295.9585 581.58805 curveto -290.13137 581.58805 lineto -290.13137 583.2043 291.396 584.3078 292.82025 584.3078 curveto -293.8135 584.3078 294.96575 583.79555 295.3335 583.49193 curveto -295.3335 584.9968 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -302.56887 585.33268 moveto -304.16995 585.33268 lineto -304.16995 574.15885 lineto -302.56887 574.15885 lineto -302.56887 585.33268 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -306.811 577.16768 moveto -308.268 577.16768 lineto -308.268 578.46405 lineto -308.30075 578.46405 lineto -308.749 577.5363 309.83738 576.97731 310.97362 576.97731 curveto -313.08637 576.97731 314.03175 578.2883 314.03175 580.48218 curveto -314.03175 585.33268 lineto -312.52637 585.33268 lineto -312.52637 581.10718 lineto -312.52637 579.2028 312.11075 578.27368 310.79787 578.19305 curveto -309.0845 578.19305 308.31588 579.56905 308.31588 581.55493 curveto -308.31588 585.33268 lineto -306.811 585.33268 lineto -306.811 577.16768 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -316.038 583.73168 moveto -316.63037 584.11543 317.479 584.3078 317.91162 584.3078 curveto -318.59963 584.3078 319.44775 584.01918 319.44775 583.1403 curveto -319.44775 581.65155 315.91062 581.77805 315.91062 579.48943 curveto -315.91062 577.79268 317.17475 576.97731 318.7915 576.97731 curveto -319.4965 576.97731 320.07225 577.1203 320.6655 577.29605 curveto -320.53662 578.60805 lineto -320.20063 578.40055 319.30412 578.19305 318.95162 578.19305 curveto -318.18313 578.19305 317.51075 578.51293 317.51075 579.18568 curveto -317.51075 580.8493 321.04925 580.3708 321.04925 582.98068 curveto -321.04925 584.7243 319.65575 585.52418 318.19925 585.52418 curveto -317.43063 585.52418 316.647 585.44555 315.9585 585.07543 curveto -316.038 583.73168 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -327.42825 578.38493 moveto -325.267 578.38493 lineto -325.267 582.8503 lineto -325.267 583.79555 325.84325 584.3078 326.53175 584.3078 curveto -326.99613 584.3078 327.3325 584.1643 327.55613 584.01918 curveto -327.55613 585.30043 lineto -327.22012 585.39668 326.75637 585.52418 326.27587 585.52418 curveto -324.72213 585.52418 323.76175 584.7878 323.76175 583.15543 curveto -323.76175 578.38493 lineto -321.92138 578.38493 lineto -321.92138 577.16768 lineto -323.76175 577.16768 lineto -323.76175 575.27943 lineto -325.267 574.79855 lineto -325.267 577.16768 lineto -327.42825 577.16768 lineto -327.42825 578.38493 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -329.269 577.16768 moveto -330.77337 577.16768 lineto -330.77337 585.33268 lineto -329.269 585.33268 lineto -329.269 577.16768 lineto -closepath -330.87012 575.34393 moveto -329.17325 575.34393 lineto -329.17325 573.64718 lineto -330.87012 573.64718 lineto -330.87012 575.34393 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -337.8095 578.38493 moveto -335.64825 578.38493 lineto -335.64825 582.8503 lineto -335.64825 583.79555 336.2245 584.3078 336.91325 584.3078 curveto -337.377 584.3078 337.71325 584.1643 337.937 584.01918 curveto -337.937 585.30043 lineto -337.60075 585.39668 337.137 585.52418 336.657 585.52418 curveto -335.10325 585.52418 334.14325 584.7878 334.14325 583.15543 curveto -334.14325 578.38493 lineto -332.302 578.38493 lineto -332.302 577.16768 lineto -334.14325 577.16768 lineto -334.14325 575.27943 lineto -335.64825 574.79855 lineto -335.64825 577.16768 lineto -337.8095 577.16768 lineto -337.8095 578.38493 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -346.71075 585.33268 moveto -345.252 585.33268 lineto -345.252 584.0368 lineto -345.22075 584.0368 lineto -344.772 584.96405 343.6845 585.52418 342.54825 585.52418 curveto -340.4345 585.52418 339.4895 584.21305 339.4895 582.01918 curveto -339.4895 577.16768 lineto -340.9945 577.16768 lineto -340.9945 581.3938 lineto -340.9945 583.29805 341.41075 584.2268 342.72325 584.3078 curveto -344.437 584.3078 345.20575 582.9318 345.20575 580.94605 curveto -345.20575 577.16768 lineto -346.71075 577.16768 lineto -346.71075 585.33268 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -353.64825 578.38493 moveto -351.48825 578.38493 lineto -351.48825 582.8503 lineto -351.48825 583.79555 352.0645 584.3078 352.75325 584.3078 curveto -353.217 584.3078 353.55325 584.1643 353.777 584.01918 curveto -353.777 585.30043 lineto -353.44075 585.39668 352.977 585.52418 352.497 585.52418 curveto -350.94325 585.52418 349.98325 584.7878 349.98325 583.15543 curveto -349.98325 578.38493 lineto -348.14325 578.38493 lineto -348.14325 577.16768 lineto -349.98325 577.16768 lineto -349.98325 575.27943 lineto -351.48825 574.79855 lineto -351.48825 577.16768 lineto -353.64825 577.16768 lineto -353.64825 578.38493 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -360.64325 580.46505 moveto -360.64325 579.21743 359.907 578.19305 358.612 578.19305 curveto -357.13825 578.19305 356.5295 579.40893 356.417 580.46505 curveto -360.64325 580.46505 lineto -closepath -361.62075 584.9968 moveto -361.042 585.2053 360.3895 585.52418 359.042 585.52418 curveto -356.1445 585.52418 354.81575 583.76293 354.81575 581.10718 curveto -354.81575 578.68868 356.337 576.97731 358.64075 576.97731 curveto -361.36325 576.97731 362.2445 578.96118 362.2445 581.58805 curveto -356.417 581.58805 lineto -356.417 583.2043 357.68075 584.3078 359.10575 584.3078 curveto -360.097 584.3078 361.25325 583.79555 361.62075 583.49193 curveto -361.62075 584.9968 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -372.32825 584.3078 moveto -374.09075 584.3078 374.87325 582.70768 374.87325 581.25118 curveto -374.87325 579.69843 373.9295 578.19305 372.32825 578.19305 curveto -370.71325 578.19305 369.76825 579.69843 369.76825 581.25118 curveto -369.76825 582.70768 370.55075 584.3078 372.32825 584.3078 curveto -closepath -372.32825 576.97731 moveto -374.81075 576.97731 376.47575 578.76918 376.47575 581.25118 curveto -376.47575 583.58905 374.77825 585.52418 372.32825 585.52418 curveto -369.8645 585.52418 368.167 583.58905 368.167 581.25118 curveto -368.167 578.76918 369.832 576.97731 372.32825 576.97731 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -379.27825 578.38493 moveto -377.357 578.38493 lineto -377.357 577.16768 lineto -379.27825 577.16768 lineto -379.27825 576.41718 lineto -379.27825 574.4323 379.7895 573.13355 382.01325 573.13355 curveto -382.39825 573.13355 382.7195 573.1823 383.022 573.22968 curveto -382.95825 574.44693 lineto -382.78325 574.38355 382.49575 574.35181 382.2395 574.35181 curveto -380.942 574.35181 380.78325 575.1828 380.78325 576.2878 curveto -380.78325 577.16768 lineto -382.94325 577.16768 lineto -382.94325 578.38493 lineto -380.78325 578.38493 lineto -380.78325 585.33268 lineto -379.27825 585.33268 lineto -379.27825 578.38493 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -391.347 575.56755 moveto -387.8745 575.56755 lineto -387.8745 574.15893 lineto -396.42075 574.15893 lineto -396.42075 575.56755 lineto -392.947 575.56755 lineto -392.947 585.33268 lineto -391.347 585.33268 lineto -391.347 575.56755 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -401.9945 580.46505 moveto -401.9945 579.21743 401.26075 578.19305 399.96325 578.19305 curveto -398.4895 578.19305 397.8795 579.40893 397.7695 580.46505 curveto -401.9945 580.46505 lineto -closepath -402.97075 584.9968 moveto -402.39575 585.2053 401.74075 585.52418 400.39325 585.52418 curveto -397.49575 585.52418 396.1695 583.76293 396.1695 581.10718 curveto -396.1695 578.68868 397.68825 576.97731 399.9945 576.97731 curveto -402.717 576.97731 403.5945 578.96118 403.5945 581.58805 curveto -397.7695 581.58805 lineto -397.7695 583.2043 399.03575 584.3078 400.457 584.3078 curveto -401.45075 584.3078 402.60325 583.79555 402.97075 583.49193 curveto -402.97075 584.9968 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -410.8645 578.54468 moveto -410.28825 578.30543 409.712 578.19305 409.232 578.19305 curveto -407.55075 578.19305 406.60575 579.69843 406.60575 581.25118 curveto -406.60575 582.70768 407.39075 584.3078 409.327 584.3078 curveto -409.8395 584.3078 410.48075 584.14818 410.94575 583.84293 curveto -411.05825 585.18768 lineto -410.4345 585.4768 409.712 585.52418 409.16825 585.52418 curveto -406.70075 585.52418 405.0045 583.58905 405.0045 581.25118 curveto -405.0045 578.76918 406.672 576.97731 409.16825 576.97731 curveto -409.7745 576.97731 410.56075 577.1203 410.992 577.29605 curveto -410.8645 578.54468 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -412.65575 573.3263 moveto -414.162 573.3263 lineto -414.162 578.33705 lineto -414.19325 578.33705 lineto -414.737 577.4728 415.682 576.97731 416.8195 576.97731 curveto -418.932 576.97731 419.877 578.2883 419.877 580.48218 curveto -419.877 585.33268 lineto -418.37075 585.33268 lineto -418.37075 581.10718 lineto -418.37075 579.2028 417.95575 578.27368 416.64325 578.19305 curveto -414.9295 578.19305 414.162 579.56905 414.162 581.55493 curveto -414.162 585.33268 lineto -412.65575 585.33268 lineto -412.65575 573.3263 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -422.337 577.16768 moveto -423.79325 577.16768 lineto -423.79325 578.46405 lineto -423.82575 578.46405 lineto -424.27325 577.5363 425.362 576.97731 426.497 576.97731 curveto -428.61075 576.97731 429.55575 578.2883 429.55575 580.48218 curveto -429.55575 585.33268 lineto -428.052 585.33268 lineto -428.052 581.10718 lineto -428.052 579.2028 427.63325 578.27368 426.322 578.19305 curveto -424.60825 578.19305 423.8395 579.56905 423.8395 581.55493 curveto -423.8395 585.33268 lineto -422.337 585.33268 lineto -422.337 577.16768 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -435.6645 584.3078 moveto -437.42575 584.3078 438.2095 582.70768 438.2095 581.25118 curveto -438.2095 579.69843 437.2645 578.19305 435.6645 578.19305 curveto -434.04825 578.19305 433.10325 579.69843 433.10325 581.25118 curveto -433.10325 582.70768 433.887 584.3078 435.6645 584.3078 curveto -closepath -435.6645 576.97731 moveto -438.147 576.97731 439.81075 578.76918 439.81075 581.25118 curveto -439.81075 583.58905 438.1145 585.52418 435.6645 585.52418 curveto -433.1995 585.52418 431.50325 583.58905 431.50325 581.25118 curveto -431.50325 578.76918 433.167 576.97731 435.6645 576.97731 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -441.8995 585.33268 moveto -443.40439 585.33268 lineto -443.40439 573.32633 lineto -441.8995 573.32633 lineto -441.8995 585.33268 lineto -closepath -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -449.65575 584.3078 moveto -451.41575 584.3078 452.20075 582.70768 452.20075 581.25118 curveto -452.20075 579.69843 451.25575 578.19305 449.65575 578.19305 curveto -448.03825 578.19305 447.09325 579.69843 447.09325 581.25118 curveto -447.09325 582.70768 447.87825 584.3078 449.65575 584.3078 curveto -closepath -449.65575 576.97731 moveto -452.137 576.97731 453.802 578.76918 453.802 581.25118 curveto -453.802 583.58905 452.10325 585.52418 449.65575 585.52418 curveto -447.19075 585.52418 445.492 583.58905 445.492 581.25118 curveto -445.492 578.76918 447.157 576.97731 449.65575 576.97731 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -461.57325 581.34643 moveto -461.57325 579.65055 460.787 578.19305 459.187 578.19305 curveto -457.667 578.19305 456.912 579.84105 456.912 581.23405 curveto -456.912 582.77018 457.7795 584.11543 459.187 584.11543 curveto -460.5945 584.11543 461.57325 582.86693 461.57325 581.34643 curveto -closepath -463.07575 584.98168 moveto -463.07575 587.46068 461.79575 588.88643 458.86575 588.88643 curveto -458.00075 588.88643 457.25075 588.77418 455.93575 588.3268 curveto -456.097 586.9328 lineto -457.25075 587.46068 457.93825 587.66918 459.042 587.66918 curveto -460.62825 587.66918 461.57325 586.5978 461.57325 584.8693 curveto -461.57325 584.06655 lineto -461.53825 584.06655 lineto -460.8995 584.91768 459.842 585.33268 458.802 585.33268 curveto -456.4645 585.33268 455.312 583.42943 455.312 581.31468 curveto -455.312 579.21743 456.49825 576.97731 458.96325 576.97731 curveto -460.402 576.97731 461.20325 577.50455 461.65075 578.38493 curveto -461.68325 578.38493 lineto -461.68325 577.16768 lineto -463.07575 577.16768 lineto -463.07575 584.98168 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -465.06825 587.54168 moveto -465.2595 587.60518 465.51575 587.66918 465.77325 587.66918 curveto -467.11575 587.66918 467.5645 585.81418 467.5645 585.65305 curveto -467.5645 585.4768 467.37325 585.0603 467.27575 584.7878 curveto -464.507 577.16768 lineto -466.157 577.16768 lineto -468.34825 583.92405 lineto -468.382 583.92405 lineto -470.622 577.16768 lineto -472.142 577.16768 lineto -469.1345 585.50893 lineto -468.57325 587.0768 467.98075 588.88643 465.99575 588.88643 curveto -465.51575 588.88643 465.2445 588.82293 464.97075 588.77418 curveto -465.06825 587.54168 lineto -fill -grestore -grestore -showpage -%%EOF diff --git a/doc/tinytalk/logos/kitlogo_rgb.pdf b/doc/tinytalk/logos/kitlogo_rgb.pdf deleted file mode 100644 index dd59fa6..0000000 Binary files a/doc/tinytalk/logos/kitlogo_rgb.pdf and /dev/null differ diff --git a/doc/tinytalk/models.png b/doc/tinytalk/models.png deleted file mode 100644 index 70bb660..0000000 Binary files a/doc/tinytalk/models.png and /dev/null differ diff --git a/doc/tinytalk/models.xcf b/doc/tinytalk/models.xcf deleted file mode 100644 index 689826f..0000000 Binary files a/doc/tinytalk/models.xcf and /dev/null differ diff --git a/doc/tinytalk/nastja.png b/doc/tinytalk/nastja.png deleted file mode 100644 index 816e7b7..0000000 Binary files a/doc/tinytalk/nastja.png and /dev/null differ diff --git a/doc/tinytalk/references.bib b/doc/tinytalk/references.bib deleted file mode 100644 index 5d8eab1..0000000 --- a/doc/tinytalk/references.bib +++ /dev/null @@ -1,19 +0,0 @@ -@article{dh76, - title={{New Directions in Cryptography}}, - author={Whitfield Diffie and Martin Hellman}, - journal={IEEE Transactions on Information Theory}, - volume={22}, - number={6}, - pages={644--654}, - year={1976} -} - -@book{kl07, - author = {Katz, Jonathan and Lindell, Yehuda}, - title = {Introduction to Modern Cryptography (Chapman \& Hall/Crc Cryptography and Network Security Series)}, - year = {2007}, - isbn = {1584885513}, - publisher = {Chapman \& Hall/CRC}, -} - - diff --git a/doc/tinytalk/semirounded.sty b/doc/tinytalk/semirounded.sty deleted file mode 100644 index 18fddbf..0000000 --- a/doc/tinytalk/semirounded.sty +++ /dev/null @@ -1,206 +0,0 @@ -%% Encoding: ISO8859-1 %% - -\RequirePackage{keyval} -\renewcommand\beamerboxesrounded[2][]{% - \global\let\beamer@firstlineitemizeunskip=\relax% - \vbox\bgroup% - \setkeys{beamerboxes}{upper=block title,lower=block body,width=\textwidth,shadow=false}% - \setkeys{beamerboxes}{#1}% - {% - \usebeamercolor{\bmb@lower}% - \globalcolorstrue% - \colorlet{lower.bg}{bg}% - }% - {% - \usebeamercolor{\bmb@upper}% - \globalcolorstrue% - \colorlet{upper.bg}{bg}% - }% - % - % Typeset head - % - \vskip4bp - \setbox\bmb@box=\hbox{% - \begin{minipage}[b]{\bmb@width}% - \usebeamercolor[fg]{\bmb@upper}% - #2% - \end{minipage}}% - \ifdim\wd\bmb@box=0pt% - \setbox\bmb@box=\hbox{}% - \ht\bmb@box=1.5pt% - \bmb@prevheight=-4.5pt% - \else% - \wd\bmb@box=\bmb@width% - \bmb@temp=\dp\bmb@box% - \ifdim\bmb@temp<1.5pt% - \bmb@temp=1.5pt% - \fi% - \setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}% - \dp\bmb@box=0pt% - \bmb@prevheight=\ht\bmb@box% - \fi% - \bmb@temp=\bmb@width% - \bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp% - \bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp% - \hbox{% - \begin{pgfpicture}{0bp}{+-\ht\bmb@box}{0bp}{+-\ht\bmb@box} - \ifdim\wd\bmb@box=0pt% - \color{lower.bg}% - \else% - \color{upper.bg}% - \fi% - \pgfpathqmoveto{-4bp}{-1bp} - % Adaption for "KIT-Design" - \pgfpathlineto{\pgfpoint{-4bp}{3bp}} - %\pgfpathqcurveto{-4bp}{1.2bp}{-2.2bp}{3bp}{0bp}{3bp} - \pgfpathlineto{\pgfpoint{\bmb@temp}{3bp}} - \pgfpathcurveto% - {\pgfpoint{\bmb@dima}{3bp}}% - {\pgfpoint{\bmb@dimb}{1.2bp}}% - {\pgfpoint{\bmb@dimb}{-1bp}}% - \bmb@dima=-\ht\bmb@box% - \advance\bmb@dima by-2pt% - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}} - \pgfusepath{fill} - \end{pgfpicture}% - \copy\bmb@box% - }% - \nointerlineskip% - \vskip-1pt% - \ifdim\wd\bmb@box=0pt% - \else% - \hbox{% - \begin{pgfpicture}{0pt}{0pt}{\bmb@width}{6pt} - \bmb@dima=\bmb@width% - \advance\bmb@dima by8bp% - \pgfpathrectangle{\pgfpoint{-4bp}{-1bp}}{\pgfpoint{\bmb@dima}{8bp}} - \pgfusepath{clip} - {\pgftransformshift{\pgfpoint{-4bp}{0bp}}\pgftext[left,base]{\pgfuseshading{bmb@transition}}}% - \end{pgfpicture}% - }% - \nointerlineskip% - \vskip-0.5pt% - \fi% - \ifbmb@shadow% - \setbox\bmb@boxshadow=\hbox{\pgfuseshading{bmb@shadow}}% - \setbox\bmb@boxshadowball=\hbox{\pgfuseshading{bmb@shadowball}}% - \setbox\bmb@boxshadowballlarge=\hbox{\pgfuseshading{bmb@shadowballlarge}}% - \fi% - \setbox\bmb@colorbox=\hbox{{\pgfpicturetrue\pgfsetcolor{lower.bg}}}% - \setbox\bmb@box=\hbox\bgroup\begin{minipage}[b]{\bmb@width}% - \vskip2pt% - \usebeamercolor[fg]{\bmb@lower}% - \colorlet{beamerstructure}{upper.bg}% - \colorlet{structure}{upper.bg}% - %\color{.}% - } - -\def\endbeamerboxesrounded{% - \end{minipage}\egroup% - \wd\bmb@box=\bmb@width% - \bmb@temp=\dp\bmb@box% - \advance\bmb@temp by.5pt% - \setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}% - \dp\bmb@box=0pt% - \bmb@temp=\wd\bmb@box% - \bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp% - \bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp% - \hbox{% - \begin{pgfpicture}{0bp}{0bp}{0bp}{0bp} - \ifbmb@shadow% - {\pgftransformshift{\pgfpoint{4bp}{-3bp}}\pgftext{\copy\bmb@boxshadowball}} - \begin{pgfscope} - {% - \advance\bmb@temp by-1bp% - \pgfpathrectangle{\pgfpoint{\bmb@temp}{-7bp}}{\pgfpoint{9bp}{9bp}}% - \pgfusepath{clip} - }% - {\pgftransformshift{\pgfpoint{\bmb@temp}{1bp}}\pgftext{\box\bmb@boxshadowballlarge}} - \end{pgfscope} - \begin{pgfscope} - \advance\bmb@temp by-4bp% - \pgfpathrectangle{\pgfpoint{4bp}{-7bp}}{\pgfpoint{\bmb@temp}{5bp}} - \pgfusepath{clip} - {\pgftransformshift{\pgfpoint{4bp}{-7bp}}\pgftext[left,base]{\copy\bmb@boxshadow}}% - \end{pgfscope} - \begin{pgfscope} - \advance\bmb@temp by 4bp% - \bmb@dima=\ht\bmb@box% - \advance\bmb@dima by\bmb@prevheight% - \advance\bmb@dima by 4bp% - \pgfpathrectangle{\pgfpoint{\bmb@temp}{1bp}}{\pgfpoint{4bp}{\bmb@dima}} - \pgfusepath{clip} - \advance\bmb@dima by-4bp% - {\pgftransformshift{\pgfpoint{\bmb@temp}{\bmb@dima}}\pgftext{\box\bmb@boxshadowball}} - \advance\bmb@dima by-1bp% - \pgfpathrectangle{\pgfpoint{\bmb@temp}{1bp}}{\pgfpoint{4bp}{\bmb@dima}} - \pgfusepath{clip} - \advance\bmb@temp by4bp% - {\pgftransformshift{\pgfpoint{\bmb@temp}{-3bp}}% - \pgftransformrotate{90}% - \pgftext[left,base]{\box\bmb@boxshadow}}% - \end{pgfscope} - \fi% - \unhbox\bmb@colorbox% - \pgfpathqmoveto{-4bp}{1bp} - \pgfpathqcurveto{-4bp}{-1.2bp}{-2.2bp}{-3bp}{0bp}{-3bp} - %KIT-Design - \pgfpathlineto{\pgfpoint{\the\bmb@dimb}{-3bp}} - %\pgfpathcurveto% - %{\pgfpoint{\the\bmb@dima}{-3bp}}% - %{\pgfpoint{\the\bmb@dimb}{-1.2bp}}% - %{\pgfpoint{\the\bmb@dimb}{1bp}}% - { - \bmb@dima=\ht\bmb@box% - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}} - \pgfusepath{fill} - } - \ifbmb@shadow% - { - \color{black!50!bg} - \pgfsetlinewidth{0pt} - \pgfpathmoveto{\pgfpoint{\bmb@dimb}{-.5bp}} - \bmb@dima=\ht\bmb@box% - \advance\bmb@dima by\bmb@prevheight% - \advance\bmb@dima by 1bp% - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfusepath{stroke} - \bmb@temp=\bmb@dima - \advance\bmb@dima by 1bp% - \color{black!31!bg} - \pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}} - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfusepath{stroke} - \advance\bmb@dima by 1bp% - \advance\bmb@temp by 1bp% - \color{black!19!bg} - \pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}} - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfusepath{stroke} - \advance\bmb@dima by 1bp% - \advance\bmb@temp by 1bp% - \color{black!6!bg} - \pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}} - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfusepath{stroke} - \advance\bmb@dima by 1.5bp% - \advance\bmb@temp by 1bp% - \color{bg} - \pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}} - \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}} - \pgfusepath{stroke} - } - \fi - \end{pgfpicture}% - \box\bmb@box% - }% - \ifbmb@shadow% - \vskip4bp minus 2bp% - \else% - \vskip2bp% - \fi% - \egroup% of \vbox\bgroup -} - diff --git a/doc/tinytalk/tinytalk.pdf b/doc/tinytalk/tinytalk.pdf deleted file mode 100644 index f6809ca..0000000 Binary files a/doc/tinytalk/tinytalk.pdf and /dev/null differ diff --git a/doc/tinytalk/tinytalk.tex b/doc/tinytalk/tinytalk.tex deleted file mode 100644 index 7befa91..0000000 --- a/doc/tinytalk/tinytalk.tex +++ /dev/null @@ -1,83 +0,0 @@ -%% Encoding: ISO8859-1 %% - -%% LaTeX-Beamer template for KIT design -%% by Erik Burger, Christian Hammer -%% -%% modified by Christian Henrich and Matthias Gabel for IKS/ITI -%% -%% version 1.3 -%% -%% mostly compatible to KIT corporate design v1.2 -%% http://www.uni-karlsruhe.de/download/uka/Gestaltungsrichtlinien_komplett.pdf - -\documentclass[18pt,aspectratio=169]{beamer} -\usetheme{kit} - - \usepackage{comment} - \usepackage{pdfpages} - - % if a custom picture is to be used on the title page, copy it into the 'logos' - % directory, in the line below, replace 'mypicture' with the - % filename (without extension) and uncomment the line - - \renewcommand{\titleimage}{collagen} - - % (picture proportions: 63 : 20, *.eps format if you use latex+dvips+ps2pdf, - % *.jpg/*.png/*.pdf if you use pdflatex) - - % if you want to see BibTeX keys in the references view instead of the symbol, - % uncomment the following line - % \usebibitemtemplate{\insertbiblabel} - - % uncomment the following line if you want to hide the navigation symbols - %\beamertemplatenavigationsymbolsempty - - % the presentation starts here - - \title[An ECM Model for Cells In Silico]{An ECM Model for Cells in Silico} - % \subtitle{} - \author{Paul Brinkmeier} - - \institute[SCC]{Steinbuch Centre for Computing} % Deutsch - %\institute[ITI]{Department of Informatics, Institute of Theoretical Informatics} % Englisch - - \begin{document} - - \selectlanguage{english} % Deutsch - % \selectlanguage{ngerman} % Englisch - %title page - \begin{frame} - \titlepage{} - \end{frame} - - \include{vortrag} - - \begin{comment} - \section{References} - \begin{frame} - \frametitle{References} - \bibliography{references} - \bibliographystyle{plain} %does not render "url" fields... - % \bibliographystyle{IEEEtran} %does render "url" fields, requires "_"s and "#"s to be escaped, e.g. "\_". - \end{frame} - \end{comment} - - \section{End} - \begin{frame} - \begin{columns} - \column{0.45\textwidth} - \includegraphics[page=2,width=0.9\textwidth]{tinytalk2} - \column{0.45\textwidth} - \includegraphics[page=3,width=0.9\textwidth]{tinytalk2} - \end{columns} - \vfill - \begin{columns} - \column{0.45\textwidth} - \includegraphics[page=7,width=0.9\textwidth]{tinytalk2} - \column{0.45\textwidth} - \includegraphics[page=8,width=0.9\textwidth]{tinytalk2} - \end{columns} - \end{frame} - - \end{document} - diff --git a/doc/tinytalk/tinytalk2.pdf b/doc/tinytalk/tinytalk2.pdf deleted file mode 100644 index bb86850..0000000 Binary files a/doc/tinytalk/tinytalk2.pdf and /dev/null differ diff --git a/doc/tinytalk/vortrag.tex b/doc/tinytalk/vortrag.tex deleted file mode 100644 index ca62550..0000000 --- a/doc/tinytalk/vortrag.tex +++ /dev/null @@ -1,167 +0,0 @@ -\section{Intro} - -\begin{frame}{NAStJA: An MPI Stencil Code Solver} -\begin{figure} - \includegraphics[width=0.8\textwidth]{nastja.png} -\end{figure} - -\begin{itemize} - \item CiS uses NAStJA under the hood - \item NAStJA is a massively parallel stencil code solver \\ - $\implies$ CiS extensions should be stencils -\end{itemize} -\end{frame} - -\begin{frame}{ECM Viscoelasticity:\\A Factor in Cell Behavior} -\begin{figure} - \includegraphics[width=0.48\textwidth]{ecm-cells.png} -\end{figure} - -\begin{itemize} - \item Collagen networks in the ECM mechanically restrict cells - \item Collagen networks are \emph{viscoelastic} - \item ECM viscoelasticity influences cell behavior -\end{itemize} -\end{frame} - -\section{ECM Model} - -\begin{frame}{Modeling ECM Mechanics in CiS} -How can we model ECM mechanics in CiS? - -\vfill{} - -Two main requirements: - -\begin{itemize} - \item Model exhibits viscoelastic properties - \item Model can be implemented as a stencil in NAStJA -\end{itemize} -\end{frame} - -\begin{frame}{ECM Models in Literature} -\begin{figure} - \includegraphics[width=0.64\textwidth]{models.png} -\end{figure} - -\begin{itemize} - \item A host of different ECM models exist - \item Various foci, e.g. mechanics, growth factors - \item Various approaches, e.g. FEM, Molecular Dynamics -\end{itemize} -\end{frame} - -\begin{frame}{My Approach} -Two main requirements: - -\begin{itemize} - \item Model exhibits viscoelastic properties - \item Model can be implemented as a stencil in NAStJA -\end{itemize} -\end{frame} - -\section{Methods} - -\begin{frame}{Lattice Boltzmann Method} -\begin{figure} - \includegraphics[width=0.6\textwidth]{lbm.png} -\end{figure} - -\[ -f_i(\mathbf{x} + \mathbf{c}_i, t + 1) = f_i(\mathbf{x}, t) - \frac{1}{\tau} (f_i(\mathbf{x}, t) - f_i^\text{eq}(\mathbf{x}, t)) -\] - -\begin{itemize} - \item Discretized particle velocities per lattice site - \item Update Step: Streaming + Collision - \item Usually used for hydrodynamics -\end{itemize} -\end{frame} - -\begin{frame}{Elastic Lattice Model} -\begin{columns} -\column{0.35\textwidth} -\begin{figure} - \includegraphics[width=\textwidth]{elm.png} -\end{figure} - -\column{0.65\textwidth} -\[ -\mathbf{F}_{ij} = \mathbf{r}_{ij} K_{ij} (\mathbf{u}_{ij} \cdot \mathbf{x}_{ij}) + \frac{c \mathbf{u}_{ij}}{|\mathbf{x}_{ij}|^2} + \eta \mathbf{v}_{ij} -\] - -\begin{itemize} - \item A square lattice based discrete particle method - \item Each lattice site represents a particle - \item Particles are connected to neighbors by springs -\end{itemize} -\end{columns} -\end{frame} - -\begin{frame}{My Approach} -Two main requirements: - -\begin{itemize} - \item Model exhibits viscoelastic properties \checkmark{} - \item Model can be implemented as a stencil in NAStJA \checkmark{} -\end{itemize} - -\vfill - -Challenges: - -\begin{itemize} - \item How do we integrate the model with the CPM? - \item How can it be implemented in NAStJA? - \item How do we make it fast? -\end{itemize} -\end{frame} - -\begin{comment} -\section{Intro} -\subsection{Subsection 1.1} -\frame{ -\frametitle{Example slide A} -\begin{itemize} -\item PCM, Citation: \cite{dh76,kl07} %\language -\pause -\item Bullet point 2 -\item \dots -\end{itemize} -} -\subsection{Subsection 1.2} -\frame{ -\frametitle{Example slide B} -\begin{block}{Block 1} -\begin{itemize} -\item Test: -\pause -\item Bullet point 2 -\item \dots -\end{itemize} -\end{block} -} -\section{Section 2} -\frame{ -\frametitle{Example slide C} -\begin{exampleblock}{Example 1} -\begin{itemize} -\item Bullet point 1 -\pause -\item Bullet point 2 -\item \dots -\end{itemize} -\end{exampleblock} -} -\frame{ -\frametitle{Example slide D} -\begin{alertblock}{Alert 1} -\begin{itemize} -\item Bullet point 1 -\pause -\item Bullet point 2 -\item \dots -\end{itemize} -\end{alertblock} -} -\end{comment} diff --git a/experiments/ELM.ipynb b/experiments/ELM.ipynb index ef940bc..c4d0e29 100644 --- a/experiments/ELM.ipynb +++ b/experiments/ELM.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "id": "e465f900-0a94-46d4-b3c5-23cc0129557b", "metadata": {}, "outputs": [], @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "b39df788-2971-4974-9ced-1518a47181e8", "metadata": {}, "outputs": [], @@ -118,13 +118,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "id": "b4ed52bd-02aa-411a-9af4-be9bb28227bc", "metadata": {}, "outputs": [ { "data": { - "image/png": "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KioyVVVVDmfVtezfv99IMhs2bDDGGNPc3Gy6d+9uXnjhhfiY9957z0gyNTU1rqaZsg4ePGgGDBhg1q1bZ370ox/FDyisc2Lcdddd5pJLLjnl/VgsZkKhkPnd734Xv9bc3GyysrLMc889l4wpdglXXHGFueGGGzzXrrrqKlNRUWGMYZ0T4eQDSnvWdMeOHUaS2bRpU3zMq6++atLS0sxHH330redEiecUjh49qvr6epWXl8evpaenq7y8XDU1NQ5n1rVEIhFJUn5+viSpvr5ex44d86z7wIEDVVJSwrqfhsrKSl1xxRWe9ZRY50R5+eWXNXz4cF199dXq27evhgwZoiVLlsTvNzQ0KBwOe9Y5EAhoxIgRrHMHXHzxxaqurtb7778vSXr77bf15ptv6rLLLpPEOneG9qxpTU2N8vLyNHz48PiY8vJypaenq7a29lvPISW/LDAZPv74Y7W2tioYDHquB4NB/etf/3I0q64lFotp+vTpGjVqlAYPHixJCofDyszMVF5enmdsMBhUOBx2MMvUtXLlSm3ZskWbNm2y7rHOifHhhx9q0aJFmjFjhn7zm99o06ZNuu2225SZmanJkyfH17Kt/4+wzu139913KxqNauDAgerWrZtaW1s1b948VVRUSBLr3Anas6bhcFh9+/b13M/IyFB+fn5C1p0DCpyprKzU9u3b9eabb7qeSpfT2Nio22+/XevWrVN2drbr6XRZsVhMw4cP14MPPihJGjJkiLZv367Fixdr8uTJjmfXdTz//PNasWKFnn32WZ1zzjnatm2bpk+frqKiIta5C6PEcwpnnHGGunXrZqUampqaFAqFHM2q65g2bZpeeeUVvf766zrzzDPj10OhkI4eParm5mbPeNa9Y+rr67V//34NHTpUGRkZysjI0IYNG7RgwQJlZGQoGAyyzglQWFioQYMGea6dffbZ2rNnjyTF15L/j3w7d955p+6++25NmjRJ5557rn7xi1/ojjvuUFVVlSTWuTO0Z01DoZD279/vuf/FF1/owIEDCVl3DiinkJmZqWHDhqm6ujp+LRaLqbq6WmVlZQ5nltqMMZo2bZpWrVql9evXq7S01HN/2LBh6t69u2fdd+7cqT179rDuHTB69Gi988472rZtW/wxfPhwVVRUxP+Zdf72Ro0aZcXk33//ffXr10+SVFpaqlAo5FnnaDSq2tpa1rkDPvvsM6Wne7erbt26KRaLSWKdO0N71rSsrEzNzc2qr6+Pj1m/fr1isZhGjBjx7SfxrT9m24WtXLnSZGVlmWXLlpkdO3aYqVOnmry8PBMOh11PLWXdfPPNJhAImL///e9m37598cdnn30WH3PTTTeZkpISs379erN582ZTVlZmysrKHM66a/hqiscY1jkR6urqTEZGhpk3b57ZtWuXWbFihenRo4f5y1/+Eh/z0EMPmby8PPPSSy+Zf/7zn2b8+PHEXzto8uTJ5nvf+148Zvziiy+aM844w8ycOTM+hnXuuIMHD5qtW7earVu3GknmkUceMVu3bjW7d+82xrRvTceOHWuGDBliamtrzZtvvmkGDBhAzDhZHn/8cVNSUmIyMzPNRRddZDZu3Oh6SilNUpuPpUuXxsd8/vnn5pZbbjF9+vQxPXr0MFdeeaXZt2+fu0l3EScfUFjnxFizZo0ZPHiwycrKMgMHDjRPPvmk534sFjOzZ882wWDQZGVlmdGjR5udO3c6mm1qikaj5vbbbzclJSUmOzvbfP/73zf33HOPaWlpiY9hnTvu9ddfb/P/x5MnTzbGtG9NP/nkE3PNNdeYXr16mdzcXHP99debgwcPJmR+acZ8pRUfAACAD/AZFAAA4DscUAAAgO9wQAEAAL7DAQUAAPgOBxQAAOA7HFAAAIDvcEABAAC+wwEFAAD4DgcUAADgOxxQAACA73BAAQAAvsMBBQAA+M7/B3qz1s2r8+4UAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -165,7 +165,7 @@ "def gaussian(mu, sigma_sq, x):\n", " return numpy.exp(-(((x - mu) / numpy.sqrt(sigma_sq)) ** 2) / 2) / numpy.sqrt(2 * numpy.pi * sigma_sq)\n", "\n", - "e = ELM.make(100, 100)\n", + "e = ELM.make(50, 50)\n", "n_plucked = 10\n", "base = e.n_rows // 2 - n_plucked // 2\n", "for row in range(n_plucked):\n", @@ -207,38 +207,7 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "0f1f9dfd-8266-4874-9ba5-83a8a784d0e9", - "metadata": {}, - "outputs": [], - "source": [ - "import multiprocessing\n", - "\n", - "def velocity_verlet_step(elm: ELM, delta_t: float) -> ELM:\n", - " new_displacement = elm.displacement + elm.velocity * delta_t + 0.5 * elm.force * delta_t * delta_t\n", - " \n", - " new_force = numpy.zeros((elm.n_rows, elm.n_cols, 2))\n", - "\n", - " def job_force(row):\n", - " for col in range(elm.n_cols):\n", - " new_force[row, col, :] = calculate_force(\n", - " elm,\n", - " new_displacement,\n", - " row,\n", - " col\n", - " )\n", - "\n", - " with multiprocessing.Pool(4) as pool:\n", - " pool.map(new_force, range(elm.n_rows))\n", - " \n", - " new_velocity = elm.velocity + 0.5 * (elm.force + new_force) * delta_t\n", - "\n", - " return ELM(elm.n_rows, elm.n_cols, new_displacement, new_velocity, new_force)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "id": "ff7adc30-191e-4b7c-b146-2a533463d6ea", "metadata": {}, "outputs": [], @@ -263,31 +232,40 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "id": "bea964bf-6e94-4b72-a458-50c2964bbba1", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "............................................................................................................................................................................................................................................................................................................" + ] + } + ], "source": [ "es = [e]\n", - "for _ in range(1000):\n", + "for _ in range(300):\n", + " print(\".\", end=\"\")\n", " es.append(velocity_verlet_step(es[-1], 0.1))" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "id": "421c0fd2-2dba-4fd5-89ff-0968227b08b9", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7d7f0752567340c08c97df22788fc638", + "model_id": "dc96f81e9f764b4fa58103f705f3e445", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "interactive(children=(IntSlider(value=0, description='i', max=1000), Output()), _dom_classes=('widget-interact…" + "interactive(children=(IntSlider(value=0, description='i', max=300), Output()), _dom_classes=('widget-interact'…" ] }, "metadata": {}, @@ -299,7 +277,7 @@ " None>" ] }, - "execution_count": 12, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -327,9 +305,58 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "id": "96ab8cf1-8739-4faa-b6b5-70aa52a15a2a", "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd8AAAG4CAYAAAAE8e26AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAl3klEQVR4nO3df3RU5Z3H8U9CyCSQzEAC5kdJkFPQKBSsQeJody0QfoirIqHV1m5Zyx4PGqmYUmy6i7QVTlA4KrgoWDxo9xRx4xEtnC0sjRp1DRTiRhAki126pA0J0G4yIZJJTJ79gzJ1SNDMZPLcSfJ+nTNHc3/Nd577ZT5z78ydiTHGGAEAAGtinS4AAICBhvAFAMAywhcAAMsIXwAALCN8AQCwjPAFAMAywhcAAMsIXwAALCN8AQCwjPAFAMCyOKcL6Kt8Pp9qa2vDWnfcuHEaNGhQhCtCtKNnECp6pv8ifMP0q1/9Sn//938f1rqnT5/WiBEjIlwRoh09g1DRM/0Xp53DNHjwYKdLQB9DzyBU9Ez/RfiGqaCgQLfeemvg7x/96EcyxnTrxqvRgYmeQajomX7MhKGpqcnExMSYJ554IpzV+41z586Zr3/960aSkWQee+yxkLcxevRos2LFiojUE8ltoXfQMwiVEz3T0dFhhg4dapYtWxaR7aGzsI58P/zwQxljNHHixMi9CriI3+/Xww8/rMzMTCUmJiovL0979uzptfsLR0JCgnbs2KEpU6ZIkh5++GFt2rQpItvevXu3YmJiurzdeeedEbmPcPV034SyfneX7Qv9IvVuz0QzeiZ8TvTM73//ezU3N+srX/lKr97P5zl79qxWrFih2bNnKyUlRTExMXrhhRdC2kZlZaVmz54tt9ut5ORkzZw5U1VVVV0u+/777+u2225TSkqKhgwZogkTJmj9+vVBy7z11luXfF7eu3dvaA8wnMRub283586dMx0dHRF+LfBXd911l4mLizNLly41mzZtMl6v18TFxZl33nmn1+4zXH/605/MhAkTjCQTGxtrXnrppW6ve6lXkI899piRZNavX2/+9V//NehWVVUV0rYiraf7JpT1u7tsX+oXY3qnZ8JBz9AzXdmxY4eR5OhzzfHjx40kk52dHTjy37JlS7fXr6ysNAkJCWbcuHFm7dq15vHHHzeXX365cbvd5ujRo0HL7t6928THx5u8vDzzxBNPmOeee848/PDD5oc//GHQcm+++aaRZL7//e93el4+ffp0SI8vrPDtbfv27TOSzJo1awLTzp07Z7785S8br9frYGWXVltba7785S8bSWbw4MFm586d3VrvUk189913G4/HE9ILHBv/IHq6b0JZv7vL9sV+MSbyPRMOeoae6crq1atNXFyc8fv9EdleOFpaWszJkyeNMcbs378/5PCdM2eOGT58uDlz5kxgWm1trUlKSjLz5s0LTGtsbDRpaWnmjjvuMO3t7Z+7zQvhW1paGtqD6UJYp51nzJihG2+8MZxVu+WVV17RoEGDdO+99wamJSQkaOHChaqoqFBNTU2v3Xe4MjIy9Jvf/EZf+tKX1NbWpvnz56u8vDzs7X3wwQf66le/qpiYmAhW2XM93TehrN/dZftiv0iR7ZkZM2Zo7NixXc6bPHmy8vLyelJqj9AzkRPp5xlJevnll3XNNdcoISFBubm5+u1vf6vDhw/riiuuUHx8fIQqD53L5VJ6enrY67/zzjvKz89XampqYFpGRoZuuukm7dy5U2fPnpUkbd26VfX19Vq1apViY2PV3Nysjo6OL9x+U1OTPv3007DrCyt8Dx482OX7vW1tbTpz5ky3bp/34P7rv/5LV1xxhdxud9D0C+95XOqcvdMuv/xy7dmzRyNGjFBLS4tuvfVWHThwIOTttLa2qrq6Wjk5OZ3Gra2tLez6IrF/erpvQlm/u8v21X6RItcz48eP1+9//3v5/f6g6a+99poqKyu1cuXKsOqjZ6JPpHpGkp588kndddddGjNmjNavXy+v16u/+7u/0969e3v0fm+ksqAn/H6/EhMTO00fMmSIWltb9eGHH0qSfvOb38jtduuPf/yjrrzySiUlJcntduu+++5TS0tLl9u+55575Ha7lZCQoKlTp4Y1/iF/ycapU6d06tSpLsP3P//zPzV16tRubef48eO6/PLLu5x38uRJZWRkdJp+YVq43/hiw1VXXaXdu3dr6tSp8vl8mj17tt5++21dffXV3d7GkSNH1NbWpo0bN2rjxo1B8w4fPhzStj4rEvunp/smlPW7u2xf7hcpMj0zfvx4tbe369ixY5owYYIkyRijFStW6KabbtKMGTPCqo2eiU6R6JmqqiotW7ZMP/7xj7Vq1arA9I6ODj377LP67ne/G3Z9kcqCnrjyyiu1d+9etbe3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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.animation as animation\n", + "\n", + "fps = 60\n", + "\n", + "fig, ax = plt.subplots(1, 1)\n", + "im = plt.imshow(numpy.linalg.norm(es[0].displacement, axis=2), cmap=\"hot\")\n", + "\n", + "def frame(i):\n", + " im.set_data(numpy.linalg.norm(es[i].displacement, axis=2))\n", + " im.autoscale()\n", + " ax.set_title(f\"$i = {i} \\qquad \\sum |F_i| = {numpy.sum(numpy.linalg.norm(es[i].force)):.3f} \\qquad \\sum |v_i| = {numpy.sum(numpy.linalg.norm(es[i].velocity)):.3f} \\qquad \\sum |d_i| = {numpy.sum(numpy.linalg.norm(es[i].displacement)):.3f}$\")\n", + " return [im]\n", + "\n", + "anim = animation.FuncAnimation(\n", + " fig,\n", + " frame, \n", + " frames = len(es),\n", + " interval = 1000 / fps,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "adc4a988-310f-4fe7-90bd-e9cd643c469e", + "metadata": {}, + "outputs": [], + "source": [ + "anim.save('elastic.mp4', fps=fps)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bc2f7ad3-d825-498b-84ba-7fe3b3c5eaf5", + "metadata": {}, "outputs": [], "source": [] } diff --git a/experiments/ELM_Debug.ipynb b/experiments/ELM_Debug.ipynb index c51c888..105fabe 100644 --- a/experiments/ELM_Debug.ipynb +++ b/experiments/ELM_Debug.ipynb @@ -248,7 +248,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.10.11" } }, "nbformat": 4, diff --git a/experiments/Zener.jl b/experiments/Zener.jl new file mode 100644 index 0000000..0b368ce --- /dev/null +++ b/experiments/Zener.jl @@ -0,0 +1,2389 @@ +### A Pluto.jl notebook ### +# v0.19.27 + +using Markdown +using InteractiveUtils + +# This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error). +macro bind(def, element) + quote + local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end + local el = $(esc(element)) + global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el) + el + end +end + +# ╔═╡ ea758628-8a57-481f-9d8f-edda66f30e42 +using Images + +# ╔═╡ 00ebaf5f-0258-4daf-840e-6f01b3bdd352 +using ImageDraw + +# ╔═╡ e3160714-e504-48bd-898b-fdfcb07856ba +using PlutoUI + +# ╔═╡ 81e1c4e1-89bf-4888-bf65-ce021c7a574b +using ProgressLogging + +# ╔═╡ cf53e56a-3f21-4ba6-aae5-7b1e5fdc9623 +using LinearAlgebra + +# ╔═╡ 49b8c58c-ba0d-4783-8a3d-888902277b75 +md" +## Canvas +" + +# ╔═╡ 5589b059-d8c8-43fa-8916-c2a5d1a36a1d +function norm2(A; dims) + B = sum(x -> x^2, A; dims=dims) + sqrt.(B) +end + +# ╔═╡ fede4fd1-acb3-4b2e-b2bc-2e3703e7762d +HSV(240, 0.5, 1.0) + +# ╔═╡ 9e5c5ea0-850a-4dbf-b89b-33ae234bbce6 +struct Canvas + width :: Int + height :: Int + grid_size :: Int + particle_radius :: Float64 + pixels :: Matrix{HSV{Float64}} +end + +# ╔═╡ 4312153d-d1c3-4c04-8f49-0681ebe49931 +function mk_canvas(width :: Int, height :: Int, grid_size :: Int = 30) :: Canvas + Canvas( + width, + height, + grid_size, + grid_size * (1/5), + fill(HSV(0.0, 0.0, 1.0), grid_size * height, grid_size * width) + ) +end + +# ╔═╡ 56d8ea14-6fb7-4aed-a098-58c99a00d98f +function draw_particle!(self :: Canvas, x :: Number, y :: Number) + x´ = 1 + round(Int, (x - 0.5) * self.grid_size) + y´ = 1 + round(Int, (y - 0.5) * self.grid_size) + + draw!( + self.pixels, + Ellipse(CirclePointRadius(x´, y´, self.particle_radius)), + HSV(240, 0.5, 1.0) + ) +end + +# ╔═╡ 510a8bb6-c36f-427a-8a1f-09520ba8e372 + + +# ╔═╡ 4435eb0e-92b9-4e2b-b010-ea30d33cca7f +function draw_box!(self :: Canvas, x :: Number, y :: Number, color :: HSV{Float64}) + x´ = 1 + round(Int, (x - 1) * self.grid_size) + y´ = 1 + round(Int, (y - 1) * self.grid_size) + + self.pixels[ + y´:y´ + self.grid_size - 1, + x´:x´ + self.grid_size - 1 + ] .= color +end + +# ╔═╡ 02bb3de1-ac52-4c41-881f-6cbefa0f14d6 +md" +## Periodic Vector Field +" + +# ╔═╡ 95782460-370f-11ee-23f0-15d095c0cbd2 +mutable struct PeriodicVectorField + width :: Int + height :: Int + dim :: Int + values :: Array{Float64, 3} +end + +# ╔═╡ 6c328f85-2bdb-4b9a-94d6-008d5fcfcb0b +function mk_field(width :: Int, height :: Int, dim :: Int; initial :: Float64 = 0.0) :: PeriodicVectorField + PeriodicVectorField( + width, + height, + dim, + fill(initial, width, height, dim) + ) +end + +# ╔═╡ e047bcdc-7e68-4012-b46c-8effa9c0ec96 +function wrap_index(index :: Int, n :: Int) + mod1(index, n) +end + +# ╔═╡ e8d3a92e-8e5c-4362-aefb-1937c8265b88 +function get_at(self :: PeriodicVectorField, x :: Int, y :: Int) :: Vector{Float64} + self.values[wrap_index(x, self.width), wrap_index(y, self.height), :] +end + +# ╔═╡ 0e953361-2ffa-49fd-92f2-526d89761f4a +function set_at!(self :: PeriodicVectorField, x :: Int, y :: Int, value :: Vector{Float64}) + self.values[wrap_index(x, self.width), wrap_index(y, self.height), :] .= value +end + +# ╔═╡ 4a7f1411-79aa-41c2-8a1f-2b55a6e3de4d +@enum Direction SW=1 S SE E NE N NW W + +# ╔═╡ 1a26e9f9-8cf4-4d2e-9931-d7ead1f21666 +[cos(Int(d) * π) for d in instances(Direction)] + +# ╔═╡ 03e4d872-706a-4bd8-91e6-39ca90170616 +function invert_direction(d :: Direction) :: Direction + Direction(mod1(Int(d) + 4, length(instances(Direction)))) +end + +# ╔═╡ 1b5563fa-9707-4b8d-802d-1c504e201a04 +@assert all(d == invert_direction(invert_direction(d)) for d ∈ instances(Direction)) + +# ╔═╡ d83c41b0-2efe-42e4-95cd-50270ec74659 +direction_offsets = hcat( + [round(Int, sin((Int(d) - 2) * π * (1/4))) for d in instances(Direction)], + [round(Int, cos((Int(d) - 2) * π * (1/4))) for d in instances(Direction)] +) + +# ╔═╡ 52517a45-e2d8-45a4-9f33-433b2f5db9b5 +function direction_to_offset(d :: Direction) :: Vector{Int} + direction_offsets[Int(d), :] +end + +# ╔═╡ 12619d0f-01b6-44de-ba05-fe4fbe3d329a +md" +``` +(0, 0) x + ┌───────────► + │ + │ N + │ ▲ + │ │ + │ │ + │ W◄─── ───►E + │ │ + │ │ + │ ▼ +y▼ S +``` +" + +# ╔═╡ 90f0da92-cf10-4309-8dcf-2713e384bd9b +for d ∈ [W, N, E, S] + @info d direction_to_offset(d) +end + +# ╔═╡ cb362a50-e9ac-4fba-a7b7-864edffce0f9 +function get_at_direction( + self :: PeriodicVectorField, + x :: Int, + y :: Int, + d :: Direction +) :: Float64 + c = direction_to_offset(d) + if d >= NE && d <= W + get_at_direction(self, x + c[1], y + c[2], invert_direction(d)) + else + get_at(self, x + c[1], y + c[2])[Int(d)] + end +end + +# ╔═╡ 5120d3e6-0c08-4661-b845-777a3b0fd9b3 +function set_at_direction!( + self :: PeriodicVectorField, + x :: Int, + y :: Int, + d :: Direction, + value :: Float64 +) + c = direction_to_offset(d) + if d >= NE && d <= W + set_at_direction!(self, x + c[1], y + c[2], invert_direction(d), value) + else + v = get_at(self, x + c[1], y + c[2]) + v[Int(d)] = value + set_at!(self, x + c[1], y + c[2], v) + end + + return +end + +# ╔═╡ 078d53ff-b48f-4e56-84ab-e2bab56d8ba2 +rand() + +# ╔═╡ b323d5a8-b3ec-4dc2-98dd-a1d6a56de8d2 +begin + local f = mk_field(30, 30, 4) + f.values = rand(30, 30, 4) + + for x ∈ f.width + for y ∈ f.height + for d ∈ instances(Direction) + local off = direction_to_offset(d) + local x´ = x + off[1] + local y´ = y + off[2] + + @assert get_at_direction(f, x, y, d) == get_at_direction(f, x´, y´, invert_direction(d)) + end + end + end + + local fi = 0.0 + for x ∈ f.width + for y ∈ f.height + for d ∈ instances(Direction) + set_at_direction!(f, x, y, d, fi) + @assert get_at_direction(f, x, y, d) == fi + fi += 1 + end + end + end +end + +# ╔═╡ e34a6736-6330-402c-9e94-6ad3d0cfa882 +md" +## Maxwell + +We can numerically solve + +$\dot{\mathbf{F}}_i(t) = \dot{\mathbf{F}}_{i, \text{elastic}}(t) - \frac{1}{Q} \mathbf{F}_i(t)$ +$\mathbf{F}_{i, \text{elastic}}(t) = - \sum_j \mathbf{F}_{ij}(t)$ +$\mathbf{F}_{ij}(t) = \mathbf{n}_{ij} K_{ij} (\mathbf{u}_{ij} \cdot \mathbf{x}_{ij}) + \frac{c \mathbf{u}_{ij}}{|\mathbf{x}_{ij}|^2}$ + +by + +$\dot{\mathbf{F}}_{i, \text{elastic}}(t) = \frac{\mathbf{F}_{i, \text{elastic}}(t + \Delta t) - \mathbf{F}_{i, \text{elastic}}(t)}{\Delta t}$ +$\dot{\mathbf{F}}_i(t) = \dot{\mathbf{F}}_{i, \text{elastic}}(t) - \frac{1}{Q} \mathbf{F}_i(t)$ +$\mathbf{F}_i(t + \Delta t) = \mathbf{F}_i(t) + \Delta t \dot{\mathbf{F}}_i(t)$ +$\mathbf{v}_i(t + \Delta t) = \mathbf{v}_i(t) + \Delta t \mathbf{F}_i(t) + \frac{1}{2} \Delta t^2 \dot{\mathbf{F}}_i(t)$ +$\mathbf{u}_i(t + \Delta t) = \mathbf{u}_i(t) + \Delta t \mathbf{v}_i(t) + \frac{1}{2} \Delta t^2 \mathbf{F}_i(t) + \frac{1}{6} \Delta t^3 \dot{\mathbf{F}}_i(t)$ + +See [Taylor Series](https://en.wikipedia.org/wiki/Taylor_series) +" + +# ╔═╡ 84d48419-785a-4786-9eaf-000dab9257b1 +md" +### Implementation + +We need store the displacement, velocity, force and elastic force (for calculating $\dot{\mathbf{F}}_{i, \text{elastic}}(t)$) of each particle. +" + +# ╔═╡ 43b1f729-ef23-44ca-8e45-c76ba158848b +struct MaxwellModel + width :: Int + height :: Int + displacement :: PeriodicVectorField + velocity :: PeriodicVectorField + force :: PeriodicVectorField + force_change :: PeriodicVectorField + elastic_force :: PeriodicVectorField + fixed :: PeriodicVectorField + Δt :: Float64 + k :: Float64 + c :: Float64 + Q :: Float64 +end + +# ╔═╡ af3f5d21-9ea3-46c2-9b85-bf42a6179f0a +function mk_maxwell( + width :: Int, + height :: Int; + Δt :: Float64 = 0.1, + k :: Float64 = 1.0, + c :: Float64 = 1.0, + Q :: Float64 = 100.0 +) :: MaxwellModel + MaxwellModel( + width, + height, + mk_field(width, height, 2), + mk_field(width, height, 2), + mk_field(width, height, 2), + mk_field(width, height, 2), + mk_field(width, height, 2), + mk_field(width, height, 1, initial = 1.0), + Δt, + k, + c, + Q + ) +end + +# ╔═╡ e8cc22d9-665e-4c0e-8af2-3b96d8f65d0b +function get_elastic_force( + self :: MaxwellModel, x :: Int, y :: Int, d :: Direction +) :: Vector{Float64} + offset = direction_to_offset(d) + x´ = x + offset[1] + y´ = y + offset[2] + + u = get_at(self.displacement, x, y) + u´ = get_at(self.displacement, x´, y´) + + x_ij = Float64.([x, y] - [x´, y´]) + u_ij = u - u´ + r_ij = x_ij + u_ij + n_ij = r_ij / norm(r_ij) + K_ij = self.k * norm(x_ij) + + n_ij * K_ij * (u_ij ⋅ x_ij) + (self.c * u_ij) / norm(x_ij)^2 +end + +# ╔═╡ 8639a662-0dd0-4921-8617-cf1b3770fbd9 +[0 0 1; 0 1 0; 1 0 0] .* [1 2 3; 1 2 3; 1 2 3] + +# ╔═╡ eee3a24f-78c0-47ad-8b35-56f2d76bb949 +function update_maxwell!(self :: MaxwellModel) + Ḟ = self.force_change.values + F = self.force.values + v = self.velocity.values + u = self.displacement.values + self.displacement.values = u + self.fixed.values .* (self.Δt * v + self.Δt^2 * (1/2) * F + self.Δt^3 * (1/6) * Ḟ) + + for x ∈ 1:self.width + for y ∈ 1:self.height + F_elastic_new = [0.0, 0.0] + for d ∈ instances(Direction) + F_elastic_new += get_elastic_force(self, x, y, d) + end + F_elastic_new *= -1 + + F_elastic = get_at(self.elastic_force, x, y) + Ḟ_elastic = (F_elastic_new - F_elastic) / self.Δt + set_at!(self.elastic_force, x, y, F_elastic_new) + + F_i = get_at(self.force, x, y) + Ḟ = Ḟ_elastic - (1 / self.Q) * F_i + set_at!(self.force_change, x, y, Ḟ) + end + end + + Ḟ = self.force_change.values + self.force.values = F + self.fixed.values .* (self.Δt * Ḟ) + self.velocity.values = v + self.fixed.values .* (self.Δt * F + self.Δt^2 * (1/2) * Ḟ) +end + +# ╔═╡ 5dc38b5c-156f-4450-8a8e-83379f88ea1d +function draw_maxwell(self :: MaxwellModel) :: Canvas + min_u = minimum(norm2(self.displacement.values, dims = 3)) + max_u = maximum(norm2(self.displacement.values, dims = 3)) + + c = mk_canvas(self.width, self.height * 2) + + for x ∈ 1:self.width + for y ∈ 1:self.height + u = get_at(self.displacement, x, y) + draw_particle!(c, x + u[1], y + u[2]) + + draw_box!(c, x, y + self.height, HSV(240, 1.0, (norm(u) - min_u) / (max_u - min_u))) + end + end + + c +end + +# ╔═╡ 2a0ca777-0323-4b23-8874-2d816daf6d1d +@bind i Clock(interval = 0.05) + +# ╔═╡ d3e98246-2144-421d-9546-d57086a60e79 +import Plots + +# ╔═╡ 0ef8b6b8-e4ad-4610-a2d6-5985830b23f3 +Plots.plotly() + +# ╔═╡ 9fe9acfc-e696-4f7d-8841-6325e9fd4733 +md" +## Interlude: Cool Colors for the Heatmap +" + +# ╔═╡ a183601a-33e8-413d-ae02-93407375edfc +function c1(x :: Float64) :: HSV{Float64} + HSV(60 * x, 0.5 + (1 - x) * 0.5, x) +end + +# ╔═╡ 67740373-7db8-4e72-9098-77b288c14cc3 +[c1(i / 10) for i in 0:10] + +# ╔═╡ 7f458f26-0abe-4e16-911b-265da7f21a5b +md" +## Zener + +Given + +$\textbf{F}_{ij}(t) = K_0 \textbf{u}_{ij} + K_1 \textbf{u}^s_{ij} + \frac{c \dot{\textbf{u}}^d_{ij}}{\Delta x^2}$ +$\textbf{u} = \textbf{u}^s + \textbf{u}^d$ +$K_1 \textbf{u}^s = \eta \dot{\textbf{u}}^d$ + +we need to derive a set of equations to calculate the new forces, velocities and displacements for a timestep. + +$\textbf{u}^d(t) \in \mathbb{R}$ + +$\textbf{u}^s(t) \in \mathbb{R} = |\textbf{u}(t)| - \textbf{u}^d(t)$ +$\dot{\textbf{u}}^d(t) = \frac{K_1 \textbf{u}^s(t)}{\eta}$ + +Updates: + +$\textbf{u}^d(t + \Delta t) = \textbf{u}^d(t) + \Delta t \dot{\textbf{u}}^d(t)$ +" + +# ╔═╡ 650aae02-8622-481e-8827-cb4c81e6fce5 +struct ZenerModel + width :: Int + height :: Int + Δt :: Float64 + Δx :: Float64 + K0 :: Float64 + K1 :: Float64 + c :: Float64 + η :: Float64 + + displacement :: PeriodicVectorField + velocity :: PeriodicVectorField + force :: PeriodicVectorField + dampers :: PeriodicVectorField +end + +# ╔═╡ 4be0d852-b22f-41dc-8de4-1025a38ce87c +function mk_zener( + width :: Int, + height :: Int; + Δt :: Float64 = 0.1, + Δx :: Float64 = 1.0, + K0 :: Float64 = 1.0, + K1 :: Float64 = 1.0, + c :: Float64 = 1.0, + η :: Float64 = 1.0 +) :: ZenerModel + ZenerModel( + width, + height, + Δt, + Δx, + K0, + K1, + c, + η, + mk_field(width, height, 2), + mk_field(width, height, 2), + mk_field(width, height, 2), + mk_field(width, height, 4), + ) +end + +# ╔═╡ 82952bba-d451-4bc0-8cf6-0823a9e2ceac +function get_zener_force( + self :: ZenerModel, + x :: Int, + y :: Int, + d :: Direction +) :: Vector{Float64} + offset = direction_to_offset(d) + x´ = x + offset[1] + y´ = y + offset[2] + + u = get_at(self.displacement, x, y) + u´ = get_at(self.displacement, x´, y´) + + u_ij = u - u´ + un_ij = if norm(u_ij) == 0.0 + [0.0, 0.0] + else + u_ij / norm(u_ij) + end + x_ij = [x, y] - [x´, y´] + ud_ij = get_at_direction(self.dampers, x, y, d) + us_ij = norm(u_ij) - ud_ij + u̇d_ij = (self.K1 / self.η) * us_ij + + self.K0 * u_ij + self.K1 * ud_ij * un_ij + self.c * u̇d_ij * un_ij +end + +# ╔═╡ 9459bdf3-5ff4-48df-8007-b0ba0bed894d +function update_zener!(self :: ZenerModel) + u = self.displacement.values + v = self.velocity.values + F = self.force.values + self.displacement.values = u + self.Δt * v + self.Δt^2 * (1/2) * F + + for x ∈ 1:self.width + for y ∈ 1:self.height + # Update force at particle [x, y] + F_i = [0.0, 0.0] + for d ∈ instances(Direction) + F_i += get_zener_force(self, x, y, d) + end + F_i *= -1 + + set_at!(self.force, x, y, F_i) + end + end + + + # Update spring at [x, y, d] + # Move up? + # Also: Very inefficient + for x ∈ 1:self.width + for y ∈ 1:self.height + for d ∈ [SW, S, SE, E] + offset = direction_to_offset(d) + x´ = x + offset[1] + y´ = y + offset[2] + + u = get_at(self.displacement, x, y) + u´ = get_at(self.displacement, x´, y´) + + u_ij = u - u´ + ud_ij = get_at_direction(self.dampers, x, y, d) + us_ij = norm(u_ij) - ud_ij + u̇d_ij = (self.K1 / self.η) * us_ij + set_at_direction!(self.dampers, x, y, d, ud_ij + self.Δt * u̇d_ij) + end + end + end + + v = self.velocity.values + F = self.force.values + self.velocity.values = v + self.Δt * F +end + +# ╔═╡ 68a560b8-85bc-4077-9338-507c813f3a73 +function draw_zener(self :: ZenerModel) :: Canvas + min_u = 0 + max_u = maximum(norm2(self.displacement.values, dims = 3)) + + c = mk_canvas(self.width * 2, self.height, 10) + + for x ∈ 1:self.width + for y ∈ 1:self.height + u = get_at(self.displacement, x, y) + draw_particle!(c, x + u[1], y + u[2]) + + draw_box!(c, self.width + x, y, c1((norm(u) - min_u) / (max_u - min_u))) + end + end + + c +end + +# ╔═╡ 078754ac-326d-4d55-a050-473b8f866960 +begin + dist_xs = 30:34 + dist_ys = 21:22 + dist_dir = 0.5 * direction_to_offset(S) + + η = 0.25 + K0 = 0.25 + K1 = 0.25 + zc = 4.0 + z = mk_zener(61, 61, η = η, K0 = K0, K1 = K1, c = zc) + # set_at!(z.displacement, 5, 5, 0.5 * direction_to_offset(NW)) + for x ∈ dist_xs + for y ∈ dist_ys + set_at!(z.displacement, x, y, dist_dir) + end + end + + z_frames = [] + z_max_f = [] + z_max_u = [] + z_sum_u = [] + dist_sum_u = [] + function z_log_stuff!() + push!(z_max_f, maximum(norm2(z.force.values, dims=3))) + push!(z_max_u, maximum(norm2(z.displacement.values, dims=3))) + push!(z_sum_u, sum(norm2(z.displacement.values, dims=3))) + push!(dist_sum_u, sum(norm2(z.displacement.values[dist_xs, dist_ys, :], dims=3))) + push!(z_frames, draw_zener(z).pixels) + end + + z_log_stuff!() + @progress for i ∈ 1:100 + update_zener!(z) + z_log_stuff!() + end +end + +# ╔═╡ 923ed671-b139-47b6-a10b-10cdc8c4b87a +@bind zir Clock(interval = 0.05) + +# ╔═╡ 0335032b-06b9-4b9e-bc78-c21ce95c5bb3 +zi = mod1(zir, length(z_frames)) + +# ╔═╡ df0eda58-f1c9-4040-98e8-e1db173bb2f9 +z_frames[zi] + +# ╔═╡ 01d400ee-953b-4f75-852a-b30f672acc31 +z_max_f[zi] + +# ╔═╡ f6b50ef9-94d9-4f80-b778-ef00f3635279 +Plots.plot([ + z_max_f, + z_max_u, + z_sum_u, + dist_sum_u +], layout = (4, 1)) + +# ╔═╡ 16db9976-fc91-4010-98fd-8d4cda6117d8 +w, h = size(z_frames[1]) + +# ╔═╡ 5c79d594-a3a0-472e-a4cc-0c78df3ecf9d +begin + anim = fill(HSV(0, 1.0, 1.0), w, h, length(z_frames)) + for i ∈ 1:length(z_frames) + anim[:, :, i] = z_frames[i] + end +end + +# ╔═╡ 91e05e7f-70bd-4ded-9a1e-f62602386a40 +gif_path = "/home/paul/zener_$(η)_$(K0)_$(K1)_$(zc).gif" + +# ╔═╡ f75e6776-e2a7-4a54-9bf9-e674d778bc66 +function draw_line!(self :: Canvas, x :: Number, y :: Number, x´ :: Number, y´ :: Number) + p1 = Point(round(Int, (x + 0.5) * self.grid_size), round(Int, (y + 0.5) * self.grid_size)) + p2 = Point(round(Int, (x´ + 0.5) * self.grid_size), round(Int, (y´ + 0.5) * self.grid_size)) + draw!(self.pixels, LineSegment(p1,p2), HSV(0.0, 1.0, 1.0)) +end + +# ╔═╡ 00000000-0000-0000-0000-000000000001 +PLUTO_PROJECT_TOML_CONTENTS = """ +[deps] +ImageDraw = "4381153b-2b60-58ae-a1ba-fd683676385f" +Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +ProgressLogging = "33c8b6b6-d38a-422a-b730-caa89a2f386c" + +[compat] +ImageDraw = "~0.2.6" +Images = "~0.26.0" +Plots = "~1.38.17" +PlutoUI = "~0.7.52" +ProgressLogging = "~0.1.4" +""" + +# ╔═╡ 00000000-0000-0000-0000-000000000002 +PLUTO_MANIFEST_TOML_CONTENTS = """ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.8.5" +manifest_format = "2.0" +project_hash = "e0b9e852a96a15580effb0ccde770b4f16d1de17" + +[[deps.AbstractFFTs]] +deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" + +[[deps.AbstractPlutoDingetjes]] +deps = ["Pkg"] +git-tree-sha1 = "91bd53c39b9cbfb5ef4b015e8b582d344532bd0a" +uuid = "6e696c72-6542-2067-7265-42206c756150" +version = "1.2.0" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.6.2" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.2.0" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.4.11" + +[[deps.ArrayInterfaceCore]] +deps = ["LinearAlgebra", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "e5f08b5689b1aad068e01751889f2f615c7db36d" +uuid = "30b0a656-2188-435a-8636-2ec0e6a096e2" +version = "0.1.29" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.0.1" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.7" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.BitFlags]] +git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.7" + +[[deps.BitTwiddlingConvenienceFunctions]] +deps = ["Static"] +git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b" +uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" +version = "0.1.5" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+0" + +[[deps.CEnum]] +git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.4.2" + +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] +git-tree-sha1 = "89e0654ed8c7aebad6d5ad235d6242c2d737a928" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.3" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.1+1" + +[[deps.CatIndices]] +deps = ["CustomUnitRanges", "OffsetArrays"] +git-tree-sha1 = "a0f80a09780eed9b1d106a1bf62041c2efc995bc" +uuid = "aafaddc9-749c-510e-ac4f-586e18779b91" +version = "0.2.2" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.16.0" + +[[deps.ChangesOfVariables]] +deps = ["InverseFunctions", "LinearAlgebra", "Test"] +git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f" +uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" +version = "0.1.8" + +[[deps.CloseOpenIntervals]] +deps = ["Static", "StaticArrayInterface"] +git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" +uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" +version = "0.1.12" + +[[deps.Clustering]] +deps = ["Distances", "LinearAlgebra", "NearestNeighbors", "Printf", "Random", "SparseArrays", "Statistics", "StatsBase"] +git-tree-sha1 = "b86ac2c5543660d238957dbde5ac04520ae977a7" +uuid = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" +version = "0.15.4" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.2" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "d9a8f86737b665e15a9641ecbac64deef9ce6724" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.23.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.4" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.10" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["Dates", "LinearAlgebra", "UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.9.0" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.0.1+0" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "5372dbbf8f0bdb8c700db5367132925c0771ef7e" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.2.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.3" + +[[deps.Contour]] +git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.2" + +[[deps.CoordinateTransformations]] +deps = ["LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "f9d7112bfff8a19a3a4ea4e03a8e6a91fe8456bf" +uuid = "150eb455-5306-5404-9cee-2592286d6298" +version = "0.6.3" + +[[deps.CpuId]] +deps = ["Markdown"] +git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" +uuid = "adafc99b-e345-5852-983c-f28acb93d879" +version = "0.3.1" + +[[deps.CustomUnitRanges]] +git-tree-sha1 = "1a3f97f907e6dd8983b744d2642651bb162a3f7a" +uuid = "dc8bdbbb-1ca9-579f-8c36-e416f6a65cce" +version = "1.0.2" + +[[deps.DataAPI]] +git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.15.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.15" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.9" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "e90caa41f5a86296e014e148ee061bd6c3edec96" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.9" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.5.0+0" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.2+2" + +[[deps.FFTViews]] +deps = ["CustomUnitRanges", "FFTW"] +git-tree-sha1 = "cbdf14d1e8c7c8aacbe8b19862e0179fd08321c2" +uuid = "4f61f5a4-77b1-5117-aa51-3ab5ef4ef0cd" +version = "0.3.2" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.7.1" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+0" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.1" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.93+0" + +[[deps.Formatting]] +deps = ["Printf"] +git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" +uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" +version = "0.4.2" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "d8db6a5a2fe1381c1ea4ef2cab7c69c2de7f9ea0" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.1+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.8+0" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] +git-tree-sha1 = "8e2d86e06ceb4580110d9e716be26658effc5bfd" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.72.8" + +[[deps.GR_jll]] +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "da121cbdc95b065da07fbb93638367737969693f" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.72.8+0" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.74.0+2" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.2" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "1cf1d7dcb4bc32d7b4a5add4232db3750c27ecb4" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.8.0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "cb56ccdd481c0dd7f975ad2b3b62d9eda088f7e2" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.9.14" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.HistogramThresholding]] +deps = ["ImageBase", "LinearAlgebra", "MappedArrays"] +git-tree-sha1 = "7194dfbb2f8d945abdaf68fa9480a965d6661e69" +uuid = "2c695a8d-9458-5d45-9878-1b8a99cf7853" +version = "0.3.1" + +[[deps.HostCPUFeatures]] +deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] +git-tree-sha1 = "eb8fed28f4994600e29beef49744639d985a04b2" +uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" +version = "0.1.16" + +[[deps.Hyperscript]] +deps = ["Test"] +git-tree-sha1 = "8d511d5b81240fc8e6802386302675bdf47737b9" +uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" +version = "0.0.4" + +[[deps.HypertextLiteral]] +deps = ["Tricks"] +git-tree-sha1 = "c47c5fa4c5308f27ccaac35504858d8914e102f9" +uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" +version = "0.9.4" + +[[deps.IOCapture]] +deps = ["Logging", "Random"] +git-tree-sha1 = "d75853a0bdbfb1ac815478bacd89cd27b550ace6" +uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" +version = "0.2.3" + +[[deps.IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + +[[deps.ImageAxes]] +deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] +git-tree-sha1 = "2e4520d67b0cef90865b3ef727594d2a58e0e1f8" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.11" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageBinarization]] +deps = ["HistogramThresholding", "ImageCore", "LinearAlgebra", "Polynomials", "Reexport", "Statistics"] +git-tree-sha1 = "f5356e7203c4a9954962e3757c08033f2efe578a" +uuid = "cbc4b850-ae4b-5111-9e64-df94c024a13d" +version = "0.3.0" + +[[deps.ImageContrastAdjustment]] +deps = ["ImageBase", "ImageCore", "ImageTransformations", "Parameters"] +git-tree-sha1 = "eb3d4365a10e3f3ecb3b115e9d12db131d28a386" +uuid = "f332f351-ec65-5f6a-b3d1-319c6670881a" +version = "0.3.12" + +[[deps.ImageCore]] +deps = ["AbstractFFTs", "ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "fc5d1d3443a124fde6e92d0260cd9e064eba69f8" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.1" + +[[deps.ImageCorners]] +deps = ["ImageCore", "ImageFiltering", "PrecompileTools", "StaticArrays", "StatsBase"] +git-tree-sha1 = "24c52de051293745a9bad7d73497708954562b79" +uuid = "89d5987c-236e-4e32-acd0-25bd6bd87b70" +version = "0.1.3" + +[[deps.ImageDistances]] +deps = ["Distances", "ImageCore", "ImageMorphology", "LinearAlgebra", "Statistics"] +git-tree-sha1 = "08b0e6354b21ef5dd5e49026028e41831401aca8" +uuid = "51556ac3-7006-55f5-8cb3-34580c88182d" +version = "0.2.17" + +[[deps.ImageDraw]] +deps = ["Distances", "ImageCore", "LinearAlgebra"] +git-tree-sha1 = "a547622ba30143363a844350c8cfb84f40b5a796" +uuid = "4381153b-2b60-58ae-a1ba-fd683676385f" +version = "0.2.6" + +[[deps.ImageFiltering]] +deps = ["CatIndices", "ComputationalResources", "DataStructures", "FFTViews", "FFTW", "ImageBase", "ImageCore", "LinearAlgebra", "OffsetArrays", "PrecompileTools", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "TiledIteration"] +git-tree-sha1 = "432ae2b430a18c58eb7eca9ef8d0f2db90bc749c" +uuid = "6a3955dd-da59-5b1f-98d4-e7296123deb5" +version = "0.7.8" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs"] +git-tree-sha1 = "bca20b2f5d00c4fbc192c3212da8fa79f4688009" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.7" + +[[deps.ImageMagick]] +deps = ["FileIO", "ImageCore", "ImageMagick_jll", "InteractiveUtils"] +git-tree-sha1 = "b0b765ff0b4c3ee20ce6740d843be8dfce48487c" +uuid = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" +version = "1.3.0" + +[[deps.ImageMagick_jll]] +deps = ["JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1c0a2295cca535fabaf2029062912591e9b61987" +uuid = "c73af94c-d91f-53ed-93a7-00f77d67a9d7" +version = "6.9.10-12+3" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "355e2b974f2e3212a75dfb60519de21361ad3cb7" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.9" + +[[deps.ImageMorphology]] +deps = ["DataStructures", "ImageCore", "LinearAlgebra", "LoopVectorization", "OffsetArrays", "Requires", "TiledIteration"] +git-tree-sha1 = "6f0a801136cb9c229aebea0df296cdcd471dbcd1" +uuid = "787d08f9-d448-5407-9aad-5290dd7ab264" +version = "0.4.5" + +[[deps.ImageQualityIndexes]] +deps = ["ImageContrastAdjustment", "ImageCore", "ImageDistances", "ImageFiltering", "LazyModules", "OffsetArrays", "PrecompileTools", "Statistics"] +git-tree-sha1 = "783b70725ed326340adf225be4889906c96b8fd1" +uuid = "2996bd0c-7a13-11e9-2da2-2f5ce47296a9" +version = "0.3.7" + +[[deps.ImageSegmentation]] +deps = ["Clustering", "DataStructures", "Distances", "Graphs", "ImageCore", "ImageFiltering", "ImageMorphology", "LinearAlgebra", "MetaGraphs", "RegionTrees", "SimpleWeightedGraphs", "StaticArrays", "Statistics"] +git-tree-sha1 = "3ff0ca203501c3eedde3c6fa7fd76b703c336b5f" +uuid = "80713f31-8817-5129-9cf8-209ff8fb23e1" +version = "1.8.2" + +[[deps.ImageShow]] +deps = ["Base64", "ColorSchemes", "FileIO", "ImageBase", "ImageCore", "OffsetArrays", "StackViews"] +git-tree-sha1 = "3b5344bcdbdc11ad58f3b1956709b5b9345355de" +uuid = "4e3cecfd-b093-5904-9786-8bbb286a6a31" +version = "0.3.8" + +[[deps.ImageTransformations]] +deps = ["AxisAlgorithms", "CoordinateTransformations", "ImageBase", "ImageCore", "Interpolations", "OffsetArrays", "Rotations", "StaticArrays"] +git-tree-sha1 = "7ec124670cbce8f9f0267ba703396960337e54b5" +uuid = "02fcd773-0e25-5acc-982a-7f6622650795" +version = "0.10.0" + +[[deps.Images]] +deps = ["Base64", "FileIO", "Graphics", "ImageAxes", "ImageBase", "ImageBinarization", "ImageContrastAdjustment", "ImageCore", "ImageCorners", "ImageDistances", "ImageFiltering", "ImageIO", "ImageMagick", "ImageMetadata", "ImageMorphology", "ImageQualityIndexes", "ImageSegmentation", "ImageShow", "ImageTransformations", "IndirectArrays", "IntegralArrays", "Random", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "TiledIteration"] +git-tree-sha1 = "d438268ed7a665f8322572be0dabda83634d5f45" +uuid = "916415d5-f1e6-5110-898d-aaa5f9f070e0" +version = "0.26.0" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3d09a9f60edf77f8a4d99f9e015e8fbf9989605d" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.1.7+0" + +[[deps.IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + +[[deps.Inflate]] +git-tree-sha1 = "5cd07aab533df5170988219191dfad0519391428" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.3" + +[[deps.IntegralArrays]] +deps = ["ColorTypes", "FixedPointNumbers", "IntervalSets"] +git-tree-sha1 = "be8e690c3973443bec584db3346ddc904d4884eb" +uuid = "1d092043-8f09-5a30-832f-7509e371ab51" +version = "0.1.5" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ad37c091f7d7daf900963171600d7c1c5c3ede32" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2023.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "721ec2cf720536ad005cb38f50dbba7b02419a15" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.14.7" + +[[deps.IntervalSets]] +deps = ["Dates", "Random", "Statistics"] +git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.7" + +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.12" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterTools]] +git-tree-sha1 = "4ced6667f9974fc5c5943fa5e2ef1ca43ea9e450" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.8.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] +git-tree-sha1 = "aa6ffef1fd85657f4999030c52eaeec22a279738" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.33" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.5" + +[[deps.JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.1" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "327713faef2a3e5c80f96bf38d1fa26f7a6ae29e" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.3" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6f2675ef130a300a112286de91973805fcc5ffbc" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.91+0" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f689897ccbe049adb19a065c495e75f372ecd42b" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.4+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.1+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.Latexify]] +deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"] +git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.1" + +[[deps.LayoutPointers]] +deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1" +uuid = "10f19ff3-798f-405d-979b-55457f8fc047" +version = "0.1.14" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.3" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "7.84.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.10.2+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] +git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.42.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.1+2" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.4.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.24" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "cedb76b37bc5a6c702ade66be44f831fa23c681e" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.0" + +[[deps.LoopVectorization]] +deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "ChainRulesCore", "CloseOpenIntervals", "DocStringExtensions", "ForwardDiff", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "SpecialFunctions", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +git-tree-sha1 = "c88a4afe1703d731b1c4fdf4e3c7e77e3b176ea2" +uuid = "bdcacae8-1622-11e9-2a5c-532679323890" +version = "0.12.165" + +[[deps.MIMEs]] +git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb" +uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65" +version = "0.1.4" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "eb006abbd7041c28e0d16260e50a24f8f9104913" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2023.2.0+0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.10" + +[[deps.MakieCore]] +deps = ["Observables"] +git-tree-sha1 = "87a85ff81583bd392642869557cb633532989517" +uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" +version = "0.6.4" + +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + +[[deps.MappedArrays]] +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.2" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] +git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.7" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.0+0" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.MetaGraphs]] +deps = ["Graphs", "JLD2", "Random"] +git-tree-sha1 = "1130dbe1d5276cb656f6e1094ce97466ed700e5a" +uuid = "626554b9-1ddb-594c-aa3c-2596fe9399a5" +version = "0.7.2" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.1.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.2.1" + +[[deps.MutableArithmetics]] +deps = ["LinearAlgebra", "SparseArrays", "Test"] +git-tree-sha1 = "964cb1a7069723727025ae295408747a0b36a854" +uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" +version = "1.3.0" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "2c3726ceb3388917602169bed973dbc97f1b51a8" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.13" + +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Observables]] +git-tree-sha1 = "6862738f9796b3edc1c09d0890afce4eca9e7e93" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.4" + +[[deps.OffsetArrays]] +deps = ["Adapt"] +git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.12.10" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.20+0" + +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.2" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "a4ca623df1ae99d09bc9868b008262d0c0ac1e4f" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.1.4+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "51901a49222b09e3743c65b8847687ae5fc78eb2" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.1" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "bbb5c2115d63c2f1451cb70e5ef75e8fe4707019" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.22+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.2" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.40.0+0" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "9b02b27ac477cad98114584ff964e3052f656a0f" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.0" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.12" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "716e24b21538abc91f6205fd1d8363f39b442851" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.7.2" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "64779bc4c9784fee475689a1752ef4d5747c5e87" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.42.2+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.8.0" + +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f6cf8e7944e50901594838951729a1861e668cb8" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.2" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.1.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "f92e1315dadf8c46561fb9396e525f7200cdc227" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.3.5" + +[[deps.Plots]] +deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "9f8675a55b37a70aa23177ec110f6e3f4dd68466" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.38.17" + +[[deps.PlutoUI]] +deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"] +git-tree-sha1 = "e47cd150dbe0443c3a3651bc5b9cbd5576ab75b7" +uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +version = "0.7.52" + +[[deps.PolyesterWeave]] +deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] +git-tree-sha1 = "240d7170f5ffdb285f9427b92333c3463bf65bf6" +uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" +version = "0.2.1" + +[[deps.Polynomials]] +deps = ["ChainRulesCore", "LinearAlgebra", "MakieCore", "MutableArithmetics", "RecipesBase"] +git-tree-sha1 = "3aa2bb4982e575acd7583f01531f241af077b163" +uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" +version = "3.2.13" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.1.2" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.0" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.7.2" + +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "18e8f4d1426e965c7b532ddd260599e1510d26ce" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.0" + +[[deps.Qt5Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] +git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" +uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" +version = "5.15.3+2" + +[[deps.Quaternions]] +deps = ["LinearAlgebra", "Random", "RealDot"] +git-tree-sha1 = "da095158bdc8eaccb7890f9884048555ab771019" +uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" +version = "0.7.4" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA", "Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +deps = ["Requires"] +git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.5" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RegionTrees]] +deps = ["IterTools", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "4618ed0da7a251c7f92e869ae1a19c74a7d2a7f9" +uuid = "dee08c22-ab7f-5625-9660-a9af2021b33f" +version = "0.3.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.0" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rotations]] +deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays"] +git-tree-sha1 = "54ccb4dbab4b1f69beb255a2c0ca5f65a9c82f08" +uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" +version = "1.5.1" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SLEEFPirates]] +deps = ["IfElse", "Static", "VectorizationBase"] +git-tree-sha1 = "4b8586aece42bee682399c4c4aee95446aa5cd19" +uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" +version = "0.6.39" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.SimpleWeightedGraphs]] +deps = ["Graphs", "LinearAlgebra", "Markdown", "SparseArrays"] +git-tree-sha1 = "4b33e0e081a825dbfaf314decf58fa47e53d6acb" +uuid = "47aef6b3-ad0c-573a-a1e2-d07658019622" +version = "1.4.0" + +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.3" + +[[deps.SnoopPrecompile]] +deps = ["Preferences"] +git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" +uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" +version = "1.0.3" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.1.1" + +[[deps.SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.3.0" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[deps.Static]] +deps = ["IfElse"] +git-tree-sha1 = "f295e0a1da4ca425659c57441bcb59abb035a4bc" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "0.8.8" + +[[deps.StaticArrayInterface]] +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "Static", "SuiteSparse"] +git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" +uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" +version = "1.4.0" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +git-tree-sha1 = "9cabadf6e7cd2349b6cf49f1915ad2028d65e881" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.6.2" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.2" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.6.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.1" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.2" + +[[deps.TiffImages]] +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "UUIDs"] +git-tree-sha1 = "8621f5c499a8aa4aa970b1ae381aae0ef1576966" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.6.4" + +[[deps.TiledIteration]] +deps = ["OffsetArrays", "StaticArrayInterface"] +git-tree-sha1 = "1176cc31e867217b06928e2f140c90bd1bc88283" +uuid = "06e1c1a7-607b-532d-9fad-de7d9aa2abac" +version = "0.5.0" + +[[deps.TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.13" + +[[deps.Tricks]] +git-tree-sha1 = "aadb748be58b492045b4f56166b5188aa63ce549" +uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" +version = "0.1.7" + +[[deps.URIs]] +git-tree-sha1 = "b7a5e99f24892b6824a954199a45e9ffcc1c70f0" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.0" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "Random"] +git-tree-sha1 = "64eb17acef1d9734cf09967539818f38093d9b35" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.16.2" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.Unzip]] +git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.2.0" + +[[deps.VectorizationBase]] +deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "b182207d4af54ac64cbc71797765068fdeff475d" +uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" +version = "0.21.64" + +[[deps.Wayland_jll]] +deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "ed8d92d9774b077c53e1da50fd81a36af3744c1c" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+0" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.25.0+0" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "de67fa59e33ad156a590055375a30b23c40299d3" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "0.5.5" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.10.3+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+4" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+4" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[deps.Xorg_xcb_util_image_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.12+3" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.5+0" + +[[deps.fzf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.29.0+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.4.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.1.1+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "libpng_jll"] +git-tree-sha1 = "d4f63314c8aa1e48cd22aa0c17ed76cd1ae48c3c" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.3+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.48.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" + +[[deps.xkbcommon_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+0" +""" + +# ╔═╡ Cell order: +# ╟─49b8c58c-ba0d-4783-8a3d-888902277b75 +# ╠═ea758628-8a57-481f-9d8f-edda66f30e42 +# ╠═00ebaf5f-0258-4daf-840e-6f01b3bdd352 +# ╠═e3160714-e504-48bd-898b-fdfcb07856ba +# ╠═81e1c4e1-89bf-4888-bf65-ce021c7a574b +# ╠═5589b059-d8c8-43fa-8916-c2a5d1a36a1d +# ╠═fede4fd1-acb3-4b2e-b2bc-2e3703e7762d +# ╠═9e5c5ea0-850a-4dbf-b89b-33ae234bbce6 +# ╠═4312153d-d1c3-4c04-8f49-0681ebe49931 +# ╠═56d8ea14-6fb7-4aed-a098-58c99a00d98f +# ╠═510a8bb6-c36f-427a-8a1f-09520ba8e372 +# ╠═4435eb0e-92b9-4e2b-b010-ea30d33cca7f +# ╟─02bb3de1-ac52-4c41-881f-6cbefa0f14d6 +# ╠═95782460-370f-11ee-23f0-15d095c0cbd2 +# ╠═6c328f85-2bdb-4b9a-94d6-008d5fcfcb0b +# ╠═e047bcdc-7e68-4012-b46c-8effa9c0ec96 +# ╠═e8d3a92e-8e5c-4362-aefb-1937c8265b88 +# ╠═0e953361-2ffa-49fd-92f2-526d89761f4a +# ╠═1a26e9f9-8cf4-4d2e-9931-d7ead1f21666 +# ╠═4a7f1411-79aa-41c2-8a1f-2b55a6e3de4d +# ╠═03e4d872-706a-4bd8-91e6-39ca90170616 +# ╠═1b5563fa-9707-4b8d-802d-1c504e201a04 +# ╟─d83c41b0-2efe-42e4-95cd-50270ec74659 +# ╠═52517a45-e2d8-45a4-9f33-433b2f5db9b5 +# ╟─12619d0f-01b6-44de-ba05-fe4fbe3d329a +# ╠═90f0da92-cf10-4309-8dcf-2713e384bd9b +# ╠═cb362a50-e9ac-4fba-a7b7-864edffce0f9 +# ╠═5120d3e6-0c08-4661-b845-777a3b0fd9b3 +# ╠═078d53ff-b48f-4e56-84ab-e2bab56d8ba2 +# ╠═b323d5a8-b3ec-4dc2-98dd-a1d6a56de8d2 +# ╟─e34a6736-6330-402c-9e94-6ad3d0cfa882 +# ╟─84d48419-785a-4786-9eaf-000dab9257b1 +# ╠═43b1f729-ef23-44ca-8e45-c76ba158848b +# ╠═af3f5d21-9ea3-46c2-9b85-bf42a6179f0a +# ╠═cf53e56a-3f21-4ba6-aae5-7b1e5fdc9623 +# ╠═e8cc22d9-665e-4c0e-8af2-3b96d8f65d0b +# ╠═8639a662-0dd0-4921-8617-cf1b3770fbd9 +# ╠═eee3a24f-78c0-47ad-8b35-56f2d76bb949 +# ╠═5dc38b5c-156f-4450-8a8e-83379f88ea1d +# ╠═216e25b2-ccaf-40af-a10c-bb2e90155a7d +# ╠═2a0ca777-0323-4b23-8874-2d816daf6d1d +# ╟─a22c6bc7-c69c-4635-88a8-5a48d75fa1e1 +# ╠═a18ece2e-9475-450a-83be-d6a23b9f6f47 +# ╟─30108145-3f56-46b3-bedb-a66651e4b2d3 +# ╠═d3e98246-2144-421d-9546-d57086a60e79 +# ╠═0ef8b6b8-e4ad-4610-a2d6-5985830b23f3 +# ╠═d2ca1322-f509-4045-8fb7-ae13dab22609 +# ╟─9fe9acfc-e696-4f7d-8841-6325e9fd4733 +# ╠═a183601a-33e8-413d-ae02-93407375edfc +# ╠═67740373-7db8-4e72-9098-77b288c14cc3 +# ╟─7f458f26-0abe-4e16-911b-265da7f21a5b +# ╠═650aae02-8622-481e-8827-cb4c81e6fce5 +# ╠═4be0d852-b22f-41dc-8de4-1025a38ce87c +# ╠═82952bba-d451-4bc0-8cf6-0823a9e2ceac +# ╠═9459bdf3-5ff4-48df-8007-b0ba0bed894d +# ╠═68a560b8-85bc-4077-9338-507c813f3a73 +# ╠═078754ac-326d-4d55-a050-473b8f866960 +# ╠═923ed671-b139-47b6-a10b-10cdc8c4b87a +# ╠═0335032b-06b9-4b9e-bc78-c21ce95c5bb3 +# ╠═df0eda58-f1c9-4040-98e8-e1db173bb2f9 +# ╠═01d400ee-953b-4f75-852a-b30f672acc31 +# ╠═f6b50ef9-94d9-4f80-b778-ef00f3635279 +# ╠═16db9976-fc91-4010-98fd-8d4cda6117d8 +# ╠═5c79d594-a3a0-472e-a4cc-0c78df3ecf9d +# ╠═91e05e7f-70bd-4ded-9a1e-f62602386a40 +# ╠═8ca87124-d990-422b-a9ce-eda1fceb4cb9 +# ╠═f75e6776-e2a7-4a54-9bf9-e674d778bc66 +# ╠═4a182660-f8ba-4a4b-a40b-73389459cad4 +# ╟─00000000-0000-0000-0000-000000000001 +# ╟─00000000-0000-0000-0000-000000000002 diff --git a/experiments/__pycache__/collatz.cpython-310.pyc b/experiments/__pycache__/collatz.cpython-310.pyc new file mode 100644 index 0000000..b4a5cde Binary files /dev/null and b/experiments/__pycache__/collatz.cpython-310.pyc differ diff --git a/experiments/collatz.py b/experiments/collatz.py new file mode 100644 index 0000000..67c1e29 --- /dev/null +++ b/experiments/collatz.py @@ -0,0 +1,31 @@ +import time + +def collatz(x): + seq = [x] + while x != 1: + if x % 2 == 0: + x //= 2 + else: + x = 3 * x + 1 + seq.append(x) + return seq + +if __name__ == "__main__": + best = None + try: + i = 1 + start = time.time() + while True: + pair = (i, collatz(i)) + + if (not best or len(pair[1]) > len(best[1])) and not any(c >= 2**31 for c in pair[1]): + best = pair + + if i % 10000 == 0: + now = time.time() + print(f"{i:>10} best: {best[0]:>10} {len(best[1]):>5} {(now - start) * 1000 / i:5.2}ns/seq") + i += 1 + except KeyboardInterrupt: + pass + + print(best) diff --git a/experiments/configs/genesis.json b/experiments/configs/genesis.json new file mode 100644 index 0000000..a7d2442 --- /dev/null +++ b/experiments/configs/genesis.json @@ -0,0 +1,96 @@ +{ + "#Testing": { + "description": "Cellular Potts Model with dynamic ECM" + }, + "Application": "Cells", + "Geometry": { + "blocksize": [80, 40, 20], + "blockcount": [1, 2, 4] + }, + "Settings": { + "timesteps": 100, + "randomseed": 42 + }, + "Filling": { + "cells": [ + { + "shape": "cube", + "box": [ + [21, 35, 10], + [25, 39, 15] + ], + "celltype": 0 + }, + { + "shape": "cube", + "box": [ + [15, 15, 14], + [22, 22, 20] + ], + "celltype": 0 + } + ] + }, + "CellsInSilico": { + "adhesion": { + "matrix": [ + [0, 0, 0, 0], + [0, 20, 5, 5], + [0, 5, 10, 5], + [0, 5, 5, 5] + ] + }, + "potential": { + "direction": [1, 1, 0], + "coupling": [0, 150, 100, 50] + }, + "temperature": 15, + "volume": { + "default": { + "storage": "const", + "value": 300 + }, + "lambda": { + "storage": "const", + "value": 10 + } + }, + "surface": { + "default": { + "storage": "const", + "value": 400 + }, + "lambda": { + "storage": "const", + "value": 10 + } + }, + "cleaner": { + "killdistance": 100 + }, + "checkerboard": "00", + "energyfunctions": ["Volume00", "Surface00", "Adhesion00", "Potential00"], + "centerofmass": { + "steps": 10 + }, + "dynamicecm": { + "enabled": true, + "deltat": 0.1 + } + }, + "Writers": { + "ParallelVTK_Cells": { + "writer": "ParallelVtkImage", + "outputtype": "UInt32", + "field": "cells", + "steps": 5 + }, + "ParallelVTK_Displacement": { + "writer": "ParallelVtkImage", + "outputtype": "Float32", + "field": "dynamicecm_displacement", + "steps": 1 + } + }, + "WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"] +} diff --git a/experiments/configs/small.json b/experiments/configs/small.json new file mode 100644 index 0000000..031df2e --- /dev/null +++ b/experiments/configs/small.json @@ -0,0 +1,75 @@ +{ + "#Testing": { + "description": "Cellular Potts Model with dynamic ECM" + }, + "Application": "Cells", + "Geometry": { + "blocksize": [15, 15, 15], + "blockcount": [1, 1, 1] + }, + "Settings": { + "timesteps": 100, + "randomseed": 42 + }, + "Filling": { + "cells": [ + ] + }, + "CellsInSilico": { + "adhesion": { + "matrix": [ + [0, 0, 0, 0], + [0, 20, 5, 5], + [0, 5, 10, 5], + [0, 5, 5, 5] + ] + }, + "temperature": 15, + "volume": { + "default": { + "storage": "const", + "value": 300 + }, + "lambda": { + "storage": "const", + "value": 10 + } + }, + "potential": { + "direction": [1, 1, 0], + "coupling": [0, 150, 100, 50] + }, + "surface": { + "default": { + "storage": "const", + "value": 400 + }, + "lambda": { + "storage": "const", + "value": 10 + } + }, + "cleaner": { + "killdistance": 100 + }, + "checkerboard": "00", + "energyfunctions": ["Volume00", "Surface00", "Adhesion00", "Potential00"], + "centerofmass": { + "steps": 10 + }, + "dynamicecm": { + "enabled": true, + "deltat": 0.1, + "eta": 0.5 + } + }, + "Writers": { + "ParallelVTK_Displacement": { + "writer": "ParallelVtkImage", + "outputtype": "Float32", + "field": "dynamicecm_displacement", + "steps": 1 + } + }, + "WriteActions": ["ParallelVTK_Displacement"] +} diff --git a/experiments/kv.mp4 b/experiments/kv.mp4 deleted file mode 100644 index 3adba34..0000000 Binary files a/experiments/kv.mp4 and /dev/null differ