 bondscell_results A$836cc4be-e6d7-11ea-2a6e-436c187304daqueued¤logsrunning¦outputbodyE<div class="markdown"><h2>Step 1: Select submission files</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA;persist_js_state·has_pluto_hook_features§cell_id$836cc4be-e6d7-11ea-2a6e-436c187304dadepends_on_disabled_cells§runtime r^published_object_keysdepends_on_skipped_cells§errored$728d1ca8-f865-11ea-1a3e-33cb0a44b9ddqueued¤logsrunning¦outputbodyprefixStringelements,"/home/fonsi/hw1/submissions/hw1 - fonsi.jl"text/plain/"/home/fonsi/hw1/submissions/hw1 - template.jl"text/plaintypeArrayprefix_shortobjectid33898dcf67bfdcdmime!application/vnd.pluto.tree+objectrootassigneesubmission_files_EXAMPLElast_run_timestampA^cpersist_js_state·has_pluto_hook_features§cell_id$728d1ca8-f865-11ea-1a3e-33cb0a44b9dddepends_on_disabled_cells§runtime8published_object_keysdepends_on_skipped_cells§errored$65d601a6-fe45-11ea-22c6-270bf7d353bcqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampAL5߰persist_js_state·has_pluto_hook_features§cell_id$65d601a6-fe45-11ea-22c6-270bf7d353bcdepends_on_disabled_cells§runtime   Wpublished_object_keysdepends_on_skipped_cells§errored$4e4e78d2-f865-11ea-0c21-fdd76cbf3532queued¤logsrunning¦outputbody<div class="markdown"><p>You need to write some code that returns the <strong>absolute paths</strong> to the students&#39; homework submissions. The following code works for me, but probably not for you.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA<9persist_js_state·has_pluto_hook_features§cell_id$4e4e78d2-f865-11ea-0c21-fdd76cbf3532depends_on_disabled_cells§runtime $published_object_keysdepends_on_skipped_cells§errored$5ca8fb02-e6e3-11ea-0ad6-158746799400queued¤logsrunning¦outputbodyrowsobjectideef7e23edd3e996fschemanamestypesmime"application/vnd.pluto.table+objectrootassigneeautograde_results_dflast_run_timestampApapersist_js_state·has_pluto_hook_features§cell_id$5ca8fb02-e6e3-11ea-0ad6-158746799400depends_on_disabled_cells§runtime-published_object_keysdepends_on_skipped_cells§errored$0ae5802c-f856-11ea-11ac-31a3ba67606cqueued¤logsrunning¦outputbodyp<bond def="reset_results" unique_id="S&#43;THkzfLiua6"><input type="button" value="Reset manual results"></bond>mimetext/htmlrootassigneelast_run_timestampANܰpersist_js_state·has_pluto_hook_features§cell_id$0ae5802c-f856-11ea-11ac-31a3ba67606cdepends_on_disabled_cells§runtimeK&µpublished_object_keysdepends_on_skipped_cells§errored$e5d3fa7c-f687-11ea-044f-6b00f0321da8queued¤logsrunning¦outputbodyManualCheckActionmimetext/plainrootassigneelast_run_timestampA<persist_js_state·has_pluto_hook_features§cell_id$e5d3fa7c-f687-11ea-044f-6b00f0321da8depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$633ee8e4-f68a-11ea-271e-433eafd12a62queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampARΰpersist_js_state·has_pluto_hook_features§cell_id$633ee8e4-f68a-11ea-271e-433eafd12a62depends_on_disabled_cells§runtimeW2published_object_keysdepends_on_skipped_cells§errored$1a999dfe-e6e1-11ea-12f4-ed24f03245e0queued¤logsrunning¦outputbodymsg7UndefVarError: inspected_notebook_index_str not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#1a999dfe-e6e1-11ea-12f4-ed24f03245e0source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#1a999dfe-e6e1-11ea-12f4-ed24f03245e0functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneeinspected_notebook_indexlast_run_timestampATpersist_js_state·has_pluto_hook_features§cell_id$1a999dfe-e6e1-11ea-12f4-ed24f03245e0depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$657f23ce-f687-11ea-13c0-f9959437ddf5queued¤logsrunning¦outputbodyB<div class="markdown"><h2>Step 2: manual grade actions</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA<persist_js_state·has_pluto_hook_features§cell_id$657f23ce-f687-11ea-13c0-f9959437ddf5depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$3fb6b20c-e6e1-11ea-35eb-e74598e31dafqueued¤logsrunning¦outputbody;<div class="markdown"><h1>Part 2: manual review</h1>
