 bondscell_results .$28487c59-7df4-41b9-859a-79438b1d3b06queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y}persist_js_state·has_pluto_hook_features§cell_id$28487c59-7df4-41b9-859a-79438b1d3b06depends_on_disabled_cells§runtime $Ypublished_object_keysdepends_on_skipped_cells§errored$bc66ff75-77ce-4487-ab2e-72800331839bqueued¤logsrunning¦outputbody<div class="markdown"><h3 id="The-:-character">The <code>:</code> character</h3>
<p>The <code>:</code> character has two syntatic purposes in Julia. It signifies a <code>Symbol</code> or a <code>Quote</code>.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yy°persist_js_state·has_pluto_hook_features§cell_id$bc66ff75-77ce-4487-ab2e-72800331839bdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$1fbdea1e-ef3a-4ace-ae76-1ccda2273087queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y|ϰpersist_js_state·has_pluto_hook_features§cell_id$1fbdea1e-ef3a-4ace-ae76-1ccda2273087depends_on_disabled_cells§runtime 2published_object_keysdepends_on_skipped_cells§errored$63ed8db8-2104-4370-8a75-e9348c50cdf8queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y|persist_js_state·has_pluto_hook_features§cell_id$63ed8db8-2104-4370-8a75-e9348c50cdf8depends_on_disabled_cells§runtime +published_object_keysdepends_on_skipped_cells§errored$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2queued¤logsrunning¦outputbodyy<div class="markdown"><h4 id="Interpolation">Interpolation</h4>
<p>Julia allows <em>interpolation</em> of literals or expressions into quoted expressions by prefixing a variable with the <code>&#36;</code> character. For example.</p>
<pre><code class="language-julia">begin
a &#61; 1;
ex5 &#61; :&#40;&#36;a &#43; b&#41;
dump&#40;ex5&#41;
end</code></pre>
<p>Try it.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yzpersist_js_state·has_pluto_hook_features§cell_id$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2depends_on_disabled_cells§runtime 
published_object_keysdepends_on_skipped_cells§errored$8863cbcc-4ff6-4714-b7d8-c39373af384equeued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yzmpersist_js_state·has_pluto_hook_features§cell_id$8863cbcc-4ff6-4714-b7d8-c39373af384edepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$9064ec91-4ddf-4f7b-890d-2e59265483a1queued¤logsrunning¦outputbodyr<div class="markdown"><h4 id="Usage">Usage</h4>
<p>Macros can be used for many tasks such as performing operations on blocks of code, e.g. timing expressions &#40;<code>@time</code>&#41;, threading <code>for</code> loops &#40;<code>@threads</code>&#41;, and converting expressions to broadcast form &#40;<code>@.</code>&#41;. Another use is to generate code. When a significant amount of repetitive boilerplate code is required, it is common to generate it programmatically to avoid redundancy.</p>
<p>Consider the following example.</p>
<pre><code class="language-julia">struct MyNumber
    x::Float64
end</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y|7persist_js_state·has_pluto_hook_features§cell_id$9064ec91-4ddf-4f7b-890d-2e59265483a1depends_on_disabled_cells§runtime jpublished_object_keysdepends_on_skipped_cells§errored$e7934544-0344-48d3-8046-c3796874e5b3queued¤logsrunning¦outputbody<div class="markdown"><p>So, there are three ways to construct an expression allowing the programmer to use whichever one is most convenient.</p>
<p>There is a second syntatic form of quoting, called a <code>quote</code> block &#40;i.e. <code>quote ... end</code>&#41;, that is commonly used for multiple expressions.</p>
<p>Try the following example.</p>
<pre><code class="language-julia">begin
ex4 &#61; quote
    x &#61; 1
    y &#61; 2
    x &#43; y
end
println&#40;typeof&#40;ex4&#41;&#41;
end</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yzmpersist_js_state·has_pluto_hook_features§cell_id$e7934544-0344-48d3-8046-c3796874e5b3depends_on_disabled_cells§runtime ypublished_object_keysdepends_on_skipped_cells§errored$2e45c794-62f0-4a1b-a346-da291e4c8469queued¤logsrunning¦outputbody<div class="markdown"><h4 id="Expression-evaluation">Expression evaluation</h4>
<p>Julia will evalution an expression in the global scope using <code>eval</code>.</p>
<pre><code class="language-julia">println&#40;eval&#40;ex1&#41;&#41;</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y{
(persist_js_state·has_pluto_hook_features§cell_id$2e45c794-62f0-4a1b-a346-da291e4c8469depends_on_disabled_cells§runtime )published_object_keysdepends_on_skipped_cells§errored$1522314b-4982-439e-ab97-933869a5f307queued¤logsrunning¦outputbody<div class="markdown"><pre><code class="language-julia">begin
x &#61; foo&#40;2&#41;
x
end</code></pre>
<div class="admonition note"><p class="admonition-title">Note</p><p>The result of the function call is the return type, not the return value.</p>
</div>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y|persist_js_state·has_pluto_hook_features§cell_id$1522314b-4982-439e-ab97-933869a5f307depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$12b97064-d8da-49cc-92aa-f5155b5c1b52queued¤logsrunning¦outputbody<div class="markdown"><p>Splatting is also possible.</p>
<pre><code class="language-julia">begin
args &#61; &#91;:x, :y, :x&#93;;
dump&#40;:&#40;f&#40;1, &#36;&#40;args...&#41;&#41;&#41;&#41;
end</code></pre>
<p>And this too.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yz١persist_js_state·has_pluto_hook_features§cell_id$12b97064-d8da-49cc-92aa-f5155b5c1b52depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$24368ee3-43e1-44c0-8293-75cc1e8f4f6cqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yzpersist_js_state·has_pluto_hook_features§cell_id$24368ee3-43e1-44c0-8293-75cc1e8f4f6cdepends_on_disabled_cells§runtime 7published_object_keysdepends_on_skipped_cells§errored$3de9644d-b66a-45b8-945d-6e000319f2b9queued¤logsrunning¦outputbody|<div class="markdown"><pre><code class="language-julia">begin
y &#61; foo&#40;&quot;bar&quot;&#41;
y
end</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y}persist_js_state·has_pluto_hook_features§cell_id$3de9644d-b66a-45b8-945d-6e000319f2b9depends_on_disabled_cells§runtime Cpublished_object_keysdepends_on_skipped_cells§errored$1751fb54-938c-4222-a41a-17ce97f800bcqueued¤logsrunning¦outputbody&<div class="markdown"><p>A slightly shorter version of the above code generator that use the <code>:</code> prefix is:</p>
<pre><code class="language-julia">for op &#61; &#40;:sin, :cos, :tan, :log, :exp&#41;
    eval&#40;:&#40;Base.&#36;op&#40;a::MyNumber&#41; &#61; MyNumber&#40;&#36;op&#40;a.x&#41;&#41;&#41;&#41;
end</code></pre>
<p>An even shorter version of the code uses the <code>@eval</code> macro.</p>
<pre><code class="language-julia">for op &#61; &#40;:sin, :cos, :tan, :log, :exp&#41;
    @eval Base.&#36;op&#40;a::MyNumber&#41; &#61; MyNumber&#40;&#36;op&#40;a.x&#41;&#41;
end</code></pre>
<p>For longer blocks of generated code, the <code>@eval</code> macro can proceed a code <code>block</code>:</p>
<pre><code class="language-julia">@eval begin
    # multiple lines
end</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y|xypersist_js_state·has_pluto_hook_features§cell_id$1751fb54-938c-4222-a41a-17ce97f800bcdepends_on_disabled_cells§runtime zpublished_object_keysdepends_on_skipped_cells§errored$78bb1e78-70ba-4f58-abb0-c0de3272eb50queued¤logsrunning¦outputbody<div class="markdown"><p>Generated functions differ from regular functions in five ways. They:</p>
<ol>
<li><p>are prefixed by <code>@generated</code>. This provides the AST with some additional information.</p>
</li>
<li><p>can only access the types of the arguments, not their values.</p>
</li>
<li><p>are nonexecuting. They return a quoted expression, not a value.</p>
</li>
<li><p>can only call previously defined functions. &#40;Otherwise, <code>MethodErrors</code> may result.&#41;</p>
</li>
<li><p>must not <em>mutate</em> or <em>observe</em> any non-constant global state. They can only read global constants, and cannot have side effects. In other words, they must be completely pure.</p>
</li>
</ol>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y}Ipersist_js_state·has_pluto_hook_features§cell_id$78bb1e78-70ba-4f58-abb0-c0de3272eb50depends_on_disabled_cells§runtime 
published_object_keysdepends_on_skipped_cells§errored$8bbe63e8-6a6e-4f96-8025-bbae25983a7equeued¤logsrunning¦outputbody٤<div class="markdown"><p>Now invoke the <code>@sayhello</code> macro.</p>
<pre><code class="language-julia">@sayhello&#40;&quot;world&quot;&#41;</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y{persist_js_state·has_pluto_hook_features§cell_id$8bbe63e8-6a6e-4f96-8025-bbae25983a7edepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$c47eb25e-ff42-47a0-9949-11228e3c0535queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yzpersist_js_state·has_pluto_hook_features§cell_id$c47eb25e-ff42-47a0-9949-11228e3c0535depends_on_disabled_cells§runtime &Wpublished_object_keysdepends_on_skipped_cells§errored$386c7942-700d-4486-bede-853a6c2ef811queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y|Xɰpersist_js_state·has_pluto_hook_features§cell_id$386c7942-700d-4486-bede-853a6c2ef811depends_on_disabled_cells§runtime )Ppublished_object_keysdepends_on_skipped_cells§errored$bc5709bd-8c44-4d58-82cc-e14eef20cfe6queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yypersist_js_state·has_pluto_hook_features§cell_id$bc5709bd-8c44-4d58-82cc-e14eef20cfe6depends_on_disabled_cells§runtime /published_object_keysdepends_on_skipped_cells§errored$c8c898a7-7ec5-4b3f-8875-5901e0ef12fcqueued¤logsrunning¦outputbody<div class="markdown"><h4 id="Basics">Basics</h4>
<p>Defining a macro is like defining a function. For example,</p>
<pre><code class="language-julia">macro sayhello&#40;name&#41;
    return :&#40; println&#40;&quot;Hello&quot;, &#36;name&#41;&#41;
