From 02f299acca3bf863cf0dde4c7086e57daf014b14 Mon Sep 17 00:00:00 2001 From: CompatHelper Julia Date: Thu, 25 Apr 2024 01:43:48 +0000 Subject: [PATCH 01/51] CompatHelper: bump compat for ComradeBase to 0.7, (keep existing compat) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index dd15cf1..8e85fe9 100644 --- a/Project.toml +++ b/Project.toml @@ -18,7 +18,7 @@ StationaryRandomFields = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" VLBISkyModels = "d6343c73-7174-4e0f-bb64-562643efbeca" [compat] -ComradeBase = "0.5, 0.6" +ComradeBase = "0.5, 0.6, 0.7" DocStringExtensions = "0.9" EHTUtils = "0.1" FFTW = "1" From 2c02aee5e72e6b7e8c05ae5ca78f31d865d4ffa0 Mon Sep 17 00:00:00 2001 From: CompatHelper Julia Date: Sun, 12 May 2024 01:18:26 +0000 Subject: [PATCH 02/51] CompatHelper: bump compat for VLBISkyModels to 0.5, (keep existing compat) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index dd15cf1..56ce01c 100644 --- a/Project.toml +++ b/Project.toml @@ -28,7 +28,7 @@ NonlinearSolve = "1, 3" QuadGK = "2" SpecialFunctions = "2" StationaryRandomFields = "0.1" -VLBISkyModels = "0.2, 0.3, 0.4" +VLBISkyModels = "0.2, 0.3, 0.4, 0.5" julia = "1.9" [extras] From 780620cdc6cbd608bfd18344fa447853b3787252 Mon Sep 17 00:00:00 2001 From: Anna Tartaglia <111704070+annatartaglia@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:31:05 -0400 Subject: [PATCH 03/51] Update math.md --- docs/src/math.md | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/docs/src/math.md b/docs/src/math.md index cbc5c28..bb93e39 100644 --- a/docs/src/math.md +++ b/docs/src/math.md @@ -4,28 +4,37 @@ CurrentModule = ScatteringOptics # Background ## Mathematics -`ScatteringOptics.jl` implements a single thin-screen scattering model (described in [1] and [2]) that simulates both diffractive and refractive scattering. In many instances, the properties of the interstellar scattering can be well described by a single, thin phase-changing screen $\phi_r(r)$, where $r$ is a transverse coordinate on the screen. The statistical characteristics of scattering can be described by those of the phase screen through its spatial structure function $D_\phi(r)$. +`ScatteringOptics.jl` implements a single thin-screen scattering model (described in [1] and [2]) that simulates both diffractive and refractive scattering. In many instances, the properties of the interstellar scattering can be well described by a single, thin phase-changing screen $\phi(\vec{r})$, where $\vec{r}$ is a transverse coordinate on the screen. + +#### Spatial Structure Function +The statistical characteristics of scattering can be described by those of the phase screen through its spatial structure function $D_\phi(\vec{r})$. This function measures the second-order changes in the phase, $\phi(\vec{r})$ of two radio waves separated by a transverse distance $\vec{r}$ when they pass through the screen [2]: + +$$D_\phi(r) = \langle [\phi(\vec{r}_0+\vec{r})-\phi(\vec{r}_0)]^2 \rangle$$ + +#### Diffractive Scattering Kernel Diffractive scattering causes the angular broadening of the source image. -The diffractively scattered image ${I_{ea}}(r)$ is mathematically given by the convolution of the source image ${I_{src}}(r)$ with a blurring scattering kernel, ${G}(r)$, +The diffractively scattered image ${I_{ea}}(\vec{r})$ is mathematically given by the convolution of the source image ${I_{src}}(r)$ with a blurring scattering kernel, ${G}(\vec{r})$, + +$${I_{ea}}(\vec{r}) = {I_{src}}(\vec{r}) * {G}(\vec{r}),$$ -$${I_{ea}}(r) = {I_{src}}(r) * {G}(r),$$ +where $r$ refers to the two-dimensional phase screen coordinate vector. While the above equation is defined in image space, ScatteringOptics.jl performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements, so-called visibilities, obtained with a pair of antennas at different time and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered visibilities, $V_{ea}(\vec{b})$, by -where $r$ refers to the two-dimensional phase screen coordinate vector. In radio interferometry, each set of measurements, so-called visibilities, obtained with a pair of antennas at different time and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(b)$, are related to the diffractively scattered visibilities, $V_{ea}(b)$, by, +$$V_{ea}(\vec{b}) = V_{src}(\vec{b})\*\text{exp}\left[-\frac{1}{2} D_\phi\left(\frac{\vec{b}}{1+M}\right)\right],$$ -$$V_{ea}(b) = V_{src}(b)\,\text{exp}\left[-\frac{1}{2} D_\phi\left(\frac{b}{1+M}\right)\right],$$ +in which $\vec{b}$ is the baseline vector between observing stations. The magnification $M=D/R$ is the ratio of earth-screen distance $D$ to screen-source distance $R$. -in which $b$ is the baseline vector between observing stations. The magnification $M=D/R$ is the ratio of earth-screen distance $D$ to screen-source distance $R$. +#### Refractive Scattering Screen Refractive scattering further introduces compact substructures on the diffractively-scattered, angular-broadened images. -The compact substructures arise from phase gradients on the scattering screen $\nabla \phi_r(r)$. -The refractively scattered image ${I_{a}}(r)$ is given by +The compact substructures arise from phase gradients on the scattering screen $\nabla \phi(\vec{r})$. +The refractively scattered image ${I_{a}}(\vec{r})$ is given by -$${I_{a}}(r) \approx {I_{ea}}(r + r_F^2 \nabla \phi_r(r)),$$ +$${I_{a}}(\vec{r}) \approx {I_{ea}}(\vec{r} + r_F^2 \nabla \phi(\vec{r})),$$ -in which the Fresnel scale, $r_F = \sqrt{\frac{DR}{D+R}\frac{\lambda}{2\pi}}$ is dependent on the observing wavelength $\lambda$ [@Johnson_Narayan_2016]. +in which the Fresnel scale, $r_F = \sqrt{\frac{DR}{D+R}\frac{\lambda}{2\pi}}$ is dependent on the observing wavelength $\lambda$ [3]. -`ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi_r(r)$, named Dipole, Periodic Boxcar, and Von Mises models in @Psaltis_2018, providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(r)$. The default model is the Dipole model, known to be consistent with multi-frequency measurements of Sgr A* [1]. +`ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi(\vec{r})$, named Dipole, Periodic Boxcar, and Von Mises models in Psaltis et al. (2018) [2], providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(\vec{r})$. The default model is the Dipole model, known to be consistent with multi-frequency measurements of Sgr A* [1]. ## References From b9a05b1ed3c60240211ca941e0901efccfb00370 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Fri, 11 Oct 2024 21:04:39 -0400 Subject: [PATCH 04/51] Update the documentation. 1) switch Documenter.jl to DocumenterVitepress.jl 2) simplify the intro page 3) the background page --- docs/.gitignore | 4 + docs/Project.toml | 1 + docs/make.jl | 21 ++- docs/package.json | 17 ++ docs/src/.vitepress/config.mts | 48 +++++ docs/src/.vitepress/theme/index.ts | 19 ++ docs/src/.vitepress/theme/style.css | 266 ++++++++++++++++++++++++++++ docs/src/index.md | 24 ++- docs/src/math.md | 67 ++++--- 9 files changed, 426 insertions(+), 41 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/package.json create mode 100644 docs/src/.vitepress/config.mts create mode 100644 docs/src/.vitepress/theme/index.ts create mode 100644 docs/src/.vitepress/theme/style.css diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..0587d74 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,4 @@ +build/ +node_modules/ +package-lock.json +Manifest.toml \ No newline at end of file diff --git a/docs/Project.toml b/docs/Project.toml index f0f1f5f..a814f5c 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,3 +1,4 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +DocumenterVitepress = "4710194d-e776-4893-9690-8d956a29c365" ScatteringOptics = "e317c96f-4a6f-4ae9-8016-294fb9063ff5" diff --git a/docs/make.jl b/docs/make.jl index 826ecf7..efd6893 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,22 +1,28 @@ using ScatteringOptics using Documenter +using DocumenterVitepress -DocMeta.setdocmeta!(ScatteringOptics, :DocTestSetup, :(using ScatteringOptics); recursive=true) +#DocMeta.setdocmeta!(ScatteringOptics, :DocTestSetup, :(using ScatteringOptics); recursive=true) makedocs(; modules=[ScatteringOptics], authors="Anna Tartaglia, Kazunori Akiyama", repo="https://github.com/EHTJulia/ScatteringOptics.jl/blob/{commit}{path}#{line}", sitename="ScatteringOptics.jl", - format=Documenter.HTML(; - prettyurls=get(ENV, "CI", "false") == "true", - canonical="https://EHTJulia.github.io/ScatteringOptics.jl", - edit_link="main", - assets=String[], +# format=Documenter.HTML(; +# prettyurls=get(ENV, "CI", "false") == "true", +# canonical="https://EHTJulia.github.io/ScatteringOptics.jl", +# edit_link="main", +# assets=String[], +# ), + format = MarkdownVitepress( + repo = "https://github.com/EHTJulia/ScatteringOptics.jl", + devurl = "dev", + deploy_url = "EHTJulia.github.io/ScatteringOptics.jl", ), pages=[ "Home" => "index.md", - "Background" => "math.md", + "Introduction" => "math.md", "Tutorial" => "tutorial.md", "ScateringOptics.jl API" => "autodocs.md", ], @@ -25,4 +31,5 @@ makedocs(; deploydocs(; repo="github.com/EHTJulia/ScatteringOptics.jl", devbranch="main", + push_preview=true, ) diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..2ef9c09 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,17 @@ +{ + "scripts": { + "docs:dev": "vitepress dev build/.documenter", + "docs:build": "vitepress build build/.documenter", + "docs:preview": "vitepress preview build/.documenter" + }, + "dependencies": { + "@shikijs/transformers": "^1.1.7", + "markdown-it": "^14.1.0", + "markdown-it-footnote": "^4.0.0", + "markdown-it-mathjax3": "^4.3.2", + "vitepress-plugin-tabs": "^0.5.0" + }, + "devDependencies": { + "vitepress": "^1.4.0" + } +} diff --git a/docs/src/.vitepress/config.mts b/docs/src/.vitepress/config.mts new file mode 100644 index 0000000..ea5b763 --- /dev/null +++ b/docs/src/.vitepress/config.mts @@ -0,0 +1,48 @@ +import { defineConfig } from 'vitepress' +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs' +import mathjax3 from "markdown-it-mathjax3"; +import footnote from "markdown-it-footnote"; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + base: 'REPLACE_ME_DOCUMENTER_VITEPRESS',// TODO: replace this in makedocs! + title: 'REPLACE_ME_DOCUMENTER_VITEPRESS', + description: 'REPLACE_ME_DOCUMENTER_VITEPRESS', + lastUpdated: true, + cleanUrls: true, + outDir: 'REPLACE_ME_DOCUMENTER_VITEPRESS', // This is required for MarkdownVitepress to work correctly... + head: [['link', { rel: 'icon', href: 'REPLACE_ME_DOCUMENTER_VITEPRESS_FAVICON' }]], + ignoreDeadLinks: true, + + markdown: { + math: true, + config(md) { + md.use(tabsMarkdownPlugin), + md.use(mathjax3), + md.use(footnote) + }, + theme: { + light: "github-light", + dark: "github-dark"} + }, + themeConfig: { + outline: 'deep', + logo: 'REPLACE_ME_DOCUMENTER_VITEPRESS', + search: { + provider: 'local', + options: { + detailedView: true + } + }, + nav: 'REPLACE_ME_DOCUMENTER_VITEPRESS', + sidebar: 'REPLACE_ME_DOCUMENTER_VITEPRESS', + editLink: 'REPLACE_ME_DOCUMENTER_VITEPRESS', + socialLinks: [ + { icon: 'github', link: 'REPLACE_ME_DOCUMENTER_VITEPRESS' } + ], + footer: { + message: 'Made with DocumenterVitepress.jl
', + copyright: `© Copyright ${new Date().getUTCFullYear()}.` + } + } +}) diff --git a/docs/src/.vitepress/theme/index.ts b/docs/src/.vitepress/theme/index.ts new file mode 100644 index 0000000..463b5d8 --- /dev/null +++ b/docs/src/.vitepress/theme/index.ts @@ -0,0 +1,19 @@ +// .vitepress/theme/index.ts +import { h } from 'vue' +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' + +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client' +import './style.css' + +export default { + extends: DefaultTheme, + Layout() { + return h(DefaultTheme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + enhanceAppWithTabs(app) + } +} satisfies Theme \ No newline at end of file diff --git a/docs/src/.vitepress/theme/style.css b/docs/src/.vitepress/theme/style.css new file mode 100644 index 0000000..09d5c4a --- /dev/null +++ b/docs/src/.vitepress/theme/style.css @@ -0,0 +1,266 @@ +/* Customize default theme styling by overriding CSS variables: +https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + + /* Layouts */ + +/* + :root { + --vp-layout-max-width: 1440px; +} */ + +.VPHero .clip { + white-space: pre; + max-width: 500px; +} + +/* Fonts */ + +@font-face { + font-family: JuliaMono-Regular; + src: url("https://cdn.jsdelivr.net/gh/cormullion/juliamono/webfonts/JuliaMono-Regular.woff2"); +} + + :root { + /* Typography */ + --vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, + Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + + /* Code Snippet font */ + --vp-font-family-mono: JuliaMono-Regular, monospace; + +} + +/* +Disable contextual alternates (kind of like ligatures but different) in monospace, +which turns `/>` to an up arrow and `|>` (the Julia pipe symbol) to an up arrow as well. +This is pretty bad for Julia folks reading even though copy+paste retains the same text. +*/ +/* Target elements with class 'mono' */ +.mono-no-substitutions { + font-family: "JuliaMono-Light", monospace; + font-feature-settings: "calt" off; +} + +/* Alternatively, you can use the following if you prefer: */ +.mono-no-substitutions-alt { + font-family: "JuliaMono-Light", monospace; + font-variant-ligatures: none; +} + +/* If you want to apply this globally to all monospace text: */ +pre, code { + font-family: "JuliaMono-Light", monospace; + font-feature-settings: "calt" off; +} + +/* Colors */ + +:root { + --julia-blue: #4063D8; + --julia-purple: #9558B2; + --julia-red: #CB3C33; + --julia-green: #389826; + + --vp-c-brand: #389826; + --vp-c-brand-light: #3dd027; + --vp-c-brand-lighter: #9499ff; + --vp-c-brand-lightest: #bcc0ff; + --vp-c-brand-dark: #535bf2; + --vp-c-brand-darker: #454ce1; + --vp-c-brand-dimm: #212425; +} + + /* Component: Button */ + +:root { + --vp-button-brand-border: var(--vp-c-brand-light); + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand); + --vp-button-brand-hover-border: var(--vp-c-brand-light); + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-light); + --vp-button-brand-active-border: var(--vp-c-brand-light); + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-button-brand-bg); +} + +/* Component: Home */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #9558B2 30%, + #CB3C33 + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #9558B2 30%, + #389826 30%, + #CB3C33 + ); + --vp-home-hero-image-filter: blur(40px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(72px); + } +} + +/* Component: Custom Block */ + +:root.dark { + --vp-custom-block-tip-border: var(--vp-c-brand); + --vp-custom-block-tip-text: var(--vp-c-brand-lightest); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); + + /* // Tweak the color palette for blacks and dark grays */ + --vp-c-black: hsl(220 20% 9%); + --vp-c-black-pure: hsl(220, 24%, 4%); + --vp-c-black-soft: hsl(220 16% 13%); + --vp-c-black-mute: hsl(220 14% 17%); + --vp-c-gray: hsl(220 8% 56%); + --vp-c-gray-dark-1: hsl(220 10% 39%); + --vp-c-gray-dark-2: hsl(220 12% 28%); + --vp-c-gray-dark-3: hsl(220 12% 23%); + --vp-c-gray-dark-4: hsl(220 14% 17%); + --vp-c-gray-dark-5: hsl(220 16% 13%); + + /* // Backgrounds */ + /* --vp-c-bg: hsl(240, 2%, 11%); */ + --vp-custom-block-info-bg: hsl(220 14% 17%); + /* --vp-c-gutter: hsl(220 20% 9%); + + --vp-c-bg-alt: hsl(220 20% 9%); + --vp-c-bg-soft: hsl(220 14% 17%); + --vp-c-bg-mute: hsl(220 12% 23%); + */ +} + + /* Component: Algolia */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand) !important; +} + +/* Component: MathJax */ + +mjx-container > svg { + display: block; + margin: auto; +} + +mjx-container { + padding: 0.5rem 0; +} + +mjx-container { + display: inline; + margin: auto 2px -2px; +} + +mjx-container > svg { + margin: auto; + display: inline-block; +} + +/** + * Colors links + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-brand-1: #CB3C33; + --vp-c-brand-2: #CB3C33; + --vp-c-brand-3: #CB3C33; + --vp-c-sponsor: #ca2971; + --vitest-c-sponsor-hover: #c13071; +} + +.dark { + --vp-c-brand-1: #91dd33; + --vp-c-brand-2: #91dd33; + --vp-c-brand-3: #91dd33; + --vp-c-sponsor: #91dd33; + --vitest-c-sponsor-hover: #e51370; +} + +/** + * Change images from light to dark theme + * -------------------------------------------------------------------------- */ + + :root:not(.dark) .dark-only { + display: none; +} + +:root:is(.dark) .light-only { + display: none; +} + +/* https://bddxg.top/article/note/vitepress优化/一些细节上的优化.html#文档页面调整-加宽 */ + +.VPDoc.has-aside .content-container { + max-width: 100% !important; +} +.aside { + max-width: 200px !important; + padding-left: 0 !important; +} +.VPDoc { + padding-top: 15px !important; + padding-left: 5px !important; + +} +/* This one does the right menu */ + +.VPDocOutlineItem li { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + max-width: 200px; +} + +.VPNavBar .title { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +@media (max-width: 960px) { + .VPDoc { + padding-left: 25px !important; + } +} + +/* This one does the left menu */ + +/* .VPSidebarItem .VPLink p { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + max-width: 200px; +} */ + + +/* Component: Docstring Custom Block */ + +.jldocstring.custom-block { + border: 1px solid var(--vp-c-gray-2); + color: var(--vp-c-text-1) +} + +.jldocstring.custom-block summary { + font-weight: 700; + cursor: pointer; + user-select: none; + margin: 0 0 8px; +} diff --git a/docs/src/index.md b/docs/src/index.md index 582ae70..05d1962 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,15 +1,21 @@ ```@meta CurrentModule = ScatteringOptics ``` -# ScatteringOptics -[ScatteringOptics](https://github.com/EHTJulia/ScatteringOptics.jl) implements the 'Stochastic Optics' scattering mitigation framework [1] to produce realistic scattering on an input EHT model. The module addressed two distinctive forms of scattering--diffractive blurring and refractive scintillation--independently and then integrates them to output a fully scattered model via the `scatter()` function. +# ScatteringOptics.jl +[`ScatteringOptics.jl`](https://github.com/EHTJulia/ScatteringOptics.jl) is an astronomy software package developed in the Julia programming language for interstellar scintillation observed at radio wavelengths. It implements physical models for the anisotropic scattering of radio waves, which arise from turbulence in the ionized interstellar medium. -## Diffractive Kernel -Users can instantiate a diffractive scattering kernel model and convolve input images to generate diffractive blurring effects. The module provides three different diffractive scattering probabilistic models: Dipole, Boxcar, and Von Mises. Users construct a model of choice which can generate a scattering kernel for convolution of the model image. +This toolkit is aiming to provide capabilities of simulating and modeling the temporal, spatial, and spectral effects of interstellar scintillation primarily in the strong scattering regime, taking advantage of Julia's speed and composability. +The package is designed to work with sky models and interferometric data types from the advanced Bayesian radio interferometric modeling package [`Comrade.jl`](https://github.com/ptiede/Comrade.jl). -## Refractive Phase Screen -A `RefractivePhaseScreen` object automatically generates a refractive power law function from the scattering model parameters, to be used in generating a phase screen. The model implements power law noise generation provided by the package [StationaryRandomFields](https://github.com/EHTJulia/StationaryRandomFields.jl). +The package provides essential functionalities for modeling, analyzing, and interpreting the images of the Galactic Center's supermassive black hole, Sagittarius A*, especially with the Event Horizon Telescope, and also the images of extremely high brightness temperature emissions in active galactic nuclei using space very long baseline interferometry. -## References -[1] M. D. Johnson. Stochastic optics: A scattering mitigation framework for radio interferometric -imaging. The Astrophysical Journal, 833(1):74, dec 2016. doi: [10.3847/1538-4357/833/1/74](https://iopscience.iop.org/article/10.3847/1538-4357/aadcff). \ No newline at end of file +## Installation +The package is registered in the Julia standard repository, and installable through the standard ways by +```julia +using Pkg +Pkg.add("ScatteringOptics") +``` +or +```julia +]add ScatteringOptics +``` \ No newline at end of file diff --git a/docs/src/math.md b/docs/src/math.md index bb93e39..644e846 100644 --- a/docs/src/math.md +++ b/docs/src/math.md @@ -1,48 +1,65 @@ ```@meta CurrentModule = ScatteringOptics ``` -# Background +# Brief Introduction to interstellar scattering +`ScatteringOptics.jl` implements a single thin-screen intersteller scattering model based on a fast but accurate semi-analytic framework developed in Johnson \& Narayan 2016 [1] and further extended in later work [2-4]. -## Mathematics -`ScatteringOptics.jl` implements a single thin-screen scattering model (described in [1] and [2]) that simulates both diffractive and refractive scattering. In many instances, the properties of the interstellar scattering can be well described by a single, thin phase-changing screen $\phi(\vec{r})$, where $\vec{r}$ is a transverse coordinate on the screen. +## What is the interstellar scattering? Why is it important? +Scintillation is a well-known phenomenon in astronomy. In radio wavelengths, electron density fluctuations in the ionized interstellar plasma cause scattering of radio waves, resulting in the scintillation of compact radio sources in the sky [5, 6]. The interstellar scintillation produces temporal and spectral modulations (i.e., twinkling) in the brightness of objects, as well as distortion of the source images. -#### Spatial Structure Function -The statistical characteristics of scattering can be described by those of the phase screen through its spatial structure function $D_\phi(\vec{r})$. This function measures the second-order changes in the phase, $\phi(\vec{r})$ of two radio waves separated by a transverse distance $\vec{r}$ when they pass through the screen [2]: +Scattering has become increasingly important in high-angular-resolution studies of compact radio sources at micro-arcsecond scales using very long baseline interferometry (VLBI). +Notable examples include black hole imaging of the Milky Way's supermassive black hole, Sagittarius A* (Sgr A*), with the Event Horizon Telescope, and studies of extremely high brightness temperature emissions in active galactic nuclei (AGNs) using space VLBI, exemplified by projects like RadioAstron. +In both scenarios, the observed interferometric data is influenced by both diffractive and refractive scattering effects. -$$D_\phi(r) = \langle [\phi(\vec{r}_0+\vec{r})-\phi(\vec{r}_0)]^2 \rangle$$ +## Scattering regimes in the scope +The model implemented in `ScatteringOptics.jl` will simulate both *diffractive* and *refractive* scattering in the *average* and *ensemble-average* regimes. Here let us briefly introduce each of scattering regimes and also their averaging regimes. + +The interstellar scattering seen in radio wavelengths is in the *strong scattering limit*, where scattering effects are dominated by phase fluctuations on two widely separated scales: **diffractvive** and **refractive** [5, 6]. +- **Diffractive scattering** arises from small-scale fluctuations, typically on scales smaller than microarcseconds. Consequently, diffractive effects are quenched for the vast majority of known sources on the sky, and they are typically only seen in extremely compact objects, such as pulsars and fast radio bursts (FRBs). The diffractive scintillation has a coherence timescale of typically only seconds to minutes, and often well time-averaged during the time scales of a majority of astronomical measurements (except for observations of pulsars and FRBs). As a result, typically the effects of the diffractive scattering appear as a angular broadening of the source image. +- **Refractive scattering** arises from large-scale fluctuations, typically on scales of micro to milli-arcseconds depending on the location of the sky and observing frequency. typically days to months. Refractive effects are only quenched for a source that has an angular size larger than those scales. Consequently, they are present in many compact objects such as active galactic nuclei (AGNs). Refractive scintillation is more persistent and has a coherence timescale of days to months. Refractive scattering introduces *refractive substructures* into the observed angular-broadened image. -#### Diffractive Scattering Kernel +The late 80's work by Ramesh Narayan and Jeremy J. Goodman [7, 8] showed that there are three distinct averaging regimes for images in the strong-scattering limit. + - **The snapshot regime** occurs when the timescale of measurements is shorter than the coherence time of the diffractive scattering. The measurements therefore will exhibit both diffractive and refractive scintillation. This regime is not handled by our package. +- **The average regime** occurs when the timescale of measurements is much longer than the coherence time of the diffractive scattering but shorter than the refractive scintillation (often from days to months). In this regime, the diffractive scintillation in measurements is well averaged in time and therefore quentched. Consequently, the measurements in this regime will exhibit only refractive scintillation. A majority of radio astronomy observations of scattered objects is in this regime. +- **The ensemble-average regime** occurs when the timescale of measurments is even longer than the refractive scintillation. At this regime, the measurements will reflect a complete average over a scattering ensemble. Consequently, the scattering effects are deterministic. For instance the scattered image is well described through blurring (or angular broadening) via convolution of the unscattered image with a scattering kernel. -Diffractive scattering causes the angular broadening of the source image. -The diffractively scattered image ${I_{ea}}(\vec{r})$ is mathematically given by the convolution of the source image ${I_{src}}(r)$ with a blurring scattering kernel, ${G}(\vec{r})$, +## Scattering Model +In many instances, the properties of the interstellar scattering can be well described by a single, thin phase-changing screen $\phi(\vec{r})$, where $\vec{r}$ refers to the two-dimensional phase screen coordinate vector. The statistical characteristics of scattering can be described by those of the phase screen through its spatial structure function $D_\phi(\vec{r})$. This function measures the second-order changes in the phase, $\phi(\vec{r})$ of two radio waves separated by a transverse distance $\vec{r}$ when they pass through the screen [e.g., 1]: + +$$D_\phi(r) = \langle [\phi(\vec{r}_0+\vec{r})-\phi(\vec{r}_0)]^2 \rangle$$ -$${I_{ea}}(\vec{r}) = {I_{src}}(\vec{r}) * {G}(\vec{r}),$$ +In the average or ensemble-average regimes, diffractive scattering causes the angular broadening of the source image, which is called the "ensamble-average" image. The diffractively scattered (i.e., ensemble-average) image $I_{ea}(\vec{r})$ is mathematically given by the convolution of the source image $I_{src}(r)$ with a blurring scattering kernel, $G(\vec{r})$, -where $r$ refers to the two-dimensional phase screen coordinate vector. While the above equation is defined in image space, ScatteringOptics.jl performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements, so-called visibilities, obtained with a pair of antennas at different time and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered visibilities, $V_{ea}(\vec{b})$, by +$$I_{ea}(\vec{r}) = I_{src}(\vec{r}) * G(\vec{r}).$$ -$$V_{ea}(\vec{b}) = V_{src}(\vec{b})\*\text{exp}\left[-\frac{1}{2} D_\phi\left(\frac{\vec{b}}{1+M}\right)\right],$$ +While the above equation is defined in image space, ScatteringOptics.jl performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements, so-called visibilities, obtained with a pair of antennas at different time and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered (i.e., ensemble-average) visibilities, $V_{ea}(\vec{b})$, by -in which $\vec{b}$ is the baseline vector between observing stations. The magnification $M=D/R$ is the ratio of earth-screen distance $D$ to screen-source distance $R$. +$$V_{ea}(\vec{b}) = V_{src}(\vec{b}) \exp \left[ -\frac{1}{2} D_\phi \left( \frac{\vec{b}}{1+M} \right) \right],$$ -#### Refractive Scattering Screen +in which $\vec{b}$ is the baseline vector between observing stations. The magnification $M=D/R$ is the ratio of earth-screen distance $D$ to screen-source distance $R$. Here you can see that the convolving kernel of the angular broadening is described by the spatial structure function of the screen phase $D_\phi(\vec{r})$, attributed to a probabilistic model of the phase screen $\phi(\vec{r})$. In general, $D_\phi(\vec{r})$ is chromatic and therefore depends on the observing frequency (or wavelength) --- the kernel size in the image domain is often propotional to the squared observing wavelength $\lambda ^2$. -Refractive scattering further introduces compact substructures on the diffractively-scattered, angular-broadened images. -The compact substructures arise from phase gradients on the scattering screen $\nabla \phi(\vec{r})$. -The refractively scattered image ${I_{a}}(\vec{r})$ is given by +In the average regime, refractive scattering, on the other hand, further introduces compact substructures on the diffractively-scattered images. The compact substructures arise from phase gradients on the scattering screen $\nabla \phi(\vec{r})$. The refractively scattered image $I_{a}(\vec{r})$ is given by -$${I_{a}}(\vec{r}) \approx {I_{ea}}(\vec{r} + r_F^2 \nabla \phi(\vec{r})),$$ +$$I_{a}(\vec{r}) \approx I_{ea}(\vec{r} + r_F^2 \nabla \phi(\vec{r})),$$ -in which the Fresnel scale, $r_F = \sqrt{\frac{DR}{D+R}\frac{\lambda}{2\pi}}$ is dependent on the observing wavelength $\lambda$ [3]. +in which the Fresnel scale, $r_F = \sqrt{ \frac{DR}{D+R} \frac{\lambda}{2\pi} }$ is dependent on the observing wavelength $\lambda$ [1, 2]. -`ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi(\vec{r})$, named Dipole, Periodic Boxcar, and Von Mises models in Psaltis et al. (2018) [2], providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(\vec{r})$. The default model is the Dipole model, known to be consistent with multi-frequency measurements of Sgr A* [1]. +`ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi(\vec{r})$, named *Dipole*, *Periodic* *Boxcar*, and *Von Mises* models in Psaltis et al. [3], providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(\vec{r})$. The default model is the Dipole model, known to be consistent with multi-frequency measurements of Sgr A* [4]. ## References +[1] Johnson, M. D., Narayan, R., 2016, The Astrophysical Journal, 826, 170, DOI: [10.3847/0004-637X/826/2/170](https://doi.org/10.3847/0004-637X/826/2/170) ([ADS](https://ui.adsabs.harvard.edu/abs/2016ApJ...826..170J)) + +[2] Johnson, M. D., 2016, The Astrophysical Journal, 833, 74, DOI: [10.3847/1538-4357/833/1/74](https://doi.org/10.3847/1538-4357/833/1/74) ([ADS](https://ui.adsabs.harvard.edu/abs/2016ApJ...833...74J)) + +[3] Psaltis, D., et al., 2018, arXiv e-prints, arXiv:1805.01242, DOI: [10.48550/arXiv.1805.01242](https://doi.org/10.48550/arXiv.1805.01242) ([ADS](https://ui.adsabs.harvard.edu/abs/2018arXiv180501242P)) + +[4] Johnson, M. D., et al., 2018, The Astrophysical Journal, 865, 104, DOI: [10.3847/1538-4357/aadcff](https://doi.org/10.3847/1538-4357/aadcff) ([ADS](https://ui.adsabs.harvard.edu/abs/2018ApJ...865..104J)) + +[5] Rickett, B. J., 1990, Annual Review of Astronomy and Astrophysics, 28, 561, DOI: [10.1146/annurev.aa.28.090190.003021](https://doi.org/10.1146/annurev.aa.28.090190.003021) ([ADS)](https://ui.adsabs.harvard.edu/abs/1990ARA&A..28..561R)) -[1] M. D. Johnson. Stochastic optics: A scattering mitigation framework for radio interferometric -imaging. The Astrophysical Journal, 833(1):74, dec 2016. DOI: [10.3847/1538-4357/833/1/74](https://iopscience.iop.org/article/10.3847/1538-4357/aadcff). +[6] Narayan, R., 1992, Philosophical Transactions of the Royal Society of London Series A, 341, 151, DOI: [10.1098/rsta.1992.0090](https://doi.org/10.1098/rsta.1992.0090) ([ADS](https://ui.adsabs.harvard.edu/abs/1992RSPTA.341..151N)) -[2] D. Psaltis, M. Johnson, R. Narayan, L. Medeiros, L. Blackburn, and G. Bower. A model for -anisotropic interstellar scattering and its application to sgr a*, 2018. +[7] Narayan, R., Goodman, J., 1989, Monthly Notices of the Royal Astronomical Society, 238, 963, DOI: [10.1093/mnras/238.3.963](https://doi.org/10.1093/mnras/238.3.963) ([ADS](https://ui.adsabs.harvard.edu/abs/1989MNRAS.238..963N)) -[3] Johnson, M. D., & Narayan, R. (2016). The Optics of Refractive Substructure. 826(2), 170. DOI:[10.3847/0004-637X/826/2/170](https://iopscience.iop.org/article/10.3847/0004-637X/826/2/170) +[8] Goodman, J., Narayan, R., 1989, Monthly Notices of the Royal Astronomical Society, 238, 995, DOI: [10.1093/mnras/238.3.995](https://doi.org/10.1093/mnras/238.3.995) ([ADS](https://ui.adsabs.harvard.edu/abs/1989MNRAS.238..995G)) From a396445159e571d8b29f7c0b99a8736a9ff2183e Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Fri, 11 Oct 2024 21:09:40 -0400 Subject: [PATCH 05/51] add .DS_Store into .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0887050..f1e54c8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *.jl.mem /docs/Manifest.toml /docs/build/ +*.DS_Store From 4e0edd5f456e878dbaeecdf0db6ad9b6cb7cbb18 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Fri, 11 Oct 2024 23:31:57 -0400 Subject: [PATCH 06/51] update documentations to correct typos in math.md. Also add top and introduction pages. --- Manifest.toml | 816 ++++++++++++++++++++++----------------- docs/make.jl | 15 +- docs/src/index.md | 38 +- docs/src/introduction.md | 29 ++ docs/src/math.md | 56 +-- 5 files changed, 542 insertions(+), 412 deletions(-) create mode 100644 docs/src/introduction.md diff --git a/Manifest.toml b/Manifest.toml index 1492323..0ca44d2 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,13 +1,18 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.9.4" +julia_version = "1.10.4" manifest_format = "2.0" -project_hash = "0ceef23a61d57b0fe46b09682b286c7c71b98dca" +project_hash = "1d8a7c063d63e4476da0714db0e12c9353ea3777" [[deps.ADTypes]] -git-tree-sha1 = "332e5d7baeff8497b923b730b994fa480601efc7" +git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "0.2.5" +version = "1.9.0" +weakdeps = ["ChainRulesCore", "EnzymeCore"] + + [deps.ADTypes.extensions] + ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesEnzymeCoreExt = "EnzymeCore" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] @@ -27,23 +32,35 @@ uuid = "7f219486-4aa7-41d6-80a7-e08ef20ceed7" version = "0.8.2" [[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Test"] -git-tree-sha1 = "a7055b939deae2455aa8a67491e034f735dd08d3" +deps = ["CompositionsBase", "ConstructionBase", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown"] +git-tree-sha1 = "b392ede862e506d451fc1616e79aa6f4c673dab8" uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.33" -weakdeps = ["AxisKeys", "IntervalSets", "Requires", "StaticArrays", "StructArrays"] +version = "0.1.38" [deps.Accessors.extensions] AccessorsAxisKeysExt = "AxisKeys" + AccessorsDatesExt = "Dates" AccessorsIntervalSetsExt = "IntervalSets" AccessorsStaticArraysExt = "StaticArrays" AccessorsStructArraysExt = "StructArrays" + AccessorsTestExt = "Test" + AccessorsUnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + Requires = "ae029012-a4dd-5104-9daa-d747884805df" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "cde29ddf7e5726c9fb511f340244ea3481267608" +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.7.2" +version = "4.0.4" weakdeps = ["StaticArrays"] [deps.Adapt.extensions] @@ -60,21 +77,25 @@ version = "1.1.1" [[deps.ArnoldiMethod]] deps = ["LinearAlgebra", "Random", "StaticArrays"] -git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" +git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" uuid = "ec485272-7323-5ecc-a04f-4719b315124d" -version = "0.2.0" +version = "0.4.0" [[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "247efbccf92448be332d154d6ca56b9fcdd93c31" +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "3640d077b6dafd64ceb8fd5c1ec76f7ca53bcf76" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.6.1" +version = "7.16.0" [deps.ArrayInterface.extensions] ArrayInterfaceBandedMatricesExt = "BandedMatrices" ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = "CUDSS" + ArrayInterfaceChainRulesExt = "ChainRules" ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" ArrayInterfaceTrackerExt = "Tracker" @@ -82,15 +103,19 @@ version = "7.6.1" BandedMatrices = "aae01518-5342-5314-be14-df237901396f" BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra"] -git-tree-sha1 = "e2a63c49d6ed91065ae3e892b0382495a5ad45e3" +git-tree-sha1 = "0dd7edaff278e346eb0ca07a7e75c9438408a3ce" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.4.4" +version = "1.10.3" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -101,27 +126,22 @@ uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[deps.AxisAlgorithms]] deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] -git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7" +git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712" uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" -version = "1.0.1" - -[[deps.AxisKeys]] -deps = ["AbstractFFTs", "ChainRulesCore", "CovarianceEstimation", "IntervalSets", "InvertedIndices", "LazyStack", "LinearAlgebra", "NamedDims", "OffsetArrays", "Statistics", "StatsBase", "Tables"] -git-tree-sha1 = "dba0fdaa3a95e591aa9cbe0df9aba41e295a2011" -uuid = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" -version = "0.2.13" +version = "1.1.0" [[deps.BangBang]] -deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] -git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed" +deps = ["Accessors", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires"] +git-tree-sha1 = "e2144b631226d9eeab2d746ca8880b7ccff504ae" uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" -version = "0.3.39" +version = "0.4.3" [deps.BangBang.extensions] BangBangChainRulesCoreExt = "ChainRulesCore" BangBangDataFramesExt = "DataFrames" BangBangStaticArraysExt = "StaticArrays" BangBangStructArraysExt = "StructArrays" + BangBangTablesExt = "Tables" BangBangTypedTablesExt = "TypedTables" [deps.BangBang.weakdeps] @@ -129,6 +149,7 @@ version = "0.3.39" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" [[deps.Base64]] @@ -147,9 +168,9 @@ version = "0.7.1" [[deps.BitTwiddlingConvenienceFunctions]] deps = ["Static"] -git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b" +git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.5" +version = "0.1.6" [[deps.CEnum]] git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" @@ -158,21 +179,21 @@ version = "0.5.0" [[deps.CFITSIO]] deps = ["CFITSIO_jll"] -git-tree-sha1 = "8425c47db102577eefb93cb37b4480e750116b0d" +git-tree-sha1 = "fc0abb338eb8d90bc186ccf0a47c90825952c950" uuid = "3b1b4be9-1499-4b22-8d78-7db3344d1961" -version = "1.4.1" +version = "1.4.2" [[deps.CFITSIO_jll]] -deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "9c91a9358de42043c3101e3a29e60883345b0b39" +deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "Zlib_jll"] +git-tree-sha1 = "b90d32054fc88f97dd926022f554180e744e4d7d" uuid = "b3e40c51-02ae-5482-8a39-3ace5868dcf4" -version = "4.0.0+0" +version = "4.4.0+0" [[deps.CPUSummary]] deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] -git-tree-sha1 = "601f7e7b3d36f18790e2caf83a882d88e9b71ff1" +git-tree-sha1 = "5a97e67919535d6841172016c9530fd69494e5ec" uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.4" +version = "0.2.6" [[deps.Calculus]] deps = ["LinearAlgebra"] @@ -182,9 +203,9 @@ version = "0.5.1" [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "e0af648f0692ec1691b5d094b8724ba1346281cf" +git-tree-sha1 = "3e4b134270b372f2ed4d4d0e936aabaefc1802bc" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.18.0" +version = "1.25.0" weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] @@ -192,9 +213,9 @@ weakdeps = ["SparseArrays"] [[deps.CloseOpenIntervals]] deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" +git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.12" +version = "0.1.13" [[deps.CommonSolve]] git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" @@ -202,16 +223,16 @@ uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" version = "0.2.4" [[deps.CommonSubexpressions]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.0" +version = "0.3.1" [[deps.Compat]] -deps = ["UUIDs"] -git-tree-sha1 = "886826d76ea9e72b35fcd000e535588f7b60f21d" +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.10.1" +version = "4.16.0" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -220,7 +241,7 @@ weakdeps = ["Dates", "LinearAlgebra"] [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.0.5+0" +version = "1.1.1+0" [[deps.CompositionsBase]] git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" @@ -232,10 +253,10 @@ weakdeps = ["InverseFunctions"] CompositionsBaseInverseFunctionsExt = "InverseFunctions" [[deps.ComradeBase]] -deps = ["AxisKeys", "ChainRulesCore", "DocStringExtensions", "FITSIO", "FillArrays", "LinearAlgebra", "PolarizedTypes", "PrecompileTools", "Reexport", "StaticArrays", "Statistics", "StructArrays"] -git-tree-sha1 = "f852fab7dbb431937652e1d6ff900fd0f4cabf7c" +deps = ["ChainRulesCore", "DimensionalData", "DocStringExtensions", "FITSIO", "FillArrays", "LinearAlgebra", "PolarizedTypes", "PrecompileTools", "Reexport", "StaticArrays", "Statistics", "StructArrays"] +git-tree-sha1 = "7b1df3a6ceb0158911edefc7a231dd7b5ceebb74" uuid = "6d8c423b-a35f-4ef1-850c-862fe21f82c4" -version = "0.5.5" +version = "0.6.6" [[deps.ConcreteStructs]] git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" @@ -243,14 +264,14 @@ uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" version = "0.2.3" [[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "c53fc348ca4d40d7b371e71fd52251839080cbc9" +git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.4" -weakdeps = ["IntervalSets", "StaticArrays"] +version = "1.5.8" +weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] [deps.ConstructionBase.extensions] ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.ContextVariablesX]] @@ -259,12 +280,6 @@ git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" version = "0.1.3" -[[deps.CovarianceEstimation]] -deps = ["LinearAlgebra", "Statistics", "StatsBase"] -git-tree-sha1 = "9a44ddc9e60ee398934b73a5168f5806989e6792" -uuid = "587fd27a-f159-11e8-2dae-1979310e6154" -version = "0.2.11" - [[deps.CpuId]] deps = ["Markdown"] git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" @@ -272,15 +287,15 @@ uuid = "adafc99b-e345-5852-983c-f28acb93d879" version = "0.3.1" [[deps.DataAPI]] -git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.15.0" +version = "1.16.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.15" +version = "0.18.20" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -303,12 +318,13 @@ uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] -git-tree-sha1 = "09ce9525b590bcdd9a807142dc493692aee85ef9" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] +git-tree-sha1 = "03b9555f4c3a7c2f530bb1ae13e85719c632f74e" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.143.0" +version = "6.151.1" [deps.DiffEqBase.extensions] + DiffEqBaseCUDAExt = "CUDA" DiffEqBaseChainRulesCoreExt = "ChainRulesCore" DiffEqBaseDistributionsExt = "Distributions" DiffEqBaseEnzymeExt = ["ChainRulesCore", "Enzyme"] @@ -321,6 +337,7 @@ version = "6.143.0" DiffEqBaseUnitfulExt = "Unitful" [deps.DiffEqBase.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" @@ -344,6 +361,54 @@ git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" +[[deps.DifferentiationInterface]] +deps = ["ADTypes", "Compat", "DocStringExtensions", "FillArrays", "LinearAlgebra", "PackageExtensionCompat", "SparseArrays", "SparseMatrixColorings"] +git-tree-sha1 = "6bd550abccb7aa156141e10d5367c580af9128af" +uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +version = "0.5.11" + + [deps.DifferentiationInterface.extensions] + DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" + DifferentiationInterfaceDiffractorExt = "Diffractor" + DifferentiationInterfaceEnzymeExt = "Enzyme" + DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" + DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" + DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" + DifferentiationInterfaceForwardDiffExt = "ForwardDiff" + DifferentiationInterfacePolyesterForwardDiffExt = "PolyesterForwardDiff" + DifferentiationInterfaceReverseDiffExt = "ReverseDiff" + DifferentiationInterfaceSymbolicsExt = "Symbolics" + DifferentiationInterfaceTapirExt = "Tapir" + DifferentiationInterfaceTrackerExt = "Tracker" + DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] + + [deps.DifferentiationInterface.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" + Tapir = "07d77754-e150-4737-8c94-cd238a1fb45b" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.DimensionalData]] +deps = ["Adapt", "ArrayInterface", "ConstructionBase", "DataAPI", "Dates", "Extents", "Interfaces", "IntervalSets", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "PrecompileTools", "Random", "RecipesBase", "SparseArrays", "Statistics", "TableTraits", "Tables"] +git-tree-sha1 = "195ca4e65d88c2fe949b75b235105f587b3c84c2" +uuid = "0703355e-b756-11e9-17c0-8b28908087d0" +version = "0.26.8" + + [deps.DimensionalData.extensions] + DimensionalDataMakie = "Makie" + + [deps.DimensionalData.weakdeps] + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" + [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" @@ -359,12 +424,6 @@ deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" -[[deps.DualNumbers]] -deps = ["Calculus", "NaNMath", "SpecialFunctions"] -git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" -uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" -version = "0.6.8" - [[deps.EHTUtils]] deps = ["Dates", "Logging", "PhysicalConstants", "Unitful", "UnitfulAngles", "UnitfulAstro"] git-tree-sha1 = "69fc67cfb95f5d9e753ffea647069a0f34deac9a" @@ -378,50 +437,68 @@ version = "1.0.4" [[deps.Enzyme]] deps = ["CEnum", "EnzymeCore", "Enzyme_jll", "GPUCompiler", "LLVM", "Libdl", "LinearAlgebra", "ObjectFile", "Preferences", "Printf", "Random"] -git-tree-sha1 = "dd414d440bf55a14750ea0ebb576353cde0303a2" +git-tree-sha1 = "3fb48f9c18de1993c477457265b85130756746ae" uuid = "7da242da-08ed-463a-9acd-ee780be4f1d9" -version = "0.11.11" +version = "0.11.20" +weakdeps = ["SpecialFunctions"] + + [deps.Enzyme.extensions] + EnzymeSpecialFunctionsExt = "SpecialFunctions" [[deps.EnzymeCore]] -deps = ["Adapt"] -git-tree-sha1 = "2efe862de93cd87f620ad6ac9c9e3f83f1b2841b" +git-tree-sha1 = "1bc328eec34ffd80357f84a84bb30e4374e9bd60" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.6.4" +version = "0.6.6" +weakdeps = ["Adapt"] + + [deps.EnzymeCore.extensions] + AdaptExt = "Adapt" [[deps.Enzyme_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "e7e1ae137a07fd2dfccd83418084e53be9de3edb" +git-tree-sha1 = "32d418c804279c60dd38ac7868126696f3205a4f" uuid = "7cc45869-7501-5eee-bdea-0790c847d4ef" -version = "0.0.96+0" +version = "0.0.102+0" [[deps.ExprTools]] git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" version = "0.1.10" +[[deps.Expronicon]] +deps = ["MLStyle", "Pkg", "TOML"] +git-tree-sha1 = "fc3951d4d398b5515f91d7fe5d45fc31dccb3c9b" +uuid = "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636" +version = "0.8.5" + +[[deps.Extents]] +git-tree-sha1 = "81023caa0021a41712685887db1fc03db26f41f5" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.4" + [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "ec22cbbcd01cba8f41eecd7d44aac1f23ee985e3" +git-tree-sha1 = "4820348781ae578893311153d69049a93d05f39d" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.7.2" +version = "1.8.0" [[deps.FFTW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" +git-tree-sha1 = "4d81ed14783ec49ce9f2e168208a12ce1815aa25" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.10+0" +version = "3.3.10+1" [[deps.FITSIO]] deps = ["CFITSIO", "Printf", "Reexport", "Tables"] -git-tree-sha1 = "a8924c203d66d4c5d72980572c6810213422a59d" +git-tree-sha1 = "8b68d078e8ec3660b7e95528f1a888c5222d2fb4" uuid = "525bcba6-941b-5504-bd06-fd0dc1a4d2eb" -version = "0.17.1" +version = "0.17.4" [[deps.FLoops]] deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] -git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +git-tree-sha1 = "0a2e5873e9a5f54abb06418d57a8df689336a660" uuid = "cc61a311-1640-44b5-9fba-1b764f453329" -version = "0.2.1" +version = "0.2.2" [[deps.FLoopsBase]] deps = ["ContextVariablesX"] @@ -435,20 +512,25 @@ git-tree-sha1 = "a6e756a880fc419c8b41592010aebe6a5ce09136" uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" version = "0.2.8" +[[deps.FastClosures]] +git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" +uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" +version = "0.3.2" + [[deps.FastLapackInterface]] deps = ["LinearAlgebra"] -git-tree-sha1 = "b12f05108e405dadcc2aff0008db7f831374e051" +git-tree-sha1 = "cbf5edddb61a43669710cbc2241bc08b36d9e660" uuid = "29a986be-02c6-4525-aec4-84b980013641" -version = "2.0.0" +version = "2.0.4" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] -deps = ["LinearAlgebra", "Random"] -git-tree-sha1 = "5b93957f6dcd33fc343044af3d48c215be2562f1" +deps = ["LinearAlgebra"] +git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.9.3" +version = "1.13.0" [deps.FillArrays.extensions] FillArraysPDMatsExt = "PDMats" @@ -461,19 +543,21 @@ version = "1.9.3" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] -git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" +deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] +git-tree-sha1 = "b10bdafd1647f57ace3885143936749d61638c3b" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.21.1" +version = "2.26.0" [deps.FiniteDiff.extensions] FiniteDiffBandedMatricesExt = "BandedMatrices" FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffSparseArraysExt = "SparseArrays" FiniteDiffStaticArraysExt = "StaticArrays" [deps.FiniteDiff.weakdeps] BandedMatrices = "aae01518-5342-5314-be14-df237901396f" BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.ForwardDiff]] @@ -503,9 +587,9 @@ uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" [[deps.GPUArraysCore]] deps = ["Adapt"] -git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0" +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.1.5" +version = "0.1.6" [[deps.GPUCompiler]] deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"] @@ -515,21 +599,21 @@ version = "0.25.0" [[deps.Graphs]] deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] -git-tree-sha1 = "899050ace26649433ef1af25bc17a815b3db52b7" +git-tree-sha1 = "1dc470db8b1131cfc7fb4c115de89fe391b9e780" uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" -version = "1.9.0" +version = "1.12.0" [[deps.HostCPUFeatures]] deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] -git-tree-sha1 = "eb8fed28f4994600e29beef49744639d985a04b2" +git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" -version = "0.1.16" +version = "0.1.17" [[deps.HypergeometricFunctions]] -deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "7c4195be1649ae622304031ed46a2f4df989f1eb" uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.23" +version = "0.3.24" [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" @@ -537,55 +621,60 @@ uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" version = "0.1.1" [[deps.Inflate]] -git-tree-sha1 = "ea8031dea4aff6bd41f1df8f2fdfb25b33626381" +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" -version = "0.1.4" +version = "0.1.5" [[deps.InitialValues]] git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" version = "0.3.1" -[[deps.IntegerMathUtils]] -git-tree-sha1 = "b8ffb903da9f7b8cf695a8bead8e01814aa24b30" -uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" -version = "0.1.2" - [[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "31d6adb719886d4e32e38197aae466e98881320b" +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "10bd689145d2c3b2a9844005d01087cc1194e79e" uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2024.0.0+0" +version = "2024.2.1+0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +[[deps.Interfaces]] +git-tree-sha1 = "331ff37738aea1a3cf841ddf085442f31b84324f" +uuid = "85a1e053-f937-4924-92a5-1367d23b7b87" +version = "0.3.2" + [[deps.Interpolations]] deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] -git-tree-sha1 = "274ad8005db8b4ef6cc46d1392927083405813c2" +git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0" uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" -version = "0.15.0" +version = "0.15.1" weakdeps = ["Unitful"] [deps.Interpolations.extensions] InterpolationsUnitfulExt = "Unitful" [[deps.IntervalSets]] -deps = ["Dates", "Random"] -git-tree-sha1 = "3d8866c029dd6b16e69e0d4a939c4dfcb98fac47" +git-tree-sha1 = "dba9ddf07f77f60450fe5d2e2beb9854d9a49bd0" uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.8" -weakdeps = ["Statistics"] +version = "0.7.10" +weakdeps = ["Random", "RecipesBase", "Statistics"] [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" IntervalSetsStatisticsExt = "Statistics" [[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" [[deps.InvertedIndices]] git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" @@ -604,9 +693,9 @@ version = "1.0.0" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +git-tree-sha1 = "be3dc50a92e5a386872a493a10050136d4703f9b" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" +version = "1.6.1" [[deps.JuliaVariables]] deps = ["MLStyle", "NameResolution"] @@ -616,21 +705,21 @@ version = "0.2.4" [[deps.KLU]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] -git-tree-sha1 = "884c2968c2e8e7e6bf5956af88cb46aa745c854b" +git-tree-sha1 = "07649c499349dad9f08dde4243a4c597064663e9" uuid = "ef3ab10e-7fda-4108-b977-705223b18434" -version = "0.4.1" +version = "0.6.0" [[deps.Krylov]] deps = ["LinearAlgebra", "Printf", "SparseArrays"] -git-tree-sha1 = "8a6837ec02fe5fb3def1abc907bb802ef11a0729" +git-tree-sha1 = "267dad6b4b7b5d529c76d40ff48d33f7e94cb834" uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" -version = "0.9.5" +version = "0.9.6" [[deps.LLVM]] deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] -git-tree-sha1 = "0678579657515e88b6632a3a482d39adcbb80445" +git-tree-sha1 = "839c82932db86740ae729779e610f07a1640be9a" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "6.4.1" +version = "6.6.3" [deps.LLVM.extensions] BFloat16sExt = "BFloat16s" @@ -640,48 +729,38 @@ version = "6.4.1" [[deps.LLVMExtra_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "98eaee04d96d973e79c25d49167668c5c8fb50e2" +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.27+1" - -[[deps.LatticeRules]] -deps = ["Random"] -git-tree-sha1 = "7f5b02258a3ca0221a6a9710b0a0a2e8fb4957fe" -uuid = "73f95e8e-ec14-4e6a-8b18-0d2e271c4e55" -version = "0.0.1" +version = "0.0.29+0" [[deps.LayoutPointers]] deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "62edfee3211981241b57ff1cedf4d74d79519277" +git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.15" - -[[deps.Lazy]] -deps = ["MacroTools"] -git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" -uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" -version = "0.15.1" +version = "0.1.17" [[deps.LazyArrays]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "MatrixFactorizations", "SparseArrays"] -git-tree-sha1 = "08d56555410b0683cd7b48bff37aa59cbb0ea908" +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "SparseArrays"] +git-tree-sha1 = "360f6039babd6e4d6364eff0d4fc9120834a2d9a" uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" -version = "1.8.2" -weakdeps = ["StaticArrays"] +version = "2.2.1" [deps.LazyArrays.extensions] + LazyArraysBandedMatricesExt = "BandedMatrices" + LazyArraysBlockArraysExt = "BlockArrays" + LazyArraysBlockBandedMatricesExt = "BlockBandedMatrices" LazyArraysStaticArraysExt = "StaticArrays" + [deps.LazyArrays.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -[[deps.LazyStack]] -deps = ["ChainRulesCore", "LinearAlgebra", "NamedDims", "OffsetArrays"] -git-tree-sha1 = "2eb4a5bf2eb0519ebf40c797ba5637d327863637" -uuid = "1fad7336-0346-5a1a-a56f-a06ba010965b" -version = "0.0.8" - [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" @@ -693,9 +772,14 @@ uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" version = "8.4.0+0" [[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" @@ -706,24 +790,25 @@ uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[deps.LineSearches]] deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] -git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" +git-tree-sha1 = "e4c3be53733db1051cc15ecf573b1042b3a712a1" uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.2.0" +version = "7.3.0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[deps.LinearSolve]] -deps = ["ArrayInterface", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "Libdl", "LinearAlgebra", "MKL_jll", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] -git-tree-sha1 = "03cd36673f050ec49f9bdfce31e0e7e22d877e64" +deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] +git-tree-sha1 = "6c5e4555ac2bc449a28604e184f759d18fc08420" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "2.21.0" +version = "2.34.0" [deps.LinearSolve.extensions] LinearSolveBandedMatricesExt = "BandedMatrices" LinearSolveBlockDiagonalsExt = "BlockDiagonals" LinearSolveCUDAExt = "CUDA" + LinearSolveCUDSSExt = "CUDSS" LinearSolveEnzymeExt = ["Enzyme", "EnzymeCore"] LinearSolveFastAlmostBandedMatricesExt = ["FastAlmostBandedMatrices"] LinearSolveHYPREExt = "HYPRE" @@ -738,6 +823,7 @@ version = "2.21.0" BandedMatrices = "aae01518-5342-5314-be14-df237901396f" BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" @@ -751,9 +837,9 @@ version = "2.21.0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "7d6dd4e9212aebaeed356de34ccf262a3cd415aa" +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.26" +version = "0.3.28" [deps.LogExpFunctions.extensions] LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -770,9 +856,9 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.LoopVectorization]] deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] -git-tree-sha1 = "0f5648fbae0d015e3abe5867bca2b362f67a5894" +git-tree-sha1 = "8084c25a250e00ae427a379a5b607e7aed96a2dd" uuid = "bdcacae8-1622-11e9-2a5c-532679323890" -version = "0.12.166" +version = "0.12.171" weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] [deps.LoopVectorization.extensions] @@ -780,10 +866,10 @@ weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] SpecialFunctionsExt = "SpecialFunctions" [[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "72dc3cf284559eb8f53aa593fe62cb33f83ed0c0" +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "f046ccd0c6db2832a9f639e2c669c6fe867e5f4f" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2024.0.0+0" +version = "2024.2.0+0" [[deps.MLStyle]] git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" @@ -792,9 +878,9 @@ version = "0.4.17" [[deps.MacroTools]] deps = ["Markdown", "Random"] -git-tree-sha1 = "9ee1618cbf5240e6d4e0371d6f24065083f60c48" +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.11" +version = "0.5.13" [[deps.ManualMemory]] git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" @@ -805,22 +891,20 @@ version = "0.1.8" deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -[[deps.MatrixFactorizations]] -deps = ["ArrayLayouts", "LinearAlgebra", "Printf", "Random"] -git-tree-sha1 = "78f6e33434939b0ac9ba1df81e6d005ee85a7396" -uuid = "a3b82374-2e81-5b9e-98ce-41277c0e4c87" -version = "2.1.0" - [[deps.MaybeInplace]] -deps = ["ArrayInterface", "LinearAlgebra", "MacroTools", "SparseArrays"] -git-tree-sha1 = "a85c6a98c9e5a2a7046bc1bb89f28a3241e1de4d" +deps = ["ArrayInterface", "LinearAlgebra", "MacroTools"] +git-tree-sha1 = "54e2fdc38130c05b42be423e90da3bade29b74bd" uuid = "bb5d69b7-63fc-4a16-80bd-7e42200c7bdb" -version = "0.1.1" +version = "0.1.4" +weakdeps = ["SparseArrays"] + + [deps.MaybeInplace.extensions] + MaybeInplaceSparseArraysExt = "SparseArrays" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+0" +version = "2.28.2+1" [[deps.Measurements]] deps = ["Calculus", "LinearAlgebra", "Printf", "Requires"] @@ -849,23 +933,17 @@ uuid = "c03570c3-d221-55d1-a50c-7939bbd78826" version = "0.4.4" [[deps.MicroCollections]] -deps = ["BangBang", "InitialValues", "Setfield"] -git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +deps = ["Accessors", "BangBang", "InitialValues"] +git-tree-sha1 = "44d32db644e84c75dab479f1bc15ee76a1a3618f" uuid = "128add7d-3638-4c79-886c-908ea0c25c34" -version = "0.1.4" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.1.0" +version = "0.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.10.11" +version = "2023.1.10" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -873,10 +951,17 @@ uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" version = "0.2.4" [[deps.NFFT]] -deps = ["AbstractNFFTs", "BasicInterpolators", "Distributed", "FFTW", "FLoops", "LinearAlgebra", "Printf", "Random", "Reexport", "SnoopPrecompile", "SparseArrays", "SpecialFunctions"] -git-tree-sha1 = "93a5f32dd6cf09456b0b81afcb8fc29f06535ffd" +deps = ["AbstractNFFTs", "BasicInterpolators", "Distributed", "FFTW", "FLoops", "LinearAlgebra", "PrecompileTools", "Printf", "Random", "Reexport", "SparseArrays", "SpecialFunctions"] +git-tree-sha1 = "d28544d20956835b9d856ff240aa61f898a00652" uuid = "efe261a4-0d2b-5849-be55-fc731d526b0d" -version = "0.13.3" +version = "0.13.5" + + [deps.NFFT.extensions] + NFFTGPUArraysExt = ["Adapt", "GPUArrays"] + + [deps.NFFT.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" [[deps.NLSolversBase]] deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] @@ -896,12 +981,6 @@ git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" version = "0.1.5" -[[deps.NamedDims]] -deps = ["AbstractFFTs", "ChainRulesCore", "CovarianceEstimation", "LinearAlgebra", "Pkg", "Requires", "Statistics"] -git-tree-sha1 = "dc9144f80a79b302b48c282ad29b1dc2f10a9792" -uuid = "356022a1-0364-5f58-8944-0da4b18d706f" -version = "1.2.1" - [[deps.NamedTupleTools]] git-tree-sha1 = "90914795fc59df44120fe3fff6742bb0d7adb1d0" uuid = "d9ec5142-1e00-5aa0-9d6a-321866360f50" @@ -912,50 +991,61 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.NonlinearSolve]] -deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "EnumX", "FastBroadcast", "FiniteDiff", "ForwardDiff", "LazyArrays", "LineSearches", "LinearAlgebra", "LinearSolve", "MaybeInplace", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SimpleNonlinearSolve", "SparseArrays", "SparseDiffTools", "StaticArrays", "UnPack"] -git-tree-sha1 = "767100434dc775c993082e70e453ba7bd9866afa" +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "FastBroadcast", "FastClosures", "FiniteDiff", "ForwardDiff", "LazyArrays", "LineSearches", "LinearAlgebra", "LinearSolve", "MaybeInplace", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "SparseArrays", "SparseDiffTools", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] +git-tree-sha1 = "bcd8812e751326ff1d4b2dd50764b93df51f143b" uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" -version = "3.1.0" +version = "3.14.0" [deps.NonlinearSolve.extensions] NonlinearSolveBandedMatricesExt = "BandedMatrices" NonlinearSolveFastLevenbergMarquardtExt = "FastLevenbergMarquardt" + NonlinearSolveFixedPointAccelerationExt = "FixedPointAcceleration" NonlinearSolveLeastSquaresOptimExt = "LeastSquaresOptim" NonlinearSolveMINPACKExt = "MINPACK" + NonlinearSolveNLSolversExt = "NLSolvers" NonlinearSolveNLsolveExt = "NLsolve" + NonlinearSolveSIAMFANLEquationsExt = "SIAMFANLEquations" + NonlinearSolveSpeedMappingExt = "SpeedMapping" NonlinearSolveSymbolicsExt = "Symbolics" NonlinearSolveZygoteExt = "Zygote" [deps.NonlinearSolve.weakdeps] BandedMatrices = "aae01518-5342-5314-be14-df237901396f" FastLevenbergMarquardt = "7a0df574-e128-4d35-8cbd-3d84502bf7ce" + FixedPointAcceleration = "817d07cb-a79a-5c30-9a31-890123675176" LeastSquaresOptim = "0fc2ff8b-aaa3-5acd-a817-1944a5e08891" MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9" + NLSolvers = "337daf1e-9722-11e9-073e-8b9effe078ba" NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" + SIAMFANLEquations = "084e46ad-d928-497d-ad5e-07fa361a48c4" + SpeedMapping = "f1835b91-879b-4a3f-a438-e4baacf14412" Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.ObjectFile]] deps = ["Reexport", "StructIO"] -git-tree-sha1 = "195e0a19842f678dd3473ceafbe9d82dfacc583c" +git-tree-sha1 = "7249afa1c4dfd86bfbcc9b28939ab6ef844f4e11" uuid = "d8793406-e978-5875-9003-1fc021f44a92" -version = "0.4.1" +version = "0.4.2" [[deps.OffsetArrays]] -deps = ["Adapt"] -git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb" +git-tree-sha1 = "1a27764e945a152f7ca7efa04de513d473e9542e" uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.12.10" +version = "1.14.1" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.21+4" +version = "0.3.23+4" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" +version = "0.8.1+2" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -995,31 +1085,31 @@ version = "0.2.3" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.9.2" +version = "1.10.0" [[deps.PolarizedTypes]] deps = ["ChainRulesCore", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "StaticArrays"] -git-tree-sha1 = "30dcafc7ba1628d8ffddea32b9c78a71d86cbb04" +git-tree-sha1 = "4217710242df1f4708e58e00763de2569cfbe880" uuid = "d3c5d4cd-a8ee-40d6-aac7-e34df5a20044" -version = "0.1.1" +version = "0.1.2" [[deps.Polyester]] -deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "fca25670784a1ae44546bcb17288218310af2778" +deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] +git-tree-sha1 = "6d38fea02d983051776a856b7df75b30cf9a3c1f" uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.9" +version = "0.7.16" [[deps.PolyesterWeave]] deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "240d7170f5ffdb285f9427b92333c3463bf65bf6" +git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.1" +version = "0.2.2" [[deps.PreallocationTools]] -deps = ["Adapt", "ArrayInterface", "ForwardDiff", "Requires"] -git-tree-sha1 = "01ac95fca7daabe77a9cb705862bd87016af9ddb" +deps = ["Adapt", "ArrayInterface", "ForwardDiff"] +git-tree-sha1 = "6c62ce45f268f3f958821a1e5192cf91c75ae89c" uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" -version = "0.4.13" +version = "0.4.24" [deps.PreallocationTools.extensions] PreallocationToolsReverseDiffExt = "ReverseDiff" @@ -1029,55 +1119,37 @@ version = "0.4.13" [[deps.PrecompileTools]] deps = ["Preferences"] -git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.0" +version = "1.2.1" [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.1" +version = "1.4.3" [[deps.PrettyPrint]] git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" version = "0.2.0" -[[deps.Primes]] -deps = ["IntegerMathUtils"] -git-tree-sha1 = "1d05623b5952aed1307bf8b43bec8b8d1ef94b6e" -uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" -version = "0.5.5" - [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "9ebcd48c498668c7fa0e97a9cae873fbee7bfee1" +git-tree-sha1 = "e237232771fdafbae3db5c31275303e056afaa9f" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.9.1" - -[[deps.QuasiMonteCarlo]] -deps = ["Accessors", "ConcreteStructs", "LatticeRules", "LinearAlgebra", "Primes", "Random", "Requires", "Sobol", "StatsBase"] -git-tree-sha1 = "cc086f8485bce77b6187141e1413c3b55f9a4341" -uuid = "8a4e6c94-4038-4cdc-81c3-7e6ffdb2a71b" -version = "0.3.3" - - [deps.QuasiMonteCarlo.extensions] - QuasiMonteCarloDistributionsExt = "Distributions" - - [deps.QuasiMonteCarlo.weakdeps] - Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "2.10.1" [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.Random]] -deps = ["SHA", "Serialization"] +deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[deps.Ratios]] @@ -1099,28 +1171,36 @@ uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" version = "1.3.4" [[deps.RecursiveArrayTools]] -deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "Requires", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "3f40e61c93a7c46b85df57b770bc360988f9ca36" +deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] +git-tree-sha1 = "b034171b93aebc81b3e1890a036d13a9c4a9e3e0" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.0.0" +version = "3.27.0" [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" + RecursiveArrayToolsForwardDiffExt = "ForwardDiff" RecursiveArrayToolsMeasurementsExt = "Measurements" RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" + RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] + RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] RecursiveArrayToolsTrackerExt = "Tracker" RecursiveArrayToolsZygoteExt = "Zygote" [deps.RecursiveArrayTools.weakdeps] + FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.RecursiveFactorization]] deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "PrecompileTools", "StrideArraysCore", "TriangularSolve"] -git-tree-sha1 = "8bc86c78c7d8e2a5fe559e3721c0f9c9e303b2ed" +git-tree-sha1 = "6db1a75507051bc18bfa131fbc7c3f169cc4b2f6" uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" -version = "0.2.21" +version = "0.2.23" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1134,18 +1214,20 @@ uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" [[deps.Roots]] -deps = ["ChainRulesCore", "CommonSolve", "Printf", "Setfield"] -git-tree-sha1 = "0f1d92463a020321983d04c110f476c274bafe2e" +deps = ["Accessors", "CommonSolve", "Printf"] +git-tree-sha1 = "3a7c7e5c3f015415637f5debdf8a674aa2c979c4" uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.0.22" +version = "2.2.1" [deps.Roots.extensions] + RootsChainRulesCoreExt = "ChainRulesCore" RootsForwardDiffExt = "ForwardDiff" RootsIntervalRootFindingExt = "IntervalRootFinding" RootsSymPyExt = "SymPy" RootsSymPyPythonCallExt = "SymPyPythonCall" [deps.Roots.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" @@ -1153,9 +1235,9 @@ version = "2.0.22" [[deps.RuntimeGeneratedFunctions]] deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "6aacc5eefe8415f47b3e34214c1d79d2674a0ba2" +git-tree-sha1 = "04c968137612c4a5629fa531334bb81ad5680f00" uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.12" +version = "0.5.13" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" @@ -1168,18 +1250,19 @@ version = "0.1.0" [[deps.SLEEFPirates]] deps = ["IfElse", "Static", "VectorizationBase"] -git-tree-sha1 = "3aac6d68c5e57449f5b9b865c9ba50ac2970c4cf" +git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" -version = "0.6.42" +version = "0.6.43" [[deps.SciMLBase]] -deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FillArrays", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "QuasiMonteCarlo", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables", "TruncatedStacktraces"] -git-tree-sha1 = "2c5cb9fcae1db5ce71ded89cb9314ad09f6c89bc" +deps = ["ADTypes", "Accessors", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "Expronicon", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] +git-tree-sha1 = "50ed64cd5ad79b0bef71fdb6a11d10c3448bfef0" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.11.0" +version = "2.56.1" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" + SciMLBaseMakieExt = "Makie" SciMLBasePartialFunctionsExt = "PartialFunctions" SciMLBasePyCallExt = "PyCall" SciMLBasePythonCallExt = "PythonCall" @@ -1189,6 +1272,7 @@ version = "2.11.0" [deps.SciMLBase.weakdeps] ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" PartialFunctions = "570af359-4316-4cb7-8c74-252c00c2016b" PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" @@ -1196,10 +1280,21 @@ version = "2.11.0" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.SciMLOperators]] -deps = ["ArrayInterface", "DocStringExtensions", "Lazy", "LinearAlgebra", "Setfield", "SparseArrays", "StaticArraysCore", "Tricks"] -git-tree-sha1 = "51ae235ff058a64815e0a2c34b1db7578a06813d" +deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra", "MacroTools"] +git-tree-sha1 = "e39c5f217f9aca640c8e27ab21acf557a3967db5" uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.3.7" +version = "0.3.10" +weakdeps = ["SparseArrays", "StaticArraysCore"] + + [deps.SciMLOperators.extensions] + SciMLOperatorsSparseArraysExt = "SparseArrays" + SciMLOperatorsStaticArraysCoreExt = "StaticArraysCore" + +[[deps.SciMLStructures]] +deps = ["ArrayInterface"] +git-tree-sha1 = "25514a6f200219cd1073e4ff23a6324e4a7efe64" +uuid = "53ae85a6-f571-4167-b2af-e1d143709226" +version = "1.5.0" [[deps.Scratch]] deps = ["Dates"] @@ -1221,10 +1316,22 @@ deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" [[deps.SimpleNonlinearSolve]] -deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "Reexport", "SciMLBase", "StaticArraysCore"] -git-tree-sha1 = "62b08ae70b9fe7e4dacffcf9cbb0e5c2d6688d09" +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "DiffResults", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "97a7e10717bd27e600ba55da9d90a5628c1a403b" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "1.0.2" +version = "1.12.2" + + [deps.SimpleNonlinearSolve.extensions] + SimpleNonlinearSolveChainRulesCoreExt = "ChainRulesCore" + SimpleNonlinearSolveReverseDiffExt = "ReverseDiff" + SimpleNonlinearSolveTrackerExt = "Tracker" + SimpleNonlinearSolveZygoteExt = "Zygote" + + [deps.SimpleNonlinearSolve.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.SimpleTraits]] deps = ["InteractiveUtils", "MacroTools"] @@ -1232,47 +1339,40 @@ git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" version = "0.9.4" -[[deps.SnoopPrecompile]] -deps = ["Preferences"] -git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" -uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" -version = "1.0.3" - -[[deps.Sobol]] -deps = ["DelimitedFiles", "Random"] -git-tree-sha1 = "5a74ac22a9daef23705f010f72c81d6925b19df8" -uuid = "ed01d8cd-4d21-5b2a-85b4-cc3bdc58bad4" -version = "1.5.0" - [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "5165dfb9fd131cf0c6957a3a7605dede376e7b63" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.2.0" - [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" [[deps.SparseDiffTools]] deps = ["ADTypes", "Adapt", "ArrayInterface", "Compat", "DataStructures", "FiniteDiff", "ForwardDiff", "Graphs", "LinearAlgebra", "PackageExtensionCompat", "Random", "Reexport", "SciMLOperators", "Setfield", "SparseArrays", "StaticArrayInterface", "StaticArrays", "Tricks", "UnPack", "VertexSafeGraphs"] -git-tree-sha1 = "ddea63e5de5405878d990a2cea4fc1daf2d52d41" +git-tree-sha1 = "c9e5d7ee75cf6a1ca3a22c9a6a4ef451792cf62b" uuid = "47a9eef4-7e08-11e9-0b38-333d64bd3804" -version = "2.14.0" +version = "2.20.0" [deps.SparseDiffTools.extensions] SparseDiffToolsEnzymeExt = "Enzyme" + SparseDiffToolsPolyesterExt = "Polyester" + SparseDiffToolsPolyesterForwardDiffExt = "PolyesterForwardDiff" SparseDiffToolsSymbolicsExt = "Symbolics" SparseDiffToolsZygoteExt = "Zygote" [deps.SparseDiffTools.weakdeps] Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" + PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" +[[deps.SparseMatrixColorings]] +deps = ["ADTypes", "Compat", "DocStringExtensions", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "ad048e784b816e4de5553a13f1daf148412f3dbd" +uuid = "0a514795-09f3-496d-8182-132a7b665d35" +version = "0.3.6" + [[deps.Sparspak]] deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] git-tree-sha1 = "342cf4b449c299d8d1ceaf00b7a49f4fbc7940e7" @@ -1281,9 +1381,9 @@ version = "0.3.9" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.3.1" +version = "2.4.0" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -1297,15 +1397,15 @@ version = "0.1.15" [[deps.Static]] deps = ["IfElse"] -git-tree-sha1 = "f295e0a1da4ca425659c57441bcb59abb035a4bc" +git-tree-sha1 = "d2fdac9ff3906e27f7a618d47b676941baa6c80c" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "0.8.8" +version = "0.8.10" [[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Requires", "SparseArrays", "Static", "SuiteSparse"] -git-tree-sha1 = "5d66818a39bb04bf328e92bc933ec5b4ee88e436" +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] +git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.5.0" +version = "1.8.0" weakdeps = ["OffsetArrays", "StaticArrays"] [deps.StaticArrayInterface.extensions] @@ -1314,18 +1414,19 @@ weakdeps = ["OffsetArrays", "StaticArrays"] [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "5ef59aea6f18c25168842bded46b16662141ab87" +git-tree-sha1 = "eeafab08ae20c62c44c8399ccb9354a04b80db50" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.7.0" -weakdeps = ["Statistics"] +version = "1.9.7" +weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] -git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.2" +version = "1.4.3" [[deps.StationaryRandomFields]] deps = ["DocStringExtensions", "FFTW", "Random", "Statistics"] @@ -1336,51 +1437,42 @@ version = "0.1.0" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.9.0" - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.0" - -[[deps.StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "1d77abd07f617c4868c33d4f5b9e1dbb2643c9cf" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.2" +version = "1.10.0" [[deps.StrideArraysCore]] -deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] -git-tree-sha1 = "d6415f66f3d89c615929af907fdc6a3e17af0d8c" +deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] +git-tree-sha1 = "f35f6ab602df8413a50c4a25ca14de821e8605fb" uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" -version = "0.5.2" +version = "0.5.7" [[deps.StructArrays]] -deps = ["Adapt", "ConstructionBase", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] -git-tree-sha1 = "0a3db38e4cce3c54fe7a71f831cd7b6194a54213" +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "f4dc295e983502292c4c3f951dbb4e985e35b3be" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.16" +version = "0.6.18" +weakdeps = ["Adapt", "GPUArraysCore", "SparseArrays", "StaticArrays"] + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = "GPUArraysCore" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" [[deps.StructIO]] -deps = ["Test"] -git-tree-sha1 = "010dc73c7146869c042b49adcdb6bf528c12e859" +git-tree-sha1 = "c581be48ae1cbf83e899b14c07a807e1787512cc" uuid = "53d494c1-5632-5724-8f4c-31dff12d585f" -version = "0.3.0" - -[[deps.SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" +version = "0.3.1" [[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+6" +version = "7.2.1+1" [[deps.SymbolicIndexingInterface]] -git-tree-sha1 = "65f4ed0f9e3125e0836df12c231cea3dd98bb165" +deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "0225f7c62f5f78db35aae6abb2e5cabe38ce578f" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.0" +version = "0.3.31" [[deps.TOML]] deps = ["Dates"] @@ -1394,10 +1486,10 @@ uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" [[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] -git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "598cd7c1f68d1e205689b1c2fe65a9f85846f297" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.11.1" +version = "1.12.0" [[deps.Tar]] deps = ["ArgTools", "SHA"] @@ -1416,17 +1508,18 @@ version = "0.5.2" [[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] -git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7" +git-tree-sha1 = "3a6f063d690135f5c1ba351412c82bae4d1402bf" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.23" +version = "0.5.25" [[deps.Transducers]] -deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "e579d3c991938fecbb225699e8f611fa3fbf2141" +deps = ["Accessors", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "SplittablesBase", "Tables"] +git-tree-sha1 = "7deeab4ff96b85c5f72c824cae53a1398da3d1cb" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.79" +version = "0.4.84" [deps.Transducers.extensions] + TransducersAdaptExt = "Adapt" TransducersBlockArraysExt = "BlockArrays" TransducersDataFramesExt = "DataFrames" TransducersLazyArraysExt = "LazyArrays" @@ -1434,6 +1527,7 @@ version = "0.4.79" TransducersReferenceablesExt = "Referenceables" [deps.Transducers.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" @@ -1442,14 +1536,14 @@ version = "0.4.79" [[deps.TriangularSolve]] deps = ["CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "LoopVectorization", "Polyester", "Static", "VectorizationBase"] -git-tree-sha1 = "fadebab77bf3ae041f77346dd1c290173da5a443" +git-tree-sha1 = "be986ad9dac14888ba338c2554dcfec6939e1393" uuid = "d5829a12-d9aa-46ab-831f-fb7c9ab06edf" -version = "0.1.20" +version = "0.2.1" [[deps.Tricks]] -git-tree-sha1 = "eae1bb484cd63b36999ee58be2de6c178105112f" +git-tree-sha1 = "7822b97e99a1672bfb1b49b668a6d46d58d8cbcb" uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" -version = "0.1.8" +version = "0.1.9" [[deps.TruncatedStacktraces]] deps = ["InteractiveUtils", "MacroTools", "Preferences"] @@ -1471,9 +1565,9 @@ uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "3c793be6df9dd77a0cf49d80984ef9ff996948fa" +git-tree-sha1 = "d95fe458f26209c66a187b1114df96fd70839efd" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.19.0" +version = "1.21.0" weakdeps = ["ConstructionBase", "InverseFunctions"] [deps.Unitful.extensions] @@ -1488,15 +1582,15 @@ version = "0.6.2" [[deps.UnitfulAstro]] deps = ["Unitful", "UnitfulAngles"] -git-tree-sha1 = "05adf5e3a3bd1038dd50ff6760cddd42380a7260" +git-tree-sha1 = "da7577e6a726959b14f7451674d00b78d10ca30f" uuid = "6112ee07-acf9-5e0f-b108-d242c714bf9f" -version = "1.2.0" +version = "1.2.1" [[deps.VLBISkyModels]] -deps = ["AbstractFFTs", "Accessors", "ArgCheck", "AxisKeys", "BasicInterpolators", "ChainRulesCore", "ComradeBase", "DelimitedFiles", "DocStringExtensions", "Enzyme", "EnzymeCore", "FFTW", "FastBroadcast", "FillArrays", "ForwardDiff", "LinearAlgebra", "NFFT", "NamedTupleTools", "PaddedViews", "PolarizedTypes", "Printf", "RecipesBase", "Reexport", "Requires", "Serialization", "SpecialFunctions", "Static", "StaticArrays", "StructArrays"] -git-tree-sha1 = "7763d6e07e5211ee99b0a8703521ed7ba48a7d90" +deps = ["AbstractFFTs", "Accessors", "ArgCheck", "BasicInterpolators", "ChainRulesCore", "ComradeBase", "DelimitedFiles", "DimensionalData", "DocStringExtensions", "Enzyme", "EnzymeCore", "FFTW", "FastBroadcast", "FillArrays", "ForwardDiff", "LinearAlgebra", "NFFT", "NamedTupleTools", "PaddedViews", "PolarizedTypes", "Printf", "RecipesBase", "Reexport", "Requires", "Serialization", "SpecialFunctions", "Static", "StaticArrays", "StructArrays"] +git-tree-sha1 = "950597bbcffa2360e2dc25538e4b4471391f9bce" uuid = "d6343c73-7174-4e0f-bb64-562643efbeca" -version = "0.3.2" +version = "0.4.8" [deps.VLBISkyModels.extensions] VLBISkyModelsMakieExt = "Makie" @@ -1506,9 +1600,9 @@ version = "0.3.2" [[deps.VectorizationBase]] deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "7209df901e6ed7489fe9b7aa3e46fb788e15db85" +git-tree-sha1 = "e7f5b81c65eb858bed630fe006837b935518aca5" uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" -version = "0.21.65" +version = "0.21.70" [[deps.VertexSafeGraphs]] deps = ["Graphs"] @@ -1518,26 +1612,32 @@ version = "0.2.0" [[deps.WoodburyMatrices]] deps = ["LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "5f24e158cf4cee437052371455fe361f526da062" +git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511" uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" -version = "0.5.6" +version = "1.0.0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+0" +version = "1.2.13+1" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+0" +version = "5.8.0+1" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" version = "1.52.0+1" +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2021.12.0+0" + [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" +version = "17.4.0+2" diff --git a/docs/make.jl b/docs/make.jl index efd6893..527850c 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -2,27 +2,20 @@ using ScatteringOptics using Documenter using DocumenterVitepress -#DocMeta.setdocmeta!(ScatteringOptics, :DocTestSetup, :(using ScatteringOptics); recursive=true) +DocMeta.setdocmeta!(ScatteringOptics, :DocTestSetup, :(using ScatteringOptics); recursive=true) makedocs(; modules=[ScatteringOptics], authors="Anna Tartaglia, Kazunori Akiyama", repo="https://github.com/EHTJulia/ScatteringOptics.jl/blob/{commit}{path}#{line}", sitename="ScatteringOptics.jl", -# format=Documenter.HTML(; -# prettyurls=get(ENV, "CI", "false") == "true", -# canonical="https://EHTJulia.github.io/ScatteringOptics.jl", -# edit_link="main", -# assets=String[], -# ), format = MarkdownVitepress( repo = "https://github.com/EHTJulia/ScatteringOptics.jl", - devurl = "dev", - deploy_url = "EHTJulia.github.io/ScatteringOptics.jl", ), pages=[ "Home" => "index.md", - "Introduction" => "math.md", + "Introduction" => "introduction.md", + "Brief Introduction to interstellar scattering" => "math.md", "Tutorial" => "tutorial.md", "ScateringOptics.jl API" => "autodocs.md", ], @@ -30,6 +23,8 @@ makedocs(; deploydocs(; repo="github.com/EHTJulia/ScatteringOptics.jl", + target = "build", devbranch="main", + branch = "gh-pages", push_preview=true, ) diff --git a/docs/src/index.md b/docs/src/index.md index 05d1962..f5ea5bf 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,21 +1,21 @@ -```@meta -CurrentModule = ScatteringOptics -``` -# ScatteringOptics.jl -[`ScatteringOptics.jl`](https://github.com/EHTJulia/ScatteringOptics.jl) is an astronomy software package developed in the Julia programming language for interstellar scintillation observed at radio wavelengths. It implements physical models for the anisotropic scattering of radio waves, which arise from turbulence in the ionized interstellar medium. +```@raw html +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home -This toolkit is aiming to provide capabilities of simulating and modeling the temporal, spatial, and spectral effects of interstellar scintillation primarily in the strong scattering regime, taking advantage of Julia's speed and composability. -The package is designed to work with sky models and interferometric data types from the advanced Bayesian radio interferometric modeling package [`Comrade.jl`](https://github.com/ptiede/Comrade.jl). - -The package provides essential functionalities for modeling, analyzing, and interpreting the images of the Galactic Center's supermassive black hole, Sagittarius A*, especially with the Event Horizon Telescope, and also the images of extremely high brightness temperature emissions in active galactic nuclei using space very long baseline interferometry. - -## Installation -The package is registered in the Julia standard repository, and installable through the standard ways by -```julia -using Pkg -Pkg.add("ScatteringOptics") -``` -or -```julia -]add ScatteringOptics +hero: + name: "ScatteringOptics.jl" + tagline: A Julia package to model and simulate interstellar scattering and scintillation + actions: + - theme: brand + text: Introduction + link: /introduction + - theme: alt + icon: github + text: View on Github + link: https://github.com/EHTJulia/ScatteringOptics.jl + - theme: alt + text: Tutorial + link: /tutorial +--- ``` \ No newline at end of file diff --git a/docs/src/introduction.md b/docs/src/introduction.md new file mode 100644 index 0000000..5eedcba --- /dev/null +++ b/docs/src/introduction.md @@ -0,0 +1,29 @@ +```@meta +CurrentModule = ScatteringOptics +``` +# Introduction +[`ScatteringOptics.jl`](https://github.com/EHTJulia/ScatteringOptics.jl) is an astronomy software package developed in the Julia programming language for interstellar scintillation observed at radio wavelengths. It implements physical models for the anisotropic scattering of radio waves, which arise from turbulence in the ionized interstellar medium. + +This toolkit is aiming to provide capabilities of simulating and modeling the temporal, spatial, and spectral effects of interstellar scintillation primarily in the strong scattering regime, taking advantage of Julia's speed and composability. +The package is designed to work with sky models and interferometric data types from the advanced Bayesian radio interferometric modeling package [`Comrade.jl`](https://github.com/ptiede/Comrade.jl). + +The package provides essential functionalities for modeling, analyzing, and interpreting the images of the Galactic Center's supermassive black hole, Sagittarius A*, especially with the Event Horizon Telescope, and also the images of extremely high brightness temperature emissions in active galactic nuclei using space very long baseline interferometry. + +## Installation +The package is registered in the Julia standard repository, and installable through the standard ways by +```julia +using Pkg +Pkg.add("ScatteringOptics") +``` +or +```julia +]add ScatteringOptics +``` + +## What are interstellar scattering and scintillation? Why are they important? +Scintillation is a well-known phenomenon in astronomy. Stars appear to twinkle in visible light due to the scattering of their light by the Earth's atmosphere. In radio wavelengths, fluctuations in the electron density of the ionized interstellar plasma cause scattering of radio waves, resulting in the scintillation of compact radio sources in the sky. These phenomena are referred to as *interstellar scattering* and *scintillation*, respectively. Interstellar scintillation produces temporal and spectral modulations (i.e., twinkling) in the brightness of objects, as well as distortion of their images. + +Scattering has become increasingly important in high-angular-resolution studies of compact radio sources at micro-arcsecond scales using very long baseline interferometry (VLBI). Notable examples include the black hole imaging of the supermassive black hole, Sagittarius A* (Sgr A*), at the center of the Milky Way with the Event Horizon Telescope, and studies of extremely high brightness temperature emissions in active galactic nuclei (AGNs) using space VLBI, exemplified by projects like RadioAstron. +In both scenarios, the observed interferometric data are influenced by both diffractive and refractive scattering effects. + +For a more detailed description of the scattering models implemented in this package, see [Brief Introduction to Interstellar Scattering](@ref). diff --git a/docs/src/math.md b/docs/src/math.md index 644e846..dc702a5 100644 --- a/docs/src/math.md +++ b/docs/src/math.md @@ -1,46 +1,52 @@ ```@meta CurrentModule = ScatteringOptics ``` -# Brief Introduction to interstellar scattering -`ScatteringOptics.jl` implements a single thin-screen intersteller scattering model based on a fast but accurate semi-analytic framework developed in Johnson \& Narayan 2016 [1] and further extended in later work [2-4]. +## Brief Introduction to Interstellar Scattering -## What is the interstellar scattering? Why is it important? -Scintillation is a well-known phenomenon in astronomy. In radio wavelengths, electron density fluctuations in the ionized interstellar plasma cause scattering of radio waves, resulting in the scintillation of compact radio sources in the sky [5, 6]. The interstellar scintillation produces temporal and spectral modulations (i.e., twinkling) in the brightness of objects, as well as distortion of the source images. +`ScatteringOptics.jl` implements a single thin-screen interstellar scattering model based on a fast yet accurate semi-analytic framework developed by Johnson & Narayan (2016) [1], and further extended in subsequent works [2-4]. -Scattering has become increasingly important in high-angular-resolution studies of compact radio sources at micro-arcsecond scales using very long baseline interferometry (VLBI). -Notable examples include black hole imaging of the Milky Way's supermassive black hole, Sagittarius A* (Sgr A*), with the Event Horizon Telescope, and studies of extremely high brightness temperature emissions in active galactic nuclei (AGNs) using space VLBI, exemplified by projects like RadioAstron. -In both scenarios, the observed interferometric data is influenced by both diffractive and refractive scattering effects. -## Scattering regimes in the scope -The model implemented in `ScatteringOptics.jl` will simulate both *diffractive* and *refractive* scattering in the *average* and *ensemble-average* regimes. Here let us briefly introduce each of scattering regimes and also their averaging regimes. +## Scattering Regimes in Scope -The interstellar scattering seen in radio wavelengths is in the *strong scattering limit*, where scattering effects are dominated by phase fluctuations on two widely separated scales: **diffractvive** and **refractive** [5, 6]. -- **Diffractive scattering** arises from small-scale fluctuations, typically on scales smaller than microarcseconds. Consequently, diffractive effects are quenched for the vast majority of known sources on the sky, and they are typically only seen in extremely compact objects, such as pulsars and fast radio bursts (FRBs). The diffractive scintillation has a coherence timescale of typically only seconds to minutes, and often well time-averaged during the time scales of a majority of astronomical measurements (except for observations of pulsars and FRBs). As a result, typically the effects of the diffractive scattering appear as a angular broadening of the source image. -- **Refractive scattering** arises from large-scale fluctuations, typically on scales of micro to milli-arcseconds depending on the location of the sky and observing frequency. typically days to months. Refractive effects are only quenched for a source that has an angular size larger than those scales. Consequently, they are present in many compact objects such as active galactic nuclei (AGNs). Refractive scintillation is more persistent and has a coherence timescale of days to months. Refractive scattering introduces *refractive substructures* into the observed angular-broadened image. +The model implemented in `ScatteringOptics.jl` simulates both *diffractive* and *refractive* scattering in the *average* and *ensemble-average* regimes. Below is a brief introduction to each scattering regime and their corresponding averaging regimes. + +Interstellar scattering observed in radio wavelengths occurs in the *strong scattering limit*, where scattering effects are dominated by phase fluctuations on two distinct scales: **diffractive** and **refractive** [5, 6]. +- **Diffractive scattering** arises from small-scale fluctuations, typically on scales smaller than microarcseconds. Diffractive effects are quenched for the vast majority of known sources in the sky and are typically only observed in extremely compact objects, such as pulsars and fast radio bursts (FRBs). Diffractive scintillation has a coherence timescale of seconds to minutes, and is often time-averaged during most astronomical observations (except for pulsars and FRBs). As a result, diffractive scattering typically manifests as angular broadening of the source image. +- **Refractive scattering** arises from larger-scale fluctuations, typically on scales of micro to milliarcseconds, depending on the sky location and observing frequency. Refractive scintillation has a coherence timescale ranging from days to months. Refractive effects are quenched for sources with angular sizes larger than these scales. Consequently, refractive scattering is present in many compact objects, such as active galactic nuclei (AGNs). Refractive scattering introduces *refractive substructures* into the observed angular-broadened image. + +In the late 1980s, Ramesh Narayan and Jeremy J. Goodman [7, 8] identified three distinct averaging regimes for images in the strong-scattering limit: +- **The snapshot regime** occurs when the measurement timescale is shorter than the coherence time of the diffractive scattering. In this regime, measurements exhibit both diffractive and refractive scintillation. This regime is ***not*** handled by the package. +- **The average regime** occurs when the measurement timescale is much longer than the coherence time of the diffractive scattering but shorter than the refractive scintillation (typically days to months). In this regime, diffractive scintillation is well-averaged over time and quenched, leaving only refractive scintillation in the measurements. Most radio astronomical observations of scattered objects occur in this regime. +- **The ensemble-average regime** occurs when the measurement timescale exceeds the refractive scintillation timescale. In this regime, the measurements reflect a complete average over the scattering ensemble, and the scattering effects become deterministic. For example, the scattered image is well described by blurring (or angular broadening) through the convolution of the unscattered image with a scattering kernel. -The late 80's work by Ramesh Narayan and Jeremy J. Goodman [7, 8] showed that there are three distinct averaging regimes for images in the strong-scattering limit. - - **The snapshot regime** occurs when the timescale of measurements is shorter than the coherence time of the diffractive scattering. The measurements therefore will exhibit both diffractive and refractive scintillation. This regime is not handled by our package. -- **The average regime** occurs when the timescale of measurements is much longer than the coherence time of the diffractive scattering but shorter than the refractive scintillation (often from days to months). In this regime, the diffractive scintillation in measurements is well averaged in time and therefore quentched. Consequently, the measurements in this regime will exhibit only refractive scintillation. A majority of radio astronomy observations of scattered objects is in this regime. -- **The ensemble-average regime** occurs when the timescale of measurments is even longer than the refractive scintillation. At this regime, the measurements will reflect a complete average over a scattering ensemble. Consequently, the scattering effects are deterministic. For instance the scattered image is well described through blurring (or angular broadening) via convolution of the unscattered image with a scattering kernel. ## Scattering Model -In many instances, the properties of the interstellar scattering can be well described by a single, thin phase-changing screen $\phi(\vec{r})$, where $\vec{r}$ refers to the two-dimensional phase screen coordinate vector. The statistical characteristics of scattering can be described by those of the phase screen through its spatial structure function $D_\phi(\vec{r})$. This function measures the second-order changes in the phase, $\phi(\vec{r})$ of two radio waves separated by a transverse distance $\vec{r}$ when they pass through the screen [e.g., 1]: +In many cases, the properties of interstellar scattering can be effectively described by a single, thin phase-changing screen, denoted as $\phi(\vec{r})$, where $\vec{r}$ represents the two-dimensional coordinate vector on the phase screen [5, 6]. The statistical characteristics of the scattering are captured by the spatial structure function $D_\phi(\vec{r})$, which describes the second-order changes in phase, $\phi(\vec{r})$, between two radio waves separated by a transverse distance $\vec{r}$ as they pass through the screen [e.g., 1]. -$$D_\phi(r) = \langle [\phi(\vec{r}_0+\vec{r})-\phi(\vec{r}_0)]^2 \rangle$$ +```math +D_\phi(r) = \langle [\phi(\vec{r}_0+\vec{r})-\phi(\vec{r}_0)]^2 \rangle +``` -In the average or ensemble-average regimes, diffractive scattering causes the angular broadening of the source image, which is called the "ensamble-average" image. The diffractively scattered (i.e., ensemble-average) image $I_{ea}(\vec{r})$ is mathematically given by the convolution of the source image $I_{src}(r)$ with a blurring scattering kernel, $G(\vec{r})$, +In the average or ensemble-average regimes, diffractive scattering leads to the angular broadening of the source image, referred to as the "ensemble-average" image. The diffractively scattered (i.e., ensemble-average) image, $I_{ea}(\vec{r})$, is mathematically expressed as the convolution of the source image $I_{src}(\vec{r})$ with a blurring scattering kernel, $G(\vec{r})$. -$$I_{ea}(\vec{r}) = I_{src}(\vec{r}) * G(\vec{r}).$$ +```math +I_{ea}(\vec{r}) = I_{src}(\vec{r}) * G(\vec{r}). +``` -While the above equation is defined in image space, ScatteringOptics.jl performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements, so-called visibilities, obtained with a pair of antennas at different time and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered (i.e., ensemble-average) visibilities, $V_{ea}(\vec{b})$, by +While the previous equation is defined in image space, `ScatteringOptics.jl` performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements—called visibilities—obtained by a pair of antennas at different times and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered (i.e., ensemble-average) visibilities, $V_{ea}(\vec{b})$, by the following relation: -$$V_{ea}(\vec{b}) = V_{src}(\vec{b}) \exp \left[ -\frac{1}{2} D_\phi \left( \frac{\vec{b}}{1+M} \right) \right],$$ +```math +V_{ea}(\vec{b}) = V_{src}(\vec{b}) \exp \left[ -\frac{1}{2} D_\phi \left( \frac{\vec{b}}{1+M} \right) \right], +``` + +in which $\vec{b}$ represents the baseline vector between observing stations. The magnification, $M = D / R$, is the ratio of the Earth-screen distance, $D$, to the screen-source distance, $R$. The convolving kernel responsible for the angular broadening is described by the spatial structure function of the phase screen, $D_\phi(\vec{r})$, which is based on a probabilistic model of the phase screen, $\phi(\vec{r})$. In general, $D_\phi(\vec{r})$ is chromatic, meaning it depends on the observing frequency (or wavelength)—the kernel size in the image domain is typically proportional to the square of the observing wavelength, $\lambda^2$. -in which $\vec{b}$ is the baseline vector between observing stations. The magnification $M=D/R$ is the ratio of earth-screen distance $D$ to screen-source distance $R$. Here you can see that the convolving kernel of the angular broadening is described by the spatial structure function of the screen phase $D_\phi(\vec{r})$, attributed to a probabilistic model of the phase screen $\phi(\vec{r})$. In general, $D_\phi(\vec{r})$ is chromatic and therefore depends on the observing frequency (or wavelength) --- the kernel size in the image domain is often propotional to the squared observing wavelength $\lambda ^2$. +In the average regime, refractive scattering introduces compact substructures into the diffractively scattered images. These compact substructures arise from phase gradients on the scattering screen, $\nabla \phi(\vec{r})$. The refractively scattered image, $I_{a}(\vec{r})$, is then given by: -In the average regime, refractive scattering, on the other hand, further introduces compact substructures on the diffractively-scattered images. The compact substructures arise from phase gradients on the scattering screen $\nabla \phi(\vec{r})$. The refractively scattered image $I_{a}(\vec{r})$ is given by -$$I_{a}(\vec{r}) \approx I_{ea}(\vec{r} + r_F^2 \nabla \phi(\vec{r})),$$ +```math +I_{a}(\vec{r}) \approx I_{ea}(\vec{r} + r_F^2 \nabla \phi(\vec{r})), +``` in which the Fresnel scale, $r_F = \sqrt{ \frac{DR}{D+R} \frac{\lambda}{2\pi} }$ is dependent on the observing wavelength $\lambda$ [1, 2]. From 242ec11d677f77bf7623442625b980c09b3cbb77 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:15:37 -0400 Subject: [PATCH 07/51] update dependencies --- Manifest.toml | 182 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 124 insertions(+), 58 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 0ca44d2..98bd433 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.4" +julia_version = "1.11.0" manifest_format = "2.0" -project_hash = "1d8a7c063d63e4476da0714db0e12c9353ea3777" +project_hash = "88cc7aeb9b535495e1e4a523f8d899b3c473e8fd" [[deps.ADTypes]] git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" @@ -73,7 +73,7 @@ version = "2.3.0" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" +version = "1.1.2" [[deps.ArnoldiMethod]] deps = ["LinearAlgebra", "Random", "StaticArrays"] @@ -123,6 +123,7 @@ weakdeps = ["SparseArrays"] [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" [[deps.AxisAlgorithms]] deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] @@ -154,6 +155,7 @@ version = "0.4.3" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" [[deps.Baselet]] git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" @@ -228,6 +230,11 @@ git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.1" +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.0.0" + [[deps.Compat]] deps = ["TOML", "UUIDs"] git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" @@ -253,10 +260,18 @@ weakdeps = ["InverseFunctions"] CompositionsBaseInverseFunctionsExt = "InverseFunctions" [[deps.ComradeBase]] -deps = ["ChainRulesCore", "DimensionalData", "DocStringExtensions", "FITSIO", "FillArrays", "LinearAlgebra", "PolarizedTypes", "PrecompileTools", "Reexport", "StaticArrays", "Statistics", "StructArrays"] -git-tree-sha1 = "7b1df3a6ceb0158911edefc7a231dd7b5ceebb74" +deps = ["ChainRulesCore", "DimensionalData", "DocStringExtensions", "EnzymeCore", "FITSIO", "FillArrays", "LinearAlgebra", "PolarizedTypes", "PrecompileTools", "Reexport", "Requires", "StaticArrays", "Statistics", "StructArrays"] +git-tree-sha1 = "8b219cb5d5a00d3c3e08fbdbf3f6bc40fb2aaa9f" uuid = "6d8c423b-a35f-4ef1-850c-862fe21f82c4" -version = "0.6.6" +version = "0.7.6" + + [deps.ComradeBase.extensions] + ComradeBaseEnzymeExt = "Enzyme" + ComradeBaseOhMyThreadsExt = "OhMyThreads" + + [deps.ComradeBase.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + OhMyThreads = "67456a42-1dca-4109-a031-0a68de7e3ad5" [[deps.ConcreteStructs]] git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" @@ -305,6 +320,7 @@ version = "1.0.0" [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" [[deps.DefineSingletons]] git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" @@ -318,10 +334,10 @@ uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] -git-tree-sha1 = "03b9555f4c3a7c2f530bb1ae13e85719c632f74e" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] +git-tree-sha1 = "fa7d580038451a8df4434ef5b079ac9b2d486194" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.151.1" +version = "6.155.1" [deps.DiffEqBase.extensions] DiffEqBaseCUDAExt = "CUDA" @@ -333,6 +349,7 @@ version = "6.151.1" DiffEqBaseMeasurementsExt = "Measurements" DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" DiffEqBaseReverseDiffExt = "ReverseDiff" + DiffEqBaseSparseArraysExt = "SparseArrays" DiffEqBaseTrackerExt = "Tracker" DiffEqBaseUnitfulExt = "Unitful" @@ -346,6 +363,7 @@ version = "6.151.1" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" @@ -363,9 +381,9 @@ version = "1.15.1" [[deps.DifferentiationInterface]] deps = ["ADTypes", "Compat", "DocStringExtensions", "FillArrays", "LinearAlgebra", "PackageExtensionCompat", "SparseArrays", "SparseMatrixColorings"] -git-tree-sha1 = "6bd550abccb7aa156141e10d5367c580af9128af" +git-tree-sha1 = "9b23f9a816790b8ab9914c3c86321a546e92cbe7" uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.5.11" +version = "0.5.17" [deps.DifferentiationInterface.extensions] DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" @@ -399,19 +417,22 @@ version = "0.5.11" [[deps.DimensionalData]] deps = ["Adapt", "ArrayInterface", "ConstructionBase", "DataAPI", "Dates", "Extents", "Interfaces", "IntervalSets", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "PrecompileTools", "Random", "RecipesBase", "SparseArrays", "Statistics", "TableTraits", "Tables"] -git-tree-sha1 = "195ca4e65d88c2fe949b75b235105f587b3c84c2" +git-tree-sha1 = "7723a66edfd3bfff65ec510959b6683f8acfb111" uuid = "0703355e-b756-11e9-17c0-8b28908087d0" -version = "0.26.8" +version = "0.27.9" [deps.DimensionalData.extensions] + DimensionalDataCategoricalArraysExt = "CategoricalArrays" DimensionalDataMakie = "Makie" [deps.DimensionalData.weakdeps] + CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -437,18 +458,28 @@ version = "1.0.4" [[deps.Enzyme]] deps = ["CEnum", "EnzymeCore", "Enzyme_jll", "GPUCompiler", "LLVM", "Libdl", "LinearAlgebra", "ObjectFile", "Preferences", "Printf", "Random"] -git-tree-sha1 = "3fb48f9c18de1993c477457265b85130756746ae" +git-tree-sha1 = "b63695bc543a45cab4f30e039c26ca3bcc6780a1" uuid = "7da242da-08ed-463a-9acd-ee780be4f1d9" -version = "0.11.20" -weakdeps = ["SpecialFunctions"] +version = "0.12.36" [deps.Enzyme.extensions] + EnzymeBFloat16sExt = "BFloat16s" + EnzymeChainRulesCoreExt = "ChainRulesCore" + EnzymeLogExpFunctionsExt = "LogExpFunctions" EnzymeSpecialFunctionsExt = "SpecialFunctions" + EnzymeStaticArraysExt = "StaticArrays" + + [deps.Enzyme.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.EnzymeCore]] -git-tree-sha1 = "1bc328eec34ffd80357f84a84bb30e4374e9bd60" +git-tree-sha1 = "8f205a601760f4798a10f138c3940f0451d95188" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.6.6" +version = "0.7.8" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] @@ -456,9 +487,9 @@ weakdeps = ["Adapt"] [[deps.Enzyme_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "32d418c804279c60dd38ac7868126696f3205a4f" +git-tree-sha1 = "7fb808ef6421ea58c607657eea17caa9f03c08d0" uuid = "7cc45869-7501-5eee-bdea-0790c847d4ef" -version = "0.0.102+0" +version = "0.0.148+0" [[deps.ExprTools]] git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" @@ -508,9 +539,9 @@ version = "0.1.1" [[deps.FastBroadcast]] deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"] -git-tree-sha1 = "a6e756a880fc419c8b41592010aebe6a5ce09136" +git-tree-sha1 = "ab1b34570bcdf272899062e1a56285a53ecaae08" uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" -version = "0.2.8" +version = "0.3.5" [[deps.FastClosures]] git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" @@ -525,6 +556,7 @@ version = "2.0.4" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] @@ -584,6 +616,7 @@ version = "0.1.3" [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +version = "1.11.0" [[deps.GPUArraysCore]] deps = ["Adapt"] @@ -592,10 +625,10 @@ uuid = "46192b85-c4d5-4398-a991-12ede77f4527" version = "0.1.6" [[deps.GPUCompiler]] -deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"] -git-tree-sha1 = "a846f297ce9d09ccba02ead0cae70690e072a119" +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "TimerOutputs", "UUIDs"] +git-tree-sha1 = "b8c120986fce117469760119f44592ff148da93e" uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "0.25.0" +version = "0.27.5" [[deps.Graphs]] deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] @@ -639,6 +672,7 @@ version = "2024.2.1+0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" [[deps.Interfaces]] git-tree-sha1 = "331ff37738aea1a3cf841ddf085442f31b84324f" @@ -717,9 +751,9 @@ version = "0.9.6" [[deps.LLVM]] deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] -git-tree-sha1 = "839c82932db86740ae729779e610f07a1640be9a" +git-tree-sha1 = "b351d72436ddecd27381a07c242ba27282a6c8a7" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "6.6.3" +version = "9.0.0" [deps.LLVM.extensions] BFloat16sExt = "BFloat16s" @@ -729,9 +763,9 @@ version = "6.6.3" [[deps.LLVMExtra_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +git-tree-sha1 = "f42bec1e12f42ec251541f6d0482d520a4638b17" uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.29+0" +version = "0.0.33+0" [[deps.LayoutPointers]] deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] @@ -760,6 +794,7 @@ version = "2.2.1" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] @@ -769,16 +804,17 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.4.0+0" +version = "8.6.0+0" [[deps.LibGit2]] deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" [[deps.LibGit2_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.6.4+0" +version = "1.7.2+0" [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] @@ -787,6 +823,7 @@ version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" [[deps.LineSearches]] deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] @@ -797,6 +834,7 @@ version = "7.3.0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.11.0" [[deps.LinearSolve]] deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] @@ -853,6 +891,7 @@ version = "0.3.28" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" [[deps.LoopVectorization]] deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] @@ -890,6 +929,7 @@ version = "0.1.8" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" [[deps.MaybeInplace]] deps = ["ArrayInterface", "LinearAlgebra", "MacroTools"] @@ -904,7 +944,7 @@ weakdeps = ["SparseArrays"] [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+1" +version = "2.28.6+0" [[deps.Measurements]] deps = ["Calculus", "LinearAlgebra", "Printf", "Requires"] @@ -940,10 +980,11 @@ version = "0.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.1.10" +version = "2023.12.12" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -1040,7 +1081,7 @@ weakdeps = ["Adapt"] [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" +version = "0.3.27+1" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -1083,9 +1124,15 @@ uuid = "5ad8b20f-a522-5ce9-bfc9-ddf1d5bda6ab" version = "0.2.3" [[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.10.0" +version = "1.11.0" + + [deps.Pkg.extensions] + REPLExt = "REPL" + + [deps.Pkg.weakdeps] + REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.PolarizedTypes]] deps = ["ChainRulesCore", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "StaticArrays"] @@ -1137,20 +1184,22 @@ version = "0.2.0" [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "e237232771fdafbae3db5c31275303e056afaa9f" +git-tree-sha1 = "cda3b045cf9ef07a08ad46731f5a3165e56cf3da" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.10.1" +version = "2.11.1" +weakdeps = ["Enzyme"] -[[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" [[deps.Random]] deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" [[deps.Ratios]] deps = ["Requires"] @@ -1304,6 +1353,7 @@ version = "1.2.1" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" [[deps.Setfield]] deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] @@ -1314,6 +1364,7 @@ version = "1.1.1" [[deps.SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +version = "1.11.0" [[deps.SimpleNonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "DiffResults", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] @@ -1341,11 +1392,12 @@ version = "0.9.4" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.10.0" +version = "1.11.0" [[deps.SparseDiffTools]] deps = ["ADTypes", "Adapt", "ArrayInterface", "Compat", "DataStructures", "FiniteDiff", "ForwardDiff", "Graphs", "LinearAlgebra", "PackageExtensionCompat", "Random", "Reexport", "SciMLOperators", "Setfield", "SparseArrays", "StaticArrayInterface", "StaticArrays", "Tricks", "UnPack", "VertexSafeGraphs"] @@ -1368,10 +1420,16 @@ version = "2.20.0" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.SparseMatrixColorings]] -deps = ["ADTypes", "Compat", "DocStringExtensions", "LinearAlgebra", "Random", "SparseArrays"] -git-tree-sha1 = "ad048e784b816e4de5553a13f1daf148412f3dbd" +deps = ["ADTypes", "DataStructures", "DocStringExtensions", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "ccc32032d8f6790ad198c99fb8ef20d8100a0de4" uuid = "0a514795-09f3-496d-8182-132a7b665d35" -version = "0.3.6" +version = "0.4.7" + + [deps.SparseMatrixColorings.extensions] + SparseMatrixColoringsColorsExt = "Colors" + + [deps.SparseMatrixColorings.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" [[deps.Sparspak]] deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] @@ -1396,10 +1454,10 @@ uuid = "171d559e-b47b-412a-8079-5efa626c420e" version = "0.1.15" [[deps.Static]] -deps = ["IfElse"] -git-tree-sha1 = "d2fdac9ff3906e27f7a618d47b676941baa6c80c" +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools"] +git-tree-sha1 = "87d51a3ee9a4b0d2fe054bdd3fc2436258db2603" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "0.8.10" +version = "1.1.1" [[deps.StaticArrayInterface]] deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] @@ -1430,14 +1488,19 @@ version = "1.4.3" [[deps.StationaryRandomFields]] deps = ["DocStringExtensions", "FFTW", "Random", "Statistics"] -git-tree-sha1 = "3b16028fbd13839fb0356adf34511810c706e922" +git-tree-sha1 = "4ba91bb86df6a39c6871e12479f90e9548341670" uuid = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" -version = "0.1.0" +version = "0.1.1" [[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.10.0" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] @@ -1466,7 +1529,7 @@ version = "0.3.1" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.2.1+1" +version = "7.7.0+0" [[deps.SymbolicIndexingInterface]] deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] @@ -1499,6 +1562,7 @@ version = "1.10.0" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" [[deps.ThreadingUtilities]] deps = ["ManualMemory"] @@ -1554,6 +1618,7 @@ version = "1.4.0" [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" [[deps.UnPack]] git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" @@ -1562,6 +1627,7 @@ version = "1.0.2" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] @@ -1587,10 +1653,10 @@ uuid = "6112ee07-acf9-5e0f-b108-d242c714bf9f" version = "1.2.1" [[deps.VLBISkyModels]] -deps = ["AbstractFFTs", "Accessors", "ArgCheck", "BasicInterpolators", "ChainRulesCore", "ComradeBase", "DelimitedFiles", "DimensionalData", "DocStringExtensions", "Enzyme", "EnzymeCore", "FFTW", "FastBroadcast", "FillArrays", "ForwardDiff", "LinearAlgebra", "NFFT", "NamedTupleTools", "PaddedViews", "PolarizedTypes", "Printf", "RecipesBase", "Reexport", "Requires", "Serialization", "SpecialFunctions", "Static", "StaticArrays", "StructArrays"] -git-tree-sha1 = "950597bbcffa2360e2dc25538e4b4471391f9bce" +deps = ["AbstractFFTs", "Accessors", "ArgCheck", "BasicInterpolators", "ChainRulesCore", "ComradeBase", "DelimitedFiles", "DimensionalData", "DocStringExtensions", "Enzyme", "EnzymeCore", "FFTW", "FITSIO", "FillArrays", "ForwardDiff", "LinearAlgebra", "NFFT", "NamedTupleTools", "PaddedViews", "PolarizedTypes", "Printf", "RecipesBase", "Reexport", "Requires", "Serialization", "SpecialFunctions", "StaticArrays", "StructArrays"] +git-tree-sha1 = "d08431929aebaa79c646743b4d8347afc4cf1ae9" uuid = "d6343c73-7174-4e0f-bb64-562643efbeca" -version = "0.4.8" +version = "0.5.8" [deps.VLBISkyModels.extensions] VLBISkyModelsMakieExt = "Makie" @@ -1624,12 +1690,12 @@ version = "1.2.13+1" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+1" +version = "5.11.0+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.52.0+1" +version = "1.59.0+0" [[deps.oneTBB_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] From 6d26111996e443d36247bf8f70acae79b00c3e9b Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:16:20 -0400 Subject: [PATCH 08/51] reflect changes in Comrade.jl --- src/ScatteringOptics.jl | 4 ++-- src/scatteringmodels/kernels/abstract.jl | 1 - src/scatteringmodels/phasescreens/powerlaw.jl | 4 ++-- src/scatteringmodels/phasescreens/refractivemodel.jl | 1 - 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/ScatteringOptics.jl b/src/ScatteringOptics.jl index b39d9aa..ebc68d8 100644 --- a/src/ScatteringOptics.jl +++ b/src/ScatteringOptics.jl @@ -2,9 +2,9 @@ module ScatteringOptics # Import Modules import ComradeBase: - AbstractModel, IsPrimitive, IsAnalytic, NotAnalytic, + AbstractModel, IsAnalytic, NotAnalytic, IsPolarized, NotPolarized, - visanalytic, imanalytic, isprimitive, ispolarized, + visanalytic, imanalytic, ispolarized, visibility_point, flux, radialextent using DocStringExtensions using EHTUtils: mas2rad diff --git a/src/scatteringmodels/kernels/abstract.jl b/src/scatteringmodels/kernels/abstract.jl index 7ce3652..cbacc1f 100644 --- a/src/scatteringmodels/kernels/abstract.jl +++ b/src/scatteringmodels/kernels/abstract.jl @@ -15,6 +15,5 @@ As a result a user only needs to implement the following methods. """ abstract type AbstractScatteringKernel{T} <: AbstractModel end @inline flux(::AbstractScatteringKernel{T}) where {T} = one(T) -@inline isprimitive(::Type{<:AbstractScatteringKernel}) = IsPrimitive() @inline visanalytic(::Type{<:AbstractScatteringKernel}) = IsAnalytic() @inline imanalytic(::Type{<:AbstractScatteringKernel}) = NotAnalytic() diff --git a/src/scatteringmodels/phasescreens/powerlaw.jl b/src/scatteringmodels/phasescreens/powerlaw.jl index 5040544..ac63b78 100644 --- a/src/scatteringmodels/phasescreens/powerlaw.jl +++ b/src/scatteringmodels/phasescreens/powerlaw.jl @@ -16,12 +16,12 @@ struct PhaseScreenPowerLaw{N,S<:AbstractScatteringModel,T<:Number} <: AbstractPo Vx_km_per_s::T Vy_km_per_s::T - function PhaseScreenPowerLaw(sm::S, dx, dy, Vx_km_per_s=0.0::T, Vy_km_per_s=0.0::T) where {S,T} + function PhaseScreenPowerLaw(sm::S, dx::T, dy::T, Vx_km_per_s=0.0::T, Vy_km_per_s=0.0::T) where {S,T} new{2,typeof(sm),typeof(dx)}(sm, dx, dy, Vx_km_per_s, Vy_km_per_s) end end -@inline fourieranalytic(::PhaseScreenPowerLaw) = IsAnalytic() +@inline StationaryRandomFields.fourieranalytic(::PhaseScreenPowerLaw) = IsAnalytic() @inline function StationaryRandomFields.power_point(model::PhaseScreenPowerLaw, q...) @assert length(q) == 2 diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 4b9a069..08aacf4 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -18,7 +18,6 @@ average image. `Vx_km_per_s` and `Vy_km_per_s` are optional for moving phase screen. """ - abstract type AbstractPhaseScreen end struct RefractivePhaseScreen{S, T <: Number, N<:AbstractNoiseSignal, P <: AbstractPowerSpectrumModel} <: AbstractPhaseScreen From dc8eae49294543031e5fff88d30a7bbd5296efaf Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:19:07 -0400 Subject: [PATCH 09/51] update the version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index ecc9705..5ca99ca 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ScatteringOptics" uuid = "e317c96f-4a6f-4ae9-8016-294fb9063ff5" authors = ["Anna Tartaglia", "Kazunori Akiyama", "Paul Tiede"] -version = "0.1.2" +version = "0.1.3" [deps] ComradeBase = "6d8c423b-a35f-4ef1-850c-862fe21f82c4" From e91448f6bed8f5b5d456c22af3a46dc89a29d108 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:33:41 -0400 Subject: [PATCH 10/51] update the julia version for CI --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 595af22..964a22c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: version: - - '1.9' + - '1' os: - ubuntu-latest arch: From 8ac501492499a06d8e15201c6d085bbdc097cb00 Mon Sep 17 00:00:00 2001 From: CompatHelper Julia Date: Sat, 12 Oct 2024 04:39:41 +0000 Subject: [PATCH 11/51] CompatHelper: bump compat for ComradeBase to 0.8, (keep existing compat) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 5ca99ca..91b60d7 100644 --- a/Project.toml +++ b/Project.toml @@ -18,7 +18,7 @@ StationaryRandomFields = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" VLBISkyModels = "d6343c73-7174-4e0f-bb64-562643efbeca" [compat] -ComradeBase = "0.5, 0.6, 0.7" +ComradeBase = "0.5, 0.6, 0.7, 0.8" DocStringExtensions = "0.9" EHTUtils = "0.1" FFTW = "1" From 6f9ad6bd75dd204002193f348fb6548d2afc95d7 Mon Sep 17 00:00:00 2001 From: CompatHelper Julia Date: Sat, 12 Oct 2024 04:39:46 +0000 Subject: [PATCH 12/51] CompatHelper: bump compat for VLBISkyModels to 0.6, (keep existing compat) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 5ca99ca..f5a26c1 100644 --- a/Project.toml +++ b/Project.toml @@ -28,7 +28,7 @@ NonlinearSolve = "1, 3" QuadGK = "2" SpecialFunctions = "2" StationaryRandomFields = "0.1" -VLBISkyModels = "0.2, 0.3, 0.4, 0.5" +VLBISkyModels = "0.2, 0.3, 0.4, 0.5, 0.6" julia = "1.9" [extras] From 101d5c223d86decbf732b16c4eb64fb97ad1b233 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:41:38 -0400 Subject: [PATCH 13/51] update the compatibility info for Comrade and ComradeBase --- Project.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index da11a01..eb9da46 100644 --- a/Project.toml +++ b/Project.toml @@ -18,7 +18,7 @@ StationaryRandomFields = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" VLBISkyModels = "d6343c73-7174-4e0f-bb64-562643efbeca" [compat] -ComradeBase = "0.5, 0.6, 0.7, 0.8" +ComradeBase = "0.8" DocStringExtensions = "0.9" EHTUtils = "0.1" FFTW = "1" @@ -28,8 +28,8 @@ NonlinearSolve = "1, 3" QuadGK = "2" SpecialFunctions = "2" StationaryRandomFields = "0.1" -VLBISkyModels = "0.2, 0.3, 0.4, 0.5, 0.6" -julia = "1.9" +VLBISkyModels = "0.6" +julia = "1.11" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" From f465d13c55c2a9242bda8339016e93b467415bfb Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:49:13 -0400 Subject: [PATCH 14/51] update the workflow script for JOSS paper --- .github/workflows/draft-pdf.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index eecf0d1..4300a9a 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -1,4 +1,8 @@ on: [push] + push: + paths: + - paper/** + - .github/workflows/draft-pdf.yml jobs: paper: @@ -14,7 +18,7 @@ jobs: # This should be the path to the paper within your repo. paper-path: paper/paper.md - name: Upload - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: paper # This is the output path where Pandoc will write the compiled From 364639c6b548a38bb67f9d71b9fb5bdca23c1831 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:51:50 -0400 Subject: [PATCH 15/51] fix a typo in draft-pdf.yml --- .github/workflows/draft-pdf.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index 4300a9a..688489f 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -1,4 +1,5 @@ -on: [push] +name: Draft JOSS Paper PDF +on: push: paths: - paper/** @@ -16,7 +17,7 @@ jobs: with: journal: joss # This should be the path to the paper within your repo. - paper-path: paper/paper.md + paper-path: paper.md - name: Upload uses: actions/upload-artifact@v4 with: @@ -24,4 +25,4 @@ jobs: # This is the output path where Pandoc will write the compiled # PDF. Note, this should be the same directory as the input # paper.md - path: paper/paper.pdf + path: paper.pdf \ No newline at end of file From cfe83afc6fb5b3a1d74b3ee9d927d16887f91d42 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 00:54:27 -0400 Subject: [PATCH 16/51] fix paths for files. --- .github/workflows/draft-pdf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index 688489f..079d236 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -17,7 +17,7 @@ jobs: with: journal: joss # This should be the path to the paper within your repo. - paper-path: paper.md + paper-path: paper/paper.md - name: Upload uses: actions/upload-artifact@v4 with: @@ -25,4 +25,4 @@ jobs: # This is the output path where Pandoc will write the compiled # PDF. Note, this should be the same directory as the input # paper.md - path: paper.pdf \ No newline at end of file + path: paper/paper.pdf \ No newline at end of file From d3b32f61b361cc5d81969169d32ec3056710012f Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 01:08:54 -0400 Subject: [PATCH 17/51] update visibility_point functions to reflect changes in Comrade v0.8 --- src/scatteringmodels/kernels/approx.jl | 14 +++++++++++--- src/scatteringmodels/kernels/exact.jl | 7 ++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/scatteringmodels/kernels/approx.jl b/src/scatteringmodels/kernels/approx.jl index 89efc64..599b603 100644 --- a/src/scatteringmodels/kernels/approx.jl +++ b/src/scatteringmodels/kernels/approx.jl @@ -25,9 +25,17 @@ function radialextent(skm::ApproximatedScatteringKernel{T,S,N}) where {T,S,N} return convert(T, 5) * calc_θrad(skm.sm.θmaj) * (ν2λcm(νref) / skm.sm.λ0)^2 end -@inline function visibility_point(skm::ApproximatedScatteringKernel{T,S,N}, u, v, time, freq) where {T,S,N} - ν = iszero(freq) ? skm.νref : freq - return visibility_point_approx(skm.sm, ν2λcm(ν), u, v) + zero(T)im +# for Comrade before v0.6 +#@inline function visibility_point(skm::ApproximatedScatteringKernel{T,S,N}, u, v, time, freq) where {T,S,N} +# ν = iszero(freq) ? skm.νref : freq +# return visibility_point_approx(skm.sm, ν2λcm(ν), u, v) + zero(T)im +#end + +# this is for Comrade after v0.8 +@inline function visibility_point(skm::ApproximatedScatteringKernel{T,S,N}, p) where {T,S,N} + (;U, V, Ti, Fr) = p + ν = iszero(Fr) ? skm.νref : Fr + return visibility_point_approx(skm.sm, ν2λcm(ν), U, V) + zero(T)im end # use the approximated kernel as the default diff --git a/src/scatteringmodels/kernels/exact.jl b/src/scatteringmodels/kernels/exact.jl index 5ff752f..eb86e87 100644 --- a/src/scatteringmodels/kernels/exact.jl +++ b/src/scatteringmodels/kernels/exact.jl @@ -24,7 +24,8 @@ function radialextent(skm::ExactScatteringKernel{T,S,N}) where {T,S,N} return convert(T, 5) * calc_θrad(skm.sm.θmaj) * (ν2λcm(νref) / skm.sm.λ0)^2 end -@inline function visibility_point(skm::ExactScatteringKernel{T,S,N}, u, v, time, freq) where {T,S,N} - ν = iszero(freq) ? skm.νref : freq - return visibility_point_exact(skm.sm, ν2λcm(ν), u, v) + zero(T)im +@inline function visibility_point(skm::ExactScatteringKernel{T,S,N}, p) where {T,S,N} + (;U, V, Ti, Fr) = p + ν = iszero(Fr) ? skm.νref : Fr + return visibility_point_exact(skm.sm, ν2λcm(ν), U, V) + zero(T)im end From c692b13032ca71b87b26dcded09bf931d1c804f1 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 01:10:19 -0400 Subject: [PATCH 18/51] remove comments --- src/scatteringmodels/kernels/approx.jl | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/scatteringmodels/kernels/approx.jl b/src/scatteringmodels/kernels/approx.jl index 599b603..94fb13a 100644 --- a/src/scatteringmodels/kernels/approx.jl +++ b/src/scatteringmodels/kernels/approx.jl @@ -25,13 +25,6 @@ function radialextent(skm::ApproximatedScatteringKernel{T,S,N}) where {T,S,N} return convert(T, 5) * calc_θrad(skm.sm.θmaj) * (ν2λcm(νref) / skm.sm.λ0)^2 end -# for Comrade before v0.6 -#@inline function visibility_point(skm::ApproximatedScatteringKernel{T,S,N}, u, v, time, freq) where {T,S,N} -# ν = iszero(freq) ? skm.νref : freq -# return visibility_point_approx(skm.sm, ν2λcm(ν), u, v) + zero(T)im -#end - -# this is for Comrade after v0.8 @inline function visibility_point(skm::ApproximatedScatteringKernel{T,S,N}, p) where {T,S,N} (;U, V, Ti, Fr) = p ν = iszero(Fr) ? skm.νref : Fr From afc888f760b533beaba47b0141256661d9e926dc Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 01:10:34 -0400 Subject: [PATCH 19/51] reorganize introduction in the documenatation --- docs/src/introduction.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/introduction.md b/docs/src/introduction.md index 5eedcba..415362c 100644 --- a/docs/src/introduction.md +++ b/docs/src/introduction.md @@ -9,6 +9,14 @@ The package is designed to work with sky models and interferometric data types f The package provides essential functionalities for modeling, analyzing, and interpreting the images of the Galactic Center's supermassive black hole, Sagittarius A*, especially with the Event Horizon Telescope, and also the images of extremely high brightness temperature emissions in active galactic nuclei using space very long baseline interferometry. +## What are interstellar scattering and scintillation? Why are they important? +Scintillation is a well-known phenomenon in astronomy. Stars appear to twinkle in visible light due to the scattering of their light by the Earth's atmosphere. In radio wavelengths, fluctuations in the electron density of the ionized interstellar plasma cause scattering of radio waves, resulting in the scintillation of compact radio sources in the sky. These phenomena are referred to as *interstellar scattering* and *scintillation*, respectively. Interstellar scintillation produces temporal and spectral modulations (i.e., twinkling) in the brightness of objects, as well as distortion of their images. + +Scattering has become increasingly important in high-angular-resolution studies of compact radio sources at micro-arcsecond scales using very long baseline interferometry (VLBI). Notable examples include the black hole imaging of the supermassive black hole, Sagittarius A* (Sgr A*), at the center of the Milky Way with the Event Horizon Telescope, and studies of extremely high brightness temperature emissions in active galactic nuclei (AGNs) using space VLBI, exemplified by projects like RadioAstron. +In both scenarios, the observed interferometric data are influenced by both diffractive and refractive scattering effects. + +For a more detailed description of the scattering models implemented in this package, see [Brief Introduction to Interstellar Scattering](@ref). + ## Installation The package is registered in the Julia standard repository, and installable through the standard ways by ```julia @@ -18,12 +26,4 @@ Pkg.add("ScatteringOptics") or ```julia ]add ScatteringOptics -``` - -## What are interstellar scattering and scintillation? Why are they important? -Scintillation is a well-known phenomenon in astronomy. Stars appear to twinkle in visible light due to the scattering of their light by the Earth's atmosphere. In radio wavelengths, fluctuations in the electron density of the ionized interstellar plasma cause scattering of radio waves, resulting in the scintillation of compact radio sources in the sky. These phenomena are referred to as *interstellar scattering* and *scintillation*, respectively. Interstellar scintillation produces temporal and spectral modulations (i.e., twinkling) in the brightness of objects, as well as distortion of their images. - -Scattering has become increasingly important in high-angular-resolution studies of compact radio sources at micro-arcsecond scales using very long baseline interferometry (VLBI). Notable examples include the black hole imaging of the supermassive black hole, Sagittarius A* (Sgr A*), at the center of the Milky Way with the Event Horizon Telescope, and studies of extremely high brightness temperature emissions in active galactic nuclei (AGNs) using space VLBI, exemplified by projects like RadioAstron. -In both scenarios, the observed interferometric data are influenced by both diffractive and refractive scattering effects. - -For a more detailed description of the scattering models implemented in this package, see [Brief Introduction to Interstellar Scattering](@ref). +``` \ No newline at end of file From 935a388756d6ba8aa62a7a8b1f3f18b621d41ca9 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 02:13:42 -0400 Subject: [PATCH 20/51] slow down the frequency of Compat Helper to weekly. --- .github/workflows/CompatHelper.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index cba9134..486adf2 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -1,7 +1,7 @@ name: CompatHelper on: schedule: - - cron: 0 0 * * * + - cron: 0 0 * * 0 workflow_dispatch: jobs: CompatHelper: From b21e651986477099eaaecca598c9a0ce4adf0ffb Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Sat, 12 Oct 2024 02:43:21 -0400 Subject: [PATCH 21/51] update dependencies --- Manifest.toml | 245 ++++++++++++++++---------------------------------- 1 file changed, 78 insertions(+), 167 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 98bd433..5236b7e 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.11.0" manifest_format = "2.0" -project_hash = "88cc7aeb9b535495e1e4a523f8d899b3c473e8fd" +project_hash = "ea3b8668bcca2719d2e45eef61d15739672ee85b" [[deps.ADTypes]] git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" @@ -75,12 +75,6 @@ version = "2.3.0" uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.2" -[[deps.ArnoldiMethod]] -deps = ["LinearAlgebra", "Random", "StaticArrays"] -git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" -uuid = "ec485272-7323-5ecc-a04f-4719b315124d" -version = "0.4.0" - [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] git-tree-sha1 = "3640d077b6dafd64ceb8fd5c1ec76f7ca53bcf76" @@ -174,11 +168,6 @@ git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" version = "0.1.6" -[[deps.CEnum]] -git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.5.0" - [[deps.CFITSIO]] deps = ["CFITSIO_jll"] git-tree-sha1 = "fc0abb338eb8d90bc186ccf0a47c90825952c950" @@ -260,17 +249,21 @@ weakdeps = ["InverseFunctions"] CompositionsBaseInverseFunctionsExt = "InverseFunctions" [[deps.ComradeBase]] -deps = ["ChainRulesCore", "DimensionalData", "DocStringExtensions", "EnzymeCore", "FITSIO", "FillArrays", "LinearAlgebra", "PolarizedTypes", "PrecompileTools", "Reexport", "Requires", "StaticArrays", "Statistics", "StructArrays"] -git-tree-sha1 = "8b219cb5d5a00d3c3e08fbdbf3f6bc40fb2aaa9f" +deps = ["DimensionalData", "DocStringExtensions", "EnzymeCore", "PolarizedTypes", "PrecompileTools", "Reexport", "StaticArrays", "StructArrays"] +git-tree-sha1 = "52afecc32ebc463b2c63b9a549899ae4500decc9" uuid = "6d8c423b-a35f-4ef1-850c-862fe21f82c4" -version = "0.7.6" +version = "0.8.4" [deps.ComradeBase.extensions] + ComradeBaseAdaptExt = "Adapt" ComradeBaseEnzymeExt = "Enzyme" + ComradeBaseKernelAbstractionsExt = "KernelAbstractions" ComradeBaseOhMyThreadsExt = "OhMyThreads" [deps.ComradeBase.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" OhMyThreads = "67456a42-1dca-4109-a031-0a68de7e3ad5" [[deps.ConcreteStructs]] @@ -334,10 +327,10 @@ uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces"] -git-tree-sha1 = "fa7d580038451a8df4434ef5b079ac9b2d486194" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "TruncatedStacktraces"] +git-tree-sha1 = "9c36ac68cf6c59a1c2569aadd7a62c47ed5c8eb5" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.155.1" +version = "6.158.1" [deps.DiffEqBase.extensions] DiffEqBaseCUDAExt = "CUDA" @@ -380,10 +373,10 @@ uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" [[deps.DifferentiationInterface]] -deps = ["ADTypes", "Compat", "DocStringExtensions", "FillArrays", "LinearAlgebra", "PackageExtensionCompat", "SparseArrays", "SparseMatrixColorings"] -git-tree-sha1 = "9b23f9a816790b8ab9914c3c86321a546e92cbe7" +deps = ["ADTypes", "LinearAlgebra"] +git-tree-sha1 = "76ea82755a5c93b7b26d4fca990854fd2fc74b6e" uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.5.17" +version = "0.6.11" [deps.DifferentiationInterface.extensions] DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" @@ -393,10 +386,13 @@ version = "0.5.17" DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" DifferentiationInterfaceForwardDiffExt = "ForwardDiff" + DifferentiationInterfaceMooncakeExt = "Mooncake" DifferentiationInterfacePolyesterForwardDiffExt = "PolyesterForwardDiff" DifferentiationInterfaceReverseDiffExt = "ReverseDiff" + DifferentiationInterfaceSparseArraysExt = "SparseArrays" + DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" + DifferentiationInterfaceStaticArraysExt = "StaticArrays" DifferentiationInterfaceSymbolicsExt = "Symbolics" - DifferentiationInterfaceTapirExt = "Tapir" DifferentiationInterfaceTrackerExt = "Tracker" DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] @@ -408,18 +404,21 @@ version = "0.5.17" FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" - Tapir = "07d77754-e150-4737-8c94-cd238a1fb45b" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.DimensionalData]] deps = ["Adapt", "ArrayInterface", "ConstructionBase", "DataAPI", "Dates", "Extents", "Interfaces", "IntervalSets", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "PrecompileTools", "Random", "RecipesBase", "SparseArrays", "Statistics", "TableTraits", "Tables"] -git-tree-sha1 = "7723a66edfd3bfff65ec510959b6683f8acfb111" +git-tree-sha1 = "cd2e8e778c53f6ac328c648964c225f7da959217" uuid = "0703355e-b756-11e9-17c0-8b28908087d0" -version = "0.27.9" +version = "0.28.3" [deps.DimensionalData.extensions] DimensionalDataCategoricalArraysExt = "CategoricalArrays" @@ -456,41 +455,15 @@ git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.4" -[[deps.Enzyme]] -deps = ["CEnum", "EnzymeCore", "Enzyme_jll", "GPUCompiler", "LLVM", "Libdl", "LinearAlgebra", "ObjectFile", "Preferences", "Printf", "Random"] -git-tree-sha1 = "b63695bc543a45cab4f30e039c26ca3bcc6780a1" -uuid = "7da242da-08ed-463a-9acd-ee780be4f1d9" -version = "0.12.36" - - [deps.Enzyme.extensions] - EnzymeBFloat16sExt = "BFloat16s" - EnzymeChainRulesCoreExt = "ChainRulesCore" - EnzymeLogExpFunctionsExt = "LogExpFunctions" - EnzymeSpecialFunctionsExt = "SpecialFunctions" - EnzymeStaticArraysExt = "StaticArrays" - - [deps.Enzyme.weakdeps] - BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" - SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - [[deps.EnzymeCore]] -git-tree-sha1 = "8f205a601760f4798a10f138c3940f0451d95188" +git-tree-sha1 = "9c3a42611e525352e9ad5e4134ddca5c692ff209" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.7.8" +version = "0.8.4" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] AdaptExt = "Adapt" -[[deps.Enzyme_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "7fb808ef6421ea58c607657eea17caa9f03c08d0" -uuid = "7cc45869-7501-5eee-bdea-0790c847d4ef" -version = "0.0.148+0" - [[deps.ExprTools]] git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" @@ -624,18 +597,6 @@ git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" uuid = "46192b85-c4d5-4398-a991-12ede77f4527" version = "0.1.6" -[[deps.GPUCompiler]] -deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "TimerOutputs", "UUIDs"] -git-tree-sha1 = "b8c120986fce117469760119f44592ff148da93e" -uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "0.27.5" - -[[deps.Graphs]] -deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] -git-tree-sha1 = "1dc470db8b1131cfc7fb4c115de89fe391b9e780" -uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" -version = "1.12.0" - [[deps.HostCPUFeatures]] deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" @@ -653,11 +614,6 @@ git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" version = "0.1.1" -[[deps.Inflate]] -git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" -uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" -version = "0.1.5" - [[deps.InitialValues]] git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" @@ -749,24 +705,6 @@ git-tree-sha1 = "267dad6b4b7b5d529c76d40ff48d33f7e94cb834" uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" version = "0.9.6" -[[deps.LLVM]] -deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] -git-tree-sha1 = "b351d72436ddecd27381a07c242ba27282a6c8a7" -uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "9.0.0" - - [deps.LLVM.extensions] - BFloat16sExt = "BFloat16s" - - [deps.LLVM.weakdeps] - BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" - -[[deps.LLVMExtra_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "f42bec1e12f42ec251541f6d0482d520a4638b17" -uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.33+0" - [[deps.LayoutPointers]] deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" @@ -825,6 +763,16 @@ version = "1.11.0+1" uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" version = "1.11.0" +[[deps.LineSearch]] +deps = ["ADTypes", "CommonSolve", "ConcreteStructs", "FastClosures", "LinearAlgebra", "MaybeInplace", "SciMLBase", "SciMLJacobianOperators", "StaticArraysCore"] +git-tree-sha1 = "dc82b3c3640a4362f09e4d7594b4387a820857e4" +uuid = "87fe0de2-c867-4266-b59a-2f0a94fc965b" +version = "0.1.3" +weakdeps = ["LineSearches"] + + [deps.LineSearch.extensions] + LineSearchLineSearchesExt = "LineSearches" + [[deps.LineSearches]] deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] git-tree-sha1 = "e4c3be53733db1051cc15ecf573b1042b3a712a1" @@ -838,17 +786,17 @@ version = "1.11.0" [[deps.LinearSolve]] deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] -git-tree-sha1 = "6c5e4555ac2bc449a28604e184f759d18fc08420" +git-tree-sha1 = "8941ad4bdd83768359801982e143008349b1a827" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "2.34.0" +version = "2.35.0" [deps.LinearSolve.extensions] LinearSolveBandedMatricesExt = "BandedMatrices" LinearSolveBlockDiagonalsExt = "BlockDiagonals" LinearSolveCUDAExt = "CUDA" LinearSolveCUDSSExt = "CUDSS" - LinearSolveEnzymeExt = ["Enzyme", "EnzymeCore"] - LinearSolveFastAlmostBandedMatricesExt = ["FastAlmostBandedMatrices"] + LinearSolveEnzymeExt = "EnzymeCore" + LinearSolveFastAlmostBandedMatricesExt = "FastAlmostBandedMatrices" LinearSolveHYPREExt = "HYPRE" LinearSolveIterativeSolversExt = "IterativeSolvers" LinearSolveKernelAbstractionsExt = "KernelAbstractions" @@ -862,7 +810,6 @@ version = "2.34.0" BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" @@ -1032,10 +979,10 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.NonlinearSolve]] -deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "FastBroadcast", "FastClosures", "FiniteDiff", "ForwardDiff", "LazyArrays", "LineSearches", "LinearAlgebra", "LinearSolve", "MaybeInplace", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "SparseArrays", "SparseDiffTools", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] -git-tree-sha1 = "bcd8812e751326ff1d4b2dd50764b93df51f143b" +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FastClosures", "FiniteDiff", "ForwardDiff", "LazyArrays", "LineSearch", "LineSearches", "LinearAlgebra", "LinearSolve", "MaybeInplace", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLJacobianOperators", "SciMLOperators", "Setfield", "SimpleNonlinearSolve", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] +git-tree-sha1 = "4d8944f32db2b07a2bdf8477e878bcb9c9ea2308" uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" -version = "3.14.0" +version = "3.15.1" [deps.NonlinearSolve.extensions] NonlinearSolveBandedMatricesExt = "BandedMatrices" @@ -1047,8 +994,6 @@ version = "3.14.0" NonlinearSolveNLsolveExt = "NLsolve" NonlinearSolveSIAMFANLEquationsExt = "SIAMFANLEquations" NonlinearSolveSpeedMappingExt = "SpeedMapping" - NonlinearSolveSymbolicsExt = "Symbolics" - NonlinearSolveZygoteExt = "Zygote" [deps.NonlinearSolve.weakdeps] BandedMatrices = "aae01518-5342-5314-be14-df237901396f" @@ -1060,14 +1005,6 @@ version = "3.14.0" NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" SIAMFANLEquations = "084e46ad-d928-497d-ad5e-07fa361a48c4" SpeedMapping = "f1835b91-879b-4a3f-a438-e4baacf14412" - Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[deps.ObjectFile]] -deps = ["Reexport", "StructIO"] -git-tree-sha1 = "7249afa1c4dfd86bfbcc9b28939ab6ef844f4e11" -uuid = "d8793406-e978-5875-9003-1fc021f44a92" -version = "0.4.2" [[deps.OffsetArrays]] git-tree-sha1 = "1a27764e945a152f7ca7efa04de513d473e9542e" @@ -1099,12 +1036,6 @@ git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.6.3" -[[deps.PackageExtensionCompat]] -git-tree-sha1 = "fb28e33b8a95c4cee25ce296c817d89cc2e53518" -uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.2" -weakdeps = ["Requires", "TOML"] - [[deps.PaddedViews]] deps = ["OffsetArrays"] git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" @@ -1191,11 +1122,13 @@ deps = ["DataStructures", "LinearAlgebra"] git-tree-sha1 = "cda3b045cf9ef07a08ad46731f5a3165e56cf3da" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" version = "2.11.1" -weakdeps = ["Enzyme"] [deps.QuadGK.extensions] QuadGKEnzymeExt = "Enzyme" + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + [[deps.Random]] deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" @@ -1328,6 +1261,12 @@ version = "2.56.1" RCall = "6f49c342-dc21-5d91-9882-a32aef131414" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" +[[deps.SciMLJacobianOperators]] +deps = ["ADTypes", "ConcreteStructs", "ConstructionBase", "DifferentiationInterface", "FastClosures", "LinearAlgebra", "SciMLBase", "SciMLOperators"] +git-tree-sha1 = "991d2a8900e687e2c693d587daa739c8fda01366" +uuid = "19f34311-ddf3-4b8b-af20-060888a46c0e" +version = "0.1.0" + [[deps.SciMLOperators]] deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra", "MacroTools"] git-tree-sha1 = "e39c5f217f9aca640c8e27ab21acf557a3967db5" @@ -1345,12 +1284,6 @@ git-tree-sha1 = "25514a6f200219cd1073e4ff23a6324e4a7efe64" uuid = "53ae85a6-f571-4167-b2af-e1d143709226" version = "1.5.0" -[[deps.Scratch]] -deps = ["Dates"] -git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" -uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.1" - [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" version = "1.11.0" @@ -1368,9 +1301,9 @@ version = "1.11.0" [[deps.SimpleNonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "DiffResults", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] -git-tree-sha1 = "97a7e10717bd27e600ba55da9d90a5628c1a403b" +git-tree-sha1 = "44021f3efc023be3871195d8ad98b865001a2fa1" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "1.12.2" +version = "1.12.3" [deps.SimpleNonlinearSolve.extensions] SimpleNonlinearSolveChainRulesCoreExt = "ChainRulesCore" @@ -1384,12 +1317,6 @@ version = "1.12.2" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" -[[deps.SimpleTraits]] -deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" -uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" - [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" version = "1.11.0" @@ -1399,25 +1326,25 @@ deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" version = "1.11.0" -[[deps.SparseDiffTools]] -deps = ["ADTypes", "Adapt", "ArrayInterface", "Compat", "DataStructures", "FiniteDiff", "ForwardDiff", "Graphs", "LinearAlgebra", "PackageExtensionCompat", "Random", "Reexport", "SciMLOperators", "Setfield", "SparseArrays", "StaticArrayInterface", "StaticArrays", "Tricks", "UnPack", "VertexSafeGraphs"] -git-tree-sha1 = "c9e5d7ee75cf6a1ca3a22c9a6a4ef451792cf62b" -uuid = "47a9eef4-7e08-11e9-0b38-333d64bd3804" -version = "2.20.0" - - [deps.SparseDiffTools.extensions] - SparseDiffToolsEnzymeExt = "Enzyme" - SparseDiffToolsPolyesterExt = "Polyester" - SparseDiffToolsPolyesterForwardDiffExt = "PolyesterForwardDiff" - SparseDiffToolsSymbolicsExt = "Symbolics" - SparseDiffToolsZygoteExt = "Zygote" - - [deps.SparseDiffTools.weakdeps] - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" - Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" - PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" - Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" +[[deps.SparseConnectivityTracer]] +deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "35d346f6aa78814859f1f69cd4f41c24108afa00" +uuid = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" +version = "0.6.7" + + [deps.SparseConnectivityTracer.extensions] + SparseConnectivityTracerDataInterpolationsExt = "DataInterpolations" + SparseConnectivityTracerLogExpFunctionsExt = "LogExpFunctions" + SparseConnectivityTracerNNlibExt = "NNlib" + SparseConnectivityTracerNaNMathExt = "NaNMath" + SparseConnectivityTracerSpecialFunctionsExt = "SpecialFunctions" + + [deps.SparseConnectivityTracer.weakdeps] + DataInterpolations = "82cc6244-b520-54b8-b5a6-8a565e85f1d0" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" [[deps.SparseMatrixColorings]] deps = ["ADTypes", "DataStructures", "DocStringExtensions", "LinearAlgebra", "Random", "SparseArrays"] @@ -1488,9 +1415,9 @@ version = "1.4.3" [[deps.StationaryRandomFields]] deps = ["DocStringExtensions", "FFTW", "Random", "Statistics"] -git-tree-sha1 = "4ba91bb86df6a39c6871e12479f90e9548341670" +git-tree-sha1 = "52ca34d5a8e95a3a380dc482d0853b9f8ddfdb4f" uuid = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" -version = "0.1.1" +version = "0.1.2" [[deps.Statistics]] deps = ["LinearAlgebra"] @@ -1521,11 +1448,6 @@ weakdeps = ["Adapt", "GPUArraysCore", "SparseArrays", "StaticArrays"] StructArraysSparseArraysExt = "SparseArrays" StructArraysStaticArraysExt = "StaticArrays" -[[deps.StructIO]] -git-tree-sha1 = "c581be48ae1cbf83e899b14c07a807e1787512cc" -uuid = "53d494c1-5632-5724-8f4c-31dff12d585f" -version = "0.3.1" - [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" @@ -1604,11 +1526,6 @@ git-tree-sha1 = "be986ad9dac14888ba338c2554dcfec6939e1393" uuid = "d5829a12-d9aa-46ab-831f-fb7c9ab06edf" version = "0.2.1" -[[deps.Tricks]] -git-tree-sha1 = "7822b97e99a1672bfb1b49b668a6d46d58d8cbcb" -uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" -version = "0.1.9" - [[deps.TruncatedStacktraces]] deps = ["InteractiveUtils", "MacroTools", "Preferences"] git-tree-sha1 = "ea3e54c2bdde39062abf5a9758a23735558705e1" @@ -1653,10 +1570,10 @@ uuid = "6112ee07-acf9-5e0f-b108-d242c714bf9f" version = "1.2.1" [[deps.VLBISkyModels]] -deps = ["AbstractFFTs", "Accessors", "ArgCheck", "BasicInterpolators", "ChainRulesCore", "ComradeBase", "DelimitedFiles", "DimensionalData", "DocStringExtensions", "Enzyme", "EnzymeCore", "FFTW", "FITSIO", "FillArrays", "ForwardDiff", "LinearAlgebra", "NFFT", "NamedTupleTools", "PaddedViews", "PolarizedTypes", "Printf", "RecipesBase", "Reexport", "Requires", "Serialization", "SpecialFunctions", "StaticArrays", "StructArrays"] -git-tree-sha1 = "d08431929aebaa79c646743b4d8347afc4cf1ae9" +deps = ["AbstractFFTs", "Accessors", "ArgCheck", "BasicInterpolators", "ChainRulesCore", "ComradeBase", "DelimitedFiles", "DimensionalData", "DocStringExtensions", "EnzymeCore", "FFTW", "FITSIO", "FillArrays", "ForwardDiff", "LinearAlgebra", "NFFT", "NamedTupleTools", "PaddedViews", "PolarizedTypes", "Printf", "RecipesBase", "Reexport", "Serialization", "SpecialFunctions", "StaticArrays", "StructArrays"] +git-tree-sha1 = "8269f4670a290c6f7647fd18efc715adc89a63a1" uuid = "d6343c73-7174-4e0f-bb64-562643efbeca" -version = "0.5.8" +version = "0.6.3" [deps.VLBISkyModels.extensions] VLBISkyModelsMakieExt = "Makie" @@ -1670,12 +1587,6 @@ git-tree-sha1 = "e7f5b81c65eb858bed630fe006837b935518aca5" uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" version = "0.21.70" -[[deps.VertexSafeGraphs]] -deps = ["Graphs"] -git-tree-sha1 = "8351f8d73d7e880bfc042a8b6922684ebeafb35c" -uuid = "19fa3120-7c27-5ec5-8db8-b0b0aa330d6f" -version = "0.2.0" - [[deps.WoodburyMatrices]] deps = ["LinearAlgebra", "SparseArrays"] git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511" From b18728bfb70382521573bae5c8173e024da8540b Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Tue, 15 Oct 2024 22:42:13 -0400 Subject: [PATCH 22/51] add ColPrac based on the suggestion made in the JOSS review. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7a73cc9..995c7c8 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://EHTJulia.github.io/ScatteringOptics.jl/dev/) [![Build Status](https://github.com/EHTJulia/ScatteringOptics.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/EHTJulia/ScatteringOptics.jl/actions/workflows/CI.yml?query=branch%3Amain) [![Code Style: Blue](https://img.shields.io/badge/code%20style-blue-4495d1.svg)](https://github.com/invenia/BlueStyle) +[![ColPrac: Contributor's Guide on Collaborative Practices for Community Packages](https://img.shields.io/badge/ColPrac-Contributor's%20Guide-blueviolet)](https://github.com/SciML/ColPrac) `ScatteringOptics.jl` is an astronomy software package developed in the Julia programming language for interstellar scintillation observed at radio wavelengths. It implements physical models for the anisotropic scattering of radio waves, which arise from turbulence in the ionized interstellar medium. From 9947e6edbf8ca8df3a54e3a39ea371a80de84f57 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 01:20:38 -0400 Subject: [PATCH 23/51] update the documentation. Some new pages are added based on the JOSS review --- Manifest.toml | 79 ++++------- Project.toml | 2 +- docs/make.jl | 12 +- docs/src/{autodocs.md => api.md} | 0 docs/src/math.md | 23 +++- docs/src/tutorials/custommodels.md | 123 ++++++++++++++++++ .../gettingstarted.md} | 3 +- docs/src/{ => tutorials}/images/avg.png | Bin docs/src/{ => tutorials}/images/ea.png | Bin docs/src/{ => tutorials}/images/src.png | Bin docs/src/tutorials/nondefaultmodels.md | 33 +++++ .../abstractscatteringmodel.jl | 28 ++-- 12 files changed, 228 insertions(+), 75 deletions(-) rename docs/src/{autodocs.md => api.md} (100%) create mode 100644 docs/src/tutorials/custommodels.md rename docs/src/{tutorial.md => tutorials/gettingstarted.md} (99%) rename docs/src/{ => tutorials}/images/avg.png (100%) rename docs/src/{ => tutorials}/images/ea.png (100%) rename docs/src/{ => tutorials}/images/src.png (100%) create mode 100644 docs/src/tutorials/nondefaultmodels.md diff --git a/Manifest.toml b/Manifest.toml index 5236b7e..6368887 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.11.0" +julia_version = "1.10.5" manifest_format = "2.0" -project_hash = "ea3b8668bcca2719d2e45eef61d15739672ee85b" +project_hash = "5928450964876e3b0f2d72e7a13f9caface4b998" [[deps.ADTypes]] git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" @@ -73,7 +73,7 @@ version = "2.3.0" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.2" +version = "1.1.1" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] @@ -117,7 +117,6 @@ weakdeps = ["SparseArrays"] [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" -version = "1.11.0" [[deps.AxisAlgorithms]] deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] @@ -149,7 +148,6 @@ version = "0.4.3" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" -version = "1.11.0" [[deps.Baselet]] git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" @@ -313,7 +311,6 @@ version = "1.0.0" [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -version = "1.11.0" [[deps.DefineSingletons]] git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" @@ -374,9 +371,9 @@ version = "1.15.1" [[deps.DifferentiationInterface]] deps = ["ADTypes", "LinearAlgebra"] -git-tree-sha1 = "76ea82755a5c93b7b26d4fca990854fd2fc74b6e" +git-tree-sha1 = "758ef234ab0b81071c195cd2ea155030d69c1ef8" uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.6.11" +version = "0.6.13" [deps.DifferentiationInterface.extensions] DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" @@ -431,7 +428,6 @@ version = "0.28.3" [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" -version = "1.11.0" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -529,7 +525,6 @@ version = "2.0.4" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" -version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] @@ -589,7 +584,6 @@ version = "0.1.3" [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" -version = "1.11.0" [[deps.GPUArraysCore]] deps = ["Adapt"] @@ -628,7 +622,6 @@ version = "2024.2.1+0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -version = "1.11.0" [[deps.Interfaces]] git-tree-sha1 = "331ff37738aea1a3cf841ddf085442f31b84324f" @@ -732,7 +725,6 @@ version = "2.2.1" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -version = "1.11.0" [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] @@ -742,17 +734,16 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.6.0+0" +version = "8.4.0+0" [[deps.LibGit2]] deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" -version = "1.11.0" [[deps.LibGit2_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.7.2+0" +version = "1.6.4+0" [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] @@ -761,7 +752,6 @@ version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -version = "1.11.0" [[deps.LineSearch]] deps = ["ADTypes", "CommonSolve", "ConcreteStructs", "FastClosures", "LinearAlgebra", "MaybeInplace", "SciMLBase", "SciMLJacobianOperators", "StaticArraysCore"] @@ -782,7 +772,6 @@ version = "7.3.0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.0" [[deps.LinearSolve]] deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] @@ -838,7 +827,6 @@ version = "0.3.28" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" -version = "1.11.0" [[deps.LoopVectorization]] deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] @@ -876,7 +864,6 @@ version = "0.1.8" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -version = "1.11.0" [[deps.MaybeInplace]] deps = ["ArrayInterface", "LinearAlgebra", "MacroTools"] @@ -891,7 +878,7 @@ weakdeps = ["SparseArrays"] [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.6+0" +version = "2.28.2+1" [[deps.Measurements]] deps = ["Calculus", "LinearAlgebra", "Printf", "Requires"] @@ -927,11 +914,10 @@ version = "0.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" -version = "1.11.0" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.12.12" +version = "2023.1.10" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -1018,7 +1004,7 @@ weakdeps = ["Adapt"] [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" +version = "0.3.23+4" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -1055,15 +1041,9 @@ uuid = "5ad8b20f-a522-5ce9-bfc9-ddf1d5bda6ab" version = "0.2.3" [[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.11.0" - - [deps.Pkg.extensions] - REPLExt = "REPL" - - [deps.Pkg.weakdeps] - REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.10.0" [[deps.PolarizedTypes]] deps = ["ChainRulesCore", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "StaticArrays"] @@ -1115,7 +1095,6 @@ version = "0.2.0" [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -version = "1.11.0" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] @@ -1129,10 +1108,13 @@ version = "2.11.1" [deps.QuadGK.weakdeps] Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + [[deps.Random]] deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -version = "1.11.0" [[deps.Ratios]] deps = ["Requires"] @@ -1286,7 +1268,6 @@ version = "1.5.0" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -version = "1.11.0" [[deps.Setfield]] deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] @@ -1297,7 +1278,6 @@ version = "1.1.1" [[deps.SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" -version = "1.11.0" [[deps.SimpleNonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "DiffResults", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] @@ -1319,12 +1299,11 @@ version = "1.12.3" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" -version = "1.11.0" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.11.0" +version = "1.10.0" [[deps.SparseConnectivityTracer]] deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] @@ -1415,19 +1394,14 @@ version = "1.4.3" [[deps.StationaryRandomFields]] deps = ["DocStringExtensions", "FFTW", "Random", "Statistics"] -git-tree-sha1 = "52ca34d5a8e95a3a380dc482d0853b9f8ddfdb4f" +git-tree-sha1 = "4ba91bb86df6a39c6871e12479f90e9548341670" uuid = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" -version = "0.1.2" +version = "0.1.1" [[deps.Statistics]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.11.1" -weakdeps = ["SparseArrays"] - - [deps.Statistics.extensions] - SparseArraysExt = ["SparseArrays"] +version = "1.10.0" [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] @@ -1451,13 +1425,13 @@ weakdeps = ["Adapt", "GPUArraysCore", "SparseArrays", "StaticArrays"] [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" +version = "7.2.1+1" [[deps.SymbolicIndexingInterface]] deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "0225f7c62f5f78db35aae6abb2e5cabe38ce578f" +git-tree-sha1 = "b708e5c01d4aad69c148241bda3346fda1c550d2" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.31" +version = "0.3.32" [[deps.TOML]] deps = ["Dates"] @@ -1484,7 +1458,6 @@ version = "1.10.0" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -version = "1.11.0" [[deps.ThreadingUtilities]] deps = ["ManualMemory"] @@ -1535,7 +1508,6 @@ version = "1.4.0" [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" -version = "1.11.0" [[deps.UnPack]] git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" @@ -1544,7 +1516,6 @@ version = "1.0.2" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -version = "1.11.0" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] @@ -1606,7 +1577,7 @@ version = "5.11.0+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.59.0+0" +version = "1.52.0+1" [[deps.oneTBB_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] diff --git a/Project.toml b/Project.toml index eb9da46..2138974 100644 --- a/Project.toml +++ b/Project.toml @@ -29,7 +29,7 @@ QuadGK = "2" SpecialFunctions = "2" StationaryRandomFields = "0.1" VLBISkyModels = "0.6" -julia = "1.11" +julia = "1.10" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/docs/make.jl b/docs/make.jl index 527850c..9519367 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -4,6 +4,14 @@ using DocumenterVitepress DocMeta.setdocmeta!(ScatteringOptics, :DocTestSetup, :(using ScatteringOptics); recursive=true) +TUTORIALS = [ + "Getting Started" => "tutorials/gettingstarted.md", + "Advanced" =>[ + "tutorials/nondefaultmodels.md", + "tutorials/custommodels.md", + ], +] + makedocs(; modules=[ScatteringOptics], authors="Anna Tartaglia, Kazunori Akiyama", @@ -16,8 +24,8 @@ makedocs(; "Home" => "index.md", "Introduction" => "introduction.md", "Brief Introduction to interstellar scattering" => "math.md", - "Tutorial" => "tutorial.md", - "ScateringOptics.jl API" => "autodocs.md", + "Tutorials" => TUTORIALS, + "ScateringOptics.jl API" => "api.md", ], ) diff --git a/docs/src/autodocs.md b/docs/src/api.md similarity index 100% rename from docs/src/autodocs.md rename to docs/src/api.md diff --git a/docs/src/math.md b/docs/src/math.md index dc702a5..19aac41 100644 --- a/docs/src/math.md +++ b/docs/src/math.md @@ -1,7 +1,7 @@ ```@meta CurrentModule = ScatteringOptics ``` -## Brief Introduction to Interstellar Scattering +# Brief Introduction to Interstellar Scattering `ScatteringOptics.jl` implements a single thin-screen interstellar scattering model based on a fast yet accurate semi-analytic framework developed by Johnson & Narayan (2016) [1], and further extended in subsequent works [2-4]. @@ -27,19 +27,30 @@ In many cases, the properties of interstellar scattering can be effectively desc D_\phi(r) = \langle [\phi(\vec{r}_0+\vec{r})-\phi(\vec{r}_0)]^2 \rangle ``` -In the average or ensemble-average regimes, diffractive scattering leads to the angular broadening of the source image, referred to as the "ensemble-average" image. The diffractively scattered (i.e., ensemble-average) image, $I_{ea}(\vec{r})$, is mathematically expressed as the convolution of the source image $I_{src}(\vec{r})$ with a blurring scattering kernel, $G(\vec{r})$. +In the average or ensemble-average regimes, diffractive scattering leads to the angular broadening of the source image, referred to as the "ensemble-average" image. +The diffractively scattered (i.e., ensemble-average) image, $I_{ea}(\vec{r})$, is mathematically expressed as the convolution of the source image $I_{src}(\vec{r})$ with a blurring scattering kernel, $G(\vec{r})$. ```math I_{ea}(\vec{r}) = I_{src}(\vec{r}) * G(\vec{r}). ``` -While the previous equation is defined in image space, `ScatteringOptics.jl` performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements—called visibilities—obtained by a pair of antennas at different times and frequency segments, samples a Fourier component of the sky image. The source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered (i.e., ensemble-average) visibilities, $V_{ea}(\vec{b})$, by the following relation: +While the previous equation is defined in image space, `ScatteringOptics.jl` performs scattering in Fourier space, where the kernel can be described analytically. In radio interferometry, each set of measurements—called visibilities ($V_{obs}(\vec{b})$) obtained by a pair of antennas at different times and frequency segments, samples a Fourier component of the sky image $I_{sky}(\vec{r})$: + +```math +V_{obs}(\vec{b}) = \int \int I_{sky}(\vec{r}) \exp(2\pi \frac{\vec{r}\cdot\vec{b}}{D\lambda}) \, d\vec{r}, +``` + +where $D$ is the Earth-screen distance and $\lambda$ is the observing wavelength. + +Using this measurement equation, the source visibilities, $V_{src}(\vec{b})$, are related to the diffractively scattered (i.e., ensemble-average) visibilities, $V_{ea}(\vec{b})$, by the following relation: ```math V_{ea}(\vec{b}) = V_{src}(\vec{b}) \exp \left[ -\frac{1}{2} D_\phi \left( \frac{\vec{b}}{1+M} \right) \right], ``` -in which $\vec{b}$ represents the baseline vector between observing stations. The magnification, $M = D / R$, is the ratio of the Earth-screen distance, $D$, to the screen-source distance, $R$. The convolving kernel responsible for the angular broadening is described by the spatial structure function of the phase screen, $D_\phi(\vec{r})$, which is based on a probabilistic model of the phase screen, $\phi(\vec{r})$. In general, $D_\phi(\vec{r})$ is chromatic, meaning it depends on the observing frequency (or wavelength)—the kernel size in the image domain is typically proportional to the square of the observing wavelength, $\lambda^2$. +in which $\vec{b}$ represents the baseline vector between observing stations. The magnification, $M = D / R$, is the ratio of the Earth-screen distance, $D$, to the screen-source distance, $R$. Since the Fourier transform of $I_{src}(\vec{r}) * G(\vec{r})$ is given by $V_{src}(\vec{r}) F[G(\vec{r})]$, you can see that the second exponential term corresponds to the Fourier coefficient of the convolving scattering kernel $G(\vec{r})$. + +The convolving kernel responsible for the angular broadening is described by the spatial structure function of the phase screen, $D_\phi(\vec{r})$, which is based on a probabilistic model of the phase screen, $\phi(\vec{r})$. In general, $D_\phi(\vec{r})$ is chromatic, meaning it depends on the observing frequency (or wavelength)—the kernel size in the image domain is typically proportional to the square of the observing wavelength, $\lambda^2$. In the average regime, refractive scattering introduces compact substructures into the diffractively scattered images. These compact substructures arise from phase gradients on the scattering screen, $\nabla \phi(\vec{r})$. The refractively scattered image, $I_{a}(\vec{r})$, is then given by: @@ -50,7 +61,9 @@ I_{a}(\vec{r}) \approx I_{ea}(\vec{r} + r_F^2 \nabla \phi(\vec{r})), in which the Fresnel scale, $r_F = \sqrt{ \frac{DR}{D+R} \frac{\lambda}{2\pi} }$ is dependent on the observing wavelength $\lambda$ [1, 2]. -`ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi(\vec{r})$, named *Dipole*, *Periodic* *Boxcar*, and *Von Mises* models in Psaltis et al. [3], providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(\vec{r})$. The default model is the Dipole model, known to be consistent with multi-frequency measurements of Sgr A* [4]. +`ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi(\vec{r})$, named *Dipole*, *Periodic* *Boxcar*, and *Von Mises* models in Psaltis et al. [3], providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(\vec{r})$. From $D_\phi(\vec{r})$, the package computes the scattering kernel and resultant ensemble-average image. The fully scattered image with refractive substractures will further use a generative model to produce a random realization of $\phi(\vec{r})$, which is based on a stationary Gaussian random field following the power spectrum of the probabilistic model in Fourier domain. + +The package uses the Dipole model as default, which was originally proposed by Johnson & Narayan et al. [1]. The Dipole model is known to be consistent with multi-frequency measurements of Sgr A* [4]. ## References diff --git a/docs/src/tutorials/custommodels.md b/docs/src/tutorials/custommodels.md new file mode 100644 index 0000000..035c417 --- /dev/null +++ b/docs/src/tutorials/custommodels.md @@ -0,0 +1,123 @@ +```@meta +CurrentModule = ScatteringOptics +``` + +# Define Your Own Scattering Model +While this package covers all three probabilistic models published in literature as of 2024 (see [Brief Introduction to Interstellar Scattering](@ref)), users may define a custom probabilistic model leveledging a high level abstraction of data types implemented in this package. + +To make your own custom model, you only need to define a custom type of [ScatteringOptics.AbstractScatteringModel](@ref). You need to define the constructor of the type with the standardized parameters set in the literature. Here is a quick example. As long as your model is compatible with the framework of the semianalytic models in Psaltis et al. [1], you need to change only few lines. +```julia +using ScatteringOptics + +struct YourScatteringModel{T<:Number} <: AbstractScatteringModel + # Mandatory fields for AbstractScatteringModel + # fundamental parameters + α::T + rin::T + θmaj::T + θmin::T + ϕpa::T + λ0::T + D::T + R::T + + # precomputed mandatory constants + M::T + Qbar::T + C::T + D1maj::T + D2maj::T + D1min::T + D2min::T + + # optional constants + A::T + ζ0::T + ϕ0::T + Amaj::T + Amin::T + kζ::T + Bmaj::T + Bmin::T + .... + + # Constructor. Here the default parameters are for Sgr A* (Johnson et al. 2018, [4]) + function YourScatteringModel(; α=1.38, rin_cm=800e5, θmaj_mas=1.380, θmin_mas=0.703, ϕpa_deg=81.9, λ0_cm=1.0, D_kpc=2.82, R_kpc=5.53) + + # compute asymmetry parameters and magnification parameter + A = calc_A(θmaj_mas, θmin_mas) + ζ0 = calc_ζ0(A) + M = calc_M(D_kpc, R_kpc) + + # convert D and R to cm + D_cm = kpc_tp_cm*D_kpc + R_cm = kpc_tp_cm*R_kpc + + # position angle (measured from Dec axis in CCW) + # to a more tranditional angle measured from RA axis in CW + ϕ0 = calc_ϕ0(ϕpa_deg) + + # Parameters for the approximate phase structure function + θmaj_rad = calc_θrad(θmaj_mas) # milliarcseconds to radians + θmin_rad = calc_θrad(θmin_mas) # milliarcseconds to radians + Amaj = calc_Amaj(rin_cm, λ0_cm, M, θmaj_rad) + Amin = calc_Amin(rin_cm, λ0_cm, M, θmin_rad) + + # C parameters that scale the powerspectrum of the phase screen + Qbar = calc_Qbar(α, rin_cm, λ0_cm, M, θmaj_rad, θmin_rad) + C = calc_C(α, rin_cm, λ0_cm, Qbar) + + # find the concentration parameter often included in the field model + # THIS DEPENDS ON YOUR FIELD WANDER MODEL + kζ = .... + + # Set Pϕ + # THIS DEPENDS ON YOUR FIELD WANDER MODEL + Pϕfunc(ϕ) = Pϕ(YourScatteringModel, ϕ, α, ϕ0, kζ, ...) + + # B parameters + B_prefac = calc_B_prefac(α, C) + Bmaj = calc_Bmaj(α, ϕ0, Pϕfunc, B_prefac) + Bmin = calc_Bmin(α, ϕ0, Pϕfunc, B_prefac) + + # D parameters + D1maj = calc_D1(α, Amaj, Bmaj) + D2maj = calc_D2(α, Amaj, Bmaj) + D1min = calc_D1(α, Amin, Bmin) + D2min = calc_D2(α, Amin, Bmin) + + return new{typeof(α)}( + α, rin_cm, θmaj_mas, θmin_mas, ϕpa_deg, λ0_cm, D_cm, R_cm, + M, Qbar, C, D1maj, D2maj, D1min, D2min, + A, ζ0, ϕ0, Amaj, Amin, kζ, Bmaj, Bmin, ... + ) + end +end + +# Define the probability density function for the field wander +# THIS DEPENDS ON YOUR FIELD WANDER MODEL +function Pϕ(::Type{<:YourScatteringModel}, ϕ, α, ϕ0, kζ, ...) end + +# Simplified version using precomputed values. +# THIS DEPENDS ON YOUR FIELD WANDER MODEL +Pϕ(sm::YourScatteringModel, ϕ)=Pϕ(YourScatteringModel, ϕ, sm.α, sm.ϕ0, sm.kζ, ...) +``` +For the actual examples, please have a look at the source codes of the three models, which are currently in `src/scatteringmodels/models`. `calc_xxxx` functions are all defined in `src/scatteringmodels/commonfunctions.jl`. Most of the parameters are denoted following Psaltis et al. [1]. This package implements equations connecting the standardized parameters to various precomputed parameters using equations in the eht-imaging library based on [2-4]. + +Once you define your scattering model, you can simply use your model by +```julia +sm = YourScatteringModel() +``` + +The field wander model often involves a concentration parameter (denoted as $k_\zeta$ in Psaltis et al. [1]). This package offers an abstract type [AbstractKzetaFinder](@ref) to numerically solve $k_\zeta$ from the given scattering parameters. You can see actual examples for three models in `src/kzetafinders` along with the definition of the abstract type. + +You should be able to use all of functions in tutorials with your own model. Enjoy! + +## References +[1] Psaltis, D., et al., 2018, arXiv e-prints, arXiv:1805.01242, DOI: [10.48550/arXiv.1805.01242](https://doi.org/10.48550/arXiv.1805.01242) ([ADS](https://ui.adsabs.harvard.edu/abs/2018arXiv180501242P)) + +[2] Johnson, M. D., Narayan, R., 2016, The Astrophysical Journal, 826, 170, DOI: [10.3847/0004-637X/826/2/170](https://doi.org/10.3847/0004-637X/826/2/170) ([ADS](https://ui.adsabs.harvard.edu/abs/2016ApJ...826..170J)) + +[3] Johnson, M. D., 2016, The Astrophysical Journal, 833, 74, DOI: [10.3847/1538-4357/833/1/74](https://doi.org/10.3847/1538-4357/833/1/74) ([ADS](https://ui.adsabs.harvard.edu/abs/2016ApJ...833...74J)) + +[4] Johnson, M. D., et al., 2018, The Astrophysical Journal, 865, 104, DOI: [10.3847/1538-4357/aadcff](https://doi.org/10.3847/1538-4357/aadcff) ([ADS](https://ui.adsabs.harvard.edu/abs/2018ApJ...865..104J)) diff --git a/docs/src/tutorial.md b/docs/src/tutorials/gettingstarted.md similarity index 99% rename from docs/src/tutorial.md rename to docs/src/tutorials/gettingstarted.md index a7f9cf7..78a5f63 100644 --- a/docs/src/tutorial.md +++ b/docs/src/tutorials/gettingstarted.md @@ -2,10 +2,9 @@ CurrentModule = ScatteringOptics ``` -# Tutorial +# Getting Started This example code segment uses ScatteringOptics.jl to simulate interstellar scattering on an input [Comrade.jl](https://github.com/ptiede/Comrade.jl) `SkyModel` object via the `image_scatter()` function. - ```julia using ScatteringOptics using EHTImages diff --git a/docs/src/images/avg.png b/docs/src/tutorials/images/avg.png similarity index 100% rename from docs/src/images/avg.png rename to docs/src/tutorials/images/avg.png diff --git a/docs/src/images/ea.png b/docs/src/tutorials/images/ea.png similarity index 100% rename from docs/src/images/ea.png rename to docs/src/tutorials/images/ea.png diff --git a/docs/src/images/src.png b/docs/src/tutorials/images/src.png similarity index 100% rename from docs/src/images/src.png rename to docs/src/tutorials/images/src.png diff --git a/docs/src/tutorials/nondefaultmodels.md b/docs/src/tutorials/nondefaultmodels.md new file mode 100644 index 0000000..57d86a1 --- /dev/null +++ b/docs/src/tutorials/nondefaultmodels.md @@ -0,0 +1,33 @@ +```@meta +CurrentModule = ScatteringOptics +``` + +# Use Non-default Models + +As noted in [Brief Introduction to Interstellar Scattering](@ref), the default scattering model is the *dipole* model proposed in Johnson & Narayan 2016 ([1]). This is well consistent with actual interstellar scattering effects observed for the Galactic Center Sgr A* and other compact sources ([2]). Indeed you can confirm by + +```@example 1 +using ScatteringOptics + +ScatteringModel == DipoleScatteringModel +``` +**We strongly recommend using the default `ScatteringModel` unless users need to use or try different field wander models.** + +Nevertheless, the package implements two other scattering models --- *von Mises* and *periodic Boxcar* models in Psaltis et al. [3]. You can use then by + +``` +# von Mises +vmsm = vonMisesScatteringModel() + +# Periodic Boxcar +pbsm = PeriodicBoxCarScatteringModel() +``` + +Users also can define a custom scattering model. Please see [Define Your Own Scattering Model](@ref). + +## References +[1] Johnson, M. D., Narayan, R., 2016, The Astrophysical Journal, 826, 170, DOI: [10.3847/0004-637X/826/2/170](https://doi.org/10.3847/0004-637X/826/2/170) ([ADS](https://ui.adsabs.harvard.edu/abs/2016ApJ...826..170J)) + +[2] Johnson, M. D., et al., 2018, The Astrophysical Journal, 865, 104, DOI: [10.3847/1538-4357/aadcff](https://doi.org/10.3847/1538-4357/aadcff) ([ADS](https://ui.adsabs.harvard.edu/abs/2018ApJ...865..104J)) + +[3] Psaltis, D., et al., 2018, arXiv e-prints, arXiv:1805.01242, DOI: [10.48550/arXiv.1805.01242](https://doi.org/10.48550/arXiv.1805.01242) ([ADS](https://ui.adsabs.harvard.edu/abs/2018arXiv180501242P)) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 7ee11ea..04dc112 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -28,19 +28,25 @@ Ideally, a subtype of this abstract model should have a constructor only with th - `λ0::Number`: The reference wavelength for the scattering model in cm. - `D::Number`: The distance from the observer to the scattering screen in cm. - `R::Number`: The distance from the source to the scattering screen in cm. + Furthermore the following parameters need to be precomputed. - `M::Number`: Magnification parameter, defined as D/R -- `ζ0::Number`: -- `A::Number`: -- `kζ::Number` -- `Bmaj::Number`: -- `Bmin::Number`: -- `Qbar::Number`: -- `C::Number`: -- `Amaj::Number`: -- `Amin::Number`: -- `ϕ0::Number`: - +- `Qbar::Number`: The amplitudes of fluctuations. Given by `calc_Qbar(α, rin_cm, λ0_cm, M, θmaj_rad, θmin_rad)` +- `C::Number`: The scaling factor of the power spectrum. Given by `calc_C(α, rin_cm, λ0_cm, Qbar)` +- `D1maj::Number`: given by `calc_D1(α, Amaj, Bmaj)` +- `D2maj::Number`: given by `calc_D2(α, Amaj, Bmaj)` +- `D1min::Number`: given by `calc_D1(α, Amin, Bmin)` +- `D2min::Number`: given by `calc_D2(α, Amin, Bmin)` + +**Optional Fields** +Followings are currently not used by methods but may be useful to have. +- `A::Number`: Asymmetry parameter θmaj_mas/θmin_mas +- `ζ0::Number`: Another asymmetry parameter. Given by calc_ζ0(A) +- `ϕ0`:: position angle (measured from Dec axis in CCW) converted to a more traditional angle in radians measured from RA axis in CW +- `Amaj::Number`: related to the asymmetric scaling of the kernel. given by `calc_Amaj(rin_cm, λ0_cm, M, θmaj_rad)` +- `Amin::Number`: related to the asymmetric scaling of the kernel. given by `calc_Amin(rin_cm, λ0_cm, M, θmin_rad)` +- `Bmaj::Number`: calc_Bmaj(α, ϕ0, Pϕfunc, B_prefac) +- `Bmin::Number`: calc_Bmin(α, ϕ0, Pϕfunc, B_prefac) """ abstract type AbstractScatteringModel end From 3a2773a48355ffeb6d92f8bbba3c8385fe1d9bfe Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 03:03:09 -0400 Subject: [PATCH 24/51] fix a bug --- src/scatteringmodels/kernels/approx.jl | 5 +++-- src/scatteringmodels/kernels/exact.jl | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/scatteringmodels/kernels/approx.jl b/src/scatteringmodels/kernels/approx.jl index 94fb13a..a0bbb7b 100644 --- a/src/scatteringmodels/kernels/approx.jl +++ b/src/scatteringmodels/kernels/approx.jl @@ -26,8 +26,9 @@ function radialextent(skm::ApproximatedScatteringKernel{T,S,N}) where {T,S,N} end @inline function visibility_point(skm::ApproximatedScatteringKernel{T,S,N}, p) where {T,S,N} - (;U, V, Ti, Fr) = p - ν = iszero(Fr) ? skm.νref : Fr + U = p.U + V = p.V + ν = :Fr in keys(p) ? p.Fr : skm.νref return visibility_point_approx(skm.sm, ν2λcm(ν), U, V) + zero(T)im end diff --git a/src/scatteringmodels/kernels/exact.jl b/src/scatteringmodels/kernels/exact.jl index eb86e87..5421a64 100644 --- a/src/scatteringmodels/kernels/exact.jl +++ b/src/scatteringmodels/kernels/exact.jl @@ -25,7 +25,8 @@ function radialextent(skm::ExactScatteringKernel{T,S,N}) where {T,S,N} end @inline function visibility_point(skm::ExactScatteringKernel{T,S,N}, p) where {T,S,N} - (;U, V, Ti, Fr) = p - ν = iszero(Fr) ? skm.νref : Fr + U = p.U + V = p.V + ν = :Fr in keys(p) ? p.Fr : skm.νref return visibility_point_exact(skm.sm, ν2λcm(ν), U, V) + zero(T)im end From fe92620ee03be450a96ee3d091dcafcf9b8b8ad8 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 03:40:21 -0400 Subject: [PATCH 25/51] update the data structure of IntensityMap --- src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 08aacf4..b6ad9c6 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -114,7 +114,7 @@ model `psm`. The observing wavelength `λ_cm` is required. imap_ea = convolve(imap, skm) rxgrid, rygrid = (imap_ea.X, imap_ea.Y) .* sm.D - interp_Iea = extrapolate(scale(interpolate(imap_ea.data.data, BSpline(Linear())), (rxgrid, rygrid)), 0.) + interp_Iea = extrapolate(scale(interpolate(imap_ea, BSpline(Linear())), (rxgrid, rygrid)), 0.) interp_gradϕx = extrapolate(scale(interpolate(gradϕ_x, BSpline(Linear())), (rxgrid, rygrid)), Periodic()) interp_gradϕy = extrapolate(scale(interpolate(gradϕ_y, BSpline(Linear())), (rxgrid, rygrid)), Periodic()) From c8d7f9fc1e94fe77ded381f1ef629f9dddb597db Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 03:52:16 -0400 Subject: [PATCH 26/51] allow image_vis to specify a specific scattering screen --- src/scatteringmodels/phasescreens/refractivemodel.jl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index b6ad9c6..09281a5 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -3,6 +3,7 @@ export RefractivePhaseScreen export phase_screen export wrapped_grad export image_scatter +export generate_gaussian_noise """ RefractivePhaseScreen(sm, Nx, Ny, dx, dy, Vx_km_per_s=0.0, Vy_km_per_s=0.0) @@ -51,6 +52,7 @@ The fourier space 2D noise_screen (defaults to gaussian noise screen if not give if isnothing(noise_screen) noise_screen = generate_gaussian_noise(psm) end + # generate phase screen from power law and noise screen cns = ContinuousNoiseSignal(psm.signal) screengen = PSNoiseGenerator(psm.Q, cns) @@ -101,10 +103,16 @@ Implements full ISM scattering on an unscattered Comrade skymodel intensity map refractive phase screen generation are specific to the scattering parameters defined in the AbstractPhaseScreen model `psm`. The observing wavelength `λ_cm` is required. """ -@inline function image_scatter(psm::AbstractPhaseScreen, imap, λ_cm::Number; νref::Number = c_cgs) +@inline function image_scatter(psm::AbstractPhaseScreen, imap, λ_cm::Number; νref::Number = c_cgs, noise_screen=nothing) + # generate noise screen if not provided + if isnothing(noise_screen) + noise_screen = generate_gaussian_noise(psm) + end - ϕ = phase_screen(psm, λ_cm) + # generate phase screen + ϕ = phase_screen(psm, λ_cm; noise_screen=noise_screen) + # derive the gradient gradϕ_x, gradϕ_y = wrapped_grad(ϕ, psm.dx, psm.dy) sm = psm.sm From c1b27d998df5c247cd22bfd72563063b9f10b2b4 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 03:56:55 -0400 Subject: [PATCH 27/51] fix a bug --- src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 09281a5..2bbc1f9 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -47,7 +47,7 @@ Generates a refractive phase screen, `ϕ`, using StationaryRandomFields.jl the p The fourier space 2D noise_screen (defaults to gaussian noise screen if not given) is scaled by the power law, `Q`, defined in input AbstractPhaseScreen `psm`. The observing wavelength, `λ_cm`, must be given. """ -@inline function phase_screen(psm::AbstractPhaseScreen, λ_cm::Number, noise_screen=nothing) +@inline function phase_screen(psm::AbstractPhaseScreen, λ_cm::Number; noise_screen=nothing) # generate noise screen if not provided if isnothing(noise_screen) noise_screen = generate_gaussian_noise(psm) From 9d03f4201206935b153d890c540a7dc7ef595c7b Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 04:07:21 -0400 Subject: [PATCH 28/51] update the documentation --- docs/Project.toml | 3 + docs/src/math.md | 2 +- docs/src/tutorials/data/jason_mad_eofn.fits | Bin 0 -> 1002240 bytes docs/src/tutorials/gettingstarted.md | 111 ++++++++++++++------ docs/src/tutorials/images/avg.png | Bin 52830 -> 0 bytes docs/src/tutorials/images/ea.png | Bin 41193 -> 0 bytes docs/src/tutorials/images/src.png | Bin 40165 -> 0 bytes 7 files changed, 81 insertions(+), 35 deletions(-) create mode 100644 docs/src/tutorials/data/jason_mad_eofn.fits delete mode 100644 docs/src/tutorials/images/avg.png delete mode 100644 docs/src/tutorials/images/ea.png delete mode 100644 docs/src/tutorials/images/src.png diff --git a/docs/Project.toml b/docs/Project.toml index a814f5c..d9a7b64 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,4 +1,7 @@ [deps] +CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DocumenterVitepress = "4710194d-e776-4893-9690-8d956a29c365" ScatteringOptics = "e317c96f-4a6f-4ae9-8016-294fb9063ff5" +StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" +VLBISkyModels = "d6343c73-7174-4e0f-bb64-562643efbeca" diff --git a/docs/src/math.md b/docs/src/math.md index 19aac41..c40b16f 100644 --- a/docs/src/math.md +++ b/docs/src/math.md @@ -59,7 +59,7 @@ In the average regime, refractive scattering introduces compact substructures in I_{a}(\vec{r}) \approx I_{ea}(\vec{r} + r_F^2 \nabla \phi(\vec{r})), ``` -in which the Fresnel scale, $r_F = \sqrt{ \frac{DR}{D+R} \frac{\lambda}{2\pi} }$ is dependent on the observing wavelength $\lambda$ [1, 2]. +in which the Fresnel scale, $r_F = \sqrt{ \frac{DR}{D+R} \frac{\lambda}{2\pi} }$ is dependent on the observing wavelength $\lambda$ [1, 2]. The refractive substructures on the image have zero means --- the ensamble average of $I_{a}$ will be the angular-broadened (or diffractively-scattered) image $I_{ea}$. `ScatteringOptics.jl` implements three analytic probabilistic models for the phase screen $\phi(\vec{r})$, named *Dipole*, *Periodic* *Boxcar*, and *Von Mises* models in Psaltis et al. [3], providing the corresponding semi-analytic descriptions of the phase structure function $D_\phi(\vec{r})$. From $D_\phi(\vec{r})$, the package computes the scattering kernel and resultant ensemble-average image. The fully scattered image with refractive substractures will further use a generative model to produce a random realization of $\phi(\vec{r})$, which is based on a stationary Gaussian random field following the power spectrum of the probabilistic model in Fourier domain. diff --git a/docs/src/tutorials/data/jason_mad_eofn.fits b/docs/src/tutorials/data/jason_mad_eofn.fits new file mode 100644 index 0000000000000000000000000000000000000000..8057a78ea51e0882123400cc924952684a1643f8 GIT binary patch literal 1002240 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

qM?BkCnPu}{xG5Bc9ESf|HO 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%0DAFFvu9_uzP+I$0d6ZqC5x1@O#$yZUeJENR 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%0A_u^VSD;_U|ucOUUm=%W@~HU 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 z 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 MPWST2au1C92UQMs#{d8T diff --git a/docs/src/tutorials/images/src.png b/docs/src/tutorials/images/src.png deleted file mode 100644 index ec4cee5f3e8224a1178ca8caab2e246d7a3801c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40165 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 Date: Wed, 16 Oct 2024 04:10:12 -0400 Subject: [PATCH 29/51] update dependencies --- Manifest.toml | 10 +++++----- Project.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 6368887..25efcae 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.10.5" manifest_format = "2.0" -project_hash = "5928450964876e3b0f2d72e7a13f9caface4b998" +project_hash = "161fd822a88600876bdc638a118fa485b7781edc" [[deps.ADTypes]] git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" @@ -1394,9 +1394,9 @@ version = "1.4.3" [[deps.StationaryRandomFields]] deps = ["DocStringExtensions", "FFTW", "Random", "Statistics"] -git-tree-sha1 = "4ba91bb86df6a39c6871e12479f90e9548341670" +git-tree-sha1 = "25a67eee05fcbb2b032af9c38db5e7a9f16c6e0d" uuid = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" -version = "0.1.1" +version = "0.1.3" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] @@ -1429,9 +1429,9 @@ version = "7.2.1+1" [[deps.SymbolicIndexingInterface]] deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "b708e5c01d4aad69c148241bda3346fda1c550d2" +git-tree-sha1 = "4bc96df5d71515b1cb86dd626915f06f4c0d46f5" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.32" +version = "0.3.33" [[deps.TOML]] deps = ["Dates"] diff --git a/Project.toml b/Project.toml index 2138974..bcf733a 100644 --- a/Project.toml +++ b/Project.toml @@ -18,7 +18,7 @@ StationaryRandomFields = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" VLBISkyModels = "d6343c73-7174-4e0f-bb64-562643efbeca" [compat] -ComradeBase = "0.8" +ComradeBase = ">= 0.8" DocStringExtensions = "0.9" EHTUtils = "0.1" FFTW = "1" From a619d553c22a40d8092943bb7385d0ae932fdfac Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 09:37:39 -0400 Subject: [PATCH 30/51] add a clarification for the typo made in Psaltis et al. 2018 --- src/kzetafinders/periodicboxcar.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/kzetafinders/periodicboxcar.jl b/src/kzetafinders/periodicboxcar.jl index 3bf603c..bc2626b 100644 --- a/src/kzetafinders/periodicboxcar.jl +++ b/src/kzetafinders/periodicboxcar.jl @@ -14,6 +14,8 @@ end # Equation 47 of Psaltis et al. 2018. +# Note: Eq 47 has a typo and it has an extra kzeta. We use the correct one following +# Psaltis+2018's reference implementation in the eht-imaging library. @inline function kzetafinder_equation(kzeta, finder::PeriodicBoxCar_KzetaFinder) #x = π ./ (1 .+ kzeta) #return sin.(x) ./ x .- finder.ζ0 From 9ae3501ea482c61366db9471e9afa9a6f74f45e5 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 09:58:17 -0400 Subject: [PATCH 31/51] update docstrings --- src/scatteringmodels/abstractscatteringmodel.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 04dc112..621a573 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -47,6 +47,9 @@ Followings are currently not used by methods but may be useful to have. - `Amin::Number`: related to the asymmetric scaling of the kernel. given by `calc_Amin(rin_cm, λ0_cm, M, θmin_rad)` - `Bmaj::Number`: calc_Bmaj(α, ϕ0, Pϕfunc, B_prefac) - `Bmin::Number`: calc_Bmin(α, ϕ0, Pϕfunc, B_prefac) + +**Mandatory Method** +- `Pϕ(sm::ScatteringModel, ϕ)`: Probability Distribution for the wondering of the direction of the magnetic field centered at orientation ϕ0. """ abstract type AbstractScatteringModel end From a2efc8b66db80e5a5c7c5cb27c3be99552c2cd38 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 10:13:46 -0400 Subject: [PATCH 32/51] add a quick shortcut function to initialize the RefractivePhaseScreen --- .../phasescreens/refractivemodel.jl | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 2bbc1f9..25795dc 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -5,6 +5,9 @@ export wrapped_grad export image_scatter export generate_gaussian_noise + +abstract type AbstractPhaseScreen end + """ RefractivePhaseScreen(sm, Nx, Ny, dx, dy, Vx_km_per_s=0.0, Vy_km_per_s=0.0) @@ -19,8 +22,6 @@ average image. `Vx_km_per_s` and `Vy_km_per_s` are optional for moving phase screen. """ -abstract type AbstractPhaseScreen end - struct RefractivePhaseScreen{S, T <: Number, N<:AbstractNoiseSignal, P <: AbstractPowerSpectrumModel} <: AbstractPhaseScreen sm::S dx::T @@ -38,6 +39,20 @@ struct RefractivePhaseScreen{S, T <: Number, N<:AbstractNoiseSignal, P <: Abstra end end +""" + RefractivePhaseScreen(sm, im, Vx_km_per_s=0.0, Vy_km_per_s=0.0) + +- `sm <: AbstractScatteringModel` +- `im <: IntensityMap` +`Vx_km_per_s` and `Vy_km_per_s` are optional for moving phase screen. +""" +function RefractivePhaseScreen(sm::S, im::IntensityMap, Vx_km_per_s=0.0::T, Vy_km_per_s=0.0::T) where {S, T} + nx, ny = size(im)[1:2] + dx = im.X[2]-im.X[1] # pixel size in radians + dy = im.Y[2]-im.Y[1] + return = RefractivePhaseScreen(sm, nx, ny, dx, dy) +end + StationaryRandomFields.generate_gaussian_noise(psm::AbstractPhaseScreen; rng = Random.default_rng()) = generate_gaussian_noise(psm.signal; rng = rng) """ From 97451624003bfe7fe1608f9a6afb59a61aa1a9ab Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 10:15:28 -0400 Subject: [PATCH 33/51] fix typos --- src/ScatteringOptics.jl | 2 +- src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ScatteringOptics.jl b/src/ScatteringOptics.jl index ebc68d8..0cd4af1 100644 --- a/src/ScatteringOptics.jl +++ b/src/ScatteringOptics.jl @@ -16,7 +16,7 @@ using QuadGK using Random using SpecialFunctions using StationaryRandomFields -using VLBISkyModels: convolve +using VLBISkyModels: convolve, IntensityMap # kζ finders include("./kzetafinders/abstractkzetafinder.jl") diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 25795dc..a50b32b 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -50,7 +50,7 @@ function RefractivePhaseScreen(sm::S, im::IntensityMap, Vx_km_per_s=0.0::T, Vy_k nx, ny = size(im)[1:2] dx = im.X[2]-im.X[1] # pixel size in radians dy = im.Y[2]-im.Y[1] - return = RefractivePhaseScreen(sm, nx, ny, dx, dy) + return RefractivePhaseScreen(sm, nx, ny, dx, dy) end StationaryRandomFields.generate_gaussian_noise(psm::AbstractPhaseScreen; rng = Random.default_rng()) = generate_gaussian_noise(psm.signal; rng = rng) From a4386d6c7c66f4ed472092f0baf5663eaac25112 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 10:17:02 -0400 Subject: [PATCH 34/51] fix a typo --- src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index a50b32b..ff08e36 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -50,7 +50,7 @@ function RefractivePhaseScreen(sm::S, im::IntensityMap, Vx_km_per_s=0.0::T, Vy_k nx, ny = size(im)[1:2] dx = im.X[2]-im.X[1] # pixel size in radians dy = im.Y[2]-im.Y[1] - return RefractivePhaseScreen(sm, nx, ny, dx, dy) + return RefractivePhaseScreen(sm, nx, ny, dx, dy, Vx_km_per_s, Vy_km_per_s) end StationaryRandomFields.generate_gaussian_noise(psm::AbstractPhaseScreen; rng = Random.default_rng()) = generate_gaussian_noise(psm.signal; rng = rng) From f2e0c17524d54aeba5a0d3b60a66c8ac027b90e1 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 10:37:49 -0400 Subject: [PATCH 35/51] fix another typo in `refractivephasescreen` and updated related documentation. --- docs/src/tutorials/gettingstarted.md | 10 +++++----- .../phasescreens/refractivemodel.jl | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/docs/src/tutorials/gettingstarted.md b/docs/src/tutorials/gettingstarted.md index a0859f4..e9e07b5 100644 --- a/docs/src/tutorials/gettingstarted.md +++ b/docs/src/tutorials/gettingstarted.md @@ -84,11 +84,11 @@ f Otherwise, the scattering kernel `skm` is not required to obtain a fully scattered image. A `RefractivePhaseScreen` type object may be initialized from the `ScatteringModel` and image dimensions. ```@example 1 -# Create a refractive phase screen model from scattering model and image dimensions -nx, ny = size(im) -dx = im.X[2]-im.X[1] # pixel size in radians -dy = im.Y[2]-im.Y[1] -rps = RefractivePhaseScreen(sm, nx, ny, dx, dy) # sm is the scattering model +# Create a refractive phase screen model from scattering model and image +rps = refractivephasescreen(sm, im) + +# Alternatively, you may make the screen model for arbitral grid +# rps = RefractivePhaseScreen(sm, Nx, Ny, dx_rad, dy_rad) # Generate a phase screen. For this particular tutorial we will use StableRNG for the reproducibility. using StableRNGs diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index ff08e36..7ded6a1 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -1,5 +1,6 @@ export AbstractPhaseScreen export RefractivePhaseScreen +export refractivephasescreen export phase_screen export wrapped_grad export image_scatter @@ -28,7 +29,7 @@ struct RefractivePhaseScreen{S, T <: Number, N<:AbstractNoiseSignal, P <: Abstra dy::T signal::N Q::P - function RefractivePhaseScreen(sm::S, Nx::Number, Ny::Number, dx::T, dy::T, Vx_km_per_s=0.0::T, Vy_km_per_s=0.0::T) where {S, T} + function RefractivePhaseScreen(sm::S, Nx::Number, Ny::Number, dx::T, dy::T, Vx_km_per_s::T=0.0, Vy_km_per_s::T=0.0) where {S, T} # radians to cm dx = dx*sm.D dy = dy*sm.D @@ -40,17 +41,25 @@ struct RefractivePhaseScreen{S, T <: Number, N<:AbstractNoiseSignal, P <: Abstra end """ - RefractivePhaseScreen(sm, im, Vx_km_per_s=0.0, Vy_km_per_s=0.0) + refractivephasescreen(sm, im, Vx_km_per_s=0.0, Vy_km_per_s=0.0) + +An abstract type for generating a refractive phase screen model corresponding to an image and computing the scattered +average image. - `sm <: AbstractScatteringModel` - `im <: IntensityMap` -`Vx_km_per_s` and `Vy_km_per_s` are optional for moving phase screen. +- `Vx_km_per_s` and `Vy_km_per_s` are optional for moving phase screen. """ -function RefractivePhaseScreen(sm::S, im::IntensityMap, Vx_km_per_s=0.0::T, Vy_km_per_s=0.0::T) where {S, T} +function refractivephasescreen(sm::S, im::IntensityMap, Vx_km_per_s::T=0.0, Vy_km_per_s::T=0.0) where {S, T} nx, ny = size(im)[1:2] dx = im.X[2]-im.X[1] # pixel size in radians dy = im.Y[2]-im.Y[1] - return RefractivePhaseScreen(sm, nx, ny, dx, dy, Vx_km_per_s, Vy_km_per_s) + + U = typeof(im[1]) + UeqT = U == T + Vx_km = UeqT ? Vx_km_per_s : U(Vx_km_per_s) + Vy_km = UeqT ? Vy_km_per_s : U(Vy_km_per_s) + return RefractivePhaseScreen(sm, nx, ny, dx, dy, Vx_km, Vy_km) end StationaryRandomFields.generate_gaussian_noise(psm::AbstractPhaseScreen; rng = Random.default_rng()) = generate_gaussian_noise(psm.signal; rng = rng) From b0e0dbd90a42627c0ac1ed7ea1ee3f91b67aa9cd Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:15:00 -0400 Subject: [PATCH 36/51] add quick shortcuts to compute average and emsemble average images. --- Manifest.toml | 4 +- docs/src/tutorials/gettingstarted.md | 74 +++++++++++++++++-- src/ScatteringOptics.jl | 2 +- .../abstractscatteringmodel.jl | 28 +++++++ .../phasescreens/refractivemodel.jl | 69 ++++++++++++----- 5 files changed, 149 insertions(+), 28 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 25efcae..f1ce3dc 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -371,9 +371,9 @@ version = "1.15.1" [[deps.DifferentiationInterface]] deps = ["ADTypes", "LinearAlgebra"] -git-tree-sha1 = "758ef234ab0b81071c195cd2ea155030d69c1ef8" +git-tree-sha1 = "642cdd8203d2c6669f59a4a21369e2cea9825e97" uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.6.13" +version = "0.6.14" [deps.DifferentiationInterface.extensions] DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" diff --git a/docs/src/tutorials/gettingstarted.md b/docs/src/tutorials/gettingstarted.md index e9e07b5..c8feead 100644 --- a/docs/src/tutorials/gettingstarted.md +++ b/docs/src/tutorials/gettingstarted.md @@ -15,7 +15,7 @@ using VLBISkyModels # Alternatively, you can import Comrade.jl instead. Either works. # using Comrade -# Load a model image FITS file +# Load a image model from an image FITS file im = load_fits("data/jason_mad_eofn.fits", IntensityMap) # Plot source image @@ -43,7 +43,7 @@ print("Frequency of the image: ", νref/1e9," GHz") skm = kernelmodel(sm, νref=νref) ``` -`skm` will be a subtype of `ComradeBase.AbstractModel`, and you can use any methods defined for sky models in `Comrade.jl''s ecosystem. For instance, you can compute the ensemble-average (or diffractively scattered) image using the `convolve` method, +`skm` is a subtype of `ComradeBase.AbstractModel`, and you can use any methods defined for sky models in `Comrade.jl`'s ecosystem. For instance, you can compute the ensemble-average (or diffractively scattered) image using the `convolve` method from `VLBISkyModels.jl`, ```@example 1 # scatter the image @@ -53,6 +53,27 @@ im_ea = convolve(im, skm) imageviz(im_ea, size=(600, 500), colormap=:afmhot) ``` +You can also directly convolve a skymodel from `ComradeBase.AbstractModel` and implemented in `VLBISkyModels.jl`. + +```@example 1 +# Gaussian model from VLBISkyModels.jl +g = stretched(Gaussian(), μas2rad(10.0), μas2rad(10.0)) +im_g = intensitymap(g, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) + +# Plot source image +imageviz(im_g, size=(600, 500), colormap=:afmhot) +``` + +Scattered model and image can be generated by, + +```@example 1 +g_ea = convolved(g, skm) +im_gea = intensitymap(g_ea, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) + +# Plot source image +imageviz(im_gea, size=(600, 500), colormap=:afmhot) +``` + You can also plot the scattering kernel. For instance in the image domain, ```@example 1 @@ -63,7 +84,7 @@ im_skm = intensitymap(skm, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256) imageviz(im_skm, size=(600, 500), colormap=:afmhot) ``` -You can compute the kernel visibility using `visibility_point` method. For instance, +You can compute the kernel visibility using `visibility_point` method from `VLBISkyModels.jl`. For instance, ```@example 1 # computing kernels from 0 to 10 Glambda along RA @@ -80,14 +101,29 @@ plot!(ax, u/1e9, abs.(vis)) f ``` +The above tutorial is intentionally written in a low level. There is [emsembleaverage](@ref) method to do a quick shortcut by bypassing the kernel generation. + +```@example 1 +# scatter the image +im_ea_2 = emsembleaverage(skm, im) + +# Plot source image +imageviz(im_ea_2, size=(600, 500), colormap=:afmhot) +``` + +Although this is handy, it may have an extra overhead to initialize `skm` which may slow down highly iterative processes. +[emsembleaverage](@ref) method also supports more general skymodels in `ComradeBase.AbstractModel` as an input instead of the image model. + ## Simulating Refractive Scattering -Otherwise, the scattering kernel `skm` is not required to obtain a fully scattered image. A `RefractivePhaseScreen` type object may be initialized from the `ScatteringModel` and image dimensions. +Otherwise, the scattering kernel `skm` is not required to obtain a fully scattered image. A [RefractivePhaseScreen](@ref) type object may be initialized from the `ScatteringModel` and image dimensions. ```@example 1 -# Create a refractive phase screen model from scattering model and image +# Initialize a refractive phase screen model from scattering and image models rps = refractivephasescreen(sm, im) # Alternatively, you may make the screen model for arbitral grid +# ScatteringOptics is design to work even if ScatteringScreen's grid is not consistent +# with the image you want to scatter, thanks to a powerful interpolation scheme available. # rps = RefractivePhaseScreen(sm, Nx, Ny, dx_rad, dy_rad) # Generate a phase screen. For this particular tutorial we will use StableRNG for the reproducibility. @@ -96,9 +132,33 @@ rng = StableRNG(123) noise_screen = generate_gaussian_noise(rps; rng=rng) # Produce scattered image with observing wavelength .13 cm -im_a = image_scatter(rps, im, 0.13, νref=230e9; noise_screen=noise_screen) +im_a = scatter(rps, im; noise_screen=noise_screen) # Plot source image imageviz(im_a, size=(600, 500), colormap=:afmhot) ``` -If you completely randomize the process, you can skip `noise_screen`. The screen will be automatically generated inside `image_scatter` method. \ No newline at end of file + +If you completely randomize the process, you can skip the step to generate `noise_screen`. The screen will be automatically generated inside [scatter](@ref) method. There is a quick shortcut bypassing the noise screen generation, which has a less flexibility and a larger overhead for iterative processes. + +```@example 1 +# Produce scattered image with observing wavelength .13 cm +im_a2 = scatter(sm, im; rng=rng) + +# Plot source image +imageviz(im_a2, size=(600, 500), colormap=:afmhot) +``` + +Just because the refractive scattering effects cannot be described analytically in Fourier domain, [scatter](@ref) method only works +for the image model (`::IntensityMap`). For skymodels in `VLBISkyModels.jl`, you need to first instantiate an image model of your sky model. + +```@example 1 +# Gaussian model from VLBISkyModels.jl +g = stretched(Gaussian(), μas2rad(10.0), μas2rad(10.0)) +im_g = intensitymap(g, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) + +# Produce scattered image with observing wavelength .13 cm +im_ga = scatter(sm, im_g; rng=rng) + +# Plot source image +imageviz(im_ga, size=(600, 500), colormap=:afmhot) +``` diff --git a/src/ScatteringOptics.jl b/src/ScatteringOptics.jl index 0cd4af1..fafd6e9 100644 --- a/src/ScatteringOptics.jl +++ b/src/ScatteringOptics.jl @@ -16,7 +16,7 @@ using QuadGK using Random using SpecialFunctions using StationaryRandomFields -using VLBISkyModels: convolve, IntensityMap +using VLBISkyModels: convolve, convolved, IntensityMap # kζ finders include("./kzetafinders/abstractkzetafinder.jl") diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 621a573..57766c1 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -153,3 +153,31 @@ using the exact formula of the phase structure function. b = (u, v) .* (λ / (1 + sm.M)) return exp(-0.5 * Dϕ_exact(sm, λ, b...)) end + +""" + emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel) +""" +@inline funciton emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel=c_cgs) + return convolved(skymodel, kernelmodel(sm, νref=νmodel)) +end + +""" + emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) +""" +@inline funciton emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) + # check if imap has a frequncy or time dimension + if ndims(imap) > 2 + throw("The funciton doesn't support multi-dimensional images") + end + + # get the frequency and wavelength information + meta_imap = metadata(imap) + is_freq = hasproperty(meta_imap, :frequency) + if is_freq == false and νref == c_cgs + @warn "the input image doesn't have a frequency information. νref=c_cgs will be assumed." + end + ν_imap = if is_freq ? meta_imap.frequency : νref + + # compute the ensemble-average image + return convolve(imap, kernelmodel(sm, νref=ν_imap)) +end \ No newline at end of file diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 7ded6a1..49e0450 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -50,12 +50,12 @@ average image. - `im <: IntensityMap` - `Vx_km_per_s` and `Vy_km_per_s` are optional for moving phase screen. """ -function refractivephasescreen(sm::S, im::IntensityMap, Vx_km_per_s::T=0.0, Vy_km_per_s::T=0.0) where {S, T} - nx, ny = size(im)[1:2] - dx = im.X[2]-im.X[1] # pixel size in radians - dy = im.Y[2]-im.Y[1] +function refractivephasescreen(sm::S, imap::IntensityMap, Vx_km_per_s::T=0.0, Vy_km_per_s::T=0.0) where {S, T} + nx, ny = size(imap)[1:2] + dx = imap.X[2]-imap.X[1] # pixel size in radians + dy = imap.Y[2]-imap.Y[1] - U = typeof(im[1]) + U = typeof(imap[1]) UeqT = U == T Vx_km = UeqT ? Vx_km_per_s : U(Vx_km_per_s) Vy_km = UeqT ? Vy_km_per_s : U(Vy_km_per_s) @@ -71,10 +71,10 @@ Generates a refractive phase screen, `ϕ`, using StationaryRandomFields.jl the p The fourier space 2D noise_screen (defaults to gaussian noise screen if not given) is scaled by the power law, `Q`, defined in input AbstractPhaseScreen `psm`. The observing wavelength, `λ_cm`, must be given. """ -@inline function phase_screen(psm::AbstractPhaseScreen, λ_cm::Number; noise_screen=nothing) +@inline function phase_screen(psm::AbstractPhaseScreen, λ_cm::Number; noise_screen=nothing, rng = Random.default_rng()) # generate noise screen if not provided if isnothing(noise_screen) - noise_screen = generate_gaussian_noise(psm) + noise_screen = generate_gaussian_noise(psm; rng=rng) end # generate phase screen from power law and noise screen @@ -121,46 +121,79 @@ Returns Fresnel scale corresponding to the given AvstractPhaseScreen object and end """ - image_scatter(psm::RefractivePhaseScreen, imap, λ_cm::Number; νref::Number = c_cgs) + scatter(psm::RefractivePhaseScreen, imap::IntensityMap; νref::Number = c_cgs, noise_screen=nothing) Implements full ISM scattering on an unscattered Comrade skymodel intensity map (`imap`). Diffrective blurring and refractive phase screen generation are specific to the scattering parameters defined in the AbstractPhaseScreen -model `psm`. The observing wavelength `λ_cm` is required. +model `psm`. """ -@inline function image_scatter(psm::AbstractPhaseScreen, imap, λ_cm::Number; νref::Number = c_cgs, noise_screen=nothing) +@inline function scatter( + psm::AbstractPhaseScreen, + imap::IntensityMap; + νref::Number = c_cgs, + noise_screen=nothing, + rng = Random.default_rng()) + # generate noise screen if not provided if isnothing(noise_screen) - noise_screen = generate_gaussian_noise(psm) + noise_screen = generate_gaussian_noise(psm; rng=rng) + end + + # check if imap has a frequncy or time dimension + if ndims(imap) > 2 + throw("The funciton doesn't support multi-dimensional images") end + # get the frequency and wavelength information + meta_imap = metadata(imap) + ν_imap = if hasproperty(meta_imap, :frequency) ? meta_imap.frequency : νref + λ_cm = ν2λcm(ν_imap) + + # compute the ensemble-average image + skm = kernelmodel(sm, νref=ν_imap) + imap_ea = convolve(imap, skm) + # generate phase screen ϕ = phase_screen(psm, λ_cm; noise_screen=noise_screen) - # derive the gradient + # derive the gradient of the phase screen gradϕ_x, gradϕ_y = wrapped_grad(ϕ, psm.dx, psm.dy) - sm = psm.sm + # get the frenels scale rF = get_rF(psm, λ_cm) - skm = kernelmodel(sm, νref=νref) + # convolve to get the ensemble averaged image - imap_ea = convolve(imap, skm) rxgrid, rygrid = (imap_ea.X, imap_ea.Y) .* sm.D + # initialize the interpolators interp_Iea = extrapolate(scale(interpolate(imap_ea, BSpline(Linear())), (rxgrid, rygrid)), 0.) interp_gradϕx = extrapolate(scale(interpolate(gradϕ_x, BSpline(Linear())), (rxgrid, rygrid)), Periodic()) interp_gradϕy = extrapolate(scale(interpolate(gradϕ_y, BSpline(Linear())), (rxgrid, rygrid)), Periodic()) + # compute the emsemble average image imap_sc = copy(imap_ea) nx, ny = size(imap_sc) for ix=1:nx, iy=1:ny @inbounds rx = rxgrid[ix] @inbounds ry = rygrid[iy] - rx_sft = rx .+ rF^2. * interp_gradϕx(rx, ry) ry_sft = ry .+ rF^2. * interp_gradϕy(rx, ry) - @inbounds imap_sc[ix, iy] = interp_Iea(rx_sft, ry_sft) - end return(imap_sc) +end + +""" + scatter(sm::AbstractScatteringModel, imap::IntensityMap, λ_cm::Number; νref::Number = c_cgs, rng = Random.default_rng()) +""" +@inline function scatter( + sm::AbstractScatteringModel, + imap::IntensityMap; + νref::Number = c_cgs, + Vx_km_per_s=0.0, + Vy_km_per_s=0.0, + rng = Random.default_rng() +) + rps = refractivephasescreen(sm, imap, Vx_km_per_s, Vy_km_per_s) + return scatter(rps, imap; νref=νref, rng=rng) end \ No newline at end of file From 4a270f99d586f25accd3900b21a46475118e9b44 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:17:27 -0400 Subject: [PATCH 37/51] fix typos --- src/scatteringmodels/abstractscatteringmodel.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 57766c1..b7343ac 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -157,14 +157,14 @@ end """ emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel) """ -@inline funciton emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel=c_cgs) +@inline function emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel=c_cgs) return convolved(skymodel, kernelmodel(sm, νref=νmodel)) end """ emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) """ -@inline funciton emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) +@inline function emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) # check if imap has a frequncy or time dimension if ndims(imap) > 2 throw("The funciton doesn't support multi-dimensional images") From 26b27e2af1bd95a3b2d2ec548cae98ca4ca0949c Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:17:57 -0400 Subject: [PATCH 38/51] update the version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index bcf733a..62ae5b1 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ScatteringOptics" uuid = "e317c96f-4a6f-4ae9-8016-294fb9063ff5" authors = ["Anna Tartaglia", "Kazunori Akiyama", "Paul Tiede"] -version = "0.1.3" +version = "0.1.4" [deps] ComradeBase = "6d8c423b-a35f-4ef1-850c-862fe21f82c4" From 0aff2feacdc84423d46636e8e891bdf7738aad2c Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:23:46 -0400 Subject: [PATCH 39/51] fix a typo --- src/scatteringmodels/abstractscatteringmodel.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index b7343ac..3ac5524 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -173,7 +173,7 @@ end # get the frequency and wavelength information meta_imap = metadata(imap) is_freq = hasproperty(meta_imap, :frequency) - if is_freq == false and νref == c_cgs + if is_freq == false & νref == c_cgs @warn "the input image doesn't have a frequency information. νref=c_cgs will be assumed." end ν_imap = if is_freq ? meta_imap.frequency : νref From 27432ab2b920b13faf0999811c0e03c08be5322b Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:25:47 -0400 Subject: [PATCH 40/51] fix typos --- src/scatteringmodels/abstractscatteringmodel.jl | 2 +- src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 3ac5524..6b8f6db 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -176,7 +176,7 @@ end if is_freq == false & νref == c_cgs @warn "the input image doesn't have a frequency information. νref=c_cgs will be assumed." end - ν_imap = if is_freq ? meta_imap.frequency : νref + ν_imap = is_freq ? meta_imap.frequency : νref # compute the ensemble-average image return convolve(imap, kernelmodel(sm, νref=ν_imap)) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 49e0450..aba6093 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -146,7 +146,7 @@ model `psm`. # get the frequency and wavelength information meta_imap = metadata(imap) - ν_imap = if hasproperty(meta_imap, :frequency) ? meta_imap.frequency : νref + ν_imap = hasproperty(meta_imap, :frequency) ? meta_imap.frequency : νref λ_cm = ν2λcm(ν_imap) # compute the ensemble-average image From 48cc6b0c8fb4a563dc1150b32996b533078c3a40 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:30:38 -0400 Subject: [PATCH 41/51] fix typos --- src/scatteringmodels/abstractscatteringmodel.jl | 1 + src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 6b8f6db..89ff9e6 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -7,6 +7,7 @@ export AbstractScatteringModel #export Dϕ_exact export visibility_point_approx export visibility_point_exact +export emsembleaverage """ diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index aba6093..97e1fd3 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -3,7 +3,7 @@ export RefractivePhaseScreen export refractivephasescreen export phase_screen export wrapped_grad -export image_scatter +export scatter export generate_gaussian_noise From 085720cafbed0d4916b31277868f617999b706fe Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:31:48 -0400 Subject: [PATCH 42/51] add metadata in module loading --- src/ScatteringOptics.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScatteringOptics.jl b/src/ScatteringOptics.jl index fafd6e9..65bfce2 100644 --- a/src/ScatteringOptics.jl +++ b/src/ScatteringOptics.jl @@ -16,7 +16,7 @@ using QuadGK using Random using SpecialFunctions using StationaryRandomFields -using VLBISkyModels: convolve, convolved, IntensityMap +using VLBISkyModels: convolve, convolved, IntensityMap, metadata # kζ finders include("./kzetafinders/abstractkzetafinder.jl") From 99c4cb1eec2b2a682ea36e2e56467187b6eb8620 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:41:11 -0400 Subject: [PATCH 43/51] fix typos --- src/scatteringmodels/abstractscatteringmodel.jl | 2 +- src/scatteringmodels/phasescreens/refractivemodel.jl | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 89ff9e6..1fb4acd 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -174,7 +174,7 @@ end # get the frequency and wavelength information meta_imap = metadata(imap) is_freq = hasproperty(meta_imap, :frequency) - if is_freq == false & νref == c_cgs + if (is_freq == false) & (νref == c_cgs) @warn "the input image doesn't have a frequency information. νref=c_cgs will be assumed." end ν_imap = is_freq ? meta_imap.frequency : νref diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 97e1fd3..831fd8e 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -146,11 +146,15 @@ model `psm`. # get the frequency and wavelength information meta_imap = metadata(imap) - ν_imap = hasproperty(meta_imap, :frequency) ? meta_imap.frequency : νref + is_freq = hasproperty(meta_imap, :frequency) + if (is_freq == false) & (νref == c_cgs) + @warn "the input image doesn't have a frequency information. νref=c_cgs will be assumed." + end + ν_imap = is_freq ? meta_imap.frequency : νref λ_cm = ν2λcm(ν_imap) # compute the ensemble-average image - skm = kernelmodel(sm, νref=ν_imap) + skm = kernelmodel(psm.sm, νref=ν_imap) imap_ea = convolve(imap, skm) # generate phase screen From 90478cd06c0576882d2ebd494aee02856b66a8d4 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:43:29 -0400 Subject: [PATCH 44/51] fix a typo --- src/scatteringmodels/phasescreens/refractivemodel.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 831fd8e..1642f4f 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -154,7 +154,8 @@ model `psm`. λ_cm = ν2λcm(ν_imap) # compute the ensemble-average image - skm = kernelmodel(psm.sm, νref=ν_imap) + sm = psm.sm + skm = kernelmodel(sm, νref=ν_imap) imap_ea = convolve(imap, skm) # generate phase screen From 633dd80ebf29b712aaed3d59944c62ca862ff4e3 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 12:56:15 -0400 Subject: [PATCH 45/51] update the tutorial --- docs/src/tutorials/gettingstarted.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/src/tutorials/gettingstarted.md b/docs/src/tutorials/gettingstarted.md index c8feead..114fb31 100644 --- a/docs/src/tutorials/gettingstarted.md +++ b/docs/src/tutorials/gettingstarted.md @@ -23,12 +23,14 @@ imageviz(im, size=(600, 500), colormap=:afmhot) ``` You can instantiate your scattering model with `ScatteringModel()`. If nothing is specified, the model will use the best-fit parameter set for Sgr A* in [Johnson et al. 2018](https://ui.adsabs.harvard.edu/abs/2018ApJ...865..104J/abstract). + ```@example 1 using ScatteringOptics # initialize the scattering model sm = ScatteringModel() ``` + You can change the parameters if you want to simulate a different scattering screen. See [ScatteringOptics.DipoleScatteringModel](@ref) for arguments. ## Simulate diffractive scattering @@ -105,7 +107,7 @@ The above tutorial is intentionally written in a low level. There is [emsembleav ```@example 1 # scatter the image -im_ea_2 = emsembleaverage(skm, im) +im_ea_2 = emsembleaverage(sm, im) # Plot source image imageviz(im_ea_2, size=(600, 500), colormap=:afmhot) From 5d6687a33bf90fd2ae02e08935ce5a0097d1072b Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 13:26:04 -0400 Subject: [PATCH 46/51] rename scatter function to scatter_image --- docs/make.jl | 5 +- docs/src/index.md | 4 +- .../{gettingstarted.md => diffractive.md} | 52 +-------- docs/src/tutorials/refractive.md | 106 ++++++++++++++++++ .../phasescreens/refractivemodel.jl | 12 +- 5 files changed, 120 insertions(+), 59 deletions(-) rename docs/src/tutorials/{gettingstarted.md => diffractive.md} (66%) create mode 100644 docs/src/tutorials/refractive.md diff --git a/docs/make.jl b/docs/make.jl index 9519367..20a8b31 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -5,7 +5,10 @@ using DocumenterVitepress DocMeta.setdocmeta!(ScatteringOptics, :DocTestSetup, :(using ScatteringOptics); recursive=true) TUTORIALS = [ - "Getting Started" => "tutorials/gettingstarted.md", + "Getting Started" => [ + "tutorials/diffractive.md", + "tutorials/refractive.md", + ], "Advanced" =>[ "tutorials/nondefaultmodels.md", "tutorials/custommodels.md", diff --git a/docs/src/index.md b/docs/src/index.md index f5ea5bf..ebeccf7 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -15,7 +15,7 @@ hero: text: View on Github link: https://github.com/EHTJulia/ScatteringOptics.jl - theme: alt - text: Tutorial - link: /tutorial + text: Tutorials + link: /tutorials/diffractive --- ``` \ No newline at end of file diff --git a/docs/src/tutorials/gettingstarted.md b/docs/src/tutorials/diffractive.md similarity index 66% rename from docs/src/tutorials/gettingstarted.md rename to docs/src/tutorials/diffractive.md index 114fb31..8d712d2 100644 --- a/docs/src/tutorials/gettingstarted.md +++ b/docs/src/tutorials/diffractive.md @@ -2,8 +2,9 @@ CurrentModule = ScatteringOptics ``` -# Getting Started +# Simulate Diffractive Scattering `ScatteringOptics.jl` is designed as a package inside the ecosystem of [`Comrade.jl`](https://github.com/ptiede/Comrade.jl). The scattering model in the package can scatter any sky model types from `Comrade.jl`. +This page describes how to simulate diffractive scattering. ## Loading your image Here, we use an example image in [`eht-imaging`](https://github.com/achael/eht-imaging). Data can be downloaded from [here](data/jason_mad_eofn.fits). This is a general relativistic magnetohydrodynamic (GRMHD) model of the magnetic arrestic disk originally from [Dexter et al. 2020](https://ui.adsabs.harvard.edu/abs/2020MNRAS.494.4168D/abstract). @@ -115,52 +116,3 @@ imageviz(im_ea_2, size=(600, 500), colormap=:afmhot) Although this is handy, it may have an extra overhead to initialize `skm` which may slow down highly iterative processes. [emsembleaverage](@ref) method also supports more general skymodels in `ComradeBase.AbstractModel` as an input instead of the image model. - -## Simulating Refractive Scattering -Otherwise, the scattering kernel `skm` is not required to obtain a fully scattered image. A [RefractivePhaseScreen](@ref) type object may be initialized from the `ScatteringModel` and image dimensions. - -```@example 1 -# Initialize a refractive phase screen model from scattering and image models -rps = refractivephasescreen(sm, im) - -# Alternatively, you may make the screen model for arbitral grid -# ScatteringOptics is design to work even if ScatteringScreen's grid is not consistent -# with the image you want to scatter, thanks to a powerful interpolation scheme available. -# rps = RefractivePhaseScreen(sm, Nx, Ny, dx_rad, dy_rad) - -# Generate a phase screen. For this particular tutorial we will use StableRNG for the reproducibility. -using StableRNGs -rng = StableRNG(123) -noise_screen = generate_gaussian_noise(rps; rng=rng) - -# Produce scattered image with observing wavelength .13 cm -im_a = scatter(rps, im; noise_screen=noise_screen) - -# Plot source image -imageviz(im_a, size=(600, 500), colormap=:afmhot) -``` - -If you completely randomize the process, you can skip the step to generate `noise_screen`. The screen will be automatically generated inside [scatter](@ref) method. There is a quick shortcut bypassing the noise screen generation, which has a less flexibility and a larger overhead for iterative processes. - -```@example 1 -# Produce scattered image with observing wavelength .13 cm -im_a2 = scatter(sm, im; rng=rng) - -# Plot source image -imageviz(im_a2, size=(600, 500), colormap=:afmhot) -``` - -Just because the refractive scattering effects cannot be described analytically in Fourier domain, [scatter](@ref) method only works -for the image model (`::IntensityMap`). For skymodels in `VLBISkyModels.jl`, you need to first instantiate an image model of your sky model. - -```@example 1 -# Gaussian model from VLBISkyModels.jl -g = stretched(Gaussian(), μas2rad(10.0), μas2rad(10.0)) -im_g = intensitymap(g, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) - -# Produce scattered image with observing wavelength .13 cm -im_ga = scatter(sm, im_g; rng=rng) - -# Plot source image -imageviz(im_ga, size=(600, 500), colormap=:afmhot) -``` diff --git a/docs/src/tutorials/refractive.md b/docs/src/tutorials/refractive.md new file mode 100644 index 0000000..0f71271 --- /dev/null +++ b/docs/src/tutorials/refractive.md @@ -0,0 +1,106 @@ +```@meta +CurrentModule = ScatteringOptics +``` + +# Simulate Refractive Scattering +Another feature of `ScatteringOptics.jl` is simulating refractive scattering. This page gives a tutorial to simulate refractive scattering effects. + +## Loading your image +Again, we use an example image in [`eht-imaging`](https://github.com/achael/eht-imaging). Data can be downloaded from [here](data/jason_mad_eofn.fits). This is a general relativistic magnetohydrodynamic (GRMHD) model of the magnetic arrestic disk originally from [Dexter et al. 2020](https://ui.adsabs.harvard.edu/abs/2020MNRAS.494.4168D/abstract). + +```@example 1 +using CairoMakie +# This is the base package for the Skymodel of the Comrade.jl ecosystem +using VLBISkyModels +# Alternatively, you can import Comrade.jl instead. Either works. +# using Comrade + +# Load a image model from an image FITS file +im = load_fits("data/jason_mad_eofn.fits", IntensityMap) + +# Frequency of the image +νref = metadata(im).frequency +print("Frequency of the image: ", νref/1e9," GHz") + +# Plot source image +imageviz(im, size=(600, 500), colormap=:afmhot) +``` + +## Simulating Refractive Scattering +And, then again initialize a scattering model. + +```@example 1 +using ScatteringOptics + +# initialize the scattering model +sm = ScatteringModel() +``` + +Refractive scattering will distort the diffractively-scattered (i.e. emsemble-average) image and add compact substrucures so-called *refractive substructures*. +These effects will be simulated with a phase screen generated from the probabilistic magnetic field wander model of the intersteller medium implemented in the scattering model. + +First, let's initialize a phase screen model ([RefractivePhaseScreen](@ref)) from the scattering model and the model image. +```@example 1 +# Initialize a refractive phase screen model from scattering and image models +rps = refractivephasescreen(sm, im) + +# Alternatively, you may make the screen model for arbitral grid +# ScatteringOptics is design to work even if ScatteringScreen's grid is not consistent +# with the image you want to scatter, thanks to a powerful interpolation scheme available. +# rps = RefractivePhaseScreen(sm, Nx, Ny, dx_rad, dy_rad) +``` + +You can sample a Gaussian noise in the Fourier domain. + +```@example 1 +# Generate a phase screen. For this particular tutorial we will use StableRNG for the reproducibility. +using StableRNGs +rng = StableRNG(123) +noise_screen = generate_gaussian_noise(rps; rng=rng) +``` + +This Gaussian noise will be scaled with the powerspectrum of the phase screen, and then transformed into the actual phase screen. The fully scattered image can be generated by [scatter_image](@ref) method. + +```@example 1 +# Produce the scattered image +im_a = scatter(rps, im; noise_screen=noise_screen) + +# Plot source image +imageviz(im_a, size=(600, 500), colormap=:afmhot) +``` + +If you completely randomize the process, you can skip the step to generate `noise_screen` and specify it in the argument of [scatter_image](@ref) method. In this case, the screen will be automatically generated inside [scatter_image](@ref) method. There is a quick shortcut bypassing the noise screen generation, which has a less flexibility and a larger overhead for iterative processes. + +```@example 1 +# Produce scattered image with observing wavelength .13 cm +im_a2 = scatter_image(sm, im; rng=rng) + +# Plot source image +imageviz(im_a2, size=(600, 500), colormap=:afmhot) +``` + +Just because the refractive scattering effects cannot be described analytically in Fourier domain, [scatter_image](@ref) method only works +for the image models (`::IntensityMap`). For sky models in `VLBISkyModels.jl`, you need to first instantiate an image model of your sky model. + +Here we show an example using a simple Gaussian model. You need to create an image model with `intensitymap` method from `VLBISkyModels.jl`. + +```@example 1 +# Gaussian model from VLBISkyModels.jl +g = stretched(Gaussian(), μas2rad(10.0), μas2rad(10.0)) + +# Create an image model from the Gaussian model +im_g = intensitymap(g, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) + +# Plot source image +imageviz(im_g, size=(600, 500), colormap=:afmhot) +``` + +Then you can make a scattered image. + +```@example 1 +# Produce scattered image with observing wavelength .13 cm +im_ga = scatter_image(sm, im_g; rng=rng) + +# Plot source image +imageviz(im_ga, size=(600, 500), colormap=:afmhot) +``` \ No newline at end of file diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 1642f4f..921916c 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -3,7 +3,7 @@ export RefractivePhaseScreen export refractivephasescreen export phase_screen export wrapped_grad -export scatter +export scatter_image export generate_gaussian_noise @@ -121,13 +121,13 @@ Returns Fresnel scale corresponding to the given AvstractPhaseScreen object and end """ - scatter(psm::RefractivePhaseScreen, imap::IntensityMap; νref::Number = c_cgs, noise_screen=nothing) + scatter_image(psm::RefractivePhaseScreen, imap::IntensityMap; νref::Number = c_cgs, noise_screen=nothing) Implements full ISM scattering on an unscattered Comrade skymodel intensity map (`imap`). Diffrective blurring and refractive phase screen generation are specific to the scattering parameters defined in the AbstractPhaseScreen model `psm`. """ -@inline function scatter( +@inline function scatter_image( psm::AbstractPhaseScreen, imap::IntensityMap; νref::Number = c_cgs, @@ -189,9 +189,9 @@ model `psm`. end """ - scatter(sm::AbstractScatteringModel, imap::IntensityMap, λ_cm::Number; νref::Number = c_cgs, rng = Random.default_rng()) + scatter_image(sm::AbstractScatteringModel, imap::IntensityMap, λ_cm::Number; νref::Number = c_cgs, rng = Random.default_rng()) """ -@inline function scatter( +@inline function scatter_image( sm::AbstractScatteringModel, imap::IntensityMap; νref::Number = c_cgs, @@ -200,5 +200,5 @@ end rng = Random.default_rng() ) rps = refractivephasescreen(sm, imap, Vx_km_per_s, Vy_km_per_s) - return scatter(rps, imap; νref=νref, rng=rng) + return scatter_image(rps, imap; νref=νref, rng=rng) end \ No newline at end of file From 4be7d61a597aaf18ebf6c547f73404c95e127f29 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 13:39:43 -0400 Subject: [PATCH 47/51] update documentations --- docs/src/index.md | 6 +++--- docs/src/tutorials/diffractive.md | 7 ++++--- docs/src/tutorials/refractive.md | 16 +++++++++------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index ebeccf7..99d486c 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -10,12 +10,12 @@ hero: - theme: brand text: Introduction link: /introduction + - theme: alt + text: Tutorials + link: /tutorials/diffractive - theme: alt icon: github text: View on Github link: https://github.com/EHTJulia/ScatteringOptics.jl - - theme: alt - text: Tutorials - link: /tutorials/diffractive --- ``` \ No newline at end of file diff --git a/docs/src/tutorials/diffractive.md b/docs/src/tutorials/diffractive.md index 8d712d2..e29394a 100644 --- a/docs/src/tutorials/diffractive.md +++ b/docs/src/tutorials/diffractive.md @@ -60,8 +60,8 @@ You can also directly convolve a skymodel from `ComradeBase.AbstractModel` and i ```@example 1 # Gaussian model from VLBISkyModels.jl -g = stretched(Gaussian(), μas2rad(10.0), μas2rad(10.0)) -im_g = intensitymap(g, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) +g = stretched(Gaussian(), μas2rad(5.0), μas2rad(5.0)) +im_g = intensitymap(g, imagepixels(μas2rad(200.0), μas2rad(200.0), 256, 256)) # Plot source image imageviz(im_g, size=(600, 500), colormap=:afmhot) @@ -71,7 +71,7 @@ Scattered model and image can be generated by, ```@example 1 g_ea = convolved(g, skm) -im_gea = intensitymap(g_ea, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) +im_gea = intensitymap(g_ea, imagepixels(μas2rad(200.0), μas2rad(200.0), 256, 256)) # Plot source image imageviz(im_gea, size=(600, 500), colormap=:afmhot) @@ -104,6 +104,7 @@ plot!(ax, u/1e9, abs.(vis)) f ``` +## A quick shortcut The above tutorial is intentionally written in a low level. There is [emsembleaverage](@ref) method to do a quick shortcut by bypassing the kernel generation. ```@example 1 diff --git a/docs/src/tutorials/refractive.md b/docs/src/tutorials/refractive.md index 0f71271..7ad2d8f 100644 --- a/docs/src/tutorials/refractive.md +++ b/docs/src/tutorials/refractive.md @@ -63,13 +63,15 @@ This Gaussian noise will be scaled with the powerspectrum of the phase screen, a ```@example 1 # Produce the scattered image -im_a = scatter(rps, im; noise_screen=noise_screen) +im_a = scatter_image(rps, im; noise_screen=noise_screen) # Plot source image imageviz(im_a, size=(600, 500), colormap=:afmhot) ``` -If you completely randomize the process, you can skip the step to generate `noise_screen` and specify it in the argument of [scatter_image](@ref) method. In this case, the screen will be automatically generated inside [scatter_image](@ref) method. There is a quick shortcut bypassing the noise screen generation, which has a less flexibility and a larger overhead for iterative processes. +If you completely randomize the process, you can skip the step to generate `noise_screen` and specify it in the argument of [scatter_image](@ref) method. In this case, the screen will be automatically generated inside [scatter_image](@ref) method. + +There is a quick shortcut bypassing the noise screen generation, which has a less flexibility and a larger overhead for iterative processes. ```@example 1 # Produce scattered image with observing wavelength .13 cm @@ -86,20 +88,20 @@ Here we show an example using a simple Gaussian model. You need to create an ima ```@example 1 # Gaussian model from VLBISkyModels.jl -g = stretched(Gaussian(), μas2rad(10.0), μas2rad(10.0)) +g = stretched(Gaussian(), μas2rad(5.0), μas2rad(5.0)) # Create an image model from the Gaussian model -im_g = intensitymap(g, imagepixels(μas2rad(50.0), μas2rad(50.0), 256, 256)) +im_g = intensitymap(g, imagepixels(μas2rad(200.0), μas2rad(200.0), 256, 256)) # Plot source image imageviz(im_g, size=(600, 500), colormap=:afmhot) ``` -Then you can make a scattered image. +Then you can make a scattered image. Don't forget to add the observing frequency as im_g doesn't have a frequency information. ```@example 1 -# Produce scattered image with observing wavelength .13 cm -im_ga = scatter_image(sm, im_g; rng=rng) +# Produce scattered image. Don't forget to add the observing frequency as im_g doesn't have a frequency information. +im_ga = scatter_image(sm, im_g; rng=rng, νref=νref) # Plot source image imageviz(im_ga, size=(600, 500), colormap=:afmhot) From 3a243ecef764cad7a24c96a1dd26b4d7322d053b Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 14:05:09 -0400 Subject: [PATCH 48/51] fix typos --- docs/src/tutorials/diffractive.md | 6 +++--- src/scatteringmodels/abstractscatteringmodel.jl | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/src/tutorials/diffractive.md b/docs/src/tutorials/diffractive.md index e29394a..e40eb0f 100644 --- a/docs/src/tutorials/diffractive.md +++ b/docs/src/tutorials/diffractive.md @@ -105,15 +105,15 @@ f ``` ## A quick shortcut -The above tutorial is intentionally written in a low level. There is [emsembleaverage](@ref) method to do a quick shortcut by bypassing the kernel generation. +The above tutorial is intentionally written in a low level. There is [ensembleaaverage](@ref) method to do a quick shortcut by bypassing the kernel generation. ```@example 1 # scatter the image -im_ea_2 = emsembleaverage(sm, im) +im_ea_2 = ensembleaaverage(sm, im) # Plot source image imageviz(im_ea_2, size=(600, 500), colormap=:afmhot) ``` Although this is handy, it may have an extra overhead to initialize `skm` which may slow down highly iterative processes. -[emsembleaverage](@ref) method also supports more general skymodels in `ComradeBase.AbstractModel` as an input instead of the image model. +[ensembleaaverage](@ref) method also supports more general skymodels in `ComradeBase.AbstractModel` as an input instead of the image model. diff --git a/src/scatteringmodels/abstractscatteringmodel.jl b/src/scatteringmodels/abstractscatteringmodel.jl index 1fb4acd..d9425e2 100644 --- a/src/scatteringmodels/abstractscatteringmodel.jl +++ b/src/scatteringmodels/abstractscatteringmodel.jl @@ -7,7 +7,7 @@ export AbstractScatteringModel #export Dϕ_exact export visibility_point_approx export visibility_point_exact -export emsembleaverage +export ensembleaverage """ @@ -156,16 +156,16 @@ using the exact formula of the phase structure function. end """ - emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel) + ensembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel) """ -@inline function emsembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel=c_cgs) +@inline function ensembleaverage(sm::AbstractScatteringModel, skymodel::AbstractModel, νmodel=c_cgs) return convolved(skymodel, kernelmodel(sm, νref=νmodel)) end """ - emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) + ensembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) """ -@inline function emsembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) +@inline function ensembleaverage(sm::AbstractScatteringModel, imap::IntensityMap; νref=c_cgs) # check if imap has a frequncy or time dimension if ndims(imap) > 2 throw("The funciton doesn't support multi-dimensional images") From de018b189f14b436109c539966f71c4505dcdca7 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 14:19:04 -0400 Subject: [PATCH 49/51] fix a typo in comments --- src/scatteringmodels/phasescreens/refractivemodel.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scatteringmodels/phasescreens/refractivemodel.jl b/src/scatteringmodels/phasescreens/refractivemodel.jl index 921916c..3e21605 100644 --- a/src/scatteringmodels/phasescreens/refractivemodel.jl +++ b/src/scatteringmodels/phasescreens/refractivemodel.jl @@ -175,7 +175,7 @@ model `psm`. interp_gradϕx = extrapolate(scale(interpolate(gradϕ_x, BSpline(Linear())), (rxgrid, rygrid)), Periodic()) interp_gradϕy = extrapolate(scale(interpolate(gradϕ_y, BSpline(Linear())), (rxgrid, rygrid)), Periodic()) - # compute the emsemble average image + # compute the ensemble average image imap_sc = copy(imap_ea) nx, ny = size(imap_sc) for ix=1:nx, iy=1:ny From eae55201b51e694248c1b0d75fa3dabdd8f75126 Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 14:20:23 -0400 Subject: [PATCH 50/51] fix typos --- docs/src/tutorials/diffractive.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/tutorials/diffractive.md b/docs/src/tutorials/diffractive.md index e40eb0f..54df855 100644 --- a/docs/src/tutorials/diffractive.md +++ b/docs/src/tutorials/diffractive.md @@ -105,15 +105,15 @@ f ``` ## A quick shortcut -The above tutorial is intentionally written in a low level. There is [ensembleaaverage](@ref) method to do a quick shortcut by bypassing the kernel generation. +The above tutorial is intentionally written in a low level. There is [ensembleaverage](@ref) method to do a quick shortcut by bypassing the kernel generation. ```@example 1 # scatter the image -im_ea_2 = ensembleaaverage(sm, im) +im_ea_2 = ensembleaverage(sm, im) # Plot source image imageviz(im_ea_2, size=(600, 500), colormap=:afmhot) ``` Although this is handy, it may have an extra overhead to initialize `skm` which may slow down highly iterative processes. -[ensembleaaverage](@ref) method also supports more general skymodels in `ComradeBase.AbstractModel` as an input instead of the image model. +[ensembleaverage](@ref) method also supports more general skymodels in `ComradeBase.AbstractModel` as an input instead of the image model. From 92a6af7f10a3aa7588581d11a959773da176276d Mon Sep 17 00:00:00 2001 From: Kazunori Akiyama Date: Wed, 16 Oct 2024 15:20:14 -0400 Subject: [PATCH 51/51] downgrade the version to 0.1.3 as JuliaHub registration of that version failed. --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 62ae5b1..2138974 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ScatteringOptics" uuid = "e317c96f-4a6f-4ae9-8016-294fb9063ff5" authors = ["Anna Tartaglia", "Kazunori Akiyama", "Paul Tiede"] -version = "0.1.4" +version = "0.1.3" [deps] ComradeBase = "6d8c423b-a35f-4ef1-850c-862fe21f82c4" @@ -18,7 +18,7 @@ StationaryRandomFields = "6ab34832-f7e5-40a4-9cd7-47ea82b5c144" VLBISkyModels = "d6343c73-7174-4e0f-bb64-562643efbeca" [compat] -ComradeBase = ">= 0.8" +ComradeBase = "0.8" DocStringExtensions = "0.9" EHTUtils = "0.1" FFTW = "1"