</div>mimetext/htmlrootassigneelast_run_timestampA<8persist_js_state·has_pluto_hook_features§cell_id$3fb6b20c-e6e1-11ea-35eb-e74598e31dafdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$c7553450-f85b-11ea-1dbd-3d72253a58d6queued¤logsrunning¦outputbodymsg,MethodError: no method matching Main.workspace#3.GradedStudent(::SubString{String})
[0mClosest candidates are:
[0m  Main.workspace#3.GradedStudent(::Any, [91m::Any[39m, [91m::Any[39m) at ~/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#0796b462-f85c-11ea-1bf2-53ad24ec447c:2stacktracecall_short#29inlinedãurlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#c7553450-f85b-11ea-1dbd-3d72253a58d6source_packagecall#29linfo_typeNothinglinefile2updated.jl#==#c7553450-f85b-11ea-1dbd-3d72253a58d6func#29parent_modulefrom_ccall_shortiterateinlinedãurlpath./generator.jlsource_packagecalliteratelinfo_typeNothingline/filegenerator.jlfunciterateparent_modulefrom_ccall_shortٱ_collect(c::Vector{SubString{String}}, itr::Base.Generator{Vector{SubString{String}}, var"#29#30"{typeof(split), DataType}}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})inlined£urlchttps://github.com/JuliaLang/julia/tree/742b9abb4dd4621b667ec5bb3434b8b3602f96fd/base/array.jl#L741path./array.jlsource_packagecallٱ_collect(c::Vector{SubString{String}}, itr::Base.Generator{Vector{SubString{String}}, var"#29#30"{typeof(split), DataType}}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})linfo_typeCore.MethodInstancelinefilearray.jlfunc_collectparent_modulefrom_ccall_shortنcollect_similar(cont::Vector{SubString{String}}, itr::Base.Generator{Vector{SubString{String}}, var"#29#30"{typeof(split), DataType}})inlined£urlchttps://github.com/JuliaLang/julia/tree/742b9abb4dd4621b667ec5bb3434b8b3602f96fd/base/array.jl#L653path./array.jlsource_packagecallنcollect_similar(cont::Vector{SubString{String}}, itr::Base.Generator{Vector{SubString{String}}, var"#29#30"{typeof(split), DataType}})linfo_typeCore.MethodInstancelinefilearray.jlfunccollect_similarparent_modulefrom_ccall_short.map(f::Function, A::Vector{SubString{String}})inlined£urllhttps://github.com/JuliaLang/julia/tree/742b9abb4dd4621b667ec5bb3434b8b3602f96fd/base/abstractarray.jl#L2867path./abstractarray.jlsource_packagecall.map(f::Function, A::Vector{SubString{String}})linfo_typeCore.MethodInstanceline3fileabstractarray.jlfuncmapparent_modulefrom_ccall_shorttop-level scopeinlinedãurlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#c7553450-f85b-11ea-1dbd-3d72253a58d6source_packagecalltop-level scopelinfo_typeNothinglinefile2updated.jl#==#c7553450-f85b-11ea-1dbd-3d72253a58d6func##function_wrapped_cell#446parent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneegraderslast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$c7553450-f85b-11ea-1dbd-3d72253a58d6depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$427f19de-e6d2-11ea-10a8-5d3552224b31queued¤logsrunning¦outputbodymsgmIOError: readdir("/home/fons/disorganised-mess/autograding/submissions/"): no such file or directory (ENOENT)stacktracecall_shortuv_errorinlinedãurlpath./libuv.jlsource_packagecalluv_errorlinfo_typeNothinglineafilelibuv.jlfuncuv_errorparent_modulefrom_ccall_short,readdir(dir::String; join::Bool, sort::Bool)inlined£urlbhttps://github.com/JuliaLang/julia/tree/742b9abb4dd4621b667ec5bb3434b8b3602f96fd/base/file.jl#L844path./file.jlsource_packagecall,readdir(dir::String; join::Bool, sort::Bool)linfo_typeCore.MethodInstancelineSfilefile.jlfunc#readdir#28parent_modulefrom_ccall_shorttop-level scopeinlinedãurlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#427f19de-e6d2-11ea-10a8-5d3552224b31source_packagecalltop-level scopelinfo_typeNothinglinefile2updated.jl#==#427f19de-e6d2-11ea-10a8-5d3552224b31func##function_wrapped_cell#298parent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneesubmission_fileslast_run_timestampA,Uipersist_js_state·has_pluto_hook_features§cell_id$427f19de-e6d2-11ea-10a8-5d3552224b31depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$e9b4c316-f852-11ea-3840-e7b1428df4e9queued¤logsrunning¦outputbodymsg3UndefVarError: inspected_manual_results not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#e9b4c316-f852-11ea-3840-e7b1428df4e9source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#e9b4c316-f852-11ea-3840-e7b1428df4e9functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAŀpersist_js_state·has_pluto_hook_features§cell_id$e9b4c316-f852-11ea-3840-e7b1428df4e9depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$a0776916-f865-11ea-387a-bf2e3094a182queued¤logsrunning¦outputbodyV<div class="markdown"><p>I have already written these, you can ignore this.</p>
</div>mimetext/htmlrootassigneelast_run_timestampA<Lpersist_js_state·has_pluto_hook_features§cell_id$a0776916-f865-11ea-387a-bf2e3094a182depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$33588e20-e6d4-11ea-08f6-7d10d9ef1481queued¤logsrunning¦outputbody1eval_in_notebook (generic function with 1 method)mimetext/plainrootassigneelast_run_timestampA܋persist_js_state·has_pluto_hook_features§cell_id$33588e20-e6d4-11ea-08f6-7d10d9ef1481depends_on_disabled_cells§runtime _Npublished_object_keysdepends_on_skipped_cells§errored$06edecc6-f864-11ea-03b0-03db23d2c780queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA>2persist_js_state·has_pluto_hook_features§cell_id$06edecc6-f864-11ea-03b0-03db23d2c780depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$8c6c6114-e6d7-11ea-20b1-e718907e0767queued¤logsrunning¦outputbodyE<div class="markdown"><h2>Step 3: autograde all notebooks</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA<a(persist_js_state·has_pluto_hook_features§cell_id$8c6c6114-e6d7-11ea-20b1-e718907e0767depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936queued¤logsrunning¦outputbody,displayname (generic function with 1 method)mimetext/plainrootassigneelast_run_timestampAΰpersist_js_state·has_pluto_hook_features§cell_id$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936depends_on_disabled_cells§runtime 
published_object_keysdepends_on_skipped_cells§errored$0796b462-f85c-11ea-1bf2-53ad24ec447cqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA/persist_js_state·has_pluto_hook_features§cell_id$0796b462-f85c-11ea-1bf2-53ad24ec447cdepends_on_disabled_cells§runtime Vopublished_object_keysdepends_on_skipped_cells§errored$9057dc04-e6d2-11ea-196b-1519cac7d248queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA_persist_js_state·has_pluto_hook_features§cell_id$9057dc04-e6d2-11ea-196b-1519cac7d248depends_on_disabled_cells§runtime rpublished_object_keysdepends_on_skipped_cells§errored$9090ee3e-e6de-11ea-14c3-27032e8710d3queued¤logsrunning¦outputbodyC<div class="markdown"><h2>Step 1: start notebook server</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA</persist_js_state·has_pluto_hook_features§cell_id$9090ee3e-e6de-11ea-14c3-27032e8710d3depends_on_disabled_cells§runtime 
published_object_keysdepends_on_skipped_cells§errored$ca945d02-f686-11ea-03b4-393858220381queued¤logsrunning¦outputbody4<div class="markdown"><h4>Manual grading</h4>
</div>mimetext/htmlrootassigneelast_run_timestampA>,persist_js_state·has_pluto_hook_features§cell_id$ca945d02-f686-11ea-03b4-393858220381depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$9c1c40f0-e6de-11ea-08d8-77acb2a550d4queued¤logsrunning¦outputbody<div class="markdown"><p><strong>Click to start notebook server:</strong></p>
<p><bond def="run_server" unique_id="SuaJnkq7SA8J"><input type="checkbox"></bond> run notebook server</p>
<hr />
</div>mimetext/htmlrootassigneelast_run_timestampA*persist_js_state·has_pluto_hook_features§cell_id$9c1c40f0-e6de-11ea-08d8-77acb2a550d4depends_on_disabled_cells§runtime =published_object_keysdepends_on_skipped_cells§errored$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675queued¤logsrunning¦outputbody<a href="data:text/csv;base64," download="autograde_results.csv" style="text-decoration: none; font-weight: normal; font-size: .75em; font-family: sans-serif;"><button>Download...</button> autograde_results.csv</a>mimetext/htmlrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675depends_on_disabled_cells§runtimeFpublished_object_keysdepends_on_skipped_cells§errored$b6512e8e-f85b-11ea-0cb6-619a5b3f67bcqueued¤logsrunning¦outputbody""mimetext/plainrootassigneegraders_rawlast_run_timestampAWpersist_js_state·has_pluto_hook_features§cell_id$b6512e8e-f85b-11ea-0cb6-619a5b3f67bcdepends_on_disabled_cells§runtime)^published_object_keysdepends_on_skipped_cells§errored$9815b7f4-f686-11ea-0760-05b34811be7fqueued¤logsrunning¦outputbodyM<div class="markdown"><h4>Autograde results for selected homework</h4>
</div>mimetext/htmlrootassigneelast_run_timestampA=persist_js_state·has_pluto_hook_features§cell_id$9815b7f4-f686-11ea-0760-05b34811be7fdepends_on_disabled_cells§runtime ҵpublished_object_keysdepends_on_skipped_cells§errored$b5d0d970-e6d9-11ea-20a5-01f0c4e3875cqueued¤logsrunning¦outputbodyprefixPluto.ServerSessionelementsconnected_clientsprefix!Dict{Symbol, Pluto.ClientSession}elementstypeDictprefix_shortDictobjectidf32b6b0056905248!application/vnd.pluto.tree+objectnotebooksprefixDict{Base.UUID, Pluto.Notebook}elementstypeDictprefix_shortDictobjectid97c33cf0331ef41!application/vnd.pluto.tree+objectsecret"Kp8OReI8"text/plainbinder_tokennothingtext/plainoptionsprefixPluto.Configuration.Optionselementsserverprefix!Pluto.Configuration.ServerOptionselements root_urlnothingtext/plainbase_url"/"text/plainhost"127.0.0.1"text/plainport2468text/plainport_hint1234text/plainlaunch_browserfalsetext/plaindismiss_update_notificationfalsetext/plainshow_file_systemtruetext/plainnotebook_path_suggestionD"/home/runner/work/disorganised-mess/disorganised-mess/autograding/"text/plaindisable_writing_notebook_filesfalsetext/plainauto_reload_from_filefalsetext/plainauto_reload_from_file_cooldown0.4text/plain auto_reload_from_file_ignore_pkgfalsetext/plainnotebooknothingtext/plaininit_with_file_viewerfalsetext/plainsimulated_lag0.0text/plainsimulated_pkg_lag0.0text/plaininjected_javascript_data_url"data:text/javascript;base64,"text/plainon_event##1 (generic function with 1 method)text/plaintypestructprefix_shortServerOptionsobjectidd28e5618c554722!application/vnd.pluto.tree+objectsecurityprefix#Pluto.Configuration.SecurityOptionselementsrequire_secret_for_open_linksfalsetext/plainrequire_secret_for_accessfalsetext/plainwarn_about_untrusted_codetruetext/plaintypestructprefix_shortSecurityOptionsobjectid4203dd9deaabaada!application/vnd.pluto.tree+objectevaluationprefix%Pluto.Configuration.EvaluationOptionselementsrun_notebook_on_loadtruetext/plainworkspace_use_distributedfalsetext/plain workspace_use_distributed_stdlibnothingtext/plainlazy_workspace_creationfalsetext/plaincapture_stdouttruetext/plainworkspace_custom_startup_exprnothingtext/plaintypestructprefix_shortEvaluationOptionsobjectidc4587d4d82c15a15!application/vnd.pluto.tree+objectcompilerprefix#Pluto.Configuration.CompilerOptionselements compilenothingtext/plainpkgimagesnothingtext/plaincompiled_modulesnothingtext/plainsysimagenothingtext/plainsysimage_native_codenothingtext/plainbannernothingtext/plaindepwarnnothingtext/plainoptimizenothingtext/plainmin_optlevelnothingtext/plaininlinenothingtext/plaincheck_boundsnothingtext/plainmath_modenothingtext/plainheap_size_hintnothingtext/plainstartup_file"no"text/plainhistory_file"no"text/plainthreads2text/plaintypestructprefix_shortCompilerOptionsobjectid631ebe8e9249f443!application/vnd.pluto.tree+objecttypestructprefix_shortOptionsobjectid6ac2adbe43b45a14!application/vnd.pluto.tree+objecttypestructprefix_shortServerSessionobjectida09bc63a30979219mime!application/vnd.pluto.tree+objectrootassigneepluto_sessionlast_run_timestampAȧְpersist_js_state·has_pluto_hook_features§cell_id$b5d0d970-e6d9-11ea-20a5-01f0c4e3875cdepends_on_disabled_cells§runtimeɊpublished_object_keysdepends_on_skipped_cells§errored$7b3bb8c8-f687-11ea-27bb-45ed5807090equeued¤logsrunning¦outputbodyprefixMain.workspace#3.GradingActionelementsprefixManualCheckActionelementsname"3.1 - colored line"text/plainpoints_value5text/plainrubricX<div class="markdown"><p>Did they write <code>colored_line&#40;v&#41;</code>?</p>
</div>text/htmltypestructprefix_shortManualCheckActionobjectid3991a4a16b289267!application/vnd.pluto.tree+objectprefixManualScoreActionelementsname"3.4 - make it interactive"text/plainpoints_value8text/plainrubrici<div class="markdown"><p>Did they create a slider? Does the slider control the amount of blur?</p>
</div>text/htmltypestructprefix_shortManualScoreActionobjectid743b19e1bbfc60ff!application/vnd.pluto.tree+objectprefixManualScoreActionelementsname"4.2 - convolve_image"text/plainpoints_value20text/plainrubric=<div class="markdown"><p>Is convole_image correct?</p>
</div>text/htmltypestructprefix_shortManualScoreActionobjectid555c990811a75263!application/vnd.pluto.tree+objectprefixManualScoreActionelementsname"4.3 - Gaussian blur"text/plainpoints_value10text/plainrubricE<div class="markdown"><p>Does the Gaussian blur look okay?</p>
</div>text/htmltypestructprefix_shortManualScoreActionobjectid48a78042952f516d!application/vnd.pluto.tree+objectprefixManualScoreActionelementsname"4.4 - Sobel filter"text/plainpoints_value10text/plainrubricD<div class="markdown"><p>Does the Sobel filter look okay?</p>
</div>text/htmltypestructprefix_shortManualScoreActionobjectid71e3bbd0f43e0de4!application/vnd.pluto.tree+objecttypeArrayprefix_shortobjectid4d27e73ff760fa86mime!application/vnd.pluto.tree+objectrootassigneemanuallast_run_timestampACpersist_js_state·has_pluto_hook_features§cell_id$7b3bb8c8-f687-11ea-27bb-45ed5807090edepends_on_disabled_cells§runtime=H̵published_object_keysdepends_on_skipped_cells§errored$144aa7ec-f864-11ea-35c4-43e19d898887queued¤logsrunning¦outputbody53mimetext/plainrootassigneelast_run_timestampAN{persist_js_state·has_pluto_hook_features§cell_id$144aa7ec-f864-11ea-35c4-43e19d898887depends_on_disabled_cells§runtime w,published_object_keysdepends_on_skipped_cells§errored$eade89f2-e6de-11ea-11bb-531a6b65c666queued¤logsrunning¦outputbodymsgBBoundsError: attempt to access 0-element Vector{Pair} at index [1]stacktracecall_shortgetindexinlinedãurlpath./array.jlsource_packagecallgetindexlinfo_typeNothingline]filearray.jlfuncgetindexparent_modulefrom_ccall_shortfirst(a::Vector{Pair})inlined£urlkhttps://github.com/JuliaLang/julia/tree/742b9abb4dd4621b667ec5bb3434b8b3602f96fd/base/abstractarray.jl#L398path./abstractarray.jlsource_packagecallfirst(a::Vector{Pair})linfo_typeCore.MethodInstancelinefileabstractarray.jlfuncfirstparent_modulefrom_ccall_short,get(select::PlutoUI.BuiltinsNotebook.Select)inlined£urlAfile:///home/runner/.julia/packages/PlutoUI/hjutS/src/Builtins.jlpath:/home/runner/.julia/packages/PlutoUI/hjutS/src/Builtins.jlsource_packagecall,get(select::PlutoUI.BuiltinsNotebook.Select)linfo_typeCore.MethodInstancelinefileBuiltins.jlfuncgetparent_modulefrom_ccall_shortmacro expansioninlinedãurlpathv/home/runner/.julia/packages/Pluto/6smog/src/runner/PlutoRunner/src/bonds.jl#@#==#eade89f2-e6de-11ea-11bb-531a6b65c666source_packagecallmacro expansionlinfo_typeNothingline~file2bonds.jl#@#==#eade89f2-e6de-11ea-11bb-531a6b65c666funcmacro expansionparent_modulefrom_ccall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eade89f2-e6de-11ea-11bb-531a6b65c666source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#eade89f2-e6de-11ea-11bb-531a6b65c666functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampA=?persist_js_state·has_pluto_hook_features§cell_id$eade89f2-e6de-11ea-11bb-531a6b65c666depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$bbcd528e-e6e5-11ea-2d9c-a50835477b2equeued¤logsrunning¦outputbody.<div class="markdown"><h2>Not used</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA>persist_js_state·has_pluto_hook_features§cell_id$bbcd528e-e6e5-11ea-2d9c-a50835477b2edepends_on_disabled_cells§runtime vԵpublished_object_keysdepends_on_skipped_cells§errored$3f0aec92-e6e1-11ea-1b53-29b7b543674dqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA<rpersist_js_state·has_pluto_hook_features§cell_id$3f0aec92-e6e1-11ea-1b53-29b7b543674ddepends_on_disabled_cells§runtime εpublished_object_keysdepends_on_skipped_cells§errored$991ddb18-e6e6-11ea-220d-71b6794f39d8queued¤logsrunning¦outputbodymsg3UndefVarError: inspected_notebook_index not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#991ddb18-e6e6-11ea-220d-71b6794f39d8source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#991ddb18-e6e6-11ea-220d-71b6794f39d8functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAאpersist_js_state·has_pluto_hook_features§cell_id$991ddb18-e6e6-11ea-220d-71b6794f39d8depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6queued¤logsrunning¦outputbody?<div class="markdown"><h2>Step 2: autograde actions</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA<7persist_js_state·has_pluto_hook_features§cell_id$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6depends_on_disabled_cells§runtime ѵpublished_object_keysdepends_on_skipped_cells§errored$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71equeued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampAVƛpersist_js_state·has_pluto_hook_features§cell_id$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71edepends_on_disabled_cells§runtime HLpublished_object_keysdepends_on_skipped_cells§errored$a6fe722e-e6da-11ea-21e8-1dea77b462efqueued¤logsrunning¦outputbodyprefixStringelementstypeArrayprefix_shortobjectid8b6b502703ab3501mime!application/vnd.pluto.tree+objectrootassigneesubmission_files_to_runlast_run_timestampAYŰpersist_js_state·has_pluto_hook_features§cell_id$a6fe722e-e6da-11ea-21e8-1dea77b462efdepends_on_disabled_cells§runtime Kjpublished_object_keysdepends_on_skipped_cells§errored$22fd661e-e6e7-11ea-2b4a-8981b17a790dqueued¤logsrunning¦outputbodymsg-UndefVarError: inspected_notebook not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#22fd661e-e6e7-11ea-2b4a-8981b17a790dsource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#22fd661e-e6e7-11ea-2b4a-8981b17a790dfunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$22fd661e-e6e7-11ea-2b4a-8981b17a790ddepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$a3e47050-e6de-11ea-2a91-0597143f71baqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA-[>persist_js_state·has_pluto_hook_features§cell_id$a3e47050-e6de-11ea-2a91-0597143f71badepends_on_disabled_cells§runtime Kpublished_object_keysdepends_on_skipped_cells§errored$5642a754-e6d9-11ea-35b6-0fe20d6a098equeued¤logsrunning¦outputbodyprefixAnyelementstypeArrayprefix_shortobjectid2749b3b171fc12a6mime!application/vnd.pluto.tree+objectrootassigneenotebookslast_run_timestampATepersist_js_state·has_pluto_hook_features§cell_id$5642a754-e6d9-11ea-35b6-0fe20d6a098edepends_on_disabled_cells§runtime P-published_object_keysdepends_on_skipped_cells§errored$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763queued¤logsrunning¦outputbodymsg+UndefVarError: submission_files not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAdpersist_js_state·has_pluto_hook_features§cell_id$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$6b40e1d0-f865-11ea-3c2a-39fb643c8068queued¤logsrunning¦outputbodyZ<div class="markdown"><p>It should return an arrays of strings, something like:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA<"persist_js_state·has_pluto_hook_features§cell_id$6b40e1d0-f865-11ea-3c2a-39fb643c8068depends_on_disabled_cells§runtime *published_object_keysdepends_on_skipped_cells§errored$e48f2a16-e6e1-11ea-070a-d58f87569b91queued¤logsrunning¦outputbody*<div class="markdown"><h2>Misc</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA>oΰpersist_js_state·has_pluto_hook_features§cell_id$e48f2a16-e6e1-11ea-070a-d58f87569b91depends_on_disabled_cells§runtime ;published_object_keysdepends_on_skipped_cells§errored$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6aqueued¤logsrunning¦outputbody9<div class="markdown"><h1>Part 1: autograding</h1>
</div>mimetext/htmlrootassigneelast_run_timestampA:persist_js_state·has_pluto_hook_features§cell_id$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6adepends_on_disabled_cells§runtime vpublished_object_keysdepends_on_skipped_cells§errored$3abb56e4-e6d3-11ea-3337-392a434e1a21queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA_persist_js_state·has_pluto_hook_features§cell_id$3abb56e4-e6d3-11ea-3337-392a434e1a21depends_on_disabled_cells§runtime Kpublished_object_keysdepends_on_skipped_cells§errored$ce055a44-e6d8-11ea-3a07-75392c0f6c26queued¤logsrunning¦outputbody5<div class="markdown"><h2>Grading actions</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA>[Ѱpersist_js_state·has_pluto_hook_features§cell_id$ce055a44-e6d8-11ea-3a07-75392c0f6c26depends_on_disabled_cells§runtime z2published_object_keysdepends_on_skipped_cells§errored$7cb1c9bc-f684-11ea-00f3-dfd11c9b72efqueued¤logsrunning¦outputbodymsg$UndefVarError: HTMLTable not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#7cb1c9bc-f684-11ea-00f3-dfd11c9b72efsource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#7cb1c9bc-f684-11ea-00f3-dfd11c9b72effunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAr=persist_js_state·has_pluto_hook_features§cell_id$7cb1c9bc-f684-11ea-00f3-dfd11c9b72efdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$459687e0-e6e3-11ea-0c85-89516c7a2da0queued¤logsrunning¦outputbodymsg,UndefVarError: manual_results_df not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#459687e0-e6e3-11ea-0c85-89516c7a2da0source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#459687e0-e6e3-11ea-0c85-89516c7a2da0functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampAǰpersist_js_state·has_pluto_hook_features§cell_id$459687e0-e6e3-11ea-0c85-89516c7a2da0depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$c0d9fb36-f858-11ea-35c0-77963b5cf57aqueued¤logsrunning¦outputbody107.5mimetext/plainrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$c0d9fb36-f858-11ea-35c0-77963b5cf57adepends_on_disabled_cells§runtime/$published_object_keysdepends_on_skipped_cells§errored$9982bbfa-00c0-11eb-0a5c-818fae8c01cequeued¤logsrunning¦outputbodyPlutomimetext/plainrootassigneelast_run_timestampAyOpersist_js_state·has_pluto_hook_features§cell_id$9982bbfa-00c0-11eb-0a5c-818fae8c01cedepends_on_disabled_cells§runtime%Lpublished_object_keysdepends_on_skipped_cells§errored$96917e4e-f687-11ea-2256-7b1057a3b523queued¤logsrunning¦outputbodyManualScoreActionmimetext/plainrootassigneelast_run_timestampAe
persist_js_state·has_pluto_hook_features§cell_id$96917e4e-f687-11ea-2256-7b1057a3b523depends_on_disabled_cells§runtime ;published_object_keysdepends_on_skipped_cells§errored$469a28fc-f856-11ea-2a6b-a706e607cf9fqueued¤logsrunning¦outputbodymsg6UndefVarError: updated_manual_results_dict not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#469a28fc-f856-11ea-2a6b-a706e607cf9fsource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#469a28fc-f856-11ea-2a6b-a706e607cf9ffunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneemanual_results_dflast_run_timestampAװpersist_js_state·has_pluto_hook_features§cell_id$469a28fc-f856-11ea-2a6b-a706e607cf9fdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$b6b986c8-e6de-11ea-1d13-5d9d370eccdcqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampAVpersist_js_state·has_pluto_hook_features§cell_id$b6b986c8-e6de-11ea-1d13-5d9d370eccdcdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$eaa49370-e6da-11ea-21d9-ddf11a7df51fqueued¤logsrunning¦outputbodyprefixMain.workspace#3.GradingActionelements prefixGetValueelementsname"name"text/plaingetter:(student.name)text/plaintypestructprefix_shortGetValueobjectid11958f47ce963125!application/vnd.pluto.tree+objectprefixGetValueelementsname"kerberos_id"text/plaingetter:(student.kerberos_id)text/plaintypestructprefix_shortGetValueobjectid7c88c5ffcc373c49!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"1.1 - random vector"text/plainpoints_value5text/plaintestquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:111 =#
    length(random_vect) == 10 && length(Set(random_vect)) == 10
endtext/plaintypestructprefix_shortAutoTestActionobjectid8081aba1f05ea454!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"1.1 - mean"text/plainpoints_value5text/plaintest٨quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:115 =#
    mean([-1, -1, 2]) ≈ 0
endtext/plaintypestructprefix_shortAutoTestActionobjectid887ff3910531f0e4!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"1.1 - mean of random vec"text/plainpoints_value2.5text/plaintest٧quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:119 =#
    m == mean(random_vect)
endtext/plaintypestructprefix_shortAutoTestActionobjectid8e6a7676b100a674!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"1.1 - demean function"text/plainpoints_value5text/plaintestپquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:123 =#
    demean([1, 2, 3, 4, 5]) ≈ [-2, -1, 0, 1, 2]
endtext/plaintypestructprefix_shortAutoTestActionobjectidd3e328090c11c176!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"1.2 - create bar - 20"text/plainpoints_value2.5text/plaintestquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:128 =#
    create_bar() ≈ let
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:129 =#
            x = zeros(100)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:130 =#
            x[40:59] .= 1
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:131 =#
            x
        end
endtext/plaintypestructprefix_shortAutoTestActionobjectid7e92b3b3064486e1!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"1.2 - create bar - 20 or 21"text/plainpoints_value2.5text/plaintestquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:136 =#
    create_bar() ≈ let
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:137 =#
                x = zeros(100)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:138 =#
                x[40:59] .= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:139 =#
                x
            end || create_bar() ≈ let
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:142 =#
                x = zeros(100)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:143 =#
                x[40:60] .= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:144 =#
                x
            end
endtext/plaintypestructprefix_shortAutoTestActionobjectid1700b0cc12a6668a!application/vnd.pluto.tree+object	prefixAutoTestActionelementsname"1.3 - vecvec_to_matrix"text/plainpoints_value5text/plaintestPquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:150 =#
    vecvec_to_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == hcat([1, 2, 3], [4, 5, 6], [7, 8, 9]) || vecvec_to_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == (hcat([1, 2, 3], [4, 5, 6], [7, 8, 9]))'
endtext/plaintypestructprefix_shortAutoTestActionobjectid97f1317f7e027187!application/vnd.pluto.tree+object
prefixAutoTestActionelementsname"1.3 - matrix_to_vecvec"text/plainpoints_value5text/plaintest'quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:155 =#
    let
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:156 =#
        A = [1 2; 4 5; 7 8]
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:157 =#
        matrix_to_vecvec(A) == collect(eachcol(A)) || matrix_to_vecvec(A) == collect(eachrow(A))
    end
endtext/plaintypestructprefix_shortAutoTestActionobjectid9defc1992e2a707f!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.1 - mean colors"text/plainpoints_value5text/plaintest0%quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:164 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:165 =#
    t = testimg()
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:166 =#
    mean_colors(t) == ((mean(t)).r, (mean(t)).g, (mean(t)).b) || mean_colors(t) == RGB((mean(t)).r, (mean(t)).g, (mean(t)).b)
endtext/plaintypestructprefix_shortAutoTestActionobjectid324a5a3d854d6fa8!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.2 - quantize::Number"text/plainpoints_value5text/plaintestٯquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:172 =#
    quantize(3) ≈ floor(30) / 10
endtext/plaintypestructprefix_shortAutoTestActionobjectide1e73d63064401fd!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.3 - quantize::Color"text/plainpoints_value2.5text/plaintestequote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:177 =#
    c = rand(RGB)
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:178 =#
    quantize(c) == RGB(quantize(c.r), quantize(c.g), quantize(c.b))
endtext/plaintypestructprefix_shortAutoTestActionobjectid914adfbcd6ea8a63!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname "2.4 - quantize::AbstractMatrix"text/plainpoints_value2.5text/plaintest/quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:183 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:184 =#
    t = testimg()
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:185 =#
    quantize(t) == quantize.(t)
endtext/plaintypestructprefix_shortAutoTestActionobjectidd401fd08ec056583!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.5 - invert"text/plainpoints_value5text/plaintestQquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:190 =#
    c = rand(RGB)
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:191 =#
    invert(c) == RGB(1 - c.r, 1 - c.g, 1 - c.b)
endtext/plaintypestructprefix_shortAutoTestActionobjectid41f8eafef30919a3!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.6 - noisify::Number - noise"text/plainpoints_value2.5text/plaintestquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:198 =#
    let
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:199 =#
        N = 10000
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:202 =#
        x = [noisify(0.5, 0.25) for _ = 1:N]
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:203 =#
        sample_mean = sum(x) / N
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:205 =#
        sample_var = sum((x .- sample_mean) .^ 2) / N
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:207 =#
        abs(sample_mean - 0.5) < 0.01 && abs(sample_var - 1 / 48) < 0.01
    end
endtext/plaintypestructprefix_shortAutoTestActionobjectid83da5563cb0e0bde!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.6 - noisify::Number - clamp"text/plainpoints_value2.5text/plaintestquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:214 =#
    let
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:215 =#
        N = 10000
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:218 =#
        x = [noisify(0.5, 10) for _ = 1:N]
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:220 =#
        0.0 <= minimum(x) < maximum(x) <= 1.0
    end
endtext/plaintypestructprefix_shortAutoTestActionobjectidcb956f9206ec62a2!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.6 - noisify::Color"text/plainpoints_value2.5text/plaintest:quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:226 =#
    c = rand(RGB)
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:227 =#
    noisify(c, 0.1) != c
endtext/plaintypestructprefix_shortAutoTestActionobjectidce1add80c52cd5c5!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"2.6 - noisify::Image"text/plainpoints_value2.5text/plaintest/quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:231 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:232 =#
    t = testimg()
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:233 =#
    noisify(t, 0.1) != t
endtext/plaintypestructprefix_shortAutoTestActionobjectid67389e4da133bcee!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"3.2 - extend"text/plainpoints_value10text/plaintest/>quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:241 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:242 =#
    extend(v, -5) == solution_extend(v, -5)
endtext/plaintypestructprefix_shortAutoTestActionobjectiddcd7d9121997efe4!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"3.3 - blur_1D"text/plainpoints_value5text/plaintest/>quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:247 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:248 =#
    blur_1D(v, 2) == solution_blur_1D(v, 2)
endtext/plaintypestructprefix_shortAutoTestActionobjectidd02d76e3ed762566!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"3.5 - convolution"text/plainpoints_value5text/plaintest/quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:256 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:257 =#
    convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0]) == solution_convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0])