end</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y{apersist_js_state·has_pluto_hook_features§cell_id$c8c898a7-7ec5-4b3f-8875-5901e0ef12fcdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y{persist_js_state·has_pluto_hook_features§cell_id$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523depends_on_disabled_cells§runtime -published_object_keysdepends_on_skipped_cells§errored$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yzpersist_js_state·has_pluto_hook_features§cell_id$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0depends_on_disabled_cells§runtime -published_object_keysdepends_on_skipped_cells§errored$2b1abe2e-fc7a-4d3a-9f65-b820eaff70eaqueued¤logsrunning¦outputbody<div class="markdown"><h3 id="The-Abstract-Syntax-Tree">The Abstract Syntax Tree</h3>
<pre><code class="language-julia">begin
str1 &#61; &quot;3 * 4 &#43; 5&quot;
ex1 &#61; Meta.parse&#40;str1&#41;
println&#40;typeof&#40;ex1&#41;&#41;
end</code></pre>
<p>Try it.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}YxȰpersist_js_state·has_pluto_hook_features§cell_id$2b1abe2e-fc7a-4d3a-9f65-b820eaff70eadepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$6bc277f1-3ab6-4e12-92fc-65e6288af2c1queued¤logsrunning¦outputbody<div class="markdown"><p>Note that the parsed expression is an <code>Expr</code> type.</p>
<pre><code class="language-julia">dump&#40;ex1&#41;</code></pre>
<p>Show or dump the abstract syntax tree &#40;AST&#41; of the expression.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yy persist_js_state·has_pluto_hook_features§cell_id$6bc277f1-3ab6-4e12-92fc-65e6288af2c1depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$f09d458f-7846-46a5-a814-b51771bf91b7queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yyjpersist_js_state·has_pluto_hook_features§cell_id$f09d458f-7846-46a5-a814-b51771bf91b7depends_on_disabled_cells§runtime %Rpublished_object_keysdepends_on_skipped_cells§errored$bcce9741-7e63-4609-9529-0e9323b8eb21queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y|*Npersist_js_state·has_pluto_hook_features§cell_id$bcce9741-7e63-4609-9529-0e9323b8eb21depends_on_disabled_cells§runtime -%published_object_keysdepends_on_skipped_cells§errored$d41b3124-0987-42d5-bd24-28a4c79cfe82queued¤logsrunning¦outputbody<div class="markdown"><h3 id="Generated-Functions">Generated Functions</h3>
<p>A special macro is <code>@generated</code>. It defines so-called <em>generated functions</em>. They have the capability to generate specialized code depending on the types of their arguments with more flexibility and/or less code than what can be done with multiple dispatch. Macros work with expressions at the AST level and cannot acces the input types. Whereas, generated functions are expanded at the time when the argument types are known, but before the function is compiled.</p>
<p>Here is an example.</p>
<pre><code class="language-julia">@generated function foo&#40;x&#41;
    Core.println&#40;x&#41;
    return :&#40;x * x&#41;
end</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y|persist_js_state·has_pluto_hook_features§cell_id$d41b3124-0987-42d5-bd24-28a4c79cfe82depends_on_disabled_cells§runtime epublished_object_keysdepends_on_skipped_cells§errored$3f9fcacd-05e6-4dd7-ba01-491750f3940dqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y{xpersist_js_state·has_pluto_hook_features§cell_id$3f9fcacd-05e6-4dd7-ba01-491750f3940ddepends_on_disabled_cells§runtime 'published_object_keysdepends_on_skipped_cells§errored$90538e89-e592-4536-99cb-7378ec320b8dqueued¤logsrunning¦outputbody<div class="markdown"><h4 id="Quoting">Quoting</h4>
<p>The second purpose of the <code>:</code> character is to create expression objects without using the explicit <code>Expr</code> constructor. This is referred to as <em>quoting</em>.</p>
<pre><code class="language-julia">begin
ex3 &#61; :&#40;3 * 4 &#43; 5&#41;
dump&#40;ex3&#41;
println&#40;ex1 &#61;&#61; ex2 &#61;&#61; ex3&#41;
end</code></pre>
<p>Try this example.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yz<persist_js_state·has_pluto_hook_features§cell_id$90538e89-e592-4536-99cb-7378ec320b8ddepends_on_disabled_cells§runtime $published_object_keysdepends_on_skipped_cells§errored$2494a756-0b40-4b6e-b79f-deb616183384queued¤logsrunning¦outputbodyٝ<div class="markdown"><p>Parentheses around the arguments are optional.</p>
<pre><code class="language-julia">@sayhello &quot;world&quot;</code></pre>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y{persist_js_state·has_pluto_hook_features§cell_id$2494a756-0b40-4b6e-b79f-deb616183384depends_on_disabled_cells§runtime dbpublished_object_keysdepends_on_skipped_cells§errored$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38queued¤logsrunning¦outputbody<div class="markdown"><p>The <code>Symbol</code> constructor takes a variable number of arguments and concatenates them together to create a <code>Symbol</code> string.</p>
<pre><code class="language-julia">Symbol&#40;&quot;func&quot;, 10&#41;</code></pre>
<p>Try this.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yypersist_js_state·has_pluto_hook_features§cell_id$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38depends_on_disabled_cells§runtime ࿵published_object_keysdepends_on_skipped_cells§errored$06f3afb2-869a-4e2b-af58-4366b27d0a65queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}YyGEpersist_js_state·has_pluto_hook_features§cell_id$06f3afb2-869a-4e2b-af58-4366b27d0a65depends_on_disabled_cells§runtime &ٵpublished_object_keysdepends_on_skipped_cells§errored$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01queued¤logsrunning¦outputbody8<div class="markdown"><h3 id="Macros">Macros</h3>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y{6Ppersist_js_state·has_pluto_hook_features§cell_id$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01depends_on_disabled_cells§runtime µpublished_object_keysdepends_on_skipped_cells§errored$f7fffc76-3607-4d90-ba75-d521366f7fb1queued¤logsrunning¦outputbody,<div class="markdown"><div class="admonition note"><p class="admonition-title">Note</p><p>When using the parenthesized form, there should be no space between the macro name and the parentheses. Otherwise the argument list will be interpreted as a single argument containing a tuple.</p>
</div>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y{persist_js_state·has_pluto_hook_features§cell_id$f7fffc76-3607-4d90-ba75-d521366f7fb1depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$41a9007c-e9a1-4228-be45-55becfffa944queued¤logsrunning¦outputbodyG<div class="markdown"><p>The <code>Expr</code> type has two fields, a <code>head</code> and an <code>args</code>. The <code>head</code> declares the item is a function <code>call</code> of type <code>Symbol</code> and the <code>args</code> is an <code>Array</code> of function arguments, namely the <code>&#43;</code> operator of type <code>Symbol</code> and the two values to be added. The first value is another <code>Expr</code> type and the second is a 64-bit integer. The second nested <code>Expr</code> is also composed of a <code>Symbol</code> call. Its arguments are the multiplication <code>*</code> operation of type <code>Symbol</code> and two 64-bit integers. Note that the multiplication operation is nested in the addition operation, since multiplication has precedence over addition.</p>
<p>Note that the expression <code>ex1</code> can be written directly in AST syntax.</p>
<pre><code class="language-julia">begin
ex2 &#61; Expr&#40;:call, :&#43;, Expr&#40;:call, :*, 3, 4&#41;, 5&#41;
dump&#40;ex2&#41;
println&#40;ex1 &#61;&#61; ex2&#41;
end</code></pre>
<p>Try it.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yy3persist_js_state·has_pluto_hook_features§cell_id$41a9007c-e9a1-4228-be45-55becfffa944depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$a278e94d-1f4c-422c-9ac7-c950750a6ef9queued¤logsrunning¦outputbody<div class="markdown"><p>We want to add a various methods to it. This can be done programmatically using a loop.</p>
<pre><code class="language-julia">begin
println&#40;length&#40;methods&#40;sin&#41;&#41;&#41;
for op &#61; &#40;:sin, :tan, :log, :exp&#41;
    eval&#40;quote
        Base.&#36;op&#40;a::MyNumber&#41; &#61; MyNumber&#40;&#36;op&#40;a.x&#41;&#41;
    end&#41;
end
println&#40;length&#40;methods&#40;sin&#41;&#41;&#41;
end</code></pre>
<p>Try this example.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Y|Epersist_js_state·has_pluto_hook_features§cell_id$a278e94d-1f4c-422c-9ac7-c950750a6ef9depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$9c45b534-cd6c-4b3d-9ff4-d035347c87e5queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Yx㗰persist_js_state·has_pluto_hook_features§cell_id$9c45b534-cd6c-4b3d-9ff4-d035347c87e5depends_on_disabled_cells§runtime (#published_object_keysdepends_on_skipped_cells§errored$07c96535-102c-4581-bba7-50f37bd766f9queued¤logsrunning¦outputbodyJ<div class="markdown"><p>Unlike Matlab, Python, and R, Julia has macros. They are a very powerful programming construct. Macros change existing source code or generate entirely new code. In essence, they simplify programming by automating mundane coding tasks.</p>
<p>Preprocessor &quot;macro&quot; systems, like that of C/C&#43;&#43;, work at the source code level by perform textual manipulation and substitution before any parsing or interpretation is done. Whereas, Julia macros work at the level of the abstract syntax tree after parsing, but before compilation is done.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yxpersist_js_state·has_pluto_hook_features§cell_id$07c96535-102c-4581-bba7-50f37bd766f9depends_on_disabled_cells§runtime õpublished_object_keysdepends_on_skipped_cells§errored$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1queued¤logsrunning¦outputbody<div class="markdown"><p>In the context of expressions, symbols are used to indicate access to variables. When an expression is evaluated, a symbol is replaced with the value bound to that symbol in the appropriate scope.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yz.persist_js_state·has_pluto_hook_features§cell_id$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$53265062-78c7-434a-8d96-089cdd758bf0queued¤logsrunning¦outputbodyM<script>
	
// Load the library for consistent smooth scrolling
const {default: scrollIntoView} = await import("data:text/javascript;base64,dmFyIFE9ZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiYxPT09ZS5ub2RlVHlwZSxVPShlLHQpPT4oIXR8fCJoaWRkZW4iIT09ZSkmJiJ2aXNpYmxlIiE9PWUmJiJjbGlwIiE9PWUsQT0oZSx0KT0+e2lmKGUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHxlLmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpe2xldCBsPWdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtyZXR1cm4gVShsLm92ZXJmbG93WSx0KXx8VShsLm92ZXJmbG93WCx0KXx8KGU9PntsZXQgdD0oZT0+e2lmKCFlLm93bmVyRG9jdW1lbnR8fCFlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0pKGUpO3JldHVybiEhdCYmKHQuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHx0LmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpfSkoZSl9cmV0dXJuITF9LFg9KGUsdCxsLG8sbixyLGkscyk9PnI8ZSYmaT50fHxyPmUmJmk8dD8wOnI8PWUmJnM8PWx8fGk+PXQmJnM+PWw/ci1lLW86aT50JiZzPGx8fHI8ZSYmcz5sP2ktdCtuOjAsJD1lPT5lLnBhcmVudEVsZW1lbnQ/PyhlLmdldFJvb3ROb2RlKCkuaG9zdHx8bnVsbCksdHQ9KGUsdCk9Pnt2YXIgbCxvLG4scjtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybltdO2xldHtzY3JvbGxNb2RlOmksYmxvY2s6cyxpbmxpbmU6YSxib3VuZGFyeTpoLHNraXBPdmVyZmxvd0hpZGRlbkVsZW1lbnRzOnV9PXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmU9PmUhPT1oO2lmKCFRKGUpKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCB0YXJnZXQiKTtsZXQgdj1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbT1bXSx3PWU7Zm9yKDtRKHcpJiZnKHcpOyl7aWYoKHc9JCh3KSk9PT12KXttLnB1c2godyk7YnJlYWt9bnVsbCE9dyYmdz09PWRvY3VtZW50LmJvZHkmJkEodykmJiFBKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl8fG51bGwhPXcmJkEodyx1KSYmbS5wdXNoKHcpfWxldCBXPW51bGwhPShvPW51bGw9PShsPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk/dm9pZCAwOmwud2lkdGgpP286aW5uZXJXaWR0aCxIPW51bGwhPShyPW51bGw9PShuPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk/dm9pZCAwOm4uaGVpZ2h0KT9yOmlubmVySGVpZ2h0LHtzY3JvbGxYOl8sc2Nyb2xsWTp4fT13aW5kb3cse2hlaWdodDpFLHdpZHRoOlQsdG9wOk4scmlnaHQ6TCxib3R0b206WSxsZWZ0OkN9PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUj0ic3RhcnQiPT09c3x8Im5lYXJlc3QiPT09cz9OOiJlbmQiPT09cz9ZOk4rRS8yLFY9ImNlbnRlciI9PT1hP0MrVC8yOiJlbmQiPT09YT9MOkMsQj1bXTtmb3IobGV0IEQ9MDtEPG0ubGVuZ3RoO0QrKyl7bGV0IE89bVtEXSx7aGVpZ2h0Omosd2lkdGg6SSx0b3A6UyxyaWdodDpxLGJvdHRvbTp6LGxlZnQ6Rn09Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigiaWYtbmVlZGVkIj09PWkmJk4+PTAmJkM+PTAmJlk8PUgmJkw8PVcmJk4+PVMmJlk8PXomJkM+PUYmJkw8PXEpYnJlYWs7bGV0IEc9Z2V0Q29tcHV0ZWRTdHlsZShPKSxKPXBhcnNlSW50KEcuYm9yZGVyTGVmdFdpZHRoLDEwKSxLPXBhcnNlSW50KEcuYm9yZGVyVG9wV2lkdGgsMTApLFA9cGFyc2VJbnQoRy5ib3JkZXJSaWdodFdpZHRoLDEwKSxaPXBhcnNlSW50KEcuYm9yZGVyQm90dG9tV2lkdGgsMTApLGVlPTAsZXQ9MCxlbD0ib2Zmc2V0V2lkdGgiaW4gTz9PLm9mZnNldFdpZHRoLU8uY2xpZW50V2lkdGgtSi1QOjAsZW89Im9mZnNldEhlaWdodCJpbiBPP08ub2Zmc2V0SGVpZ2h0LU8uY2xpZW50SGVpZ2h0LUstWjowLGVuPSJvZmZzZXRXaWR0aCJpbiBPPzA9PT1PLm9mZnNldFdpZHRoPzA6SS9PLm9mZnNldFdpZHRoOjAsZXI9Im9mZnNldEhlaWdodCJpbiBPPzA9PT1PLm9mZnNldEhlaWdodD8wOmovTy5vZmZzZXRIZWlnaHQ6MDtpZih2PT09TyllZT0ic3RhcnQiPT09cz9SOiJlbmQiPT09cz9SLUg6Im5lYXJlc3QiPT09cz9YKHgseCtILEgsSyxaLHgrUix4K1IrRSxFKTpSLUgvMixldD0ic3RhcnQiPT09YT9WOiJjZW50ZXIiPT09YT9WLVcvMjoiZW5kIj09PWE/Vi1XOlgoXyxfK1csVyxKLFAsXytWLF8rVitULFQpLGVlPU1hdGgubWF4KDAsZWUreCksZXQ9TWF0aC5tYXgoMCxldCtfKTtlbHNle2VlPSJzdGFydCI9PT1zP1ItUy1LOiJlbmQiPT09cz9SLXorWitlbzoibmVhcmVzdCI9PT1zP1goUyx6LGosSyxaK2VvLFIsUitFLEUpOlItKFMrai8yKStlby8yLGV0PSJzdGFydCI9PT1hP1YtRi1KOiJjZW50ZXIiPT09YT9WLShGK0kvMikrZWwvMjoiZW5kIj09PWE/Vi1xK1ArZWw6WChGLHEsSSxKLFArZWwsVixWK1QsVCk7bGV0e3Njcm9sbExlZnQ6ZWksc2Nyb2xsVG9wOmVkfT1PO2VlPU1hdGgubWF4KDAsTWF0aC5taW4oZWQrZWUvZXIsTy5zY3JvbGxIZWlnaHQtai9lcitlbykpLGV0PU1hdGgubWF4KDAsTWF0aC5taW4oZWkrZXQvZW4sTy5zY3JvbGxXaWR0aC1JL2VuK2VsKSksUis9ZWQtZWUsVis9ZWktZXR9Qi5wdXNoKHtlbDpPLHRvcDplZSxsZWZ0OmV0fSl9cmV0dXJuIEJ9LGY9ZT0+e3ZhciB0O3JldHVybiExPT09ZT97YmxvY2s6ImVuZCIsaW5saW5lOiJuZWFyZXN0In06KHQ9ZSk9PT1PYmplY3QodCkmJjAhPT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/ZTp7YmxvY2s6InN0YXJ0IixpbmxpbmU6Im5lYXJlc3QifX07ZnVuY3Rpb24gYyhlLHQpe3ZhciBsO2lmKCFlLmlzQ29ubmVjdGVkfHwhKGU9PntsZXQgdD1lO2Zvcig7dCYmdC5wYXJlbnROb2RlOyl7aWYodC5wYXJlbnROb2RlPT09ZG9jdW1lbnQpcmV0dXJuITA7dD10LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P3QucGFyZW50Tm9kZS5ob3N0OnQucGFyZW50Tm9kZX1yZXR1cm4hMX0pKGUpKXJldHVybjtpZigib2JqZWN0Ij09dHlwZW9mKGw9dCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmJlaGF2aW9yKXJldHVybiB0LmJlaGF2aW9yKHR0KGUsdCkpO2xldCBvPSJib29sZWFuIj09dHlwZW9mIHR8fG51bGw9PXQ/dm9pZCAwOnQuYmVoYXZpb3I7Zm9yKGxldHtlbDpuLHRvcDpyLGxlZnQ6aX1vZiB0dChlLGYodCkpKW4uc2Nyb2xsKHt0b3A6cixsZWZ0OmksYmVoYXZpb3I6b30pfXZhciBkLHA9KCk9PihkfHwoZD0icGVyZm9ybWFuY2UiaW4gd2luZG93P3BlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKTpEYXRlLm5vdyksZCgpKTtmdW5jdGlvbiBiKGUpe2xldCB0PU1hdGgubWluKChwKCktZS5zdGFydFRpbWUpL2UuZHVyYXRpb24sMSksbD1lLmVhc2UodCksbz1lLnN0YXJ0WCsoZS54LWUuc3RhcnRYKSpsLG49ZS5zdGFydFkrKGUueS1lLnN0YXJ0WSkqbDtlLm1ldGhvZChvLG4sdCxsKSxvIT09ZS54fHxuIT09ZS55P3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+YihlKSk6ZS5jYigpfWZ1bmN0aW9uIHkoZSx0LGwpe2xldCBvPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTo2MDAsbj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06ZT0+MSstLWUqZSplKmUqZSxyPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwLGk9YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDAscz1lLnNjcm9sbExlZnQsYT1lLnNjcm9sbFRvcDtiKHtzY3JvbGxhYmxlOmUsbWV0aG9kKHQsbCxvLG4pe2xldCByPU1hdGguY2VpbCh0KSxzPU1hdGguY2VpbChsKTtlLnNjcm9sbExlZnQ9cixlLnNjcm9sbFRvcD1zLGk/Lih7dGFyZ2V0OmUsZWxhcHNlZDpvLHZhbHVlOm4sbGVmdDpyLHRvcDpzfSl9LHN0YXJ0VGltZTpwKCksc3RhcnRYOnMsc3RhcnRZOmEseDp0LHk6bCxkdXJhdGlvbjpvLGVhc2U6bixjYjpyfSl9dmFyIE09ZT0+ZSYmIWUuYmVoYXZpb3J8fCJzbW9vdGgiPT09ZS5iZWhhdmlvcixrPWZ1bmN0aW9uKGUsdCl7bGV0IGw9dHx8e307cmV0dXJuIE0obCk/YyhlLHtibG9jazpsLmJsb2NrLGlubGluZTpsLmlubGluZSxzY3JvbGxNb2RlOmwuc2Nyb2xsTW9kZSxib3VuZGFyeTpsLmJvdW5kYXJ5LHNraXBPdmVyZmxvd0hpZGRlbkVsZW1lbnRzOmwuc2tpcE92ZXJmbG93SGlkZGVuRWxlbWVudHMsYmVoYXZpb3I6ZT0+UHJvbWlzZS5hbGwoZS5yZWR1Y2UoKGUsdCk9PntsZXR7ZWw6byxsZWZ0Om4sdG9wOnJ9PXQsaT1vLnNjcm9sbExlZnQscz1vLnNjcm9sbFRvcDtyZXR1cm4gaT09PW4mJnM9PT1yP2U6Wy4uLmUsbmV3IFByb21pc2UoZT0+eShvLG4scixsLmR1cmF0aW9uLGwuZWFzZSwoKT0+ZSh7ZWw6byxsZWZ0OltpLG5dLHRvcDpbcyxyXX0pLGwub25TY3JvbGxDaGFuZ2UpKV19LFtdKSl9KTpQcm9taXNlLnJlc29sdmUoYyhlLHQpKX07ZXhwb3J0e2sgYXMgZGVmYXVsdH07")

const indent = true
const aside = true
const title_text = "Table of Contents"
const include_definitions = false


const tocNode = html`<nav class="plutoui-toc">
	<header>
	 <span class="toc-toggle open-toc"></span>
	 <span class="toc-toggle closed-toc"></span>
	 ${title_text}
	</header>
	<section></section>
</nav>`

tocNode.classList.toggle("aside", aside)
tocNode.classList.toggle("indent", indent)


const getParentCell = el => el.closest("pluto-cell")

const getHeaders = () => {
	const depth = Math.max(1, Math.min(6, 3)) // should be in range 1:6
	const range = Array.from({length: depth}, (x, i) => i+1) // [1, ..., depth]
	
	const selector = [
		...(include_definitions ? [
			`pluto-notebook pluto-cell .pluto-docs-binding`, 
			`pluto-notebook pluto-cell assignee:not(:empty)`, 
		] : []),
		...range.map(i => `pluto-notebook pluto-cell h${i}`)
	].join(",")
	return Array.from(document.querySelectorAll(selector)).filter(el => 
		// exclude headers inside of a pluto-docs-binding block
		!(el.nodeName.startsWith("H") && el.closest(".pluto-docs-binding"))
	)
}


const document_click_handler = (event) => {
	const path = (event.path || event.composedPath())
	const toc = path.find(elem => elem?.classList?.contains?.("toc-toggle"))
	if (toc) {
		event.stopImmediatePropagation()
		toc.closest(".plutoui-toc").classList.toggle("hide")
	}
}

document.addEventListener("click", document_click_handler)


const header_to_index_entry_map = new Map()
const currently_highlighted_set = new Set()

const last_toc_element_click_time = { current: 0 }

const intersection_callback = (ixs) => {
	let on_top = ixs.filter(ix => ix.intersectionRatio > 0 && ix.intersectionRect.y < ix.rootBounds.height / 2)
	if(on_top.length > 0){
		currently_highlighted_set.forEach(a => a.classList.remove("in-view"))
		currently_highlighted_set.clear()
		on_top.slice(0,1).forEach(i => {
			let div = header_to_index_entry_map.get(i.target)
			div.classList.add("in-view")
			currently_highlighted_set.add(div)
			
			/// scroll into view
			/*
			const toc_height = tocNode.offsetHeight
			const div_pos = div.offsetTop
			const div_height = div.offsetHeight
			const current_scroll = tocNode.scrollTop
			const header_height = tocNode.querySelector("header").offsetHeight
			
			const scroll_to_top = div_pos - header_height
			const scroll_to_bottom = div_pos + div_height - toc_height
			
			// if we set a scrollTop, then the browser will stop any currently ongoing smoothscroll animation. So let's only do this if you are not currently in a smoothscroll.
			if(Date.now() - last_toc_element_click_time.current >= 2000)
				if(current_scroll < scroll_to_bottom){
					tocNode.scrollTop = scroll_to_bottom
				} else if(current_scroll > scroll_to_top){
					tocNode.scrollTop = scroll_to_top
				}
			*/
		})
	}
}
let intersection_observer_1 = new IntersectionObserver(intersection_callback, {
	root: null, // i.e. the viewport
  	threshold: 1,
	rootMargin: "-15px", // slightly smaller than the viewport
	// delay: 100,
})
let intersection_observer_2 = new IntersectionObserver(intersection_callback, {
	root: null, // i.e. the viewport
  	threshold: 1,
	rootMargin: "15px", // slightly larger than the viewport
	// delay: 100,
})

const render = (elements) => {
	header_to_index_entry_map.clear()
	currently_highlighted_set.clear()
	intersection_observer_1.disconnect()
	intersection_observer_2.disconnect()

		let last_level = `H1`
	return html`${elements.map(h => {
	const parent_cell = getParentCell(h)

		let [className, title_el] = h.matches(`.pluto-docs-binding`) ? ["pluto-docs-binding-el", h.firstElementChild] : [h.nodeName, h]

	const a = html`<a 
		class="${className}" 
		title="${title_el.innerText}"
		href="#${parent_cell.id}"
	>${title_el.innerHTML}</a>`
	/* a.onmouseover=()=>{
		parent_cell.firstElementChild.classList.add(
			'highlight-pluto-cell-shoulder'
		)
	}
	a.onmouseout=() => {
		parent_cell.firstElementChild.classList.remove(
			'highlight-pluto-cell-shoulder'
		)
	} */
		
		
	a.onclick=(e) => {
		e.preventDefault();
		last_toc_element_click_time.current = Date.now()
		scrollIntoView(h, {
			behavior: 'smooth', 
			block: 'start',
		}).then(() => 
			// sometimes it doesn't scroll to the right place
			// solution: try a second time!
			scrollIntoView(h, {
				behavior: 'smooth', 
				block: 'start',
			})
	   )
	}

	const row =  html`<div class="toc-row ${className} after-${last_level}">${a}</div>`
		intersection_observer_1.observe(title_el)
		intersection_observer_2.observe(title_el)
		header_to_index_entry_map.set(title_el, row)

	if(className.startsWith("H"))
		last_level = className
		
	return row
})}`
}

const invalidated = { current: false }

const updateCallback = () => {
	if (!invalidated.current) {
		tocNode.querySelector("section").replaceWith(
			html`<section>${render(getHeaders())}</section>`
		)
	}
}
updateCallback()
setTimeout(updateCallback, 100)
setTimeout(updateCallback, 1000)
setTimeout(updateCallback, 5000)

const notebook = document.querySelector("pluto-notebook")


// We have a mutationobserver for each cell:
const mut_observers = {
	current: [],
}

const createCellObservers = () => {
	mut_observers.current.forEach((o) => o.disconnect())
	mut_observers.current = Array.from(notebook.querySelectorAll("pluto-cell")).map(el => {
		const o = new MutationObserver(updateCallback)
		o.observe(el, {attributeFilter: ["class"]})
		return o
	})
}
createCellObservers()

// And one for the notebook's child list, which updates our cell observers:
const notebookObserver = new MutationObserver(() => {
	updateCallback()
	createCellObservers()
})
notebookObserver.observe(notebook, {childList: true})

// And finally, an observer for the document.body classList, to make sure that the toc also works when it is loaded during notebook initialization
const bodyClassObserver = new MutationObserver(updateCallback)
bodyClassObserver.observe(document.body, {attributeFilter: ["class"]})

// Hide/show the ToC when the screen gets small
let match_listener = () => 
	tocNode.classList.toggle("hide", (tocNode.closest("pluto-editor") ?? document.body).scrollWidth < 1000)
for(let s of [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000]) {
	let m = matchMedia(`(max-width: ${s}px)`)
	m.addListener(match_listener)
	invalidation.then(() => m.removeListener(match_listener))
}
match_listener()

invalidation.then(() => {
	invalidated.current = true
	intersection_observer_1.disconnect()
	intersection_observer_2.disconnect()
	notebookObserver.disconnect()
	bodyClassObserver.disconnect()
	mut_observers.current.forEach((o) => o.disconnect())
	document.removeEventListener("click", document_click_handler)
})

return tocNode
</script>
<style>
@media not print {

.plutoui-toc {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Cantarell, "Apple Color Emoji",
		"Segoe UI Emoji", "Segoe UI Symbol", system-ui, sans-serif;
	--main-bg-color: #fafafa;
	--pluto-output-color: hsl(0, 0%, 36%);
	--pluto-output-h-color: hsl(0, 0%, 21%);
	--sidebar-li-active-bg: rgb(235, 235, 235);
	--icon-filter: unset;
}

@media (prefers-color-scheme: dark) {
	.plutoui-toc {
		--main-bg-color: #303030;
		--pluto-output-color: hsl(0, 0%, 90%);
		--pluto-output-h-color: hsl(0, 0%, 97%);
		--sidebar-li-active-bg: rgb(82, 82, 82);
		--icon-filter: invert(1);
	}
}

.plutoui-toc.aside {
	color: var(--pluto-output-color);
	position: fixed;
	right: 1rem;
	top: 5rem;
	width: min(80vw, 300px);
	padding: 0.5rem;
	padding-top: 0em;
	/* border: 3px solid rgba(0, 0, 0, 0.15); */
	border-radius: 10px;
	/* box-shadow: 0 0 11px 0px #00000010; */
	max-height: calc(100vh - 5rem - 90px);
	overflow: auto;
	z-index: 40;
	background-color: var(--main-bg-color);
	transition: transform 300ms cubic-bezier(0.18, 0.89, 0.45, 1.12);
}

.plutoui-toc.aside.hide {
	transform: translateX(calc(100% - 28px));
}
.plutoui-toc.aside.hide section {
	display: none;
}
.plutoui-toc.aside.hide header {
	margin-bottom: 0em;
	padding-bottom: 0em;
	border-bottom: none;
}
}  /* End of Media print query */
.plutoui-toc.aside.hide .open-toc,
.plutoui-toc.aside:not(.hide) .closed-toc,
.plutoui-toc:not(.aside) .closed-toc {
	display: none;
}

@media (prefers-reduced-motion) {
  .plutoui-toc.aside {
	transition-duration: 0s;
  }
}

.toc-toggle {
	cursor: pointer;
    padding: 1em;
    margin: -1em;
    margin-right: -0.7em;
    line-height: 1em;
    display: flex;
}

.toc-toggle::before {
    content: "";
    display: inline-block;
    height: 1em;
    width: 1em;
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/list-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LW88L3RpdGxlPjxsaW5lIHgxPSIxNjAiIHkxPSIxNDQiIHgyPSI0NDgiIHkyPSIxNDQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDozMnB4Ii8+PGxpbmUgeDE9IjE2MCIgeTE9IjI1NiIgeDI9IjQ0OCIgeTI9IjI1NiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjMycHgiLz48bGluZSB4MT0iMTYwIiB5MT0iMzY4IiB4Mj0iNDQ4IiB5Mj0iMzY4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MzJweCIvPjxjaXJjbGUgY3g9IjgwIiBjeT0iMTQ0IiByPSIxNiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjMycHgiLz48Y2lyY2xlIGN4PSI4MCIgY3k9IjI1NiIgcj0iMTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDozMnB4Ii8+PGNpcmNsZSBjeD0iODAiIGN5PSIzNjgiIHI9IjE2IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MzJweCIvPjwvc3ZnPg==");
    background-size: 1em;
	filter: var(--icon-filter);
}

.aside .toc-toggle.open-toc:hover::before {
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/arrow-forward-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LWE8L3RpdGxlPjxwb2x5bGluZSBwb2ludHM9IjI2OCAxMTIgNDEyIDI1NiAyNjggNDAwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NDhweCIvPjxsaW5lIHgxPSIzOTIiIHkxPSIyNTYiIHgyPSIxMDAiIHkyPSIyNTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0OHB4Ii8+PC9zdmc+");
}
.aside .toc-toggle.closed-toc:hover::before {
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/arrow-back-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LWE8L3RpdGxlPjxwb2x5bGluZSBwb2ludHM9IjI0NCA0MDAgMTAwIDI1NiAyNDQgMTEyIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NDhweCIvPjxsaW5lIHgxPSIxMjAiIHkxPSIyNTYiIHgyPSI0MTIiIHkyPSIyNTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0OHB4Ii8+PC9zdmc+");
}



.plutoui-toc header {
	display: flex;
	align-items: center;
	gap: .3em;
	font-size: 1.5em;
	/* margin-top: -0.1em; */
	margin-bottom: 0.4em;
	padding: 0.5rem;
	margin-left: 0;
	margin-right: 0;
	font-weight: bold;
	/* border-bottom: 2px solid rgba(0, 0, 0, 0.15); */
	position: sticky;
	top: 0px;
	background: var(--main-bg-color);
	z-index: 41;
}
.plutoui-toc.aside header {
	padding-left: 0;
	padding-right: 0;
}

.plutoui-toc section .toc-row {
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	padding: .1em;
	border-radius: .2em;
}

.plutoui-toc section .toc-row.H1 {
	margin-top: 1em;
}


.plutoui-toc.aside section .toc-row.in-view {
	background: var(--sidebar-li-active-bg);
}


	
.highlight-pluto-cell-shoulder {
	background: rgba(0, 0, 0, 0.05);
	background-clip: padding-box;
}

.plutoui-toc section a {
	text-decoration: none;
	font-weight: normal;
	color: var(--pluto-output-color);
}
.plutoui-toc section a:hover {
	color: var(--pluto-output-h-color);
}

.plutoui-toc.indent section a.H1 {
	font-weight: 700;
	line-height: 1em;
}

.plutoui-toc.indent section .after-H2 a { padding-left: 10px; }
.plutoui-toc.indent section .after-H3 a { padding-left: 20px; }
.plutoui-toc.indent section .after-H4 a { padding-left: 30px; }
.plutoui-toc.indent section .after-H5 a { padding-left: 40px; }
.plutoui-toc.indent section .after-H6 a { padding-left: 50px; }

.plutoui-toc.indent section a.H1 { padding-left: 0px; }
.plutoui-toc.indent section a.H2 { padding-left: 10px; }
.plutoui-toc.indent section a.H3 { padding-left: 20px; }
.plutoui-toc.indent section a.H4 { padding-left: 30px; }
.plutoui-toc.indent section a.H5 { padding-left: 40px; }
.plutoui-toc.indent section a.H6 { padding-left: 50px; }


.plutoui-toc.indent section a.pluto-docs-binding-el,
.plutoui-toc.indent section a.ASSIGNEE
	{
	font-family: JuliaMono, monospace;
	font-size: .8em;
	/* background: black; */
	font-weight: 700;
    font-style: italic;
	color: var(--cm-var-color); /* this is stealing a variable from Pluto, but it's fine if that doesnt work */
}
.plutoui-toc.indent section a.pluto-docs-binding-el::before,
.plutoui-toc.indent section a.ASSIGNEE::before
	{
	content: "> ";
	opacity: .3;
}
</style>
mimetext/htmlrootassigneelast_run_timestampA}Yp@Spersist_js_state·has_pluto_hook_features§cell_id$53265062-78c7-434a-8d96-089cdd758bf0depends_on_disabled_cells§runtime-published_object_keysdepends_on_skipped_cells§errored$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3dqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y{#persist_js_state·has_pluto_hook_features§cell_id$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3ddepends_on_disabled_cells§runtime .Gpublished_object_keysdepends_on_skipped_cells§errored$f1ba0108-fbb7-4128-98f7-89c4f1e25790queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}Y{uްpersist_js_state·has_pluto_hook_features§cell_id$f1ba0108-fbb7-4128-98f7-89c4f1e25790depends_on_disabled_cells§runtime 1published_object_keysdepends_on_skipped_cells§errored$fb032b39-250b-486d-b0b7-0d21c8556562queued¤logsrunning¦outputbody<div class="markdown"><div class="admonition note"><p class="admonition-title">Note</p><p>If you prefer writing code as an AST, you can do so in Julia.</p>
<p>However, you may not be popular with other coders.</p>
</div>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yyfpersist_js_state·has_pluto_hook_features§cell_id$fb032b39-250b-486d-b0b7-0d21c8556562depends_on_disabled_cells§runtime Hڵpublished_object_keysdepends_on_skipped_cells§errored$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8queued¤logsrunning¦outputbodyD<div class="markdown"><h2 id="Using-Macros">Using Macros</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yx<persist_js_state·has_pluto_hook_features§cell_id$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$3f2aef09-55c0-40c3-a50d-7081e66c60edqueued¤logsrunning¦outputbodyT<div class="markdown"><h4 id="Symbols">Symbols</h4>
<p>A <code>Symbol</code> is an interned string used as a building-block of an expression.</p>
<pre><code class="language-julia">begin
sym &#61; :foo
println&#40;typeof&#40;sym&#41;&#41;
println&#40;sym &#61;&#61; Symbol&#40;&quot;foo&quot;&#41;&#41;
end</code></pre>
<p>Try it.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA}Yyİpersist_js_state·has_pluto_hook_features§cell_id$3f2aef09-55c0-40c3-a50d-7081e66c60eddepends_on_disabled_cells§runtime zjpublished_object_keysdepends_on_skipped_cells§errored$611e0640-dc39-4846-89c9-172bc001e994queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}YzP3persist_js_state·has_pluto_hook_features§cell_id$611e0640-dc39-4846-89c9-172bc001e994depends_on_disabled_cells§runtime 'published_object_keysdepends_on_skipped_cells§errored±cell_dependencies .$28487c59-7df4-41b9-859a-79438b1d3b06precedence_heuristic	cell_id$28487c59-7df4-41b9-859a-79438b1d3b06downstream_cells_mapupstream_cells_map$bc66ff75-77ce-4487-ab2e-72800331839bprecedence_heuristic	cell_id$bc66ff75-77ce-4487-ab2e-72800331839bdownstream_cells_mapupstream_cells_map@md_strgetindex$1fbdea1e-ef3a-4ace-ae76-1ccda2273087precedence_heuristic	cell_id$1fbdea1e-ef3a-4ace-ae76-1ccda2273087downstream_cells_mapupstream_cells_map$63ed8db8-2104-4370-8a75-e9348c50cdf8precedence_heuristic	cell_id$63ed8db8-2104-4370-8a75-e9348c50cdf8downstream_cells_mapupstream_cells_map$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2precedence_heuristic	cell_id$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2downstream_cells_mapupstream_cells_map@md_strgetindex$8863cbcc-4ff6-4714-b7d8-c39373af384eprecedence_heuristic	cell_id$8863cbcc-4ff6-4714-b7d8-c39373af384edownstream_cells_mapupstream_cells_map$9064ec91-4ddf-4f7b-890d-2e59265483a1precedence_heuristic	cell_id$9064ec91-4ddf-4f7b-890d-2e59265483a1downstream_cells_mapupstream_cells_map@md_strgetindex$e7934544-0344-48d3-8046-c3796874e5b3precedence_heuristic	cell_id$e7934544-0344-48d3-8046-c3796874e5b3downstream_cells_mapupstream_cells_map@md_strgetindex$2e45c794-62f0-4a1b-a346-da291e4c8469precedence_heuristic	cell_id$2e45c794-62f0-4a1b-a346-da291e4c8469downstream_cells_mapupstream_cells_map@md_strgetindex$1522314b-4982-439e-ab97-933869a5f307precedence_heuristic	cell_id$1522314b-4982-439e-ab97-933869a5f307downstream_cells_mapupstream_cells_map@md_strgetindex$12b97064-d8da-49cc-92aa-f5155b5c1b52precedence_heuristic	cell_id$12b97064-d8da-49cc-92aa-f5155b5c1b52downstream_cells_mapupstream_cells_map@md_strgetindex$24368ee3-43e1-44c0-8293-75cc1e8f4f6cprecedence_heuristic	cell_id$24368ee3-43e1-44c0-8293-75cc1e8f4f6cdownstream_cells_mapupstream_cells_map$3de9644d-b66a-45b8-945d-6e000319f2b9precedence_heuristic	cell_id$3de9644d-b66a-45b8-945d-6e000319f2b9downstream_cells_mapupstream_cells_map@md_strgetindex$1751fb54-938c-4222-a41a-17ce97f800bcprecedence_heuristic	cell_id$1751fb54-938c-4222-a41a-17ce97f800bcdownstream_cells_mapupstream_cells_map@md_strgetindex$78bb1e78-70ba-4f58-abb0-c0de3272eb50precedence_heuristic	cell_id$78bb1e78-70ba-4f58-abb0-c0de3272eb50downstream_cells_mapupstream_cells_map@md_strgetindex$8bbe63e8-6a6e-4f96-8025-bbae25983a7eprecedence_heuristic	cell_id$8bbe63e8-6a6e-4f96-8025-bbae25983a7edownstream_cells_mapupstream_cells_map@md_strgetindex$c47eb25e-ff42-47a0-9949-11228e3c0535precedence_heuristic	cell_id$c47eb25e-ff42-47a0-9949-11228e3c0535downstream_cells_mapupstream_cells_map$386c7942-700d-4486-bede-853a6c2ef811precedence_heuristic	cell_id$386c7942-700d-4486-bede-853a6c2ef811downstream_cells_mapupstream_cells_map$bc5709bd-8c44-4d58-82cc-e14eef20cfe6precedence_heuristic	cell_id$bc5709bd-8c44-4d58-82cc-e14eef20cfe6downstream_cells_mapupstream_cells_map$c8c898a7-7ec5-4b3f-8875-5901e0ef12fcprecedence_heuristic	cell_id$c8c898a7-7ec5-4b3f-8875-5901e0ef12fcdownstream_cells_mapupstream_cells_map@md_strgetindex$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523precedence_heuristic	cell_id$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523downstream_cells_mapupstream_cells_map$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0precedence_heuristic	cell_id$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0downstream_cells_mapupstream_cells_map$2b1abe2e-fc7a-4d3a-9f65-b820eaff70eaprecedence_heuristic	cell_id$2b1abe2e-fc7a-4d3a-9f65-b820eaff70eadownstream_cells_mapupstream_cells_map@md_strgetindex$6bc277f1-3ab6-4e12-92fc-65e6288af2c1precedence_heuristic	cell_id$6bc277f1-3ab6-4e12-92fc-65e6288af2c1downstream_cells_mapupstream_cells_map@md_strgetindex$f09d458f-7846-46a5-a814-b51771bf91b7precedence_heuristic	cell_id$f09d458f-7846-46a5-a814-b51771bf91b7downstream_cells_mapupstream_cells_map$bcce9741-7e63-4609-9529-0e9323b8eb21precedence_heuristic	cell_id$bcce9741-7e63-4609-9529-0e9323b8eb21downstream_cells_mapupstream_cells_map$d41b3124-0987-42d5-bd24-28a4c79cfe82precedence_heuristic	cell_id$d41b3124-0987-42d5-bd24-28a4c79cfe82downstream_cells_mapupstream_cells_map@md_strgetindex$3f9fcacd-05e6-4dd7-ba01-491750f3940dprecedence_heuristic	cell_id$3f9fcacd-05e6-4dd7-ba01-491750f3940ddownstream_cells_mapupstream_cells_map$90538e89-e592-4536-99cb-7378ec320b8dprecedence_heuristic	cell_id$90538e89-e592-4536-99cb-7378ec320b8ddownstream_cells_mapupstream_cells_map@md_strgetindex$2494a756-0b40-4b6e-b79f-deb616183384precedence_heuristic	cell_id$2494a756-0b40-4b6e-b79f-deb616183384downstream_cells_mapupstream_cells_map@md_strgetindex$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38precedence_heuristic	cell_id$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38downstream_cells_mapupstream_cells_map@md_strgetindex$06f3afb2-869a-4e2b-af58-4366b27d0a65precedence_heuristic	cell_id$06f3afb2-869a-4e2b-af58-4366b27d0a65downstream_cells_mapupstream_cells_map$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01precedence_heuristic	cell_id$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01downstream_cells_mapupstream_cells_map@md_strgetindex$f7fffc76-3607-4d90-ba75-d521366f7fb1precedence_heuristic	cell_id$f7fffc76-3607-4d90-ba75-d521366f7fb1downstream_cells_mapupstream_cells_map@md_strgetindex$41a9007c-e9a1-4228-be45-55becfffa944precedence_heuristic	cell_id$41a9007c-e9a1-4228-be45-55becfffa944downstream_cells_mapupstream_cells_map@md_strgetindex$a278e94d-1f4c-422c-9ac7-c950750a6ef9precedence_heuristic	cell_id$a278e94d-1f4c-422c-9ac7-c950750a6ef9downstream_cells_mapupstream_cells_map@md_strgetindex$9c45b534-cd6c-4b3d-9ff4-d035347c87e5precedence_heuristic	cell_id$9c45b534-cd6c-4b3d-9ff4-d035347c87e5downstream_cells_mapupstream_cells_map$07c96535-102c-4581-bba7-50f37bd766f9precedence_heuristic	cell_id$07c96535-102c-4581-bba7-50f37bd766f9downstream_cells_mapupstream_cells_map@md_strgetindex$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1precedence_heuristic	cell_id$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1downstream_cells_mapupstream_cells_map@md_strgetindex$53265062-78c7-434a-8d96-089cdd758bf0precedence_heuristiccell_id$53265062-78c7-434a-8d96-089cdd758bf0downstream_cells_mapPlutoUIupstream_cells_mapTableOfContents$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3dprecedence_heuristic	cell_id$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3ddownstream_cells_mapupstream_cells_map$f1ba0108-fbb7-4128-98f7-89c4f1e25790precedence_heuristic	cell_id$f1ba0108-fbb7-4128-98f7-89c4f1e25790downstream_cells_mapupstream_cells_map$fb032b39-250b-486d-b0b7-0d21c8556562precedence_heuristic	cell_id$fb032b39-250b-486d-b0b7-0d21c8556562downstream_cells_mapupstream_cells_map@md_strgetindex$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8precedence_heuristic	cell_id$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8downstream_cells_mapupstream_cells_map@md_strgetindex$3f2aef09-55c0-40c3-a50d-7081e66c60edprecedence_heuristic	cell_id$3f2aef09-55c0-40c3-a50d-7081e66c60eddownstream_cells_mapupstream_cells_map@md_strgetindex$611e0640-dc39-4846-89c9-172bc001e994precedence_heuristic	cell_id$611e0640-dc39-4846-89c9-172bc001e994downstream_cells_mapupstream_cells_mapcell_execution_order .$53265062-78c7-434a-8d96-089cdd758bf0$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8$07c96535-102c-4581-bba7-50f37bd766f9$2b1abe2e-fc7a-4d3a-9f65-b820eaff70ea$9c45b534-cd6c-4b3d-9ff4-d035347c87e5$6bc277f1-3ab6-4e12-92fc-65e6288af2c1$f09d458f-7846-46a5-a814-b51771bf91b7$41a9007c-e9a1-4228-be45-55becfffa944$06f3afb2-869a-4e2b-af58-4366b27d0a65$fb032b39-250b-486d-b0b7-0d21c8556562$bc66ff75-77ce-4487-ab2e-72800331839b$3f2aef09-55c0-40c3-a50d-7081e66c60ed$bc5709bd-8c44-4d58-82cc-e14eef20cfe6$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38$8863cbcc-4ff6-4714-b7d8-c39373af384e$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1$90538e89-e592-4536-99cb-7378ec320b8d$611e0640-dc39-4846-89c9-172bc001e994$e7934544-0344-48d3-8046-c3796874e5b3$c47eb25e-ff42-47a0-9949-11228e3c0535$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2$24368ee3-43e1-44c0-8293-75cc1e8f4f6c$12b97064-d8da-49cc-92aa-f5155b5c1b52$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0$2e45c794-62f0-4a1b-a346-da291e4c8469$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01$c8c898a7-7ec5-4b3f-8875-5901e0ef12fc$f1ba0108-fbb7-4128-98f7-89c4f1e25790$8bbe63e8-6a6e-4f96-8025-bbae25983a7e$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3d$2494a756-0b40-4b6e-b79f-deb616183384$3f9fcacd-05e6-4dd7-ba01-491750f3940d$f7fffc76-3607-4d90-ba75-d521366f7fb1$9064ec91-4ddf-4f7b-890d-2e59265483a1$bcce9741-7e63-4609-9529-0e9323b8eb21$a278e94d-1f4c-422c-9ac7-c950750a6ef9$386c7942-700d-4486-bede-853a6c2ef811$1751fb54-938c-4222-a41a-17ce97f800bc$d41b3124-0987-42d5-bd24-28a4c79cfe82$1fbdea1e-ef3a-4ace-ae76-1ccda2273087$1522314b-4982-439e-ab97-933869a5f307$63ed8db8-2104-4370-8a75-e9348c50cdf8$3de9644d-b66a-45b8-945d-6e000319f2b9$28487c59-7df4-41b9-859a-79438b1d3b06$78bb1e78-70ba-4f58-abb0-c0de3272eb50last_hot_reload_time        shortpath08-using-macros.jlprocess_statusreadypath</home/runner/work/AAS245Julia/AAS245Julia/08-using-macros.jlpluto_versionv0.20.24last_save_timeA}Ytcell_order .$53265062-78c7-434a-8d96-089cdd758bf0$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8$07c96535-102c-4581-bba7-50f37bd766f9$2b1abe2e-fc7a-4d3a-9f65-b820eaff70ea$9c45b534-cd6c-4b3d-9ff4-d035347c87e5$6bc277f1-3ab6-4e12-92fc-65e6288af2c1$f09d458f-7846-46a5-a814-b51771bf91b7$41a9007c-e9a1-4228-be45-55becfffa944$06f3afb2-869a-4e2b-af58-4366b27d0a65$fb032b39-250b-486d-b0b7-0d21c8556562$bc66ff75-77ce-4487-ab2e-72800331839b$3f2aef09-55c0-40c3-a50d-7081e66c60ed$bc5709bd-8c44-4d58-82cc-e14eef20cfe6$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38$8863cbcc-4ff6-4714-b7d8-c39373af384e$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1$90538e89-e592-4536-99cb-7378ec320b8d$611e0640-dc39-4846-89c9-172bc001e994$e7934544-0344-48d3-8046-c3796874e5b3$c47eb25e-ff42-47a0-9949-11228e3c0535$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2$24368ee3-43e1-44c0-8293-75cc1e8f4f6c$12b97064-d8da-49cc-92aa-f5155b5c1b52$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0$2e45c794-62f0-4a1b-a346-da291e4c8469$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01$c8c898a7-7ec5-4b3f-8875-5901e0ef12fc$f1ba0108-fbb7-4128-98f7-89c4f1e25790$8bbe63e8-6a6e-4f96-8025-bbae25983a7e$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3d$2494a756-0b40-4b6e-b79f-deb616183384$3f9fcacd-05e6-4dd7-ba01-491750f3940d$f7fffc76-3607-4d90-ba75-d521366f7fb1$9064ec91-4ddf-4f7b-890d-2e59265483a1$bcce9741-7e63-4609-9529-0e9323b8eb21$a278e94d-1f4c-422c-9ac7-c950750a6ef9$386c7942-700d-4486-bede-853a6c2ef811$1751fb54-938c-4222-a41a-17ce97f800bc$d41b3124-0987-42d5-bd24-28a4c79cfe82$1fbdea1e-ef3a-4ace-ae76-1ccda2273087$1522314b-4982-439e-ab97-933869a5f307$63ed8db8-2104-4370-8a75-e9348c50cdf8$3de9644d-b66a-45b8-945d-6e000319f2b9$28487c59-7df4-41b9-859a-79438b1d3b06$78bb1e78-70ba-4f58-abb0-c0de3272eb50published_objectsnbpkginstall_time_nsinstantiatedòinstalled_versionsPlutoUI0.7.60terminal_outputsnbpkg_syncj
[0m[1mWaiting for other notebooks to finish Pkg operations...[22m
[90m===[39m
[36m[1m┌ [22m[39m[36m[1mInfo: [22m[39mRemoving compat entry for stdlib
[36m[1m└ [22m[39m  p = "Statistics"

[0m[1mResolving...[22m
[90m===[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Project.toml`
  [90m[37e2e46d] [39m[93m↑ LinearAlgebra v1.11.0 ⇒ v1.12.0[39m
  [90m[44cfe95a] [39m[93m↑ Pkg v1.11.0 ⇒ v1.12.1[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Manifest.toml`
[32m⌃[39m [90m[c8ffd9c3] [39m[93m~ MbedTLS_jll v2.28.6+0 ⇒ v2.28.6+0[39m
  [90m[f43a241f] [39m[93m↑ Downloads v1.6.0 ⇒ v1.7.0[39m
  [90m[ac6e5ff7] [39m[92m+ JuliaSyntaxHighlighting v1.12.0[39m
  [90m[37e2e46d] [39m[93m↑ LinearAlgebra v1.11.0 ⇒ v1.12.0[39m
  [90m[ca575930] [39m[93m↑ NetworkOptions v1.2.0 ⇒ v1.3.0[39m
  [90m[44cfe95a] [39m[93m↑ Pkg v1.11.0 ⇒ v1.12.1[39m
  [90m[2f01184e] [39m[93m↑ SparseArrays v1.11.0 ⇒ v1.12.0[39m
  [90m[e66e0078] [39m[93m↑ CompilerSupportLibraries_jll v1.1.1+0 ⇒ v1.3.0+1[39m
  [90m[deac9b47] [39m[93m↑ LibCURL_jll v8.6.0+0 ⇒ v8.15.0+0[39m
  [90m[e37daf67] [39m[93m↑ LibGit2_jll v1.7.2+0 ⇒ v1.9.0+0[39m
  [90m[29816b5a] [39m[93m↑ LibSSH2_jll v1.11.0+1 ⇒ v1.11.3+1[39m
  [90m[14a3606d] [39m[93m↑ MozillaCACerts_jll v2023.12.12 ⇒ v2025.11.4[39m
  [90m[4536629a] [39m[93m↑ OpenBLAS_jll v0.3.27+1 ⇒ v0.3.29+0[39m
  [90m[05823500] [39m[93m↑ OpenLibm_jll v0.8.1+2 ⇒ v0.8.7+0[39m
  [90m[458c3c95] [39m[93m↑ OpenSSL_jll v3.0.15+2 ⇒ v3.5.4+0[39m
  [90m[efcefdf7] [39m[93m↑ PCRE2_jll v10.42.0+1 ⇒ v10.44.0+1[39m
  [90m[bea87d4a] [39m[93m↑ SuiteSparse_jll v7.7.0+0 ⇒ v7.8.3+2[39m
  [90m[83775a58] [39m[93m↑ Zlib_jll v1.2.13+1 ⇒ v1.3.1+2[39m
  [90m[8e850b90] [39m[93m↑ libblastrampoline_jll v5.11.0+0 ⇒ v5.15.0+0[39m
  [90m[8e850ede] [39m[93m↑ nghttp2_jll v1.59.0+0 ⇒ v1.64.0+1[39m
  [90m[3f19e933] [39m[93m↑ p7zip_jll v17.4.0+2 ⇒ v17.7.0+0[39m
[36m[1m        Info[22m[39m Packages marked with [32m⌃[39m have new versions available and may be upgradable.

[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Project.toml`
  [90m[fe3fc30c] [39m[91m- AstroImages v0.5.0[39m
  [90m[6e4b80f9] [39m[91m- BenchmarkTools v1.5.0[39m
  [90m[336ed68f] [39m[91m- CSV v0.10.15[39m
  [90m[13f3f980] [39m[91m- CairoMakie v0.12.18[39m
  [90m[324d7699] [39m[91m- CategoricalArrays v0.10.8[39m
  [90m[a93c6f00] [39m[91m- DataFrames v1.7.0[39m
  [90m[cc61a311] [39m[91m- FLoops v0.2.2[39m
  [90m[bdcacae8] [39m[91m- LoopVectorization v0.12.171[39m
  [90m[eff96d63] [39m[91m- Measurements v2.11.0[39m
  [90m[5ad8b20f] [39m[91m- PhysicalConstants v0.2.3[39m
  [90m[91a5bcdd] [39m[91m- Plots v1.40.9[39m
  [90m[438e738f] [39m[91m- PyCall v1.96.4[39m
  [90m[6099a3de] [39m[91m- PythonCall v0.9.23[39m
  [90m[f2c56810] [39m[91m- SpectralFitting v0.6.2[39m
  [90m[10745b16] [39m[91m- Statistics v1.11.1[39m
  [90m[1986cc42] [39m[91m- Unitful v1.21.1[39m
  [90m[6112ee07] [39m[91m- UnitfulAstro v1.2.1[39m
  [90m[e051c099] [39m[91m- XSPECModels v0.1.1[39m
  [90m[8ba89e20] [39m[91m- Distributed v1.11.0[39m
  [90m[37e2e46d] [39m[91m- LinearAlgebra v1.11.0[39m
  [90m[44cfe95a] [39m[91m- Pkg v1.11.0[39m
  [90m[cf7118a7] [39m[91m- UUIDs v1.11.0[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Manifest.toml`
  [90m[47edcb42] [39m[91m- ADTypes v1.11.0[39m
  [90m[621f4979] [39m[91m- AbstractFFTs v1.5.0[39m
  [90m[1520ce14] [39m[91m- AbstractTrees v0.4.5[39m
  [90m[7d9f7c33] [39m[91m- Accessors v0.1.39[39m
  [90m[79e6a3ab] [39m[91m- Adapt v4.1.1[39m
  [90m[35492f91] [39m[91m- AdaptivePredicates v1.2.0[39m
  [90m[66dad0bd] [39m[91m- AliasTables v1.1.3[39m
  [90m[27a7e980] [39m[91m- Animations v0.4.2[39m
  [90m[dce04be8] [39m[91m- ArgCheck v2.4.0[39m
  [90m[4fba245c] [39m[91m- ArrayInterface v7.18.0[39m
  [90m[5c4adb95] [39m[91m- AstroAngles v0.1.4[39m
  [90m[fe3fc30c] [39m[91m- AstroImages v0.5.0[39m
  [90m[a9b6321e] [39m[91m- Atomix v1.0.1[39m
  [90m[67c07d97] [39m[91m- Automa v1.1.0[39m
  [90m[13072b0f] [39m[91m- AxisAlgorithms v1.1.0[39m
  [90m[39de3d68] [39m[91m- AxisArrays v0.4.7[39m
  [90m[198e06fe] [39m[91m- BangBang v0.4.3[39m
  [90m[9718e550] [39m[91m- Baselet v0.1.1[39m
  [90m[6e4b80f9] [39m[91m- BenchmarkTools v1.5.0[39m
  [90m[d1d4a3ce] [39m[91m- BitFlags v0.1.9[39m
  [90m[62783981] [39m[91m- BitTwiddlingConvenienceFunctions v0.1.6[39m
  [90m[e1450e63] [39m[91m- BufferedStreams v1.2.2[39m
  [90m[fa961155] [39m[91m- CEnum v0.5.0[39m
  [90m[3b1b4be9] [39m[91m- CFITSIO v1.4.2[39m
  [90m[2a0fbf3d] [39m[91m- CPUSummary v0.2.6[39m
  [90m[336ed68f] [39m[91m- CSV v0.10.15[39m
  [90m[159f3aea] [39m[91m- Cairo v1.1.1[39m
  [90m[13f3f980] [39m[91m- CairoMakie v0.12.18[39m
  [90m[49dc2e85] [39m[91m- Calculus v0.5.2[39m
  [90m[324d7699] [39m[91m- CategoricalArrays v0.10.8[39m
  [90m[082447d4] [39m[91m- ChainRules v1.72.1[39m
  [90m[d360d2e6] [39m[91m- ChainRulesCore v1.25.0[39m
  [90m[fb6a15b2] [39m[91m- CloseOpenIntervals v0.1.13[39m
  [90m[944b1d66] [39m[91m- CodecZlib v0.7.6[39m
  [90m[a2cac450] [39m[91m- ColorBrewer v0.4.0[39m
  [90m[35d6a980] [39m[91m- ColorSchemes v3.27.1[39m
  [90m[c3611d14] [39m[91m- ColorVectorSpace v0.10.0[39m
  [90m[5ae59095] [39m[91m- Colors v0.12.11[39m
  [90m[38540f10] [39m[91m- CommonSolve v0.2.4[39m
  [90m[bbf7d656] [39m[91m- CommonSubexpressions v0.3.1[39m
  [90m[f70d9fcc] [39m[91m- CommonWorldInvalidations v1.0.0[39m
  [90m[34da2185] [39m[91m- Compat v4.16.0[39m
  [90m[a33af91c] [39m[91m- CompositionsBase v0.1.2[39m
  [90m[2569d6c7] [39m[91m- ConcreteStructs v0.2.3[39m
  [90m[f0e56b4a] [39m[91m- ConcurrentUtilities v2.4.3[39m
  [90m[8f4d0f93] [39m[91m- Conda v1.10.2[39m
  [90m[992eb4ea] [39m[91m- CondaPkg v0.2.24[39m
  [90m[88cd18e8] [39m[91m- ConsoleProgressMonitor v0.1.2[39m
  [90m[187b0558] [39m[91m- ConstructionBase v1.5.8[39m
  [90m[6add18c4] [39m[91m- ContextVariablesX v0.1.3[39m
  [90m[d38c429a] [39m[91m- Contour v0.6.3[39m
  [90m[adafc99b] [39m[91m- CpuId v0.3.1[39m
  [90m[a8cc5b0e] [39m[91m- Crayons v4.1.1[39m
  [90m[9a962f9c] [39m[91m- DataAPI v1.16.0[39m
  [90m[a93c6f00] [39m[91m- DataFrames v1.7.0[39m
  [90m[82cc6244] [39m[91m- DataInterpolations v6.6.0[39m
  [90m[864edb3b] [39m[91m- DataStructures v0.18.20[39m
  [90m[e2d170a0] [39m[91m- DataValueInterfaces v1.0.0[39m
  [90m[244e2a9f] [39m[91m- DefineSingletons v0.1.2[39m
  [90m[927a84f5] [39m[91m- DelaunayTriangulation v1.6.3[39m
  [90m[8bb1440f] [39m[91m- DelimitedFiles v1.9.1[39m
  [90m[163ba53b] [39m[91m- DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[91m- DiffRules v1.15.1[39m
  [90m[a0c0ee7d] [39m[91m- DifferentiationInterface v0.6.28[39m
  [90m[0703355e] [39m[91m- DimensionalData v0.27.9[39m
  [90m[31c24e10] [39m[91m- Distributions v0.25.115[39m
  [90m[ffbed154] [39m[91m- DocStringExtensions v0.9.3[39m
  [90m[4e289a0a] [39m[91m- EnumX v1.0.4[39m
  [90m[429591f6] [39m[91m- ExactPredicates v2.2.8[39m
  [90m[460bff9d] [39m[91m- ExceptionUnwrapping v0.1.11[39m
  [90m[e2ba6199] [39m[91m- ExprTools v0.1.10[39m
  [90m[6b7a57c9] [39m[91m- Expronicon v0.8.5[39m
  [90m[95c220a8] [39m[91m- ExtendableSparse v1.6.0[39m
  [90m[411431e0] [39m[91m- Extents v0.1.4[39m
  [90m[c87230d0] [39m[91m- FFMPEG v0.4.2[39m
  [90m[7a1cc6ca] [39m[91m- FFTW v1.8.0[39m
  [90m[525bcba6] [39m[91m- FITSIO v0.17.4[39m
  [90m[cc61a311] [39m[91m- FLoops v0.2.2[39m
  [90m[b9860ae5] [39m[91m- FLoopsBase v0.1.1[39m
  [90m[9aa1b823] [39m[91m- FastClosures v0.3.2[39m
  [90m[5789e2e9] [39m[91m- FileIO v1.16.6[39m
  [90m[8fc22ac5] [39m[91m- FilePaths v0.8.3[39m
  [90m[48062228] [39m[91m- FilePathsBase v0.9.22[39m
  [90m[1a297f60] [39m[91m- FillArrays v1.13.0[39m
  [90m[64ca27bc] [39m[91m- FindFirstFunctions v1.4.1[39m
  [90m[6a86dc24] [39m[91m- FiniteDiff v2.26.2[39m
  [90m[1fa38f19] [39m[91m- Format v1.3.7[39m
  [90m[f6369f11] [39m[91m- ForwardDiff v0.10.38[39m
  [90m[b38be410] [39m[91m- FreeType v4.1.1[39m
  [90m[663a7486] [39m[91m- FreeTypeAbstraction v0.10.6[39m
  [90m[069b7b12] [39m[91m- FunctionWrappers v1.1.3[39m
  [90m[77dc65aa] [39m[91m- FunctionWrappersWrappers v0.1.3[39m
  [90m[38e38edf] [39m[91m- GLM v1.9.0[39m
  [90m[0c68f7d7] [39m[91m- GPUArrays v11.1.0[39m
  [90m[46192b85] [39m[91m- GPUArraysCore v0.2.0[39m
  [90m[28b8d3ca] [39m[91m- GR v0.73.10[39m
  [90m[68eda718] [39m[91m- GeoFormatTypes v0.4.2[39m
  [90m[cf35fbd7] [39m[91m- GeoInterface v1.4.0[39m
  [90m[5c1252a2] [39m[91m- GeometryBasics v0.4.11[39m
  [90m[a2bd30eb] [39m[91m- Graphics v1.1.3[39m
  [90m[3955a311] [39m[91m- GridLayoutBase v0.11.1[39m
  [90m[42e2da0e] [39m[91m- Grisu v1.0.2[39m
  [90m[cd3eb016] [39m[91m- HTTP v1.10.15[39m
  [90m[3e5b6fbb] [39m[91m- HostCPUFeatures v0.1.17[39m
  [90m[34004b35] [39m[91m- HypergeometricFunctions v0.3.25[39m
  [90m[88f59080] [39m[91m- ILUZero v0.2.0[39m
  [90m[7869d1d1] [39m[91m- IRTools v0.4.14[39m
  [90m[615f187c] [39m[91m- IfElse v0.1.1[39m
  [90m[2803e5a7] [39m[91m- ImageAxes v0.6.12[39m
  [90m[c817782e] [39m[91m- ImageBase v0.1.7[39m
  [90m[a09fc81d] [39m[91m- ImageCore v0.10.5[39m
  [90m[82e4d734] [39m[91m- ImageIO v0.6.9[39m
  [90m[bc367c6b] [39m[91m- ImageMetadata v0.9.10[39m
  [90m[4e3cecfd] [39m[91m- ImageShow v0.3.8[39m
  [90m[9b13fd28] [39m[91m- IndirectArrays v1.0.0[39m
  [90m[d25df0c9] [39m[91m- Inflate v0.1.5[39m
  [90m[22cec73e] [39m[91m- InitialValues v0.3.1[39m
  [90m[842dd82b] [39m[91m- InlineStrings v1.4.2[39m
  [90m[18e54dd8] [39m[91m- IntegerMathUtils v0.1.2[39m
  [90m[85a1e053] [39m[91m- Interfaces v0.3.2[39m
  [90m[a98d9a8b] [39m[91m- Interpolations v0.15.1[39m
  [90m[d1acc4aa] [39m[91m- IntervalArithmetic v0.22.21[39m
  [90m[8197267c] [39m[91m- IntervalSets v0.7.10[39m
  [90m[3587e190] [39m[91m- InverseFunctions v0.1.17[39m
  [90m[41ab1584] [39m[91m- InvertedIndices v1.3.1[39m
  [90m[92d709cd] [39m[91m- IrrationalConstants v0.2.2[39m
  [90m[f1662d9f] [39m[91m- Isoband v0.1.1[39m
  [90m[c8e1da08] [39m[91m- IterTools v1.10.0[39m
  [90m[42fd0dbc] [39m[91m- IterativeSolvers v0.9.4[39m
  [90m[82899510] [39m[91m- IteratorInterfaceExtensions v1.0.0[39m
  [90m[033835bb] [39m[91m- JLD2 v0.5.10[39m
  [90m[1019f520] [39m[91m- JLFzf v0.1.9[39m
  [90m[692b3bcd] [39m[91m- JLLWrappers v1.7.0[39m
  [90m[0f8b85d8] [39m[91m- JSON3 v1.14.1[39m
  [90m[b835a17e] [39m[91m- JpegTurbo v0.1.5[39m
  [90m[b14d175d] [39m[91m- JuliaVariables v0.2.4[39m
  [90m[63c18a36] [39m[91m- KernelAbstractions v0.9.31[39m
  [90m[5ab0869b] [39m[91m- KernelDensity v0.6.9[39m
  [90m[5be7bae1] [39m[91m- LBFGSB v0.4.1[39m
  [90m[929cbde3] [39m[91m- LLVM v9.1.3[39m
  [90m[b964fa9f] [39m[91m- LaTeXStrings v1.4.0[39m
  [90m[23fbe1c1] [39m[91m- Latexify v0.16.5[39m
  [90m[73f95e8e] [39m[91m- LatticeRules v0.0.1[39m
  [90m[10f19ff3] [39m[91m- LayoutPointers v0.1.17[39m
  [90m[8cdb02fc] [39m[91m- LazyModules v0.3.1[39m
  [90m[1d6d02ad] [39m[91m- LeftChildRightSiblingTrees v0.2.0[39m
  [90m[2ec943e9] [39m[91m- Libz v1.0.1[39m
  [90m[2ab3a3ac] [39m[91m- LogExpFunctions v0.3.29[39m
  [90m[e6f89c97] [39m[91m- LoggingExtras v1.1.0[39m
  [90m[bdcacae8] [39m[91m- LoopVectorization v0.12.171[39m
  [90m[2fda8390] [39m[91m- LsqFit v0.15.0[39m
  [90m[d8e11817] [39m[91m- MLStyle v0.4.17[39m
  [90m[1914dd2f] [39m[91m- MacroTools v0.5.13[39m
  [90m[ee78f7c6] [39m[91m- Makie v0.21.18[39m
  [90m[20f20a25] [39m[91m- MakieCore v0.8.12[39m
  [90m[d125e4d3] [39m[91m- ManualMemory v0.1.8[39m
  [90m[dbb5928d] [39m[91m- MappedArrays v0.4.2[39m
  [90m[0a4f8689] [39m[91m- MathTeXEngine v0.6.2[39m
  [90m[739be429] [39m[91m- MbedTLS v1.1.9[39m
  [90m[eff96d63] [39m[91m- Measurements v2.11.0[39m
  [90m[442fdcdd] [39m[91m- Measures v0.3.2[39m
  [90m[128add7d] [39m[91m- MicroCollections v0.2.0[39m
  [90m[0b3b1443] [39m[91m- MicroMamba v0.1.14[39m
  [90m[e1d29d7a] [39m[91m- Missings v1.2.0[39m
  [90m[e94cdb99] [39m[91m- MosaicViews v0.3.4[39m
  [90m[d41bc354] [39m[91m- NLSolversBase v7.8.3[39m
  [90m[77ba4419] [39m[91m- NaNMath v1.0.2[39m
  [90m[71a1bf82] [39m[91m- NameResolution v0.1.5[39m
  [90m[f09324ee] [39m[91m- Netpbm v1.1.1[39m
  [90m[510215fc] [39m[91m- Observables v0.5.5[39m
  [90m[6fe1bfb0] [39m[91m- OffsetArrays v1.15.0[39m
  [90m[52e1d378] [39m[91m- OpenEXR v0.3.3[39m
  [90m[4d8831e6] [39m[91m- OpenSSL v1.4.3[39m
  [90m[7f7a1694] [39m[91m- Optimization v4.0.5[39m
  [90m[bca83a33] [39m[91m- OptimizationBase v2.4.0[39m
  [90m[bac558e1] [39m[91m- OrderedCollections v1.7.0[39m
  [90m[90014a1f] [39m[91m- PDMats v0.11.31[39m
  [90m[f57f5aa1] [39m[91m- PNGFiles v0.4.3[39m
  [90m[19eb6ba3] [39m[91m- Packing v0.5.1[39m
  [90m[5432bcbf] [39m[91m- PaddedViews v0.5.12[39m
  [90m[5ad8b20f] [39m[91m- PhysicalConstants v0.2.3[39m
  [90m[fa939f87] [39m[91m- Pidfile v1.3.0[39m
  [90m[b98c9c47] [39m[91m- Pipe v1.3.0[39m
  [90m[eebad327] [39m[91m- PkgVersion v0.3.3[39m
  [90m[ccf2f8ad] [39m[91m- PlotThemes v3.3.0[39m
  [90m[995b91a9] [39m[91m- PlotUtils v1.4.3[39m
  [90m[91a5bcdd] [39m[91m- Plots v1.40.9[39m
  [90m[1d0040c9] [39m[91m- PolyesterWeave v0.2.2[39m
  [90m[647866c9] [39m[91m- PolygonOps v0.1.2[39m
  [90m[2dfb63ee] [39m[91m- PooledArrays v1.4.3[39m
  [90m[d236fae5] [39m[91m- PreallocationTools v0.4.24[39m
  [90m[8162dcfd] [39m[91m- PrettyPrint v0.2.0[39m
  [90m[08abe8d2] [39m[91m- PrettyTables v2.4.0[39m
  [90m[27ebfcd6] [39m[91m- Primes v0.5.6[39m
  [90m[33c8b6b6] [39m[91m- ProgressLogging v0.1.4[39m
  [90m[92933f4c] [39m[91m- ProgressMeter v1.10.2[39m
  [90m[43287f4e] [39m[91m- PtrArrays v1.2.1[39m
  [90m[438e738f] [39m[91m- PyCall v1.96.4[39m
  [90m[6099a3de] [39m[91m- PythonCall v0.9.23[39m
  [90m[4b34888f] [39m[91m- QOI v1.0.1[39m
  [90m[1fd47b50] [39m[91m- QuadGK v2.11.1[39m
  [90m[8a4e6c94] [39m[91m- QuasiMonteCarlo v0.3.3[39m
  [90m[b3c3ace0] [39m[91m- RangeArrays v0.3.2[39m
  [90m[c84ed2f1] [39m[91m- Ratios v0.4.5[39m
  [90m[c1ae055f] [39m[91m- RealDot v0.1.0[39m
  [90m[3cdcf5f2] [39m[91m- RecipesBase v1.3.4[39m
  [90m[01d81517] [39m[91m- RecipesPipeline v0.6.12[39m
  [90m[731186ca] [39m[91m- RecursiveArrayTools v3.27.4[39m
  [90m[05181044] [39m[91m- RelocatableFolders v1.0.1[39m
  [90m[ae029012] [39m[91m- Requires v1.3.0[39m
  [90m[79098fc4] [39m[91m- Rmath v0.8.0[39m
  [90m[f2b01f46] [39m[91m- Roots v2.2.2[39m
  [90m[5eaf0fd0] [39m[91m- RoundingEmulator v0.2.1[39m
  [90m[7e49a35a] [39m[91m- RuntimeGeneratedFunctions v0.5.13[39m
  [90m[fdea26ae] [39m[91m- SIMD v3.7.0[39m
  [90m[94e857df] [39m[91m- SIMDTypes v0.1.0[39m
  [90m[476501e8] [39m[91m- SLEEFPirates v0.6.43[39m
  [90m[0bca4576] [39m[91m- SciMLBase v2.70.0[39m
  [90m[c0aeaf25] [39m[91m- SciMLOperators v0.3.12[39m
  [90m[53ae85a6] [39m[91m- SciMLStructures v1.6.1[39m
  [90m[6c6a2e73] [39m[91m- Scratch v1.2.1[39m
  [90m[91c51154] [39m[91m- SentinelArrays v1.4.8[39m
  [90m[efcf1570] [39m[91m- Setfield v1.1.1[39m
  [90m[65257c39] [39m[91m- ShaderAbstractions v0.4.1[39m
  [90m[1277b4bf] [39m[91m- ShiftedArrays v2.0.0[39m
  [90m[992d4aef] [39m[91m- Showoff v1.0.3[39m
  [90m[73760f76] [39m[91m- SignedDistanceFields v0.4.0[39m
  [90m[777ac1f9] [39m[91m- SimpleBufferStream v1.2.0[39m
  [90m[699a6c99] [39m[91m- SimpleTraits v0.9.4[39m
  [90m[45858cf5] [39m[91m- Sixel v0.1.3[39m
  [90m[ed01d8cd] [39m[91m- Sobol v1.5.0[39m
  [90m[a2af1166] [39m[91m- SortingAlgorithms v1.2.1[39m
  [90m[9f842d2f] [39m[91m- SparseConnectivityTracer v0.6.9[39m
  [90m[dc90abb0] [39m[91m- SparseInverseSubset v0.1.2[39m
  [90m[0a514795] [39m[91m- SparseMatrixColorings v0.4.10[39m
  [90m[e56a9233] [39m[91m- Sparspak v0.3.9[39m
  [90m[276daf66] [39m[91m- SpecialFunctions v2.5.0[39m
  [90m[f2c56810] [39m[91m- SpectralFitting v0.6.2[39m
  [90m[171d559e] [39m[91m- SplittablesBase v0.1.15[39m
  [90m[860ef19b] [39m[91m- StableRNGs v1.0.2[39m
  [90m[cae243ae] [39m[91m- StackViews v0.1.1[39m
  [90m[aedffcd0] [39m[91m- Static v1.1.1[39m
  [90m[0d7ed370] [39m[91m- StaticArrayInterface v1.8.0[39m
  [90m[90137ffa] [39m[91m- StaticArrays v1.9.10[39m
  [90m[1e83bf80] [39m[91m- StaticArraysCore v1.4.3[39m
  [90m[82ae8749] [39m[91m- StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[91m- StatsBase v0.34.4[39m
  [90m[4c63d2b9] [39m[91m- StatsFuns v1.3.2[39m
  [90m[3eaba693] [39m[91m- StatsModels v0.7.4[39m
  [90m[892a3eda] [39m[91m- StringManipulation v0.4.0[39m
  [90m[09ab397b] [39m[91m- StructArrays v0.6.21[39m
  [90m[856f2bd8] [39m[91m- StructTypes v1.11.0[39m
  [90m[6fc51010] [39m[91m- Surrogates v6.10.0[39m
  [90m[2efcf032] [39m[91m- SymbolicIndexingInterface v0.3.36[39m
  [90m[3783bdb8] [39m[91m- TableTraits v1.0.1[39m
  [90m[bd369af6] [39m[91m- Tables v1.12.0[39m
  [90m[62fd8b95] [39m[91m- TensorCore v0.1.1[39m
  [90m[5d786b92] [39m[91m- TerminalLoggers v0.1.7[39m
  [90m[8290d209] [39m[91m- ThreadingUtilities v0.5.2[39m
  [90m[731e570b] [39m[91m- TiffImages v0.11.2[39m
  [90m[3bb67fe8] [39m[91m- TranscodingStreams v0.11.3[39m
  [90m[28d57a85] [39m[91m- Transducers v0.4.84[39m
  [90m[981d1d27] [39m[91m- TriplotBase v0.1.0[39m
  [90m[3a884ed6] [39m[91m- UnPack v1.0.2[39m
  [90m[1cfade01] [39m[91m- UnicodeFun v0.4.1[39m
  [90m[1986cc42] [39m[91m- Unitful v1.21.1[39m
  [90m[6fb2a4bd] [39m[91m- UnitfulAngles v0.7.2[39m
  [90m[6112ee07] [39m[91m- UnitfulAstro v1.2.1[39m
  [90m[45397f5d] [39m[91m- UnitfulLatexify v1.6.4[39m
  [90m[013be700] [39m[91m- UnsafeAtomics v0.3.0[39m
  [90m[e17b2a0c] [39m[91m- UnsafePointers v1.0.0[39m
  [90m[41fe7b60] [39m[91m- Unzip v0.2.0[39m
  [90m[3d5dd08c] [39m[91m- VectorizationBase v0.21.71[39m
  [90m[81def892] [39m[91m- VersionParsing v1.3.0[39m
  [90m[15f3aee2] [39m[91m- WCS v0.6.2[39m
  [90m[ea10d353] [39m[91m- WeakRefStrings v1.4.2[39m
  [90m[e3aaa7dc] [39m[91m- WebP v0.1.3[39m
  [90m[efce3f68] [39m[91m- WoodburyMatrices v1.0.0[39m
  [90m[76eceee3] [39m[91m- WorkerUtilities v1.6.1[39m
  [90m[e051c099] [39m[91m- XSPECModels v0.1.1[39m
  [90m[e88e6eb3] [39m[91m- Zygote v0.6.74[39m
  [90m[700de1a5] [39m[91m- ZygoteRules v0.2.5[39m
  [90m[6e34b625] [39m[91m- Bzip2_jll v1.0.8+3[39m
  [90m[b3e40c51] [39m[91m- CFITSIO_jll v4.4.0+0[39m
  [90m[4e9b3aee] [39m[91m- CRlibm_jll v1.0.1+0[39m
  [90m[83423d85] [39m[91m- Cairo_jll v1.18.2+1[39m
  [90m[ee1fde0b] [39m[91m- Dbus_jll v1.14.10+0[39m
  [90m[5ae413db] [39m[91m- EarCut_jll v2.2.4+0[39m
  [90m[2702e6a9] [39m[91m- EpollShim_jll v0.0.20230411+1[39m
  [90m[2e619515] [39m[91m- Expat_jll v2.6.4+2[39m
  [90m[b22a6f82] [39m[91m- FFMPEG_jll v4.4.4+1[39m
  [90m[f5851436] [39m[91m- FFTW_jll v3.3.10+2[39m
  [90m[a3f928ae] [39m[91m- Fontconfig_jll v2.15.0+0[39m
  [90m[d7e528f0] [39m[91m- FreeType2_jll v2.13.3+1[39m
  [90m[559328eb] [39m[91m- FriBidi_jll v1.0.16+0[39m
  [90m[0656b61e] [39m[91m- GLFW_jll v3.4.0+2[39m
  [90m[d2c73de3] [39m[91m- GR_jll v0.73.10+0[39m
  [90m[78b55507] [39m[91m- Gettext_jll v0.21.0+0[39m
  [90m[59f7168a] [39m[91m- Giflib_jll v5.2.2+1[39m
  [90m[7746bdde] [39m[91m- Glib_jll v2.82.4+0[39m
  [90m[3b182d85] [39m[91m- Graphite2_jll v1.3.14+1[39m
  [90m[2e76f6c2] [39m[91m- HarfBuzz_jll v8.5.0+0[39m
  [90m[905a6f67] [39m[91m- Imath_jll v3.1.11+0[39m
  [90m[1d5cc7b8] [39m[91m- IntelOpenMP_jll v2024.2.1+0[39m
  [90m[aacddb02] [39m[91m- JpegTurbo_jll v3.1.0+1[39m
  [90m[c1c5ebd0] [39m[91m- LAME_jll v3.100.2+0[39m
  [90m[88015f11] [39m[91m- LERC_jll v4.0.0+2[39m
  [90m[dad2f222] [39m[91m- LLVMExtra_jll v0.0.34+0[39m
  [90m[1d63c593] [39m[91m- LLVMOpenMP_jll v18.1.7+0[39m
  [90m[dd4b983a] [39m[91m- LZO_jll v2.10.2+2[39m
  [90m[81d17ec3] [39m[91m- L_BFGS_B_jll v3.0.1+0[39m
  [90m[50917eeb] [39m[91m- LibXSPEC_jll v0.1.15+1[39m
  [90m[e9f186c6] [39m[91m- Libffi_jll v3.2.2+2[39m
  [90m[d4300ac3] [39m[91m- Libgcrypt_jll v1.11.0+0[39m
  [90m[7e76a0d4] [39m[91m- Libglvnd_jll v1.7.0+0[39m
  [90m[7add5ba3] [39m[91m- Libgpg_error_jll v1.51.0+1[39m
  [90m[94ce4f54] [39m[91m- Libiconv_jll v1.17.0+1[39m
  [90m[4b2f31a3] [39m[91m- Libmount_jll v2.40.2+1[39m
  [90m[89763e89] [39m[91m- Libtiff_jll v4.7.0+0[39m
  [90m[38a345b3] [39m[91m- Libuuid_jll v2.40.2+1[39m
  [90m[856f044c] [39m[91m- MKL_jll v2024.2.0+0[39m
  [90m[c8ffd9c3] [39m[91m- MbedTLS_jll v2.28.6+0[39m
  [90m[68e3532b] [39m[91m- Ncurses_jll v6.5.0+1[39m
  [90m[e7412a2a] [39m[91m- Ogg_jll v1.3.5+1[39m
  [90m[18a262bb] [39m[91m- OpenEXR_jll v3.2.4+0[39m
  [90m[efe28fd5] [39m[91m- OpenSpecFun_jll v0.5.5+1[39m
  [90m[91d4177d] [39m[91m- Opus_jll v1.3.3+0[39m
  [90m[36c8627f] [39m[91m- Pango_jll v1.55.5+0[39m
  [90m[30392449] [39m[91m- Pixman_jll v0.43.4+0[39m
  [90m[c0090381] [39m[91m- Qt6Base_jll v6.7.1+1[39m
  [90m[629bc702] [39m[91m- Qt6Declarative_jll v6.7.1+2[39m
  [90m[ce943373] [39m[91m- Qt6ShaderTools_jll v6.7.1+1[39m
  [90m[e99dba38] [39m[91m- Qt6Wayland_jll v6.7.1+1[39m
  [90m[f50d1b31] [39m[91m- Rmath_jll v0.5.1+0[39m
  [90m[a44049a8] [39m[91m- Vulkan_Loader_jll v1.3.243+0[39m
  [90m[550c8279] [39m[91m- WCS_jll v7.7.0+0[39m
  [90m[a2964d1f] [39m[91m- Wayland_jll v1.21.0+2[39m
  [90m[2381bf8a] [39m[91m- Wayland_protocols_jll v1.36.0+0[39m
  [90m[02c8fc9c] [39m[91m- XML2_jll v2.13.5+0[39m
  [90m[aed1982a] [39m[91m- XSLT_jll v1.1.42+0[39m
  [90m[ffd25f8a] [39m[91m- XZ_jll v5.6.3+1[39m
  [90m[f67eecfb] [39m[91m- Xorg_libICE_jll v1.1.1+0[39m
  [90m[c834827a] [39m[91m- Xorg_libSM_jll v1.2.4+0[39m
  [90m[4f6342f7] [39m[91m- Xorg_libX11_jll v1.8.6+2[39m
  [90m[0c0b7dd1] [39m[91m- Xorg_libXau_jll v1.0.11+2[39m
  [90m[935fb764] [39m[91m- Xorg_libXcursor_jll v1.2.3+0[39m
  [90m[a3789734] [39m[91m- Xorg_libXdmcp_jll v1.1.4+2[39m
  [90m[1082639a] [39m[91m- Xorg_libXext_jll v1.3.6+2[39m
  [90m[d091e8ba] [39m[91m- Xorg_libXfixes_jll v6.0.0+0[39m
  [90m[a51aa0fd] [39m[91m- Xorg_libXi_jll v1.8.2+0[39m
  [90m[d1454406] [39m[91m- Xorg_libXinerama_jll v1.1.5+0[39m
  [90m[ec84b674] [39m[91m- Xorg_libXrandr_jll v1.5.4+0[39m
  [90m[ea2f1a96] [39m[91m- Xorg_libXrender_jll v0.9.11+1[39m
  [90m[14d82f49] [39m[91m- Xorg_libpthread_stubs_jll v0.1.1+2[39m
  [90m[c7cfdc94] [39m[91m- Xorg_libxcb_jll v1.17.0+2[39m
  [90m[cc61e674] [39m[91m- Xorg_libxkbfile_jll v1.1.2+1[39m
  [90m[e920d4aa] [39m[91m- Xorg_xcb_util_cursor_jll v0.1.4+0[39m
  [90m[12413925] [39m[91m- Xorg_xcb_util_image_jll v0.4.0+1[39m
  [90m[2def613f] [39m[91m- Xorg_xcb_util_jll v0.4.0+1[39m
  [90m[975044d2] [39m[91m- Xorg_xcb_util_keysyms_jll v0.4.0+1[39m
  [90m[0d47668e] [39m[91m- Xorg_xcb_util_renderutil_jll v0.3.9+1[39m
  [90m[c22f9ab0] [39m[91m- Xorg_xcb_util_wm_jll v0.4.1+1[39m
  [90m[35661453] [39m[91m- Xorg_xkbcomp_jll v1.4.6+1[39m
  [90m[33bec58e] [39m[91m- Xorg_xkeyboard_config_jll v2.39.0+0[39m
  [90m[c5fb5394] [39m[91m- Xorg_xtrans_jll v1.5.0+2[39m
  [90m[3161d3a3] [39m[91m- Zstd_jll v1.5.6+2[39m
  [90m[35ca27e7] [39m[91m- eudev_jll v3.2.9+0[39m
  [90m[214eeab7] [39m[91m- fzf_jll v0.56.3+0[39m
  [90m[1a1c6b14] [39m[91m- gperf_jll v3.1.1+1[39m
  [90m[9a68df92] [39m[91m- isoband_jll v0.2.3+0[39m
  [90m[a4ae2306] [39m[91m- libaom_jll v3.9.0+0[39m
  [90m[0ac62f75] [39m[91m- libass_jll v0.15.2+0[39m
  [90m[1183f4f0] [39m[91m- libdecor_jll v0.2.2+0[39m
  [90m[2db6ffa8] [39m[91m- libevdev_jll v1.11.0+0[39m
  [90m[f638f0a6] [39m[91m- libfdk_aac_jll v2.0.3+0[39m
  [90m[36db933b] [39m[91m- libinput_jll v1.18.0+0[39m
  [90m[b53b4c65] [39m[91m- libpng_jll v1.6.44+1[39m
  [90m[075b6546] [39m[91m- libsixel_jll v1.10.3+2[39m
  [90m[f27f6e37] [39m[91m- libvorbis_jll v1.3.7+2[39m
  [90m[c5f90fcd] [39m[91m- libwebp_jll v1.4.0+0[39m
  [90m[f8abcde7] [39m[91m- micromamba_jll v1.5.8+0[39m
  [90m[009596ad] [39m[91m- mtdev_jll v1.1.6+0[39m
  [90m[1317d2d5] [39m[91m- oneTBB_jll v2021.12.0+0[39m
  [90m[1270edf5] [39m[91m- x264_jll v2021.5.5+0[39m
  [90m[dfaa095f] [39m[91m- x265_jll v3.5.0+0[39m
  [90m[d8fb68d0] [39m[91m- xkbcommon_jll v1.4.1+2[39m
  [90m[8bf52ea8] [39m[91m- CRC32c v1.11.0[39m
  [90m[8ba89e20] [39m[91m- Distributed v1.11.0[39m
  [90m[f43a241f] [39m[93m↑ Downloads v1.6.0 ⇒ v1.7.0[39m
  [90m[9fa8497b] [39m[91m- Future v1.11.0[39m
  [90m[ac6e5ff7] [39m[92m+ JuliaSyntaxHighlighting v1.12.0[39m
  [90m[4af54fe1] [39m[91m- LazyArtifacts v1.11.0[39m
  [90m[37e2e46d] [39m[93m↑ LinearAlgebra v1.11.0 ⇒ v1.12.0[39m
  [90m[ca575930] [39m[93m↑ NetworkOptions v1.2.0 ⇒ v1.3.0[39m
  [90m[44cfe95a] [39m[93m↑ Pkg v1.11.0 ⇒ v1.12.1[39m
  [90m[9abbd945] [39m[91m- Profile v1.11.0[39m
  [90m[3fa0cd96] [39m[91m- REPL v1.11.0[39m
  [90m[1a1011a3] [39m[91m- SharedArrays v1.11.0[39m
  [90m[6462fe0b] [39m[91m- Sockets v1.11.0[39m
  [90m[2f01184e] [39m[91m- SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[91m- SuiteSparse[39m
  [90m[e66e0078] [39m[93m↑ CompilerSupportLibraries_jll v1.1.1+0 ⇒ v1.3.0+1[39m
  [90m[deac9b47] [39m[93m↑ LibCURL_jll v8.6.0+0 ⇒ v8.15.0+0[39m
  [90m[e37daf67] [39m[93m↑ LibGit2_jll v1.7.2+0 ⇒ v1.9.0+0[39m
  [90m[29816b5a] [39m[93m↑ LibSSH2_jll v1.11.0+1 ⇒ v1.11.3+1[39m
  [90m[14a3606d] [39m[93m↑ MozillaCACerts_jll v2023.12.12 ⇒ v2025.11.4[39m
  [90m[4536629a] [39m[93m↑ OpenBLAS_jll v0.3.27+1 ⇒ v0.3.29+0[39m
  [90m[05823500] [39m[91m- OpenLibm_jll v0.8.1+2[39m
  [90m[458c3c95] [39m[93m↑ OpenSSL_jll v3.0.15+2 ⇒ v3.5.4+0[39m
  [90m[efcefdf7] [39m[91m- PCRE2_jll v10.42.0+1[39m
  [90m[bea87d4a] [39m[91m- SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[93m↑ Zlib_jll v1.2.13+1 ⇒ v1.3.1+2[39m
  [90m[8e850b90] [39m[93m↑ libblastrampoline_jll v5.11.0+0 ⇒ v5.15.0+0[39m
  [90m[8e850ede] [39m[93m↑ nghttp2_jll v1.59.0+0 ⇒ v1.64.0+1[39m
  [90m[3f19e933] [39m[93m↑ p7zip_jll v17.4.0+2 ⇒ v17.7.0+0[39m

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39mPlutoUIj
[0m[1mWaiting for other notebooks to finish Pkg operations...[22m
[90m===[39m
[36m[1m┌ [22m[39m[36m[1mInfo: [22m[39mRemoving compat entry for stdlib
[36m[1m└ [22m[39m  p = "Statistics"

[0m[1mResolving...[22m
[90m===[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Project.toml`
  [90m[37e2e46d] [39m[93m↑ LinearAlgebra v1.11.0 ⇒ v1.12.0[39m
  [90m[44cfe95a] [39m[93m↑ Pkg v1.11.0 ⇒ v1.12.1[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Manifest.toml`
[32m⌃[39m [90m[c8ffd9c3] [39m[93m~ MbedTLS_jll v2.28.6+0 ⇒ v2.28.6+0[39m
  [90m[f43a241f] [39m[93m↑ Downloads v1.6.0 ⇒ v1.7.0[39m
  [90m[ac6e5ff7] [39m[92m+ JuliaSyntaxHighlighting v1.12.0[39m
  [90m[37e2e46d] [39m[93m↑ LinearAlgebra v1.11.0 ⇒ v1.12.0[39m
  [90m[ca575930] [39m[93m↑ NetworkOptions v1.2.0 ⇒ v1.3.0[39m
  [90m[44cfe95a] [39m[93m↑ Pkg v1.11.0 ⇒ v1.12.1[39m
  [90m[2f01184e] [39m[93m↑ SparseArrays v1.11.0 ⇒ v1.12.0[39m
  [90m[e66e0078] [39m[93m↑ CompilerSupportLibraries_jll v1.1.1+0 ⇒ v1.3.0+1[39m
  [90m[deac9b47] [39m[93m↑ LibCURL_jll v8.6.0+0 ⇒ v8.15.0+0[39m
  [90m[e37daf67] [39m[93m↑ LibGit2_jll v1.7.2+0 ⇒ v1.9.0+0[39m
  [90m[29816b5a] [39m[93m↑ LibSSH2_jll v1.11.0+1 ⇒ v1.11.3+1[39m
  [90m[14a3606d] [39m[93m↑ MozillaCACerts_jll v2023.12.12 ⇒ v2025.11.4[39m
  [90m[4536629a] [39m[93m↑ OpenBLAS_jll v0.3.27+1 ⇒ v0.3.29+0[39m
  [90m[05823500] [39m[93m↑ OpenLibm_jll v0.8.1+2 ⇒ v0.8.7+0[39m
  [90m[458c3c95] [39m[93m↑ OpenSSL_jll v3.0.15+2 ⇒ v3.5.4+0[39m
  [90m[efcefdf7] [39m[93m↑ PCRE2_jll v10.42.0+1 ⇒ v10.44.0+1[39m
  [90m[bea87d4a] [39m[93m↑ SuiteSparse_jll v7.7.0+0 ⇒ v7.8.3+2[39m
  [90m[83775a58] [39m[93m↑ Zlib_jll v1.2.13+1 ⇒ v1.3.1+2[39m
  [90m[8e850b90] [39m[93m↑ libblastrampoline_jll v5.11.0+0 ⇒ v5.15.0+0[39m
  [90m[8e850ede] [39m[93m↑ nghttp2_jll v1.59.0+0 ⇒ v1.64.0+1[39m
  [90m[3f19e933] [39m[93m↑ p7zip_jll v17.4.0+2 ⇒ v17.7.0+0[39m
[36m[1m        Info[22m[39m Packages marked with [32m⌃[39m have new versions available and may be upgradable.

[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Project.toml`
  [90m[fe3fc30c] [39m[91m- AstroImages v0.5.0[39m
  [90m[6e4b80f9] [39m[91m- BenchmarkTools v1.5.0[39m
  [90m[336ed68f] [39m[91m- CSV v0.10.15[39m
  [90m[13f3f980] [39m[91m- CairoMakie v0.12.18[39m
  [90m[324d7699] [39m[91m- CategoricalArrays v0.10.8[39m
  [90m[a93c6f00] [39m[91m- DataFrames v1.7.0[39m
  [90m[cc61a311] [39m[91m- FLoops v0.2.2[39m
  [90m[bdcacae8] [39m[91m- LoopVectorization v0.12.171[39m
  [90m[eff96d63] [39m[91m- Measurements v2.11.0[39m
  [90m[5ad8b20f] [39m[91m- PhysicalConstants v0.2.3[39m
  [90m[91a5bcdd] [39m[91m- Plots v1.40.9[39m
  [90m[438e738f] [39m[91m- PyCall v1.96.4[39m
  [90m[6099a3de] [39m[91m- PythonCall v0.9.23[39m
  [90m[f2c56810] [39m[91m- SpectralFitting v0.6.2[39m
  [90m[10745b16] [39m[91m- Statistics v1.11.1[39m
  [90m[1986cc42] [39m[91m- Unitful v1.21.1[39m
  [90m[6112ee07] [39m[91m- UnitfulAstro v1.2.1[39m
  [90m[e051c099] [39m[91m- XSPECModels v0.1.1[39m
  [90m[8ba89e20] [39m[91m- Distributed v1.11.0[39m
  [90m[37e2e46d] [39m[91m- LinearAlgebra v1.11.0[39m
  [90m[44cfe95a] [39m[91m- Pkg v1.11.0[39m
  [90m[cf7118a7] [39m[91m- UUIDs v1.11.0[39m
[32m[1m    Updating[22m[39m `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_gguafptmlr/Manifest.toml`
  [90m[47edcb42] [39m[91m- ADTypes v1.11.0[39m
  [90m[621f4979] [39m[91m- AbstractFFTs v1.5.0[39m
  [90m[1520ce14] [39m[91m- AbstractTrees v0.4.5[39m
  [90m[7d9f7c33] [39m[91m- Accessors v0.1.39[39m
  [90m[79e6a3ab] [39m[91m- Adapt v4.1.1[39m
  [90m[35492f91] [39m[91m- AdaptivePredicates v1.2.0[39m
  [90m[66dad0bd] [39m[91m- AliasTables v1.1.3[39m
  [90m[27a7e980] [39m[91m- Animations v0.4.2[39m
  [90m[dce04be8] [39m[91m- ArgCheck v2.4.0[39m
  [90m[4fba245c] [39m[91m- ArrayInterface v7.18.0[39m
  [90m[5c4adb95] [39m[91m- AstroAngles v0.1.4[39m
  [90m[fe3fc30c] [39m[91m- AstroImages v0.5.0[39m
  [90m[a9b6321e] [39m[91m- Atomix v1.0.1[39m
  [90m[67c07d97] [39m[91m- Automa v1.1.0[39m
  [90m[13072b0f] [39m[91m- AxisAlgorithms v1.1.0[39m
  [90m[39de3d68] [39m[91m- AxisArrays v0.4.7[39m
  [90m[198e06fe] [39m[91m- BangBang v0.4.3[39m
  [90m[9718e550] [39m[91m- Baselet v0.1.1[39m
  [90m[6e4b80f9] [39m[91m- BenchmarkTools v1.5.0[39m
  [90m[d1d4a3ce] [39m[91m- BitFlags v0.1.9[39m
  [90m[62783981] [39m[91m- BitTwiddlingConvenienceFunctions v0.1.6[39m
  [90m[e1450e63] [39m[91m- BufferedStreams v1.2.2[39m
  [90m[fa961155] [39m[91m- CEnum v0.5.0[39m
  [90m[3b1b4be9] [39m[91m- CFITSIO v1.4.2[39m
  [90m[2a0fbf3d] [39m[91m- CPUSummary v0.2.6[39m
  [90m[336ed68f] [39m[91m- CSV v0.10.15[39m
  [90m[159f3aea] [39m[91m- Cairo v1.1.1[39m
  [90m[13f3f980] [39m[91m- CairoMakie v0.12.18[39m
  [90m[49dc2e85] [39m[91m- Calculus v0.5.2[39m
  [90m[324d7699] [39m[91m- CategoricalArrays v0.10.8[39m
  [90m[082447d4] [39m[91m- ChainRules v1.72.1[39m
  [90m[d360d2e6] [39m[91m- ChainRulesCore v1.25.0[39m
  [90m[fb6a15b2] [39m[91m- CloseOpenIntervals v0.1.13[39m
  [90m[944b1d66] [39m[91m- CodecZlib v0.7.6[39m
  [90m[a2cac450] [39m[91m- ColorBrewer v0.4.0[39m
  [90m[35d6a980] [39m[91m- ColorSchemes v3.27.1[39m
  [90m[c3611d14] [39m[91m- ColorVectorSpace v0.10.0[39m
  [90m[5ae59095] [39m[91m- Colors v0.12.11[39m
  [90m[38540f10] [39m[91m- CommonSolve v0.2.4[39m
  [90m[bbf7d656] [39m[91m- CommonSubexpressions v0.3.1[39m
  [90m[f70d9fcc] [39m[91m- CommonWorldInvalidations v1.0.0[39m
  [90m[34da2185] [39m[91m- Compat v4.16.0[39m
  [90m[a33af91c] [39m[91m- CompositionsBase v0.1.2[39m
  [90m[2569d6c7] [39m[91m- ConcreteStructs v0.2.3[39m
  [90m[f0e56b4a] [39m[91m- ConcurrentUtilities v2.4.3[39m
  [90m[8f4d0f93] [39m[91m- Conda v1.10.2[39m
  [90m[992eb4ea] [39m[91m- CondaPkg v0.2.24[39m
  [90m[88cd18e8] [39m[91m- ConsoleProgressMonitor v0.1.2[39m
  [90m[187b0558] [39m[91m- ConstructionBase v1.5.8[39m
  [90m[6add18c4] [39m[91m- ContextVariablesX v0.1.3[39m
  [90m[d38c429a] [39m[91m- Contour v0.6.3[39m
  [90m[adafc99b] [39m[91m- CpuId v0.3.1[39m
  [90m[a8cc5b0e] [39m[91m- Crayons v4.1.1[39m
  [90m[9a962f9c] [39m[91m- DataAPI v1.16.0[39m
  [90m[a93c6f00] [39m[91m- DataFrames v1.7.0[39m
  [90m[82cc6244] [39m[91m- DataInterpolations v6.6.0[39m
  [90m[864edb3b] [39m[91m- DataStructures v0.18.20[39m
  [90m[e2d170a0] [39m[91m- DataValueInterfaces v1.0.0[39m
  [90m[244e2a9f] [39m[91m- DefineSingletons v0.1.2[39m
  [90m[927a84f5] [39m[91m- DelaunayTriangulation v1.6.3[39m
  [90m[8bb1440f] [39m[91m- DelimitedFiles v1.9.1[39m
  [90m[163ba53b] [39m[91m- DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[91m- DiffRules v1.15.1[39m
  [90m[a0c0ee7d] [39m[91m- DifferentiationInterface v0.6.28[39m
  [90m[0703355e] [39m[91m- DimensionalData v0.27.9[39m
  [90m[31c24e10] [39m[91m- Distributions v0.25.115[39m
  [90m[ffbed154] [39m[91m- DocStringExtensions v0.9.3[39m
  [90m[4e289a0a] [39m[91m- EnumX v1.0.4[39m
  [90m[429591f6] [39m[91m- ExactPredicates v2.2.8[39m
  [90m[460bff9d] [39m[91m- ExceptionUnwrapping v0.1.11[39m
  [90m[e2ba6199] [39m[91m- ExprTools v0.1.10[39m
  [90m[6b7a57c9] [39m[91m- Expronicon v0.8.5[39m
  [90m[95c220a8] [39m[91m- ExtendableSparse v1.6.0[39m
  [90m[411431e0] [39m[91m- Extents v0.1.4[39m
  [90m[c87230d0] [39m[91m- FFMPEG v0.4.2[39m
  [90m[7a1cc6ca] [39m[91m- FFTW v1.8.0[39m
  [90m[525bcba6] [39m[91m- FITSIO v0.17.4[39m
  [90m[cc61a311] [39m[91m- FLoops v0.2.2[39m
  [90m[b9860ae5] [39m[91m- FLoopsBase v0.1.1[39m
  [90m[9aa1b823] [39m[91m- FastClosures v0.3.2[39m
  [90m[5789e2e9] [39m[91m- FileIO v1.16.6[39m
  [90m[8fc22ac5] [39m[91m- FilePaths v0.8.3[39m
  [90m[48062228] [39m[91m- FilePathsBase v0.9.22[39m
  [90m[1a297f60] [39m[91m- FillArrays v1.13.0[39m
  [90m[64ca27bc] [39m[91m- FindFirstFunctions v1.4.1[39m
  [90m[6a86dc24] [39m[91m- FiniteDiff v2.26.2[39m
  [90m[1fa38f19] [39m[91m- Format v1.3.7[39m
  [90m[f6369f11] [39m[91m- ForwardDiff v0.10.38[39m
  [90m[b38be410] [39m[91m- FreeType v4.1.1[39m
  [90m[663a7486] [39m[91m- FreeTypeAbstraction v0.10.6[39m
  [90m[069b7b12] [39m[91m- FunctionWrappers v1.1.3[39m
  [90m[77dc65aa] [39m[91m- FunctionWrappersWrappers v0.1.3[39m
  [90m[38e38edf] [39m[91m- GLM v1.9.0[39m
  [90m[0c68f7d7] [39m[91m- GPUArrays v11.1.0[39m
  [90m[46192b85] [39m[91m- GPUArraysCore v0.2.0[39m
  [90m[28b8d3ca] [39m[91m- GR v0.73.10[39m
  [90m[68eda718] [39m[91m- GeoFormatTypes v0.4.2[39m
  [90m[cf35fbd7] [39m[91m- GeoInterface v1.4.0[39m
  [90m[5c1252a2] [39m[91m- GeometryBasics v0.4.11[39m
  [90m[a2bd30eb] [39m[91m- Graphics v1.1.3[39m
  [90m[3955a311] [39m[91m- GridLayoutBase v0.11.1[39m
  [90m[42e2da0e] [39m[91m- Grisu v1.0.2[39m
  [90m[cd3eb016] [39m[91m- HTTP v1.10.15[39m
  [90m[3e5b6fbb] [39m[91m- HostCPUFeatures v0.1.17[39m
  [90m[34004b35] [39m[91m- HypergeometricFunctions v0.3.25[39m
  [90m[88f59080] [39m[91m- ILUZero v0.2.0[39m
  [90m[7869d1d1] [39m[91m- IRTools v0.4.14[39m
  [90m[615f187c] [39m[91m- IfElse v0.1.1[39m
  [90m[2803e5a7] [39m[91m- ImageAxes v0.6.12[39m
  [90m[c817782e] [39m[91m- ImageBase v0.1.7[39m
  [90m[a09fc81d] [39m[91m- ImageCore v0.10.5[39m
  [90m[82e4d734] [39m[91m- ImageIO v0.6.9[39m
  [90m[bc367c6b] [39m[91m- ImageMetadata v0.9.10[39m
  [90m[4e3cecfd] [39m[91m- ImageShow v0.3.8[39m
  [90m[9b13fd28] [39m[91m- IndirectArrays v1.0.0[39m
  [90m[d25df0c9] [39m[91m- Inflate v0.1.5[39m
  [90m[22cec73e] [39m[91m- InitialValues v0.3.1[39m
  [90m[842dd82b] [39m[91m- InlineStrings v1.4.2[39m
  [90m[18e54dd8] [39m[91m- IntegerMathUtils v0.1.2[39m
  [90m[85a1e053] [39m[91m- Interfaces v0.3.2[39m
  [90m[a98d9a8b] [39m[91m- Interpolations v0.15.1[39m
  [90m[d1acc4aa] [39m[91m- IntervalArithmetic v0.22.21[39m
  [90m[8197267c] [39m[91m- IntervalSets v0.7.10[39m
  [90m[3587e190] [39m[91m- InverseFunctions v0.1.17[39m
  [90m[41ab1584] [39m[91m- InvertedIndices v1.3.1[39m
  [90m[92d709cd] [39m[91m- IrrationalConstants v0.2.2[39m
  [90m[f1662d9f] [39m[91m- Isoband v0.1.1[39m
  [90m[c8e1da08] [39m[91m- IterTools v1.10.0[39m
  [90m[42fd0dbc] [39m[91m- IterativeSolvers v0.9.4[39m
  [90m[82899510] [39m[91m- IteratorInterfaceExtensions v1.0.0[39m
  [90m[033835bb] [39m[91m- JLD2 v0.5.10[39m
  [90m[1019f520] [39m[91m- JLFzf v0.1.9[39m
  [90m[692b3bcd] [39m[91m- JLLWrappers v1.7.0[39m
  [90m[0f8b85d8] [39m[91m- JSON3 v1.14.1[39m
  [90m[b835a17e] [39m[91m- JpegTurbo v0.1.5[39m
  [90m[b14d175d] [39m[91m- JuliaVariables v0.2.4[39m
  [90m[63c18a36] [39m[91m- KernelAbstractions v0.9.31[39m
  [90m[5ab0869b] [39m[91m- KernelDensity v0.6.9[39m
  [90m[5be7bae1] [39m[91m- LBFGSB v0.4.1[39m
  [90m[929cbde3] [39m[91m- LLVM v9.1.3[39m
  [90m[b964fa9f] [39m[91m- LaTeXStrings v1.4.0[39m
  [90m[23fbe1c1] [39m[91m- Latexify v0.16.5[39m
  [90m[73f95e8e] [39m[91m- LatticeRules v0.0.1[39m
  [90m[10f19ff3] [39m[91m- LayoutPointers v0.1.17[39m
  [90m[8cdb02fc] [39m[91m- LazyModules v0.3.1[39m
  [90m[1d6d02ad] [39m[91m- LeftChildRightSiblingTrees v0.2.0[39m
  [90m[2ec943e9] [39m[91m- Libz v1.0.1[39m
  [90m[2ab3a3ac] [39m[91m- LogExpFunctions v0.3.29[39m
  [90m[e6f89c97] [39m[91m- LoggingExtras v1.1.0[39m
  [90m[bdcacae8] [39m[91m- LoopVectorization v0.12.171[39m
  [90m[2fda8390] [39m[91m- LsqFit v0.15.0[39m
  [90m[d8e11817] [39m[91m- MLStyle v0.4.17[39m
  [90m[1914dd2f] [39m[91m- MacroTools v0.5.13[39m
  [90m[ee78f7c6] [39m[91m- Makie v0.21.18[39m
  [90m[20f20a25] [39m[91m- MakieCore v0.8.12[39m
  [90m[d125e4d3] [39m[91m- ManualMemory v0.1.8[39m
  [90m[dbb5928d] [39m[91m- MappedArrays v0.4.2[39m
  [90m[0a4f8689] [39m[91m- MathTeXEngine v0.6.2[39m
  [90m[739be429] [39m[91m- MbedTLS v1.1.9[39m
  [90m[eff96d63] [39m[91m- Measurements v2.11.0[39m
  [90m[442fdcdd] [39m[91m- Measures v0.3.2[39m
  [90m[128add7d] [39m[91m- MicroCollections v0.2.0[39m
  [90m[0b3b1443] [39m[91m- MicroMamba v0.1.14[39m
  [90m[e1d29d7a] [39m[91m- Missings v1.2.0[39m
  [90m[e94cdb99] [39m[91m- MosaicViews v0.3.4[39m
  [90m[d41bc354] [39m[91m- NLSolversBase v7.8.3[39m
  [90m[77ba4419] [39m[91m- NaNMath v1.0.2[39m
  [90m[71a1bf82] [39m[91m- NameResolution v0.1.5[39m
  [90m[f09324ee] [39m[91m- Netpbm v1.1.1[39m
  [90m[510215fc] [39m[91m- Observables v0.5.5[39m
  [90m[6fe1bfb0] [39m[91m- OffsetArrays v1.15.0[39m
  [90m[52e1d378] [39m[91m- OpenEXR v0.3.3[39m
  [90m[4d8831e6] [39m[91m- OpenSSL v1.4.3[39m
  [90m[7f7a1694] [39m[91m- Optimization v4.0.5[39m
  [90m[bca83a33] [39m[91m- OptimizationBase v2.4.0[39m
  [90m[bac558e1] [39m[91m- OrderedCollections v1.7.0[39m
  [90m[90014a1f] [39m[91m- PDMats v0.11.31[39m
  [90m[f57f5aa1] [39m[91m- PNGFiles v0.4.3[39m
  [90m[19eb6ba3] [39m[91m- Packing v0.5.1[39m
  [90m[5432bcbf] [39m[91m- PaddedViews v0.5.12[39m
  [90m[5ad8b20f] [39m[91m- PhysicalConstants v0.2.3[39m
  [90m[fa939f87] [39m[91m- Pidfile v1.3.0[39m
  [90m[b98c9c47] [39m[91m- Pipe v1.3.0[39m
  [90m[eebad327] [39m[91m- PkgVersion v0.3.3[39m
  [90m[ccf2f8ad] [39m[91m- PlotThemes v3.3.0[39m
  [90m[995b91a9] [39m[91m- PlotUtils v1.4.3[39m
  [90m[91a5bcdd] [39m[91m- Plots v1.40.9[39m
  [90m[1d0040c9] [39m[91m- PolyesterWeave v0.2.2[39m
  [90m[647866c9] [39m[91m- PolygonOps v0.1.2[39m
  [90m[2dfb63ee] [39m[91m- PooledArrays v1.4.3[39m
  [90m[d236fae5] [39m[91m- PreallocationTools v0.4.24[39m
  [90m[8162dcfd] [39m[91m- PrettyPrint v0.2.0[39m
  [90m[08abe8d2] [39m[91m- PrettyTables v2.4.0[39m
  [90m[27ebfcd6] [39m[91m- Primes v0.5.6[39m
  [90m[33c8b6b6] [39m[91m- ProgressLogging v0.1.4[39m
  [90m[92933f4c] [39m[91m- ProgressMeter v1.10.2[39m
  [90m[43287f4e] [39m[91m- PtrArrays v1.2.1[39m
  [90m[438e738f] [39m[91m- PyCall v1.96.4[39m
  [90m[6099a3de] [39m[91m- PythonCall v0.9.23[39m
  [90m[4b34888f] [39m[91m- QOI v1.0.1[39m
  [90m[1fd47b50] [39m[91m- QuadGK v2.11.1[39m
  [90m[8a4e6c94] [39m[91m- QuasiMonteCarlo v0.3.3[39m
  [90m[b3c3ace0] [39m[91m- RangeArrays v0.3.2[39m
  [90m[c84ed2f1] [39m[91m- Ratios v0.4.5[39m
  [90m[c1ae055f] [39m[91m- RealDot v0.1.0[39m
  [90m[3cdcf5f2] [39m[91m- RecipesBase v1.3.4[39m
  [90m[01d81517] [39m[91m- RecipesPipeline v0.6.12[39m
  [90m[731186ca] [39m[91m- RecursiveArrayTools v3.27.4[39m
  [90m[05181044] [39m[91m- RelocatableFolders v1.0.1[39m
  [90m[ae029012] [39m[91m- Requires v1.3.0[39m
  [90m[79098fc4] [39m[91m- Rmath v0.8.0[39m
  [90m[f2b01f46] [39m[91m- Roots v2.2.2[39m
  [90m[5eaf0fd0] [39m[91m- RoundingEmulator v0.2.1[39m
  [90m[7e49a35a] [39m[91m- RuntimeGeneratedFunctions v0.5.13[39m
  [90m[fdea26ae] [39m[91m- SIMD v3.7.0[39m
  [90m[94e857df] [39m[91m- SIMDTypes v0.1.0[39m
  [90m[476501e8] [39m[91m- SLEEFPirates v0.6.43[39m
  [90m[0bca4576] [39m[91m- SciMLBase v2.70.0[39m
  [90m[c0aeaf25] [39m[91m- SciMLOperators v0.3.12[39m
  [90m[53ae85a6] [39m[91m- SciMLStructures v1.6.1[39m
  [90m[6c6a2e73] [39m[91m- Scratch v1.2.1[39m
  [90m[91c51154] [39m[91m- SentinelArrays v1.4.8[39m
  [90m[efcf1570] [39m[91m- Setfield v1.1.1[39m
  [90m[65257c39] [39m[91m- ShaderAbstractions v0.4.1[39m
  [90m[1277b4bf] [39m[91m- ShiftedArrays v2.0.0[39m
  [90m[992d4aef] [39m[91m- Showoff v1.0.3[39m
  [90m[73760f76] [39m[91m- SignedDistanceFields v0.4.0[39m
  [90m[777ac1f9] [39m[91m- SimpleBufferStream v1.2.0[39m
  [90m[699a6c99] [39m[91m- SimpleTraits v0.9.4[39m
  [90m[45858cf5] [39m[91m- Sixel v0.1.3[39m
  [90m[ed01d8cd] [39m[91m- Sobol v1.5.0[39m
  [90m[a2af1166] [39m[91m- SortingAlgorithms v1.2.1[39m
  [90m[9f842d2f] [39m[91m- SparseConnectivityTracer v0.6.9[39m
  [90m[dc90abb0] [39m[91m- SparseInverseSubset v0.1.2[39m
  [90m[0a514795] [39m[91m- SparseMatrixColorings v0.4.10[39m
  [90m[e56a9233] [39m[91m- Sparspak v0.3.9[39m
  [90m[276daf66] [39m[91m- SpecialFunctions v2.5.0[39m
  [90m[f2c56810] [39m[91m- SpectralFitting v0.6.2[39m
  [90m[171d559e] [39m[91m- SplittablesBase v0.1.15[39m
  [90m[860ef19b] [39m[91m- StableRNGs v1.0.2[39m
  [90m[cae243ae] [39m[91m- StackViews v0.1.1[39m
  [90m[aedffcd0] [39m[91m- Static v1.1.1[39m
  [90m[0d7ed370] [39m[91m- StaticArrayInterface v1.8.0[39m
  [90m[90137ffa] [39m[91m- StaticArrays v1.9.10[39m
  [90m[1e83bf80] [39m[91m- StaticArraysCore v1.4.3[39m
  [90m[82ae8749] [39m[91m- StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[91m- StatsBase v0.34.4[39m
  [90m[4c63d2b9] [39m[91m- StatsFuns v1.3.2[39m
  [90m[3eaba693] [39m[91m- StatsModels v0.7.4[39m
  [90m[892a3eda] [39m[91m- StringManipulation v0.4.0[39m
  [90m[09ab397b] [39m[91m- StructArrays v0.6.21[39m
  [90m[856f2bd8] [39m[91m- StructTypes v1.11.0[39m
  [90m[6fc51010] [39m[91m- Surrogates v6.10.0[39m
  [90m[2efcf032] [39m[91m- SymbolicIndexingInterface v0.3.36[39m
  [90m[3783bdb8] [39m[91m- TableTraits v1.0.1[39m
  [90m[bd369af6] [39m[91m- Tables v1.12.0[39m
  [90m[62fd8b95] [39m[91m- TensorCore v0.1.1[39m
  [90m[5d786b92] [39m[91m- TerminalLoggers v0.1.7[39m
  [90m[8290d209] [39m[91m- ThreadingUtilities v0.5.2[39m
  [90m[731e570b] [39m[91m- TiffImages v0.11.2[39m
  [90m[3bb67fe8] [39m[91m- TranscodingStreams v0.11.3[39m
  [90m[28d57a85] [39m[91m- Transducers v0.4.84[39m
  [90m[981d1d27] [39m[91m- TriplotBase v0.1.0[39m
  [90m[3a884ed6] [39m[91m- UnPack v1.0.2[39m
  [90m[1cfade01] [39m[91m- UnicodeFun v0.4.1[39m
  [90m[1986cc42] [39m[91m- Unitful v1.21.1[39m
  [90m[6fb2a4bd] [39m[91m- UnitfulAngles v0.7.2[39m
  [90m[6112ee07] [39m[91m- UnitfulAstro v1.2.1[39m
  [90m[45397f5d] [39m[91m- UnitfulLatexify v1.6.4[39m
  [90m[013be700] [39m[91m- UnsafeAtomics v0.3.0[39m
  [90m[e17b2a0c] [39m[91m- UnsafePointers v1.0.0[39m
  [90m[41fe7b60] [39m[91m- Unzip v0.2.0[39m
  [90m[3d5dd08c] [39m[91m- VectorizationBase v0.21.71[39m
  [90m[81def892] [39m[91m- VersionParsing v1.3.0[39m
  [90m[15f3aee2] [39m[91m- WCS v0.6.2[39m
  [90m[ea10d353] [39m[91m- WeakRefStrings v1.4.2[39m
  [90m[e3aaa7dc] [39m[91m- WebP v0.1.3[39m
  [90m[efce3f68] [39m[91m- WoodburyMatrices v1.0.0[39m
  [90m[76eceee3] [39m[91m- WorkerUtilities v1.6.1[39m
  [90m[e051c099] [39m[91m- XSPECModels v0.1.1[39m
  [90m[e88e6eb3] [39m[91m- Zygote v0.6.74[39m
  [90m[700de1a5] [39m[91m- ZygoteRules v0.2.5[39m
  [90m[6e34b625] [39m[91m- Bzip2_jll v1.0.8+3[39m
  [90m[b3e40c51] [39m[91m- CFITSIO_jll v4.4.0+0[39m
  [90m[4e9b3aee] [39m[91m- CRlibm_jll v1.0.1+0[39m
  [90m[83423d85] [39m[91m- Cairo_jll v1.18.2+1[39m
  [90m[ee1fde0b] [39m[91m- Dbus_jll v1.14.10+0[39m
  [90m[5ae413db] [39m[91m- EarCut_jll v2.2.4+0[39m
  [90m[2702e6a9] [39m[91m- EpollShim_jll v0.0.20230411+1[39m
  [90m[2e619515] [39m[91m- Expat_jll v2.6.4+2[39m
  [90m[b22a6f82] [39m[91m- FFMPEG_jll v4.4.4+1[39m
  [90m[f5851436] [39m[91m- FFTW_jll v3.3.10+2[39m
  [90m[a3f928ae] [39m[91m- Fontconfig_jll v2.15.0+0[39m
  [90m[d7e528f0] [39m[91m- FreeType2_jll v2.13.3+1[39m
  [90m[559328eb] [39m[91m- FriBidi_jll v1.0.16+0[39m
  [90m[0656b61e] [39m[91m- GLFW_jll v3.4.0+2[39m
  [90m[d2c73de3] [39m[91m- GR_jll v0.73.10+0[39m
  [90m[78b55507] [39m[91m- Gettext_jll v0.21.0+0[39m
  [90m[59f7168a] [39m[91m- Giflib_jll v5.2.2+1[39m
  [90m[7746bdde] [39m[91m- Glib_jll v2.82.4+0[39m
  [90m[3b182d85] [39m[91m- Graphite2_jll v1.3.14+1[39m
  [90m[2e76f6c2] [39m[91m- HarfBuzz_jll v8.5.0+0[39m
  [90m[905a6f67] [39m[91m- Imath_jll v3.1.11+0[39m
  [90m[1d5cc7b8] [39m[91m- IntelOpenMP_jll v2024.2.1+0[39m
  [90m[aacddb02] [39m[91m- JpegTurbo_jll v3.1.0+1[39m
  [90m[c1c5ebd0] [39m[91m- LAME_jll v3.100.2+0[39m
  [90m[88015f11] [39m[91m- LERC_jll v4.0.0+2[39m
  [90m[dad2f222] [39m[91m- LLVMExtra_jll v0.0.34+0[39m
  [90m[1d63c593] [39m[91m- LLVMOpenMP_jll v18.1.7+0[39m
  [90m[dd4b983a] [39m[91m- LZO_jll v2.10.2+2[39m
  [90m[81d17ec3] [39m[91m- L_BFGS_B_jll v3.0.1+0[39m
  [90m[50917eeb] [39m[91m- LibXSPEC_jll v0.1.15+1[39m
  [90m[e9f186c6] [39m[91m- Libffi_jll v3.2.2+2[39m
  [90m[d4300ac3] [39m[91m- Libgcrypt_jll v1.11.0+0[39m
  [90m[7e76a0d4] [39m[91m- Libglvnd_jll v1.7.0+0[39m
  [90m[7add5ba3] [39m[91m- Libgpg_error_jll v1.51.0+1[39m
  [90m[94ce4f54] [39m[91m- Libiconv_jll v1.17.0+1[39m
  [90m[4b2f31a3] [39m[91m- Libmount_jll v2.40.2+1[39m
  [90m[89763e89] [39m[91m- Libtiff_jll v4.7.0+0[39m
  [90m[38a345b3] [39m[91m- Libuuid_jll v2.40.2+1[39m
  [90m[856f044c] [39m[91m- MKL_jll v2024.2.0+0[39m
  [90m[c8ffd9c3] [39m[91m- MbedTLS_jll v2.28.6+0[39m
  [90m[68e3532b] [39m[91m- Ncurses_jll v6.5.0+1[39m
  [90m[e7412a2a] [39m[91m- Ogg_jll v1.3.5+1[39m
  [90m[18a262bb] [39m[91m- OpenEXR_jll v3.2.4+0[39m
  [90m[efe28fd5] [39m[91m- OpenSpecFun_jll v0.5.5+1[39m
  [90m[91d4177d] [39m[91m- Opus_jll v1.3.3+0[39m
  [90m[36c8627f] [39m[91m- Pango_jll v1.55.5+0[39m
  [90m[30392449] [39m[91m- Pixman_jll v0.43.4+0[39m
  [90m[c0090381] [39m[91m- Qt6Base_jll v6.7.1+1[39m
  [90m[629bc702] [39m[91m- Qt6Declarative_jll v6.7.1+2[39m
  [90m[ce943373] [39m[91m- Qt6ShaderTools_jll v6.7.1+1[39m
  [90m[e99dba38] [39m[91m- Qt6Wayland_jll v6.7.1+1[39m
  [90m[f50d1b31] [39m[91m- Rmath_jll v0.5.1+0[39m
  [90m[a44049a8] [39m[91m- Vulkan_Loader_jll v1.3.243+0[39m
  [90m[550c8279] [39m[91m- WCS_jll v7.7.0+0[39m
  [90m[a2964d1f] [39m[91m- Wayland_jll v1.21.0+2[39m
  [90m[2381bf8a] [39m[91m- Wayland_protocols_jll v1.36.0+0[39m
  [90m[02c8fc9c] [39m[91m- XML2_jll v2.13.5+0[39m
  [90m[aed1982a] [39m[91m- XSLT_jll v1.1.42+0[39m
  [90m[ffd25f8a] [39m[91m- XZ_jll v5.6.3+1[39m
  [90m[f67eecfb] [39m[91m- Xorg_libICE_jll v1.1.1+0[39m
  [90m[c834827a] [39m[91m- Xorg_libSM_jll v1.2.4+0[39m
  [90m[4f6342f7] [39m[91m- Xorg_libX11_jll v1.8.6+2[39m
  [90m[0c0b7dd1] [39m[91m- Xorg_libXau_jll v1.0.11+2[39m
  [90m[935fb764] [39m[91m- Xorg_libXcursor_jll v1.2.3+0[39m
  [90m[a3789734] [39m[91m- Xorg_libXdmcp_jll v1.1.4+2[39m
  [90m[1082639a] [39m[91m- Xorg_libXext_jll v1.3.6+2[39m
  [90m[d091e8ba] [39m[91m- Xorg_libXfixes_jll v6.0.0+0[39m
  [90m[a51aa0fd] [39m[91m- Xorg_libXi_jll v1.8.2+0[39m
  [90m[d1454406] [39m[91m- Xorg_libXinerama_jll v1.1.5+0[39m
  [90m[ec84b674] [39m[91m- Xorg_libXrandr_jll v1.5.4+0[39m
  [90m[ea2f1a96] [39m[91m- Xorg_libXrender_jll v0.9.11+1[39m
  [90m[14d82f49] [39m[91m- Xorg_libpthread_stubs_jll v0.1.1+2[39m
  [90m[c7cfdc94] [39m[91m- Xorg_libxcb_jll v1.17.0+2[39m
  [90m[cc61e674] [39m[91m- Xorg_libxkbfile_jll v1.1.2+1[39m
  [90m[e920d4aa] [39m[91m- Xorg_xcb_util_cursor_jll v0.1.4+0[39m
  [90m[12413925] [39m[91m- Xorg_xcb_util_image_jll v0.4.0+1[39m
  [90m[2def613f] [39m[91m- Xorg_xcb_util_jll v0.4.0+1[39m
  [90m[975044d2] [39m[91m- Xorg_xcb_util_keysyms_jll v0.4.0+1[39m
  [90m[0d47668e] [39m[91m- Xorg_xcb_util_renderutil_jll v0.3.9+1[39m
  [90m[c22f9ab0] [39m[91m- Xorg_xcb_util_wm_jll v0.4.1+1[39m
  [90m[35661453] [39m[91m- Xorg_xkbcomp_jll v1.4.6+1[39m
  [90m[33bec58e] [39m[91m- Xorg_xkeyboard_config_jll v2.39.0+0[39m
  [90m[c5fb5394] [39m[91m- Xorg_xtrans_jll v1.5.0+2[39m
  [90m[3161d3a3] [39m[91m- Zstd_jll v1.5.6+2[39m
  [90m[35ca27e7] [39m[91m- eudev_jll v3.2.9+0[39m
  [90m[214eeab7] [39m[91m- fzf_jll v0.56.3+0[39m
  [90m[1a1c6b14] [39m[91m- gperf_jll v3.1.1+1[39m
  [90m[9a68df92] [39m[91m- isoband_jll v0.2.3+0[39m
  [90m[a4ae2306] [39m[91m- libaom_jll v3.9.0+0[39m
  [90m[0ac62f75] [39m[91m- libass_jll v0.15.2+0[39m
  [90m[1183f4f0] [39m[91m- libdecor_jll v0.2.2+0[39m
  [90m[2db6ffa8] [39m[91m- libevdev_jll v1.11.0+0[39m
  [90m[f638f0a6] [39m[91m- libfdk_aac_jll v2.0.3+0[39m
  [90m[36db933b] [39m[91m- libinput_jll v1.18.0+0[39m
  [90m[b53b4c65] [39m[91m- libpng_jll v1.6.44+1[39m
  [90m[075b6546] [39m[91m- libsixel_jll v1.10.3+2[39m
  [90m[f27f6e37] [39m[91m- libvorbis_jll v1.3.7+2[39m
  [90m[c5f90fcd] [39m[91m- libwebp_jll v1.4.0+0[39m
  [90m[f8abcde7] [39m[91m- micromamba_jll v1.5.8+0[39m
  [90m[009596ad] [39m[91m- mtdev_jll v1.1.6+0[39m
  [90m[1317d2d5] [39m[91m- oneTBB_jll v2021.12.0+0[39m
  [90m[1270edf5] [39m[91m- x264_jll v2021.5.5+0[39m
  [90m[dfaa095f] [39m[91m- x265_jll v3.5.0+0[39m
  [90m[d8fb68d0] [39m[91m- xkbcommon_jll v1.4.1+2[39m
  [90m[8bf52ea8] [39m[91m- CRC32c v1.11.0[39m
  [90m[8ba89e20] [39m[91m- Distributed v1.11.0[39m
  [90m[f43a241f] [39m[93m↑ Downloads v1.6.0 ⇒ v1.7.0[39m
  [90m[9fa8497b] [39m[91m- Future v1.11.0[39m
  [90m[ac6e5ff7] [39m[92m+ JuliaSyntaxHighlighting v1.12.0[39m
  [90m[4af54fe1] [39m[91m- LazyArtifacts v1.11.0[39m
  [90m[37e2e46d] [39m[93m↑ LinearAlgebra v1.11.0 ⇒ v1.12.0[39m
  [90m[ca575930] [39m[93m↑ NetworkOptions v1.2.0 ⇒ v1.3.0[39m
  [90m[44cfe95a] [39m[93m↑ Pkg v1.11.0 ⇒ v1.12.1[39m
  [90m[9abbd945] [39m[91m- Profile v1.11.0[39m
  [90m[3fa0cd96] [39m[91m- REPL v1.11.0[39m
  [90m[1a1011a3] [39m[91m- SharedArrays v1.11.0[39m
  [90m[6462fe0b] [39m[91m- Sockets v1.11.0[39m
  [90m[2f01184e] [39m[91m- SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[91m- SuiteSparse[39m
  [90m[e66e0078] [39m[93m↑ CompilerSupportLibraries_jll v1.1.1+0 ⇒ v1.3.0+1[39m
  [90m[deac9b47] [39m[93m↑ LibCURL_jll v8.6.0+0 ⇒ v8.15.0+0[39m
  [90m[e37daf67] [39m[93m↑ LibGit2_jll v1.7.2+0 ⇒ v1.9.0+0[39m
  [90m[29816b5a] [39m[93m↑ LibSSH2_jll v1.11.0+1 ⇒ v1.11.3+1[39m
  [90m[14a3606d] [39m[93m↑ MozillaCACerts_jll v2023.12.12 ⇒ v2025.11.4[39m
  [90m[4536629a] [39m[93m↑ OpenBLAS_jll v0.3.27+1 ⇒ v0.3.29+0[39m
  [90m[05823500] [39m[91m- OpenLibm_jll v0.8.1+2[39m
  [90m[458c3c95] [39m[93m↑ OpenSSL_jll v3.0.15+2 ⇒ v3.5.4+0[39m
  [90m[efcefdf7] [39m[91m- PCRE2_jll v10.42.0+1[39m
  [90m[bea87d4a] [39m[91m- SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[93m↑ Zlib_jll v1.2.13+1 ⇒ v1.3.1+2[39m
  [90m[8e850b90] [39m[93m↑ libblastrampoline_jll v5.11.0+0 ⇒ v5.15.0+0[39m
  [90m[8e850ede] [39m[93m↑ nghttp2_jll v1.59.0+0 ⇒ v1.64.0+1[39m
  [90m[3f19e933] [39m[93m↑ p7zip_jll v17.4.0+2 ⇒ v17.7.0+0[39m

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39menabled÷restart_recommended_msgrestart_required_msgbusy_packageswaiting_for_permission,waiting_for_permission_but_probably_disabled«cell_inputs .$28487c59-7df4-41b9-859a-79438b1d3b06cell_id$28487c59-7df4-41b9-859a-79438b1d3b06codemetadatashow_logsèdisabled®skip_as_script«code_folded$bc66ff75-77ce-4487-ab2e-72800331839bcell_id$bc66ff75-77ce-4487-ab2e-72800331839bcode|md"""
### The `:` character

The `:` character has two syntatic purposes in Julia. It signifies a `Symbol` or a `Quote`.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$1fbdea1e-ef3a-4ace-ae76-1ccda2273087cell_id$1fbdea1e-ef3a-4ace-ae76-1ccda2273087codemetadatashow_logsèdisabled®skip_as_script«code_folded$63ed8db8-2104-4370-8a75-e9348c50cdf8cell_id$63ed8db8-2104-4370-8a75-e9348c50cdf8codemetadatashow_logsèdisabled®skip_as_script«code_folded$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2cell_id$53ce9042-6f97-4a6e-bfaf-19aa7e313ba2codemd"""
#### Interpolation

Julia allows *interpolation* of literals or expressions into quoted expressions by prefixing a variable with the `$` character. For example.

```julia
begin
a = 1;
ex5 = :($a + b)
dump(ex5)
end
```

Try it.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$8863cbcc-4ff6-4714-b7d8-c39373af384ecell_id$8863cbcc-4ff6-4714-b7d8-c39373af384ecodemetadatashow_logsèdisabled®skip_as_script«code_folded$9064ec91-4ddf-4f7b-890d-2e59265483a1cell_id$9064ec91-4ddf-4f7b-890d-2e59265483a1codemd"""
#### Usage

Macros can be used for many tasks such as performing operations on blocks of code, e.g. timing expressions (`@time`), threading `for` loops (`@threads`), and converting expressions to broadcast form (`@.`). Another use is to generate code. When a significant amount of repetitive boilerplate code is required, it is common to generate it programmatically to avoid redundancy.

Consider the following example.

```julia
struct MyNumber
    x::Float64
end
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$e7934544-0344-48d3-8046-c3796874e5b3cell_id$e7934544-0344-48d3-8046-c3796874e5b3codemd"""
So, there are three ways to construct an expression allowing the programmer to use whichever one is most convenient.

There is a second syntatic form of quoting, called a `quote` block (i.e. `quote ... end`), that is commonly used for multiple expressions.

Try the following example.

```julia
begin
ex4 = quote
    x = 1
    y = 2
    x + y
end
println(typeof(ex4))
end
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$2e45c794-62f0-4a1b-a346-da291e4c8469cell_id$2e45c794-62f0-4a1b-a346-da291e4c8469codeًmd"""
#### Expression evaluation

Julia will evalution an expression in the global scope using `eval`.

```julia
println(eval(ex1))
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$1522314b-4982-439e-ab97-933869a5f307cell_id$1522314b-4982-439e-ab97-933869a5f307codeمmd"""
```julia
begin
x = foo(2)
x
end
```

!!! note
    The result of the function call is the return type, not the return value.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$12b97064-d8da-49cc-92aa-f5155b5c1b52cell_id$12b97064-d8da-49cc-92aa-f5155b5c1b52code{md"""
Splatting is also possible.

```julia
begin
args = [:x, :y, :x];
dump(:(f(1, $(args...))))
end
```

And this too.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$24368ee3-43e1-44c0-8293-75cc1e8f4f6ccell_id$24368ee3-43e1-44c0-8293-75cc1e8f4f6ccodemetadatashow_logsèdisabled®skip_as_script«code_folded$3de9644d-b66a-45b8-945d-6e000319f2b9cell_id$3de9644d-b66a-45b8-945d-6e000319f2b9code1md"""
```julia
begin
y = foo("bar")
y
end
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$1751fb54-938c-4222-a41a-17ce97f800bccell_id$1751fb54-938c-4222-a41a-17ce97f800bccodemd"""
A slightly shorter version of the above code generator that use the `:` prefix is:

```julia
for op = (:sin, :cos, :tan, :log, :exp)
    eval(:(Base.$op(a::MyNumber) = MyNumber($op(a.x))))
end
```

An even shorter version of the code uses the `@eval` macro.

```julia
for op = (:sin, :cos, :tan, :log, :exp)
    @eval Base.$op(a::MyNumber) = MyNumber($op(a.x))
end
```

For longer blocks of generated code, the `@eval` macro can proceed a code `block`:

```julia
@eval begin
    # multiple lines
end
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$78bb1e78-70ba-4f58-abb0-c0de3272eb50cell_id$78bb1e78-70ba-4f58-abb0-c0de3272eb50code6md"""
Generated functions differ from regular functions in five ways. They:

1. are prefixed by `@generated`. This provides the AST with some additional information.
2. can only access the types of the arguments, not their values.
3. are nonexecuting. They return a quoted expression, not a value.
4. can only call previously defined functions. (Otherwise, `MethodErrors` may result.)
5. must not *mutate* or *observe* any non-constant global state. They can only read global constants, and cannot have side effects. In other words, they must be completely pure.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$8bbe63e8-6a6e-4f96-8025-bbae25983a7ecell_id$8bbe63e8-6a6e-4f96-8025-bbae25983a7ecodeLmd"""
Now invoke the `@sayhello` macro.

```julia
@sayhello("world")
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$c47eb25e-ff42-47a0-9949-11228e3c0535cell_id$c47eb25e-ff42-47a0-9949-11228e3c0535codemetadatashow_logsèdisabled®skip_as_script«code_folded$386c7942-700d-4486-bede-853a6c2ef811cell_id$386c7942-700d-4486-bede-853a6c2ef811codemetadatashow_logsèdisabled®skip_as_script«code_folded$bc5709bd-8c44-4d58-82cc-e14eef20cfe6cell_id$bc5709bd-8c44-4d58-82cc-e14eef20cfe6codemetadatashow_logsèdisabled®skip_as_script«code_folded$c8c898a7-7ec5-4b3f-8875-5901e0ef12fccell_id$c8c898a7-7ec5-4b3f-8875-5901e0ef12fccode٠md"""

#### Basics

Defining a macro is like defining a function. For example,

```julia
macro sayhello(name)
    return :( println("Hello", $name))
end
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523cell_id$ade3dfbb-23bb-4ca6-8a33-3ec16dbed523codemetadatashow_logsèdisabled®skip_as_script«code_folded$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0cell_id$9de33d97-b08d-4a5a-b53a-862c0bfd2cb0codemetadatashow_logsèdisabled®skip_as_script«code_folded$2b1abe2e-fc7a-4d3a-9f65-b820eaff70eacell_id$2b1abe2e-fc7a-4d3a-9f65-b820eaff70eacodeنmd"""
### The Abstract Syntax Tree

```julia
begin
str1 = "3 * 4 + 5"
ex1 = Meta.parse(str1)
println(typeof(ex1))
end
```

Try it.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$6bc277f1-3ab6-4e12-92fc-65e6288af2c1cell_id$6bc277f1-3ab6-4e12-92fc-65e6288af2c1codeٔmd"""
Note that the parsed expression is an `Expr` type.

```julia
dump(ex1)
```

Show or dump the abstract syntax tree (AST) of the expression.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$f09d458f-7846-46a5-a814-b51771bf91b7cell_id$f09d458f-7846-46a5-a814-b51771bf91b7codemetadatashow_logsèdisabled®skip_as_script«code_folded$bcce9741-7e63-4609-9529-0e9323b8eb21cell_id$bcce9741-7e63-4609-9529-0e9323b8eb21codemetadatashow_logsèdisabled®skip_as_script«code_folded$d41b3124-0987-42d5-bd24-28a4c79cfe82cell_id$d41b3124-0987-42d5-bd24-28a4c79cfe82code\md"""
### Generated Functions

A special macro is `@generated`. It defines so-called *generated functions*. They have the capability to generate specialized code depending on the types of their arguments with more flexibility and/or less code than what can be done with multiple dispatch. Macros work with expressions at the AST level and cannot acces the input types. Whereas, generated functions are expanded at the time when the argument types are known, but before the function is compiled.

Here is an example.

```julia
@generated function foo(x)
    Core.println(x)
    return :(x * x)
end
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$3f9fcacd-05e6-4dd7-ba01-491750f3940dcell_id$3f9fcacd-05e6-4dd7-ba01-491750f3940dcodemetadatashow_logsèdisabled®skip_as_script«code_folded$90538e89-e592-4536-99cb-7378ec320b8dcell_id$90538e89-e592-4536-99cb-7378ec320b8dcodemd"""
#### Quoting

The second purpose of the `:` character is to create expression objects without using the explicit `Expr` constructor. This is referred to as *quoting*.

```julia
begin
ex3 = :(3 * 4 + 5)
dump(ex3)
println(ex1 == ex2 == ex3)
end
```

Try this example.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$2494a756-0b40-4b6e-b79f-deb616183384cell_id$2494a756-0b40-4b6e-b79f-deb616183384codeXmd"""
Parentheses around the arguments are optional.

```julia
@sayhello "world"
```
"""metadatashow_logsèdisabled®skip_as_script«code_folded$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38cell_id$c1e446d9-63e9-4b9d-a0da-c1321c7f0a38codeٯmd"""
The `Symbol` constructor takes a variable number of arguments and concatenates them together to create a `Symbol` string.

```julia
Symbol("func", 10)
```

Try this.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$06f3afb2-869a-4e2b-af58-4366b27d0a65cell_id$06f3afb2-869a-4e2b-af58-4366b27d0a65codemetadatashow_logsèdisabled®skip_as_script«code_folded$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01cell_id$3be5ecc9-58cf-457a-a5d4-c9ff6114ba01codemd"""
### Macros
"""metadatashow_logsèdisabled®skip_as_script«code_folded$f7fffc76-3607-4d90-ba75-d521366f7fb1cell_id$f7fffc76-3607-4d90-ba75-d521366f7fb1codemd"""
!!! note
    When using the parenthesized form, there should be no space between the macro name and the parentheses. Otherwise the argument list will be interpreted as a single argument containing a tuple.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$41a9007c-e9a1-4228-be45-55becfffa944cell_id$41a9007c-e9a1-4228-be45-55becfffa944codemd"""
The `Expr` type has two fields, a `head` and an `args`. The `head` declares the item is a function `call` of type `Symbol` and the `args` is an `Array` of function arguments, namely the `+` operator of type `Symbol` and the two values to be added. The first value is another `Expr` type and the second is a 64-bit integer. The second nested `Expr` is also composed of a `Symbol` call. Its arguments are the multiplication `*` operation of type `Symbol` and two 64-bit integers. Note that the multiplication operation is nested in the addition operation, since multiplication has precedence over addition.

Note that the expression `ex1` can be written directly in AST syntax.

```julia
begin
ex2 = Expr(:call, :+, Expr(:call, :*, 3, 4), 5)
dump(ex2)
println(ex1 == ex2)
end
```

Try it.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$a278e94d-1f4c-422c-9ac7-c950750a6ef9cell_id$a278e94d-1f4c-422c-9ac7-c950750a6ef9code9md"""
We want to add a various methods to it. This can be done programmatically using a loop.

```julia
begin
println(length(methods(sin)))
for op = (:sin, :tan, :log, :exp)
    eval(quote
        Base.$op(a::MyNumber) = MyNumber($op(a.x))
    end)
end
println(length(methods(sin)))
end
```

Try this example.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$9c45b534-cd6c-4b3d-9ff4-d035347c87e5cell_id$9c45b534-cd6c-4b3d-9ff4-d035347c87e5codemetadatashow_logsèdisabled®skip_as_script«code_folded$07c96535-102c-4581-bba7-50f37bd766f9cell_id$07c96535-102c-4581-bba7-50f37bd766f9codemd"""
Unlike Matlab, Python, and R, Julia has macros. They are a very powerful programming construct. Macros change existing source code or generate entirely new code. In essence, they simplify programming by automating mundane coding tasks.

Preprocessor "macro" systems, like that of C/C++, work at the source code level by perform textual manipulation and substitution before any parsing or interpretation is done. Whereas, Julia macros work at the level of the abstract syntax tree after parsing, but before compilation is done.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1cell_id$cf199e64-8fb6-4cd1-b2ea-8db5826c5be1codemd"""
In the context of expressions, symbols are used to indicate access to variables. When an expression is evaluated, a symbol is replaced with the value bound to that symbol in the appropriate scope.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$53265062-78c7-434a-8d96-089cdd758bf0cell_id$53265062-78c7-434a-8d96-089cdd758bf0code using PlutoUI; TableOfContents()metadatashow_logsèdisabled®skip_as_script«code_folded$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3dcell_id$6e6829b6-1d2a-46e8-bee2-dd4e116d4b3dcodemetadatashow_logsèdisabled®skip_as_script«code_folded$f1ba0108-fbb7-4128-98f7-89c4f1e25790cell_id$f1ba0108-fbb7-4128-98f7-89c4f1e25790codemetadatashow_logsèdisabled®skip_as_script«code_folded$fb032b39-250b-486d-b0b7-0d21c8556562cell_id$fb032b39-250b-486d-b0b7-0d21c8556562codeٌmd"""
!!! note
    If you prefer writing code as an AST, you can do so in Julia.

    However, you may not be popular with other coders.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8cell_id$61ba1a79-3f3f-4d4f-a43e-e3d8883787e8codemd"""
## Using Macros
"""metadatashow_logsèdisabled®skip_as_script«code_folded$3f2aef09-55c0-40c3-a50d-7081e66c60edcell_id$3f2aef09-55c0-40c3-a50d-7081e66c60edcodemd"""
#### Symbols

A `Symbol` is an interned string used as a building-block of an expression.

```julia
begin
sym = :foo
println(typeof(sym))
println(sym == Symbol("foo"))
end
```

Try it.
"""metadatashow_logsèdisabled®skip_as_script«code_folded$611e0640-dc39-4846-89c9-172bc001e994cell_id$611e0640-dc39-4846-89c9-172bc001e994codemetadatashow_logsèdisabled®skip_as_script«code_folded«notebook_id$6ca04cc8-45d2-11f1-a46d-9f54cb7fbc0bin_temp_dir¨metadata