endtext/plaintypestructprefix_shortAutoTestActionobjectida197506a3e04e01e!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname""3.6 - gaussian_kernel - centered"text/plainpoints_value2.5text/plaintestquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:262 =#
    K = gaussian_kernel(9)
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:264 =#
    center = length(K) ÷ 2
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:266 =#
    K[1] < K[center] > K[end]
endtext/plaintypestructprefix_shortAutoTestActionobjectid4ec4e832fcbff6a1!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname$"3.6 - gaussian_kernel - normalized"text/plainpoints_value2.5text/plaintestAquote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:271 =#
    K = gaussian_kernel(9)
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:272 =#
    0.9 < sum(K) < 1.1
endtext/plaintypestructprefix_shortAutoTestActionobjectid75911f181df4f6d9!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname"4.1 - extend mat"text/plainpoints_value10text/plaintest0quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:277 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:278 =#
    M = rand(Float64, (3, 3))
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:279 =#
    all([extend_mat(M, i, j) ≈ solution_extend_mat(M, i, j) for i = [-5, 4, 2], j = [-1, 1, 0, 10]])
endtext/plaintypestructprefix_shortAutoTestActionobjectid5f4df90ebc4c8abd!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname%"4.3 - with_gaussian_blur - no error"text/plainpoints_value5text/plaintest3quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:304 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:305 =#
    try
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:306 =#
            with_gaussian_blur(rand(Gray, (20, 10))) isa Array
        catch
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:308 =#
            false
        end || (try
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:310 =#
                with_gaussian_blur(rand(Float64, (20, 10))) isa Array
            catch
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:312 =#
                false
            end || try
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:314 =#
                with_gaussian_blur(rand(RGB, (20, 10))) isa Array
            catch
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:316 =#
                false
            end)
endtext/plaintypestructprefix_shortAutoTestActionobjectidb83be170be7abe18!application/vnd.pluto.tree+objectprefixAutoTestActionelementsname$"4.4 - sobel_edge_detect - no error"text/plainpoints_value5text/plaintest3quote
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:322 =#
    begin
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
        function solution_extend(v, i)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
                v[1]
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
                v[end]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
                v[i]
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
        function solution_blur_1D(v, l)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
                    mean([extend(v, i + j) for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
        function solution_convolve_vector(v, k)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
            l = (length(k) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
            return map(eachindex(v)) do i
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
                    sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
                end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
        function solution_pascal(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
            if n <= 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
                [1.0]
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
                prev = pascal(n - 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
                0.5 * ([prev..., 0] .+ [0, prev...])
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
        function solution_gaussian_kernel(n)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
            solution_pascal(2n + 1)
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
        function solution_extend_mat(M::AbstractMatrix, i, j)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
            if i < 1
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
                solution_extend_mat(M, 1, j)
            elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
                solution_extend_mat(M, size(M, 1), j)
            else
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
                if j < 1
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
                    solution_extend_mat(M, i, 1)
                elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
                    solution_extend_mat(M, i, size(M, 2))
                else
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
                    M[i, j]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
        function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
                    extend_mat(M, (i - offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
        function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
            l = (size(K, 1) - 1) ÷ 2
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
            map(CartesianIndices(M)) do i
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
                sum(CartesianIndices(K)) do a
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
                    offset = a - CartesianIndex(-l - 1, -l - 1)
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
                    extend_mat(M, (i + offset).I...) * K[a]
                end
            end
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
        function solution_with_gaussian_blur(image; sigma = 3, l = 5)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
            gauss(x, y; sigma = 3) = begin
                    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
                    (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
                end
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
            K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
            convolve_image(image, K_gauss ./ sum(K_gauss))
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
        function solution_sobel_edge_detect(image)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
            K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
            x = solution_convolve_image(image, K_sobol)
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
            y = solution_convolve_image(image, K_sobol')
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
            return x .* x .+ y .* y
        end
        #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
        testimg() = begin
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
                rand(RGB, (10, 20))
            end
    end
    #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:323 =#
    try
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:324 =#
            with_sobel_edge_detect(rand(Gray, (20, 10))) isa Array
        catch
            #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:326 =#
            false
        end || (try
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:328 =#
                with_sobel_edge_detect(rand(Float64, (20, 10))) isa Array
            catch
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:330 =#
                false
            end || try
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:332 =#
                with_sobel_edge_detect(rand(RGB, (20, 10))) isa Array
            catch
                #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:334 =#
                false
            end)
endtext/plaintypestructprefix_shortAutoTestActionobjectid8749ff750104fa58!application/vnd.pluto.tree+objecttypeArrayprefix_shortobjectidf1da31965ac4c50cmime!application/vnd.pluto.tree+objectrootassigneeactionslast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$eaa49370-e6da-11ea-21d9-ddf11a7df51fdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$490cc11a-00cb-11eb-24bc-2fb026c3094equeued¤logsrunning¦outputbody&all (generic function with 11 methods)mimetext/plainrootassigneelast_run_timestampAt˒persist_js_state·has_pluto_hook_features§cell_id$490cc11a-00cb-11eb-24bc-2fb026c3094edepends_on_disabled_cells§runtime#Cpublished_object_keysdepends_on_skipped_cells§errored$31111cbe-e6d3-11ea-0130-a98e45b82f2bqueued¤logsrunning¦outputbody+do_action (generic function with 2 methods)mimetext/plainrootassigneelast_run_timestampAO۰persist_js_state·has_pluto_hook_features§cell_id$31111cbe-e6d3-11ea-0130-a98e45b82f2bdepends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$f131ee3a-f68a-11ea-3d6c-d34439133a63queued¤logsrunning¦outputbodymsg3UndefVarError: inspected_manual_results not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#f131ee3a-f68a-11ea-3d6c-d34439133a63source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#f131ee3a-f68a-11ea-3d6c-d34439133a63functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneeupdated_manual_results_dictlast_run_timestampAJpersist_js_state·has_pluto_hook_features§cell_id$f131ee3a-f68a-11ea-3d6c-d34439133a63depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$64c26a50-e6df-11ea-2762-57186f445501queued¤logsrunning¦outputbodymsg3UndefVarError: inspected_notebook_index not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#64c26a50-e6df-11ea-2762-57186f445501source_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#64c26a50-e6df-11ea-2762-57186f445501functop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneeinspected_notebooklast_run_timestampAVxupersist_js_state·has_pluto_hook_features§cell_id$64c26a50-e6df-11ea-2762-57186f445501depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$33e66768-e6d9-11ea-1aba-256b4c9998b8queued¤logsrunning¦outputbodyprefixAnyelementstypeArrayprefix_shortobjectid66b36b3221340971mime!application/vnd.pluto.tree+objectrootassigneeautograde_resultslast_run_timestampAIpersist_js_state·has_pluto_hook_features§cell_id$33e66768-e6d9-11ea-1aba-256b4c9998b8depends_on_disabled_cells§runtimeGpublished_object_keysdepends_on_skipped_cells§errored$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5cequeued¤logsrunning¦outputbody.<div class="markdown"><h1>Appendix</h1>
</div>mimetext/htmlrootassigneelast_run_timestampA>G4persist_js_state·has_pluto_hook_features§cell_id$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5cedepends_on_disabled_cells§runtime Ppublished_object_keysdepends_on_skipped_cells§errored$8904534a-e6e1-11ea-34b7-31d1f6f8ca8fqueued¤logsrunning¦outputbody=<div class="markdown"><h2>Step 3: select notebook</h2>
</div>mimetext/htmlrootassigneelast_run_timestampA<Bpersist_js_state·has_pluto_hook_features§cell_id$8904534a-e6e1-11ea-34b7-31d1f6f8ca8fdepends_on_disabled_cells§runtime vʵpublished_object_keysdepends_on_skipped_cells§errored$122cbbdc-00cd-11eb-223b-ef82328f674fqueued¤logsrunning¦outputbodytruemimetext/plainrootassigneelast_run_timestampA$lpersist_js_state·has_pluto_hook_features§cell_id$122cbbdc-00cd-11eb-223b-ef82328f674fdepends_on_disabled_cells§runtime+1published_object_keysdepends_on_skipped_cells§errored$b8d4598c-f686-11ea-24dc-6f94370fc996queued¤logsrunning¦outputbodyH<div class="markdown"><h4>Editable view of selected homework</h4>
</div>mimetext/htmlrootassigneelast_run_timestampA=@persist_js_state·has_pluto_hook_features§cell_id$b8d4598c-f686-11ea-24dc-6f94370fc996depends_on_disabled_cells§runtime ̵published_object_keysdepends_on_skipped_cells§errored$dfbaecac-f855-11ea-1f3e-0522a86136eaqueued¤logsrunning¦outputbodyN<div class="markdown"><p>Currently stored grades for this notebook:</p>
</div>mimetext/htmlrootassigneelast_run_timestampA>!İpersist_js_state·has_pluto_hook_features§cell_id$dfbaecac-f855-11ea-1f3e-0522a86136eadepends_on_disabled_cells§runtime Vpublished_object_keysdepends_on_skipped_cells§errored$a1598cfc-e6d7-11ea-1f0b-f5560304fe7aqueued¤logsrunning¦outputbodymsg+UndefVarError: submission_files not definedstacktracecall_shorttop-level scopeinlined£urlpatht/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#a1598cfc-e6d7-11ea-1f0b-f5560304fe7asource_packagecalltop-level scopelinfo_typeCore.CodeInfolinefile2updated.jl#==#a1598cfc-e6d7-11ea-1f0b-f5560304fe7afunctop-level scopeparent_modulefrom_c¤mime'application/vnd.pluto.stacktrace+objectrootassigneelast_run_timestampApersist_js_state·has_pluto_hook_features§cell_id$a1598cfc-e6d7-11ea-1f0b-f5560304fe7adepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§erroredñcell_dependencies A$836cc4be-e6d7-11ea-2a6e-436c187304daprecedence_heuristic	cell_id$836cc4be-e6d7-11ea-2a6e-436c187304dadownstream_cells_mapupstream_cells_map@md_strgetindex$728d1ca8-f865-11ea-1a3e-33cb0a44b9ddprecedence_heuristic	cell_id$728d1ca8-f865-11ea-1a3e-33cb0a44b9dddownstream_cells_mapsubmission_files_EXAMPLEupstream_cells_map$65d601a6-fe45-11ea-22c6-270bf7d353bcprecedence_heuristiccell_id$65d601a6-fe45-11ea-22c6-270bf7d353bcdownstream_cells_mapCSV$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675$459687e0-e6e3-11ea-0c85-89516c7a2da0UUIDPlutoUIDataFramesPluto$b5d0d970-e6d9-11ea-20a5-01f0c4e3875c$a6fe722e-e6da-11ea-21e8-1dea77b462ef$9982bbfa-00c0-11eb-0a5c-818fae8c01ce$5642a754-e6d9-11ea-35b6-0fe20d6a098e$a3e47050-e6de-11ea-2a91-0597143f71ba$31111cbe-e6d3-11ea-0130-a98e45b82f2b$33588e20-e6d4-11ea-08f6-7d10d9ef1481Distributed$33588e20-e6d4-11ea-08f6-7d10d9ef1481upstream_cells_map$4e4e78d2-f865-11ea-0c21-fdd76cbf3532precedence_heuristic	cell_id$4e4e78d2-f865-11ea-0c21-fdd76cbf3532downstream_cells_mapupstream_cells_map@md_strgetindex$5ca8fb02-e6e3-11ea-0ad6-158746799400precedence_heuristic	cell_id$5ca8fb02-e6e3-11ea-0ad6-158746799400downstream_cells_mapautograde_results_df$7cb1c9bc-f684-11ea-00f3-dfd11c9b72ef$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675$991ddb18-e6e6-11ea-220d-71b6794f39d8$469a28fc-f856-11ea-2a6b-a706e607cf9fupstream_cells_mapautograde_results$33e66768-e6d9-11ea-1aba-256b4c9998b8mapactions$eaa49370-e6da-11ea-21d9-ddf11a7df51fDataFramezipdisplayname$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936Symbol=>$0ae5802c-f856-11ea-11ac-31a3ba67606cprecedence_heuristic	cell_id$0ae5802c-f856-11ea-11ac-31a3ba67606cdownstream_cells_mapreset_results$633ee8e4-f68a-11ea-271e-433eafd12a62upstream_cells_mapCoreBasePlutoRunner.create_bondPlutoRunnerCore.applicable@bindButtonBase.get$e5d3fa7c-f687-11ea-044f-6b00f0321da8precedence_heuristic	cell_id$e5d3fa7c-f687-11ea-044f-6b00f0321da8downstream_cells_mapManualCheckAction$7b3bb8c8-f687-11ea-27bb-45ed5807090eupstream_cells_mapGradingAction$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71eNumberpoints_valie$633ee8e4-f68a-11ea-271e-433eafd12a62precedence_heuristic	cell_id$633ee8e4-f68a-11ea-271e-433eafd12a62downstream_cells_mapmanual_results_dict$e9b4c316-f852-11ea-3840-e7b1428df4e9$22fd661e-e6e7-11ea-2b4a-8981b17a790d$f131ee3a-f68a-11ea-3d6c-d34439133a63upstream_cells_mapDictreset_results$0ae5802c-f856-11ea-11ac-31a3ba67606c$1a999dfe-e6e1-11ea-12f4-ed24f03245e0precedence_heuristic	cell_id$1a999dfe-e6e1-11ea-12f4-ed24f03245e0downstream_cells_mapinspected_notebook_index$991ddb18-e6e6-11ea-220d-71b6794f39d8$f131ee3a-f68a-11ea-3d6c-d34439133a63$64c26a50-e6df-11ea-2762-57186f445501upstream_cells_mapinspected_notebook_index_str$eade89f2-e6de-11ea-11bb-531a6b65c666Intparse$657f23ce-f687-11ea-13c0-f9959437ddf5precedence_heuristic	cell_id$657f23ce-f687-11ea-13c0-f9959437ddf5downstream_cells_mapupstream_cells_map@md_strgetindex$3fb6b20c-e6e1-11ea-35eb-e74598e31dafprecedence_heuristic	cell_id$3fb6b20c-e6e1-11ea-35eb-e74598e31dafdownstream_cells_mapupstream_cells_map@md_strgetindex$c7553450-f85b-11ea-1dbd-3d72253a58d6precedence_heuristic	cell_id$c7553450-f85b-11ea-1dbd-3d72253a58d6downstream_cells_mapgradersupstream_cells_mapmapgraders_raw$b6512e8e-f85b-11ea-0cb6-619a5b3f67bcGradedStudent$0796b462-f85c-11ea-1bf2-53ad24ec447csplit$427f19de-e6d2-11ea-10a8-5d3552224b31precedence_heuristic	cell_id$427f19de-e6d2-11ea-10a8-5d3552224b31downstream_cells_mapsubmission_files$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763$a1598cfc-e6d7-11ea-1f0b-f5560304fe7a$a6fe722e-e6da-11ea-21e8-1dea77b462efupstream_cells_mapendswithfilterreaddir$e9b4c316-f852-11ea-3840-e7b1428df4e9precedence_heuristic	cell_id$e9b4c316-f852-11ea-3840-e7b1428df4e9downstream_cells_mapupstream_cells_map@md_strmissing===basenamemanual_results_dict$633ee8e4-f68a-11ea-271e-433eafd12a62inspected_notebook$64c26a50-e6df-11ea-2762-57186f445501inspected_manual_results$22fd661e-e6e7-11ea-2b4a-8981b17a790dgetgetindex$a0776916-f865-11ea-387a-bf2e3094a182precedence_heuristic	cell_id$a0776916-f865-11ea-387a-bf2e3094a182downstream_cells_mapupstream_cells_map@md_strgetindex$33588e20-e6d4-11ea-08f6-7d10d9ef1481precedence_heuristic	cell_id$33588e20-e6d4-11ea-08f6-7d10d9ef1481downstream_cells_mapeval_in_notebook$31111cbe-e6d3-11ea-0130-a98e45b82f2bupstream_cells_mapMainQuoteNodeDistributed.remotecall_evalpluto_session$b5d0d970-e6d9-11ea-20a5-01f0c4e3875c|>$Pluto.WorkspaceManager.get_workspacePluto$65d601a6-fe45-11ea-22c6-270bf7d353bcDistributed$65d601a6-fe45-11ea-22c6-270bf7d353bc$06edecc6-f864-11ea-03b0-03db23d2c780precedence_heuristic	cell_id$06edecc6-f864-11ea-03b0-03db23d2c780downstream_cells_mapupstream_cells_map$8c6c6114-e6d7-11ea-20b1-e718907e0767precedence_heuristic	cell_id$8c6c6114-e6d7-11ea-20b1-e718907e0767downstream_cells_mapupstream_cells_map@md_strgetindex$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936precedence_heuristic	cell_id$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936downstream_cells_mapdisplayname$5ca8fb02-e6e3-11ea-0ad6-158746799400$469a28fc-f856-11ea-2a6b-a706e607cf9fupstream_cells_mapGradingAction$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71e$0796b462-f85c-11ea-1bf2-53ad24ec447cprecedence_heuristic	cell_id$0796b462-f85c-11ea-1bf2-53ad24ec447cdownstream_cells_mapGradedStudent$c7553450-f85b-11ea-1dbd-3d72253a58d6upstream_cells_map$9057dc04-e6d2-11ea-196b-1519cac7d248precedence_heuristic	cell_id$9057dc04-e6d2-11ea-196b-1519cac7d248downstream_cells_mapAutoTestAction$eaa49370-e6da-11ea-21d9-ddf11a7df51f$31111cbe-e6d3-11ea-0130-a98e45b82f2bupstream_cells_mapGradingAction$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71eNumberExpr$9090ee3e-e6de-11ea-14c3-27032e8710d3precedence_heuristic	cell_id$9090ee3e-e6de-11ea-14c3-27032e8710d3downstream_cells_mapupstream_cells_map@md_strgetindex$ca945d02-f686-11ea-03b4-393858220381precedence_heuristic	cell_id$ca945d02-f686-11ea-03b4-393858220381downstream_cells_mapupstream_cells_map@md_strgetindex$9c1c40f0-e6de-11ea-08d8-77acb2a550d4precedence_heuristic	cell_id$9c1c40f0-e6de-11ea-08d8-77acb2a550d4downstream_cells_maprun_server$a3e47050-e6de-11ea-2a91-0597143f71ba$b6b986c8-e6de-11ea-1d13-5d9d370eccdcupstream_cells_mapCore@md_strBasePlutoRunner.create_bondPlutoRunnerCheckBoxCore.applicable@bindBase.getgetindex$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675precedence_heuristic	cell_id$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675downstream_cells_mapupstream_cells_mapCSV$65d601a6-fe45-11ea-22c6-270bf7d353bcautograde_results_df$5ca8fb02-e6e3-11ea-0ad6-158746799400sprintDownloadButton$b6512e8e-f85b-11ea-0cb6-619a5b3f67bcprecedence_heuristic	cell_id$b6512e8e-f85b-11ea-0cb6-619a5b3f67bcdownstream_cells_mapgraders_raw$c7553450-f85b-11ea-1dbd-3d72253a58d6upstream_cells_map$9815b7f4-f686-11ea-0760-05b34811be7fprecedence_heuristic	cell_id$9815b7f4-f686-11ea-0760-05b34811be7fdownstream_cells_mapupstream_cells_map@md_strgetindex$b5d0d970-e6d9-11ea-20a5-01f0c4e3875cprecedence_heuristic	cell_id$b5d0d970-e6d9-11ea-20a5-01f0c4e3875cdownstream_cells_mappluto_session$5642a754-e6d9-11ea-35b6-0fe20d6a098e$a3e47050-e6de-11ea-2a91-0597143f71ba$33588e20-e6d4-11ea-08f6-7d10d9ef1481upstream_cells_mapPluto.ServerSession$Pluto.Configuration.from_flat_kwargsPluto$65d601a6-fe45-11ea-22c6-270bf7d353bc$7b3bb8c8-f687-11ea-27bb-45ed5807090eprecedence_heuristic	cell_id$7b3bb8c8-f687-11ea-27bb-45ed5807090edownstream_cells_mapmanual$144aa7ec-f864-11ea-35c4-43e19d898887$22fd661e-e6e7-11ea-2b4a-8981b17a790d$469a28fc-f856-11ea-2a6b-a706e607cf9fupstream_cells_map@md_strManualScoreAction$96917e4e-f687-11ea-2256-7b1057a3b523ManualCheckAction$e5d3fa7c-f687-11ea-044f-6b00f0321da8getindex$144aa7ec-f864-11ea-35c4-43e19d898887precedence_heuristic	cell_id$144aa7ec-f864-11ea-35c4-43e19d898887downstream_cells_mapupstream_cells_mapmanual$7b3bb8c8-f687-11ea-27bb-45ed5807090esum$eade89f2-e6de-11ea-11bb-531a6b65c666precedence_heuristic	cell_id$eade89f2-e6de-11ea-11bb-531a6b65c666downstream_cells_mapinspected_notebook_index_str$1a999dfe-e6e1-11ea-12f4-ed24f03245e0upstream_cells_mapCorestringBase.get@bind=>BasePlutoRunnerenumeratePlutoRunner.create_bondCore.applicableSelectnotebooks$5642a754-e6d9-11ea-35b6-0fe20d6a098e$bbcd528e-e6e5-11ea-2d9c-a50835477b2eprecedence_heuristic	cell_id$bbcd528e-e6e5-11ea-2d9c-a50835477b2edownstream_cells_mapupstream_cells_map@md_strgetindex$3f0aec92-e6e1-11ea-1b53-29b7b543674dprecedence_heuristic	cell_id$3f0aec92-e6e1-11ea-1b53-29b7b543674ddownstream_cells_mapupstream_cells_map$991ddb18-e6e6-11ea-220d-71b6794f39d8precedence_heuristic	cell_id$991ddb18-e6e6-11ea-220d-71b6794f39d8downstream_cells_mapupstream_cells_mapautograde_results_df$5ca8fb02-e6e3-11ea-0ad6-158746799400:inspected_notebook_index$1a999dfe-e6e1-11ea-12f4-ed24f03245e0$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6precedence_heuristic	cell_id$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6downstream_cells_mapupstream_cells_map@md_strgetindex$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71eprecedence_heuristic	cell_id$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71edownstream_cells_mapGradingAction$9057dc04-e6d2-11ea-196b-1519cac7d248$3abb56e4-e6d3-11ea-3337-392a434e1a21$96917e4e-f687-11ea-2256-7b1057a3b523$e5d3fa7c-f687-11ea-044f-6b00f0321da8$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936upstream_cells_map$a6fe722e-e6da-11ea-21e8-1dea77b462efprecedence_heuristic	cell_id$a6fe722e-e6da-11ea-21e8-1dea77b462efdownstream_cells_mapsubmission_files_to_run$5642a754-e6d9-11ea-35b6-0fe20d6a098eupstream_cells_maprun_notebooks$a1598cfc-e6d7-11ea-1f0b-f5560304fe7asubmission_files$427f19de-e6d2-11ea-10a8-5d3552224b31StringPluto$65d601a6-fe45-11ea-22c6-270bf7d353bcPluto.tamepath$22fd661e-e6e7-11ea-2b4a-8981b17a790dprecedence_heuristic	cell_id$22fd661e-e6e7-11ea-2b4a-8981b17a790ddownstream_cells_mapinspected_manual_results$e9b4c316-f852-11ea-3840-e7b1428df4e9$f131ee3a-f68a-11ea-3d6c-d34439133a63upstream_cells_map manual$7b3bb8c8-f687-11ea-27bb-45ed5807090e#PlutoRunner.PlutoRunner.create_bond|>@bind@MIME_strinspected_notebook$64c26a50-e6df-11ea-2762-57186f445501joinBasePlutoRunnermapHTMLenumeratePlutoRunner.Base.getmanual_results_dict$633ee8e4-f68a-11ea-271e-433eafd12a62reprPlutoRunner.Core.applicable$a3e47050-e6de-11ea-2a91-0597143f71baprecedence_heuristic	cell_id$a3e47050-e6de-11ea-2a91-0597143f71badownstream_cells_mapupstream_cells_map@md_strBase.getindexPluto.run@asyncpluto_session$b5d0d970-e6d9-11ea-20a5-01f0c4e3875cPluto$65d601a6-fe45-11ea-22c6-270bf7d353bcBase.TaskBaseBase.scheduleBase.put!run_server$9c1c40f0-e6de-11ea-08d8-77acb2a550d4##sync#52$5642a754-e6d9-11ea-35b6-0fe20d6a098eprecedence_heuristic	cell_id$5642a754-e6d9-11ea-35b6-0fe20d6a098edownstream_cells_mapnotebooks$33e66768-e6d9-11ea-1aba-256b4c9998b8$eade89f2-e6de-11ea-11bb-531a6b65c666$64c26a50-e6df-11ea-2762-57186f445501upstream_cells_mapPluto.tamepathmapvaluespluto_session$b5d0d970-e6d9-11ea-20a5-01f0c4e3875csubmission_files_to_run$a6fe722e-e6da-11ea-21e8-1dea77b462efPluto.SessionActions.shutdownPluto.update_save_run!Pluto$65d601a6-fe45-11ea-22c6-270bf7d353bcPluto.load_notebook$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763precedence_heuristic	cell_id$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763downstream_cells_mapupstream_cells_map@md_strgetindexsubmission_files$427f19de-e6d2-11ea-10a8-5d3552224b31!isabspathall$6b40e1d0-f865-11ea-3c2a-39fb643c8068precedence_heuristic	cell_id$6b40e1d0-f865-11ea-3c2a-39fb643c8068downstream_cells_mapupstream_cells_map@md_strgetindex$e48f2a16-e6e1-11ea-070a-d58f87569b91precedence_heuristic	cell_id$e48f2a16-e6e1-11ea-070a-d58f87569b91downstream_cells_mapupstream_cells_map@md_strgetindex$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6aprecedence_heuristic	cell_id$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6adownstream_cells_mapupstream_cells_map@md_strgetindex$3abb56e4-e6d3-11ea-3337-392a434e1a21precedence_heuristic	cell_id$3abb56e4-e6d3-11ea-3337-392a434e1a21downstream_cells_mapGetValue$eaa49370-e6da-11ea-21d9-ddf11a7df51f$31111cbe-e6d3-11ea-0130-a98e45b82f2bupstream_cells_mapGradingAction$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71eExpr$ce055a44-e6d8-11ea-3a07-75392c0f6c26precedence_heuristic	cell_id$ce055a44-e6d8-11ea-3a07-75392c0f6c26downstream_cells_mapupstream_cells_map@md_strgetindex$7cb1c9bc-f684-11ea-00f3-dfd11c9b72efprecedence_heuristic	cell_id$7cb1c9bc-f684-11ea-00f3-dfd11c9b72efdownstream_cells_mapupstream_cells_mapautograde_results_df$5ca8fb02-e6e3-11ea-0ad6-158746799400HTMLTable$459687e0-e6e3-11ea-0c85-89516c7a2da0precedence_heuristic	cell_id$459687e0-e6e3-11ea-0c85-89516c7a2da0downstream_cells_mapupstream_cells_mapCSV$65d601a6-fe45-11ea-22c6-270bf7d353bcsprintDownloadButtonmanual_results_df$469a28fc-f856-11ea-2a6b-a706e607cf9f$c0d9fb36-f858-11ea-35c0-77963b5cf57aprecedence_heuristic	cell_id$c0d9fb36-f858-11ea-35c0-77963b5cf57adownstream_cells_mapupstream_cells_mapsumactions$eaa49370-e6da-11ea-21d9-ddf11a7df51f$9982bbfa-00c0-11eb-0a5c-818fae8c01ceprecedence_heuristic	cell_id$9982bbfa-00c0-11eb-0a5c-818fae8c01cedownstream_cells_mapupstream_cells_mapPluto$65d601a6-fe45-11ea-22c6-270bf7d353bc$96917e4e-f687-11ea-2256-7b1057a3b523precedence_heuristic	cell_id$96917e4e-f687-11ea-2256-7b1057a3b523downstream_cells_mapManualScoreAction$7b3bb8c8-f687-11ea-27bb-45ed5807090eupstream_cells_mapGradingAction$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71eNumberpoints_valie$469a28fc-f856-11ea-2a6b-a706e607cf9fprecedence_heuristic	cell_id$469a28fc-f856-11ea-2a6b-a706e607cf9fdownstream_cells_mapmanual_results_df$459687e0-e6e3-11ea-0c85-89516c7a2da0upstream_cells_mapmanual$7b3bb8c8-f687-11ea-27bb-45ed5807090eautograde_results_df$5ca8fb02-e6e3-11ea-0ad6-158746799400:collect=>zipSymbolupdated_manual_results_dict$f131ee3a-f68a-11ea-3d6c-d34439133a63mapenumerateDataFramedisplayname$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936$b6b986c8-e6de-11ea-1d13-5d9d370eccdcprecedence_heuristic	cell_id$b6b986c8-e6de-11ea-1d13-5d9d370eccdcdownstream_cells_mapupstream_cells_mapcdHTMLrun_server$9c1c40f0-e6de-11ea-08d8-77acb2a550d4dirname|>inspected_notebook$64c26a50-e6df-11ea-2762-57186f445501$eaa49370-e6da-11ea-21d9-ddf11a7df51fprecedence_heuristic	cell_id$eaa49370-e6da-11ea-21d9-ddf11a7df51fdownstream_cells_mapactions$c0d9fb36-f858-11ea-35c0-77963b5cf57a$33e66768-e6d9-11ea-1aba-256b4c9998b8$5ca8fb02-e6e3-11ea-0ad6-158746799400upstream_cells_mapGetValue$3abb56e4-e6d3-11ea-3337-392a434e1a21AutoTestAction$9057dc04-e6d2-11ea-196b-1519cac7d248$490cc11a-00cb-11eb-24bc-2fb026c3094eprecedence_heuristic	cell_id$490cc11a-00cb-11eb-24bc-2fb026c3094edownstream_cells_mapupstream_cells_mapall$31111cbe-e6d3-11ea-0130-a98e45b82f2bprecedence_heuristic	cell_id$31111cbe-e6d3-11ea-0130-a98e45b82f2bdownstream_cells_mapdo_action$33e66768-e6d9-11ea-1aba-256b4c9998b8upstream_cells_mapzeroeval_in_notebook$33588e20-e6d4-11ea-08f6-7d10d9ef1481GetValue$3abb56e4-e6d3-11ea-3337-392a434e1a21===AutoTestAction$9057dc04-e6d2-11ea-196b-1519cac7d248Pluto$65d601a6-fe45-11ea-22c6-270bf7d353bc$f131ee3a-f68a-11ea-3d6c-d34439133a63precedence_heuristic	cell_id$f131ee3a-f68a-11ea-3d6c-d34439133a63downstream_cells_mapupdated_manual_results_dict$469a28fc-f856-11ea-2a6b-a706e607cf9fupstream_cells_mapmissing===inspected_notebook_index$1a999dfe-e6e1-11ea-12f4-ed24f03245e0manual_results_dict$633ee8e4-f68a-11ea-271e-433eafd12a62inspected_manual_results$22fd661e-e6e7-11ea-2b4a-8981b17a790d!==$64c26a50-e6df-11ea-2762-57186f445501precedence_heuristic	cell_id$64c26a50-e6df-11ea-2762-57186f445501downstream_cells_mapinspected_notebook$b6b986c8-e6de-11ea-1d13-5d9d370eccdc$e9b4c316-f852-11ea-3840-e7b1428df4e9$22fd661e-e6e7-11ea-2b4a-8981b17a790dupstream_cells_mapinspected_notebook_index$1a999dfe-e6e1-11ea-12f4-ed24f03245e0notebooks$5642a754-e6d9-11ea-35b6-0fe20d6a098e$33e66768-e6d9-11ea-1aba-256b4c9998b8precedence_heuristic	cell_id$33e66768-e6d9-11ea-1aba-256b4c9998b8downstream_cells_mapautograde_results$5ca8fb02-e6e3-11ea-0ad6-158746799400upstream_cells_mapmapactions$eaa49370-e6da-11ea-21d9-ddf11a7df51fdo_action$31111cbe-e6d3-11ea-0130-a98e45b82f2bnotebooks$5642a754-e6d9-11ea-35b6-0fe20d6a098e$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5ceprecedence_heuristic	cell_id$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5cedownstream_cells_mapupstream_cells_map@md_strgetindex$8904534a-e6e1-11ea-34b7-31d1f6f8ca8fprecedence_heuristic	cell_id$8904534a-e6e1-11ea-34b7-31d1f6f8ca8fdownstream_cells_mapupstream_cells_map@md_strgetindex$122cbbdc-00cd-11eb-223b-ef82328f674fprecedence_heuristic	cell_id$122cbbdc-00cd-11eb-223b-ef82328f674fdownstream_cells_mapupstream_cells_map<=<->+*$b8d4598c-f686-11ea-24dc-6f94370fc996precedence_heuristic	cell_id$b8d4598c-f686-11ea-24dc-6f94370fc996downstream_cells_mapupstream_cells_map@md_strgetindex$dfbaecac-f855-11ea-1f3e-0522a86136eaprecedence_heuristic	cell_id$dfbaecac-f855-11ea-1f3e-0522a86136eadownstream_cells_mapupstream_cells_map@md_strgetindex$a1598cfc-e6d7-11ea-1f0b-f5560304fe7aprecedence_heuristic	cell_id$a1598cfc-e6d7-11ea-1f0b-f5560304fe7adownstream_cells_maprun_notebooks$a6fe722e-e6da-11ea-21e8-1dea77b462efupstream_cells_mapCore@md_strBase.get@bindlengthBasePlutoRunnerCheckBoxPlutoRunner.create_bondsubmission_files$427f19de-e6d2-11ea-10a8-5d3552224b31Core.applicablegetindexcell_execution_order A$65d601a6-fe45-11ea-22c6-270bf7d353bc$122cbbdc-00cd-11eb-223b-ef82328f674f$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6a$836cc4be-e6d7-11ea-2a6e-436c187304da$4e4e78d2-f865-11ea-0c21-fdd76cbf3532$427f19de-e6d2-11ea-10a8-5d3552224b31$6b40e1d0-f865-11ea-3c2a-39fb643c8068$728d1ca8-f865-11ea-1a3e-33cb0a44b9dd$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6$a0776916-f865-11ea-387a-bf2e3094a182$490cc11a-00cb-11eb-24bc-2fb026c3094e$8c6c6114-e6d7-11ea-20b1-e718907e0767$a1598cfc-e6d7-11ea-1f0b-f5560304fe7a$b5d0d970-e6d9-11ea-20a5-01f0c4e3875c$a6fe722e-e6da-11ea-21e8-1dea77b462ef$9982bbfa-00c0-11eb-0a5c-818fae8c01ce$5642a754-e6d9-11ea-35b6-0fe20d6a098e$3f0aec92-e6e1-11ea-1b53-29b7b543674d$3fb6b20c-e6e1-11ea-35eb-e74598e31daf$9090ee3e-e6de-11ea-14c3-27032e8710d3$9c1c40f0-e6de-11ea-08d8-77acb2a550d4$a3e47050-e6de-11ea-2a91-0597143f71ba$657f23ce-f687-11ea-13c0-f9959437ddf5$8904534a-e6e1-11ea-34b7-31d1f6f8ca8f$eade89f2-e6de-11ea-11bb-531a6b65c666$9815b7f4-f686-11ea-0760-05b34811be7f$b8d4598c-f686-11ea-24dc-6f94370fc996$ca945d02-f686-11ea-03b4-393858220381$dfbaecac-f855-11ea-1f3e-0522a86136ea$0ae5802c-f856-11ea-11ac-31a3ba67606c$633ee8e4-f68a-11ea-271e-433eafd12a62$06edecc6-f864-11ea-03b0-03db23d2c780$1a999dfe-e6e1-11ea-12f4-ed24f03245e0$64c26a50-e6df-11ea-2762-57186f445501$b6b986c8-e6de-11ea-1d13-5d9d370eccdc$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5ce$ce055a44-e6d8-11ea-3a07-75392c0f6c26$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71e$9057dc04-e6d2-11ea-196b-1519cac7d248$3abb56e4-e6d3-11ea-3337-392a434e1a21$eaa49370-e6da-11ea-21d9-ddf11a7df51f$c0d9fb36-f858-11ea-35c0-77963b5cf57a$96917e4e-f687-11ea-2256-7b1057a3b523$e5d3fa7c-f687-11ea-044f-6b00f0321da8$7b3bb8c8-f687-11ea-27bb-45ed5807090e$144aa7ec-f864-11ea-35c4-43e19d898887$22fd661e-e6e7-11ea-2b4a-8981b17a790d$e9b4c316-f852-11ea-3840-e7b1428df4e9$f131ee3a-f68a-11ea-3d6c-d34439133a63$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936$e48f2a16-e6e1-11ea-070a-d58f87569b91$33588e20-e6d4-11ea-08f6-7d10d9ef1481$31111cbe-e6d3-11ea-0130-a98e45b82f2b$33e66768-e6d9-11ea-1aba-256b4c9998b8$5ca8fb02-e6e3-11ea-0ad6-158746799400$7cb1c9bc-f684-11ea-00f3-dfd11c9b72ef$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675$991ddb18-e6e6-11ea-220d-71b6794f39d8$469a28fc-f856-11ea-2a6b-a706e607cf9f$459687e0-e6e3-11ea-0c85-89516c7a2da0$bbcd528e-e6e5-11ea-2d9c-a50835477b2e$0796b462-f85c-11ea-1bf2-53ad24ec447c$b6512e8e-f85b-11ea-0cb6-619a5b3f67bc$c7553450-f85b-11ea-1dbd-3d72253a58d6last_hot_reload_time        shortpathupdated.jlprocess_statusreadypathL/home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jlpluto_versionv0.19.47last_save_timeA'acell_order A$65d601a6-fe45-11ea-22c6-270bf7d353bc$122cbbdc-00cd-11eb-223b-ef82328f674f$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6a$836cc4be-e6d7-11ea-2a6e-436c187304da$4e4e78d2-f865-11ea-0c21-fdd76cbf3532$427f19de-e6d2-11ea-10a8-5d3552224b31$6b40e1d0-f865-11ea-3c2a-39fb643c8068$728d1ca8-f865-11ea-1a3e-33cb0a44b9dd$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6$a0776916-f865-11ea-387a-bf2e3094a182$eaa49370-e6da-11ea-21d9-ddf11a7df51f$490cc11a-00cb-11eb-24bc-2fb026c3094e$c0d9fb36-f858-11ea-35c0-77963b5cf57a$7cb1c9bc-f684-11ea-00f3-dfd11c9b72ef$8c6c6114-e6d7-11ea-20b1-e718907e0767$a1598cfc-e6d7-11ea-1f0b-f5560304fe7a$b5d0d970-e6d9-11ea-20a5-01f0c4e3875c$a6fe722e-e6da-11ea-21e8-1dea77b462ef$9982bbfa-00c0-11eb-0a5c-818fae8c01ce$5642a754-e6d9-11ea-35b6-0fe20d6a098e$33e66768-e6d9-11ea-1aba-256b4c9998b8$3f0aec92-e6e1-11ea-1b53-29b7b543674d$5ca8fb02-e6e3-11ea-0ad6-158746799400$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675$3fb6b20c-e6e1-11ea-35eb-e74598e31daf$9090ee3e-e6de-11ea-14c3-27032e8710d3$9c1c40f0-e6de-11ea-08d8-77acb2a550d4$a3e47050-e6de-11ea-2a91-0597143f71ba$657f23ce-f687-11ea-13c0-f9959437ddf5$7b3bb8c8-f687-11ea-27bb-45ed5807090e$144aa7ec-f864-11ea-35c4-43e19d898887$8904534a-e6e1-11ea-34b7-31d1f6f8ca8f$eade89f2-e6de-11ea-11bb-531a6b65c666$9815b7f4-f686-11ea-0760-05b34811be7f$991ddb18-e6e6-11ea-220d-71b6794f39d8$b8d4598c-f686-11ea-24dc-6f94370fc996$b6b986c8-e6de-11ea-1d13-5d9d370eccdc$ca945d02-f686-11ea-03b4-393858220381$dfbaecac-f855-11ea-1f3e-0522a86136ea$e9b4c316-f852-11ea-3840-e7b1428df4e9$22fd661e-e6e7-11ea-2b4a-8981b17a790d$0ae5802c-f856-11ea-11ac-31a3ba67606c$633ee8e4-f68a-11ea-271e-433eafd12a62$469a28fc-f856-11ea-2a6b-a706e607cf9f$459687e0-e6e3-11ea-0c85-89516c7a2da0$06edecc6-f864-11ea-03b0-03db23d2c780$f131ee3a-f68a-11ea-3d6c-d34439133a63$1a999dfe-e6e1-11ea-12f4-ed24f03245e0$64c26a50-e6df-11ea-2762-57186f445501$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5ce$ce055a44-e6d8-11ea-3a07-75392c0f6c26$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71e$9057dc04-e6d2-11ea-196b-1519cac7d248$3abb56e4-e6d3-11ea-3337-392a434e1a21$96917e4e-f687-11ea-2256-7b1057a3b523$e5d3fa7c-f687-11ea-044f-6b00f0321da8$31111cbe-e6d3-11ea-0130-a98e45b82f2b$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936$e48f2a16-e6e1-11ea-070a-d58f87569b91$33588e20-e6d4-11ea-08f6-7d10d9ef1481$bbcd528e-e6e5-11ea-2d9c-a50835477b2e$0796b462-f85c-11ea-1bf2-53ad24ec447c$b6512e8e-f85b-11ea-0cb6-619a5b3f67bc$c7553450-f85b-11ea-1dbd-3d72253a58d6published_objectsnbpkginstall_time_nsRinstantiatedòinstalled_versionsCSV0.10.15PlutoUI0.7.64DataFrames1.7.0UUIDsstdlibPluto0.19.47Distributedstdlibterminal_outputsCSV
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`nbpkg_sync
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`PlutoUI
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`DataFrames
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`UUIDs
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`Pluto
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`Distributed
[0m[1mInstantiating...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_p35YZb/Manifest.toml`

[0m[1mAdding packages...[22m
[90m===[39m
[32m[1m   Resolving[22m[39m package versions...
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Project.toml`
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
[32m[1m    Updating[22m[39m `/tmp/jl_p35YZb/Manifest.toml`
 [90m [6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
 [90m [d1d4a3ce] [39m[92m+ BitFlags v0.1.9[39m
 [90m [336ed68f] [39m[92m+ CSV v0.10.15[39m
 [90m [944b1d66] [39m[92m+ CodecZlib v0.7.8[39m
 [90m [3da002f7] [39m[92m+ ColorTypes v0.12.1[39m
 [90m [34da2185] [39m[92m+ Compat v4.16.0[39m
 [90m [f0e56b4a] [39m[92m+ ConcurrentUtilities v2.5.0[39m
 [90m [5218b696] [39m[92m+ Configurations v0.17.6[39m
 [90m [a8cc5b0e] [39m[92m+ Crayons v4.1.1[39m
 [90m [9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
 [90m [a93c6f00] [39m[92m+ DataFrames v1.7.0[39m
 [90m [864edb3b] [39m[92m+ DataStructures v0.18.22[39m
 [90m [e2d170a0] [39m[92m+ DataValueInterfaces v1.0.0[39m
 [90m [460bff9d] [39m[92m+ ExceptionUnwrapping v0.1.11[39m
 [90m [21656369] [39m[92m+ ExpressionExplorer v1.0.4[39m
 [90m [55351af7] [39m[92m+ ExproniconLite v0.10.14[39m
 [90m [48062228] [39m[92m+ FilePathsBase v0.9.24[39m
 [90m [53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
 [90m [fb4132e2] [39m[92m+ FuzzyCompletions v0.5.5[39m
 [90m [cd3eb016] [39m[92m+ HTTP v1.10.16[39m
 [90m [47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
 [90m [ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
 [90m [b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
 [90m [842dd82b] [39m[92m+ InlineStrings v1.4.4[39m
 [90m [41ab1584] [39m[92m+ InvertedIndices v1.3.1[39m
 [90m [82899510] [39m[92m+ IteratorInterfaceExtensions v1.0.0[39m
 [90m [692b3bcd] [39m[92m+ JLLWrappers v1.7.0[39m
 [90m [682c06a0] [39m[92m+ JSON v0.21.4[39m
 [90m [b964fa9f] [39m[92m+ LaTeXStrings v1.4.0[39m
 [90m [0e77f7df] [39m[92m+ LazilyInitializedFields v1.3.0[39m
 [90m [e6f89c97] [39m[92m+ LoggingExtras v1.1.0[39m
 [90m [6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
 [90m [36869731] [39m[92m+ Malt v1.1.2[39m
 [90m [739be429] [39m[92m+ MbedTLS v1.1.9[39m
 [90m [e1d29d7a] [39m[92m+ Missings v1.2.0[39m
 [90m [99f44e22] [39m[92m+ MsgPack v1.2.1[39m
 [90m [4d8831e6] [39m[92m+ OpenSSL v1.5.0[39m
 [90m [bac558e1] [39m[92m+ OrderedCollections v1.8.1[39m
 [90m [69de0a69] [39m[92m+ Parsers v2.8.3[39m
 [90m [c3e4b0f8] [39m[92m+ Pluto v0.19.47[39m
 [90m [72656b73] [39m[92m+ PlutoDependencyExplorer v1.0.4[39m
 [90m [7f904dfe] [39m[92m+ PlutoUI v0.7.64[39m
 [90m [2dfb63ee] [39m[92m+ PooledArrays v1.4.3[39m
 [90m [91cefc8d] [39m[92m+ PrecompileSignatures v3.0.3[39m
 [90m [aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
 [90m [21216c6a] [39m[92m+ Preferences v1.4.3[39m
 [90m [08abe8d2] [39m[92m+ PrettyTables v2.3.2[39m
 [90m [189a3867] [39m[92m+ Reexport v1.2.2[39m
 [90m [2792f1a3] [39m[92m+ RegistryInstances v0.1.0[39m
 [90m [05181044] [39m[92m+ RelocatableFolders v1.0.1[39m
 [90m [6c6a2e73] [39m[92m+ Scratch v1.2.1[39m
 [90m [91c51154] [39m[92m+ SentinelArrays v1.4.8[39m
 [90m [777ac1f9] [39m[92m+ SimpleBufferStream v1.2.0[39m
 [90m [a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
 [90m [892a3eda] [39m[92m+ StringManipulation v0.3.4[39m
 [90m [3783bdb8] [39m[92m+ TableTraits v1.0.1[39m
 [90m [bd369af6] [39m[92m+ Tables v1.12.1[39m
 [90m [3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
 [90m [410a4b4d] [39m[92m+ Tricks v0.1.10[39m
 [90m [5c2747f8] [39m[92m+ URIs v1.5.2[39m
 [90m [ea10d353] [39m[92m+ WeakRefStrings v1.4.2[39m
 [90m [76eceee3] [39m[92m+ WorkerUtilities v1.6.1[39m
 [90m [458c3c95] [39m[92m+ OpenSSL_jll v3.5.0+0[39m
 [90m [0dad84c5] [39m[92m+ ArgTools[39m
 [90m [56f22d72] [39m[92m+ Artifacts[39m
 [90m [2a0f44e3] [39m[92m+ Base64[39m
 [90m [ade2ca70] [39m[92m+ Dates[39m
 [90m [8ba89e20] [39m[92m+ Distributed[39m
 [90m [f43a241f] [39m[92m+ Downloads[39m
 [90m [7b1f6079] [39m[92m+ FileWatching[39m
 [90m [9fa8497b] [39m[92m+ Future[39m
 [90m [b77e0a4c] [39m[92m+ InteractiveUtils[39m
 [90m [b27032c2] [39m[92m+ LibCURL[39m
 [90m [76f85450] [39m[92m+ LibGit2[39m
 [90m [8f399da3] [39m[92m+ Libdl[39m
 [90m [37e2e46d] [39m[92m+ LinearAlgebra[39m
 [90m [56ddb016] [39m[92m+ Logging[39m
 [90m [d6f4376e] [39m[92m+ Markdown[39m
 [90m [a63ad114] [39m[92m+ Mmap[39m
 [90m [ca575930] [39m[92m+ NetworkOptions[39m
 [90m [44cfe95a] [39m[92m+ Pkg[39m
 [90m [de0858da] [39m[92m+ Printf[39m
 [90m [3fa0cd96] [39m[92m+ REPL[39m
 [90m [9a3f8284] [39m[92m+ Random[39m
 [90m [ea8e919c] [39m[92m+ SHA[39m
 [90m [9e88b42a] [39m[92m+ Serialization[39m
 [90m [6462fe0b] [39m[92m+ Sockets[39m
 [90m [2f01184e] [39m[92m+ SparseArrays[39m
 [90m [10745b16] [39m[92m+ Statistics[39m
 [90m [fa267f1f] [39m[92m+ TOML[39m
 [90m [a4e569a6] [39m[92m+ Tar[39m
 [90m [8dfed614] [39m[92m+ Test[39m
 [90m [cf7118a7] [39m[92m+ UUIDs[39m
 [90m [4ec0a83e] [39m[92m+ Unicode[39m
 [90m [e66e0078] [39m[92m+ CompilerSupportLibraries_jll[39m
 [90m [deac9b47] [39m[92m+ LibCURL_jll[39m
 [90m [29816b5a] [39m[92m+ LibSSH2_jll[39m
 [90m [c8ffd9c3] [39m[92m+ MbedTLS_jll[39m
 [90m [14a3606d] [39m[92m+ MozillaCACerts_jll[39m
 [90m [4536629a] [39m[92m+ OpenBLAS_jll[39m
 [90m [83775a58] [39m[92m+ Zlib_jll[39m
 [90m [8e850b90] [39m[92m+ libblastrampoline_jll[39m
 [90m [8e850ede] [39m[92m+ nghttp2_jll[39m
 [90m [3f19e933] [39m[92m+ p7zip_jll[39m
[32m[1mLoading[22m[39m packages...

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

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_p35YZb`enabled÷restart_recommended_msgrestart_required_msgbusy_packageswaiting_for_permission,waiting_for_permission_but_probably_disabled«cell_inputs A$836cc4be-e6d7-11ea-2a6e-436c187304dacell_id$836cc4be-e6d7-11ea-2a6e-436c187304dacode&md"## Step 1: Select submission files"metadatashow_logsèdisabled®skip_as_script«code_folded$728d1ca8-f865-11ea-1a3e-33cb0a44b9ddcell_id$728d1ca8-f865-11ea-1a3e-33cb0a44b9ddcodezsubmission_files_EXAMPLE = ["/home/fonsi/hw1/submissions/hw1 - fonsi.jl", "/home/fonsi/hw1/submissions/hw1 - template.jl"]metadatashow_logsèdisabled®skip_as_script«code_folded$65d601a6-fe45-11ea-22c6-270bf7d353bccell_id$65d601a6-fe45-11ea-22c6-270bf7d353bccodevbegin
	
		import Pluto
		import UUIDs: UUID
		import Distributed
		using PlutoUI
		using DataFrames
		import CSV
	
endmetadatashow_logsèdisabled®skip_as_script«code_folded$4e4e78d2-f865-11ea-0c21-fdd76cbf3532cell_id$4e4e78d2-f865-11ea-0c21-fdd76cbf3532code٥md"You need to write some code that returns the **absolute paths** to the students' homework submissions. The following code works for me, but probably not for you."metadatashow_logsèdisabled®skip_as_script«code_folded$5ca8fb02-e6e3-11ea-0ad6-158746799400cell_id$5ca8fb02-e6e3-11ea-0ad6-158746799400codeٷautograde_results_df = DataFrame(map(autograde_results) do results
		(;
			map(zip(actions, results)) do (action, result)
				Symbol(displayname(action)) => result
			end...
		)
	end)metadatashow_logsèdisabled®skip_as_script«code_folded$0ae5802c-f856-11ea-11ac-31a3ba67606ccell_id$0ae5802c-f856-11ea-11ac-31a3ba67606ccode2@bind reset_results Button("Reset manual results")metadatashow_logsèdisabled®skip_as_script«code_folded$e5d3fa7c-f687-11ea-044f-6b00f0321da8cell_id$e5d3fa7c-f687-11ea-044f-6b00f0321da8codeٵbegin
	struct ManualCheckAction <: GradingAction
		name
		points_value::Number
		rubric
	end
	ManualCheckAction(name, points_value) = ManualCheckAction(name, points_valie, name)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$633ee8e4-f68a-11ea-271e-433eafd12a62cell_id$633ee8e4-f68a-11ea-271e-433eafd12a62code5manual_results_dict = let
	reset_results
	Dict()
end;metadatashow_logsèdisabled®skip_as_script«code_folded$1a999dfe-e6e1-11ea-12f4-ed24f03245e0cell_id$1a999dfe-e6e1-11ea-12f4-ed24f03245e0codeCinspected_notebook_index = parse(Int, inspected_notebook_index_str)metadatashow_logsèdisabled®skip_as_script«code_folded$657f23ce-f687-11ea-13c0-f9959437ddf5cell_id$657f23ce-f687-11ea-13c0-f9959437ddf5code#md"## Step 2: manual grade actions"metadatashow_logsèdisabled®skip_as_script«code_folded$3fb6b20c-e6e1-11ea-35eb-e74598e31dafcell_id$3fb6b20c-e6e1-11ea-35eb-e74598e31dafcodemd"# Part 2: manual review"metadatashow_logsèdisabled®skip_as_script«code_folded$c7553450-f85b-11ea-1dbd-3d72253a58d6cell_id$c7553450-f85b-11ea-1dbd-3d72253a58d6codeXgraders = map(split(graders_raw, '\n')) do line
	GradedStudent(split(line, '\t')...)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$427f19de-e6d2-11ea-10a8-5d3552224b31cell_id$427f19de-e6d2-11ea-10a8-5d3552224b31codeٓsubmission_files = let
	all = readdir("/home/fons/disorganised-mess/autograding/submissions/"; join=true)
	filter(f -> endswith(f, ".jl"), all)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$e9b4c316-f852-11ea-3840-e7b1428df4e9cell_id$e9b4c316-f852-11ea-3840-e7b1428df4e9codeٿif inspected_manual_results === missing
	get(manual_results_dict, basename(inspected_notebook.path), 
	md"_Scores for this homework are not yet saved._"
		)
else
	inspected_manual_results
endmetadatashow_logsèdisabled®skip_as_script«code_folded$a0776916-f865-11ea-387a-bf2e3094a182cell_id$a0776916-f865-11ea-387a-bf2e3094a182code6md"I have already written these, you can ignore this."metadatashow_logsèdisabled®skip_as_script«code_folded$33588e20-e6d4-11ea-08f6-7d10d9ef1481cell_id$33588e20-e6d4-11ea-08f6-7d10d9ef1481codefunction eval_in_notebook(notebook::Pluto.Notebook, expr)
	ws = Pluto.WorkspaceManager.get_workspace((pluto_session, notebook))
	fetcher = :(Core.eval($(ws.module_name), $(expr |> QuoteNode)))
	Distributed.remotecall_eval(Main, ws.pid, fetcher)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$06edecc6-f864-11ea-03b0-03db23d2c780cell_id$06edecc6-f864-11ea-03b0-03db23d2c780codemetadatashow_logsèdisabled®skip_as_script«code_folded$8c6c6114-e6d7-11ea-20b1-e718907e0767cell_id$8c6c6114-e6d7-11ea-20b1-e718907e0767code&md"## Step 3: autograde all notebooks"metadatashow_logsèdisabled®skip_as_script«code_folded$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936cell_id$8b9a3f7a-e6d4-11ea-34c5-ef986e6af936codeJbegin
	
	
	# default
	displayname(action::GradingAction) = action.name
endmetadatashow_logsèdisabled®skip_as_script«code_folded$0796b462-f85c-11ea-1bf2-53ad24ec447ccell_id$0796b462-f85c-11ea-1bf2-53ad24ec447ccode-struct GradedStudent
	name
	email
	grader
endmetadatashow_logsèdisabled®skip_as_script«code_folded$9057dc04-e6d2-11ea-196b-1519cac7d248cell_id$9057dc04-e6d2-11ea-196b-1519cac7d248codeRstruct AutoTestAction <: GradingAction
	name
	points_value::Number
	test::Expr
endmetadatashow_logsèdisabled®skip_as_script«code_folded$9090ee3e-e6de-11ea-14c3-27032e8710d3cell_id$9090ee3e-e6de-11ea-14c3-27032e8710d3code$md"## Step 1: start notebook server"metadatashow_logsèdisabled®skip_as_script«code_folded$ca945d02-f686-11ea-03b4-393858220381cell_id$ca945d02-f686-11ea-03b4-393858220381codemd"#### Manual grading"metadatashow_logsèdisabled®skip_as_script«code_folded$9c1c40f0-e6de-11ea-08d8-77acb2a550d4cell_id$9c1c40f0-e6de-11ea-08d8-77acb2a550d4codeamd"**Click to start notebook server:**

 $(@bind run_server CheckBox()) run notebook server

---"metadatashow_logsèdisabled®skip_as_script«code_folded$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675cell_id$c9a66a4a-e6e4-11ea-0528-f3bbf6f17675codePDownloadButton(sprint(CSV.write, autograde_results_df), "autograde_results.csv")metadatashow_logsèdisabled®skip_as_script«code_folded$b6512e8e-f85b-11ea-0cb6-619a5b3f67bccell_id$b6512e8e-f85b-11ea-0cb6-619a5b3f67bccodegraders_raw = """
"""metadatashow_logsèdisabled®skip_as_script«code_folded$9815b7f4-f686-11ea-0760-05b34811be7fcell_id$9815b7f4-f686-11ea-0760-05b34811be7fcode0md"#### Autograde results for selected homework"metadatashow_logsèdisabled®skip_as_script«code_folded$b5d0d970-e6d9-11ea-20a5-01f0c4e3875ccell_id$b5d0d970-e6d9-11ea-20a5-01f0c4e3875ccodepluto_session = Pluto.ServerSession(;options=Pluto.Configuration.from_flat_kwargs(
	launch_browser=false, 
	require_secret_for_open_links=false,
	require_secret_for_access=false,
	workspace_use_distributed=false,
	port=2468,
))metadatashow_logsèdisabled®skip_as_script«code_folded$7b3bb8c8-f687-11ea-27bb-45ed5807090ecell_id$7b3bb8c8-f687-11ea-27bb-45ed5807090ecodemanual = [
	ManualCheckAction("3.1 - colored line", 5, md"Did they write `colored_line(v)`?"),
	
	ManualScoreAction("3.4 - make it interactive", 8, md"Did they create a slider? Does the slider control the amount of blur?"),
	
	ManualScoreAction("4.2 - convolve_image", 20, md"Is convole_image correct?"),
	ManualScoreAction("4.3 - Gaussian blur", 10, md"Does the Gaussian blur look okay?"),
	ManualScoreAction("4.4 - Sobel filter", 10, md"Does the Sobel filter look okay?"),
]metadatashow_logsèdisabled®skip_as_script«code_folded$144aa7ec-f864-11ea-35c4-43e19d898887cell_id$144aa7ec-f864-11ea-35c4-43e19d898887codeDsum(manual) do action
	try
		action.points_value
	catch
		0
	end
endmetadatashow_logsèdisabled®skip_as_script«code_folded$eade89f2-e6de-11ea-11bb-531a6b65c666cell_id$eade89f2-e6de-11ea-11bb-531a6b65c666coded@bind inspected_notebook_index_str Select([string(i) => nb.path for (i,nb) in enumerate(notebooks)])metadatashow_logsèdisabled®skip_as_script«code_folded$bbcd528e-e6e5-11ea-2d9c-a50835477b2ecell_id$bbcd528e-e6e5-11ea-2d9c-a50835477b2ecodemd"## Not used"metadatashow_logsèdisabled®skip_as_script«code_folded$3f0aec92-e6e1-11ea-1b53-29b7b543674dcell_id$3f0aec92-e6e1-11ea-1b53-29b7b543674dcodemetadatashow_logsèdisabled®skip_as_script«code_folded$991ddb18-e6e6-11ea-220d-71b6794f39d8cell_id$991ddb18-e6e6-11ea-220d-71b6794f39d8code1autograde_results_df[inspected_notebook_index, :]metadatashow_logsèdisabled®skip_as_script«code_folded$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6cell_id$d0dd703a-e6da-11ea-1d4f-0b10bf75fad6code md"## Step 2: autograde actions"metadatashow_logsèdisabled®skip_as_script«code_folded$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71ecell_id$c1f5bd3a-e6d2-11ea-20ab-d93e142aa71ecodeabstract type GradingAction endmetadatashow_logsèdisabled®skip_as_script«code_folded$a6fe722e-e6da-11ea-21e8-1dea77b462efcell_id$a6fe722e-e6da-11ea-21e8-1dea77b462efcodeVsubmission_files_to_run = run_notebooks ? Pluto.tamepath.(submission_files) : String[]metadatashow_logsèdisabled®skip_as_script«code_folded$22fd661e-e6e7-11ea-2b4a-8981b17a790dcell_id$22fd661e-e6e7-11ea-2b4a-8981b17a790dcode+# struct ManualCheckAction <: GradingAction
# 		name
# 		points_value::Number
# 		rubric
# 	end
begin
	inspected_notebook
	manual_results_dict
@bind inspected_manual_results let
	boxes = map(enumerate(manual)) do (i,action)
		"""<tr>
		<td><input type='number' id='field$(i)' min=0 max=$(action.points_value) step=1 value=$(action.points_value)><code> / $(action.points_value)</code></td>
		<td>$(repr(MIME"text/html"(), action.rubric))</td>
		</tr>"""
	end
	
	"""
<div id="hello">
<table>
	<tbody>
	$(join(boxes))
	</tbody>
</table>
<input type="submit" value="Save!">
	</div>

	
<style>
	div#hello table td {
		text-align: left;
	}
	div#hello table input[type=number] {
		width: 4em;
		text-align: center;
	}
</style>
<script>
	const div = this.querySelector("#hello")
	const table = div.querySelector("table")
	const inputs = table.querySelectorAll("input")
	
	const update_value = () => {
		//div.value = Object.fromEntries(Array.from(inputs).map((b) => [b.id, b.value]))
		div.value = Array.from(inputs).map((b) => Number(b.value))
	}
	
	inputs.forEach(el => {
		el.oninput = (e) => {
			update_value()
			e.stopPropagation()
		}
	})
	
	const submit = div.querySelector("input[type=submit]")
	submit.onclick = () => {
		update_value()
		div.dispatchEvent(new CustomEvent("input", {}))
	}

</script>
""" |> HTML
end
endmetadatashow_logsèdisabled®skip_as_script«code_folded$a3e47050-e6de-11ea-2a91-0597143f71bacell_id$a3e47050-e6de-11ea-2a91-0597143f71bacodeفif run_server
	@async Pluto.run(pluto_session)
	
	md"> Server is running at [https://localhost:2468](https://localhost:2468)"
endmetadatashow_logsèdisabled®skip_as_script«code_folded$5642a754-e6d9-11ea-35b6-0fe20d6a098ecell_id$5642a754-e6d9-11ea-35b6-0fe20d6a098ecodeenotebooks = let
	for nb in values(pluto_session.notebooks)
		Pluto.SessionActions.shutdown(pluto_session, nb)
    end
	map(submission_files_to_run) do path
		nb = Pluto.load_notebook(Pluto.tamepath(path))
		pluto_session.notebooks[nb.notebook_id] = nb
		Pluto.update_save_run!(pluto_session, nb, nb.cells; run_async=false, prerender_text=true)
		nb
	end
endmetadatashow_logsèdisabled®skip_as_script«code_folded$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763cell_id$54c9b77c-e6e2-11ea-03ff-5d0d4a9dd763codekif !all(isabspath, submission_files)
	md"""
!!! warning
    Submission paths need to be _absolute_
	"""
endmetadatashow_logsèdisabled®skip_as_script«code_folded$6b40e1d0-f865-11ea-3c2a-39fb643c8068cell_id$6b40e1d0-f865-11ea-3c2a-39fb643c8068code:md"It should return an arrays of strings, something like:"metadatashow_logsèdisabled®skip_as_script«code_folded$e48f2a16-e6e1-11ea-070a-d58f87569b91cell_id$e48f2a16-e6e1-11ea-070a-d58f87569b91codemd"## Misc"metadatashow_logsèdisabled®skip_as_script«code_folded$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6acell_id$68da9dec-e6e1-11ea-1d9e-cdb7028f9b6acodemd"# Part 1: autograding"metadatashow_logsèdisabled®skip_as_script«code_folded$3abb56e4-e6d3-11ea-3337-392a434e1a21cell_id$3abb56e4-e6d3-11ea-3337-392a434e1a21code8struct GetValue <: GradingAction
	name
	getter::Expr
endmetadatashow_logsèdisabled®skip_as_script«code_folded$ce055a44-e6d8-11ea-3a07-75392c0f6c26cell_id$ce055a44-e6d8-11ea-3a07-75392c0f6c26codemd"## Grading actions"metadatashow_logsèdisabled®skip_as_script«code_folded$7cb1c9bc-f684-11ea-00f3-dfd11c9b72efcell_id$7cb1c9bc-f684-11ea-00f3-dfd11c9b72efcodeHTMLTable(autograde_results_df)metadatashow_logsèdisabled®skip_as_script«code_folded$459687e0-e6e3-11ea-0c85-89516c7a2da0cell_id$459687e0-e6e3-11ea-0c85-89516c7a2da0codeJDownloadButton(sprint(CSV.write, manual_results_df), "manual_results.csv")metadatashow_logsèdisabled®skip_as_script«code_folded$c0d9fb36-f858-11ea-35c0-77963b5cf57acell_id$c0d9fb36-f858-11ea-35c0-77963b5cf57acodeEsum(actions) do action
	try
		action.points_value
	catch
		0
	end
endmetadatashow_logsèdisabled®skip_as_script«code_folded$9982bbfa-00c0-11eb-0a5c-818fae8c01cecell_id$9982bbfa-00c0-11eb-0a5c-818fae8c01cecodePlutometadatashow_logsèdisabled®skip_as_script«code_folded$96917e4e-f687-11ea-2256-7b1057a3b523cell_id$96917e4e-f687-11ea-2256-7b1057a3b523codeٵbegin
	struct ManualScoreAction <: GradingAction
		name
		points_value::Number
		rubric
	end
	ManualScoreAction(name, points_value) = ManualScoreAction(name, points_valie, name)
endmetadatashow_logsèdisabled®skip_as_script«code_folded$469a28fc-f856-11ea-2a6b-a706e607cf9fcell_id$469a28fc-f856-11ea-2a6b-a706e607cf9fcode
manual_results_df = DataFrame(map(enumerate(collect(updated_manual_results_dict))) do (i,(filename, results))
		
		(;
			map(zip(manual, results)) do (action, result)
				Symbol(displayname(action)) => result
			end...,
			
			autograde_results_df[1,:]...,
		)
	end)metadatashow_logsèdisabled®skip_as_script«code_folded$b6b986c8-e6de-11ea-1d13-5d9d370eccdccell_id$b6b986c8-e6de-11ea-1d13-5d9d370eccdccode	if run_server
	cd(inspected_notebook.path |> dirname)
	"""
	<iframe src="http://localhost:2468/edit?id=$(inspected_notebook.notebook_id)" style="width: calc(100% - 8px); height: 100vh; margin: 0; border: 4px solid pink;"  allow="camera;microphone">
	""" |> HTML
endmetadatashow_logsèdisabled®skip_as_script«code_folded$eaa49370-e6da-11ea-21d9-ddf11a7df51fcell_id$eaa49370-e6da-11ea-21d9-ddf11a7df51fcodeactions = let
	prologue = quote

function solution_extend(v, i)
	if i < 1
		v[1]
	elseif i > length(v)
		v[end]
	else
		v[i]
	end
end

function solution_blur_1D(v, l)
	return map(eachindex(v)) do i
		mean([extend(v, i+j) for j in -l:l])
	end
end

function solution_convolve_vector(v, k)
	l = (length(k) - 1) ÷ 2
	return map(eachindex(v)) do i
		sum([extend(v, i - j) * k[j + 1 + l] for j in -l:l])
	end
end

function solution_pascal(n)
	if n <= 1
		[1.0]
	else
		prev = pascal(n - 1)
		0.5 * ([prev..., 0] .+ [0, prev...])
	end
end

function solution_gaussian_kernel(n)
	solution_pascal(2n+1)
end

function solution_extend_mat(M::AbstractMatrix, i, j)
	if i < 1
		solution_extend_mat(M, 1, j)
	elseif i > size(M, 1)
		solution_extend_mat(M, size(M,1), j)
	else
		if j < 1
			solution_extend_mat(M, i, 1)
		elseif j > size(M, 2)
			solution_extend_mat(M, i, size(M,2))
		else
			M[i,j]
		end
	end
end

function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
	l = (size(K,1) - 1) ÷ 2
	
	map(CartesianIndices(M)) do i
		sum(CartesianIndices(K)) do a
			
			offset = a - CartesianIndex(-l-1, -l-1)
			
			extend_mat(M, (i - offset).I...) * K[a]
		end
	end
end

function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
	l = (size(K,1) - 1) ÷ 2
	
	map(CartesianIndices(M)) do i
		sum(CartesianIndices(K)) do a
			
			offset = a - CartesianIndex(-l-1, -l-1)
			
			extend_mat(M, (i + offset).I...) * K[a]
		end
	end
end


function solution_with_gaussian_blur(image; sigma=3, l=5)
	gauss(x,y; sigma=3) = (1/(2*pi*sigma^2))exp(-(x^2 + y^2)/(2*sigma^2))
	K_gauss = [gauss(xy...) for xy in Iterators.product(-l:l,-l:l)]
	convolve_image(image, K_gauss ./ sum(K_gauss))
end

function solution_sobel_edge_detect(image)
	K_sobol = [
	1 0 -1
	2 0 -2
	1 0 -1
	]
	x = solution_convolve_image(image, K_sobol)
	y = solution_convolve_image(image, K_sobol')
	return x .* x .+ y .* y
end
		
		testimg() = rand(RGB, (10, 20))
end



actions = [
GetValue("name", :(student.name)),
GetValue("kerberos_id", :(student.kerberos_id)),

##Excercise 1.1
AutoTestAction("1.1 - random vector", 5, quote
length(random_vect) == 10 && length(Set(random_vect)) == 10
end),

AutoTestAction("1.1 - mean", 5, quote
mean([-1, -1, 2]) ≈ 0
end),

AutoTestAction("1.1 - mean of random vec", 2.5, quote
m == mean(random_vect)
end),

AutoTestAction("1.1 - demean function", 5, quote
demean([1,2,3,4,5]) ≈ [-2,-1,0,1,2]
end),

##Excercise 1.2
AutoTestAction("1.2 - create bar - 20", 2.5, quote
create_bar() ≈ let
		x = zeros(100)
		x[40:59] .= 1
		x
	end
end),

AutoTestAction("1.2 - create bar - 20 or 21", 2.5, quote
create_bar() ≈ let
		x = zeros(100)
		x[40:59] .= 1
		x
	end || 
create_bar() ≈ let
		x = zeros(100)
		x[40:60] .= 1
		x
	end
end),

##Excercise 1.3
AutoTestAction("1.3 - vecvec_to_matrix", 5, quote
vecvec_to_matrix([[1,2,3], [4,5,6], [7,8,9]]) == hcat([1,2,3], [4,5,6], [7,8,9]) ||
vecvec_to_matrix([[1,2,3], [4,5,6], [7,8,9]]) == hcat([1,2,3], [4,5,6], [7,8,9])'
end),

AutoTestAction("1.3 - matrix_to_vecvec", 5, quote
				let
					A = [1 2; 4 5; 7 8]
matrix_to_vecvec(A) == collect(eachcol(A)) ||
matrix_to_vecvec(A) == collect(eachrow(A))
				end
end),

##Excercise 2.1
AutoTestAction("2.1 - mean colors", 5, quote
$(prologue)
				t = testimg()
mean_colors(t) == (mean(t).r, mean(t).g, mean(t).b) ||
mean_colors(t) == RGB(mean(t).r, mean(t).g, mean(t).b)
end),

##Excercise 2.2
AutoTestAction("2.2 - quantize::Number", 5, quote
quantize(3) ≈ (floor(30) / 10)
end),

##Excercise 2.3
AutoTestAction("2.3 - quantize::Color", 2.5, quote
				c = rand(RGB)
quantize(c) == RGB(quantize(c.r), quantize(c.g), quantize(c.b))
end),

##Excercise 2.4
AutoTestAction("2.4 - quantize::AbstractMatrix", 2.5, quote
$(prologue)
				t = testimg()
quantize(t) == quantize.(t)
end),

##Excercise 2.5
AutoTestAction("2.5 - invert", 5, quote
				c = rand(RGB)
invert(c) == RGB(1-c.r, 1-c.g, 1-c.b)
end),

##Excercise 2.6
AutoTestAction("2.6 - noisify::Number - noise", 2.5, quote
				
				
let
	N = 10_000
	
	# x = [.5 + rand()*.5 + .25 for _ in 1:N]
	x = [noisify(.5, .25) for _ in 1:N]
	sample_mean = sum(x) / N

	sample_var = sum((x .- sample_mean) .^ 2) / N
	
	abs(sample_mean - .5) < .01 && abs(sample_var - 1/48) < .01
end

end),
AutoTestAction("2.6 - noisify::Number - clamp", 2.5, quote
				
				
let
	N = 10_000
	
	# x = [rand()*.5 + .25 for _ in 1:N]
	x = [noisify(.5, 10) for _ in 1:N]
	
	0.0 <= minimum(x) < maximum(x) <= 1.0
end

end),

AutoTestAction("2.6 - noisify::Color", 2.5, quote
	c = rand(RGB)
	noisify(c, .1) != c
end),

AutoTestAction("2.6 - noisify::Image", 2.5, quote
$(prologue)
	t = testimg()
	noisify(t, .1) != t
end),

##Excercise 3.1
# N/A

##Excercise 3.2
AutoTestAction("3.2 - extend", 10, quote
$(prologue)
extend(v, -5)  == solution_extend(v, -5)
end),

##Excercise 3.3
AutoTestAction("3.3 - blur_1D", 5, quote
$(prologue)
blur_1D(v, 2) == solution_blur_1D(v, 2)
end),

##Exercise 3.4
# N/A

##Excercise 3.5
AutoTestAction("3.5 - convolution", 5, quote
$(prologue)
convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0]) == solution_convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0])
end),

##Excercise 3.6
AutoTestAction("3.6 - gaussian_kernel - centered", 2.5, quote
K = gaussian_kernel(9)
				
center = length(K) ÷ 2
				
K[1] < K[center] > K[end]

end),

AutoTestAction("3.6 - gaussian_kernel - normalized", 2.5, quote
K = gaussian_kernel(9)
.9 < sum(K) < 1.1
end),

##Excercise 4.1
AutoTestAction("4.1 - extend mat", 10, quote
$(prologue)
				M = rand(Float64, (3,3))
				all([
		extend_mat(M, i, j) ≈ solution_extend_mat(M, i, j)
	for i in [-5,4,2], j in [-1,1,0,10]
		])
end),

##Excercise 4.2
# AutoTestAction("4.2 - convolve image", 15, quote
# $(prologue)
# 				M = testimg()
# 				K = rand(Float64, (3,3))
# 	convolve_image(M, K) ≈ solution_convolve_image(M, K) || 
# 	convolve_image(M, K) ≈ solution_convolve_image_inverted(M, K)
# end),

# ##Excercise 4.2
# AutoTestAction("4.2 - convolve image - kernel inverted correctly", 5, quote
# $(prologue)
# 				M = testimg()
# 				K = rand(Float64, (3,3))
# 	convolve_image(M, K) ≈ solution_convolve_image(M, K)
# end),

##Excercise 4.3
AutoTestAction("4.3 - with_gaussian_blur - no error", 5, quote
$(prologue)
		try
			with_gaussian_blur(rand(Gray, (20,10))) isa Array
		catch
			false
		end || try
			with_gaussian_blur(rand(Float64, (20,10))) isa Array
		catch
			false
		end || try
			with_gaussian_blur(rand(RGB, (20,10))) isa Array
		catch
			false
		end
end),

##Excercise 4.4
AutoTestAction("4.4 - sobel_edge_detect - no error", 5, quote
	$(prologue)
		try
			with_sobel_edge_detect(rand(Gray, (20,10))) isa Array
		catch
			false
		end || try
			with_sobel_edge_detect(rand(Float64, (20,10))) isa Array
		catch
			false
		end || try
			with_sobel_edge_detect(rand(RGB, (20,10))) isa Array
		catch
			false
		end
	end),
]

endmetadatashow_logsèdisabled®skip_as_script«code_folded$490cc11a-00cb-11eb-24bc-2fb026c3094ecell_id$490cc11a-00cb-11eb-24bc-2fb026c3094ecodeallmetadatashow_logsèdisabled®skip_as_script«code_folded$31111cbe-e6d3-11ea-0130-a98e45b82f2bcell_id$31111cbe-e6d3-11ea-0130-a98e45b82f2bcodebegin
	function do_action(notebook::Pluto.Notebook, action::AutoTestAction)
		tester = quote
				try
					$(action.test)
				catch
					false
				end
			end
		
		if eval_in_notebook(notebook, tester) === true
			action.points_value
		else
			zero(action.points_value)
		end
	end
	
	function do_action(notebook::Pluto.Notebook, action::GetValue)
		eval_in_notebook(notebook, action.getter)
	end
endmetadatashow_logsèdisabled®skip_as_script«code_folded$f131ee3a-f68a-11ea-3d6c-d34439133a63cell_id$f131ee3a-f68a-11ea-3d6c-d34439133a63code# reactively add the result to our Dict
updated_manual_results_dict = let
	if inspected_manual_results !== missing
		manual_results_dict[inspected_notebook_index] = inspected_manual_results
	end
	manual_results_dict
endmetadatashow_logsèdisabled®skip_as_script«code_folded$64c26a50-e6df-11ea-2762-57186f445501cell_id$64c26a50-e6df-11ea-2762-57186f445501code8inspected_notebook = notebooks[inspected_notebook_index]metadatashow_logsèdisabled®skip_as_script«code_folded$33e66768-e6d9-11ea-1aba-256b4c9998b8cell_id$33e66768-e6d9-11ea-1aba-256b4c9998b8codeaautograde_results = map(notebooks) do nb
	map(actions) do action
		do_action(nb, action)
	end
endmetadatashow_logsèdisabled®skip_as_script«code_folded$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5cecell_id$8d1aaee8-e6de-11ea-2c2c-4d2ba138d5cecodemd"# Appendix"metadatashow_logsèdisabled®skip_as_script«code_folded$8904534a-e6e1-11ea-34b7-31d1f6f8ca8fcell_id$8904534a-e6e1-11ea-34b7-31d1f6f8ca8fcodemd"## Step 3: select notebook"metadatashow_logsèdisabled®skip_as_script«code_folded$122cbbdc-00cd-11eb-223b-ef82328f674fcell_id$122cbbdc-00cd-11eb-223b-ef82328f674fcodelet
	function solution_pascal(n)
		if n <= 1
			[1.0]
		else
			prev = solution_pascal(n - 1)
			0.5 * ([prev..., 0] .+ [0, prev...])
		end
	end

	function solution_gaussian_kernel(n)
		solution_pascal(2n+1)
	end

	K = solution_gaussian_kernel(9)
		K[1] < K[5] < K[9] > K[13] > K[17]
endmetadatashow_logsèdisabled®skip_as_script«code_folded$b8d4598c-f686-11ea-24dc-6f94370fc996cell_id$b8d4598c-f686-11ea-24dc-6f94370fc996code+md"#### Editable view of selected homework"metadatashow_logsèdisabled®skip_as_script«code_folded$dfbaecac-f855-11ea-1f3e-0522a86136eacell_id$dfbaecac-f855-11ea-1f3e-0522a86136eacode.md"Currently stored grades for this notebook:"metadatashow_logsèdisabled®skip_as_script«code_folded$a1598cfc-e6d7-11ea-1f0b-f5560304fe7acell_id$a1598cfc-e6d7-11ea-1f0b-f5560304fe7acodeـmd"**Click to start running the notebooks:**

 $(@bind run_notebooks CheckBox()) run $(length(submission_files)) notebooks

---"metadatashow_logsèdisabled®skip_as_script«code_foldedënotebook_id$1af54e1c-4a9e-11f0-18bf-03ed46314412in_temp_dir¨metadata