auto: 2026-04-05T01:18:45Z

This commit is contained in:
Levi Neuwirth 2026-04-04 21:18:45 -04:00
parent 9a3a5b62b6
commit 9a01c602bc
101 changed files with 9155 additions and 56 deletions

View File

@ -200,6 +200,7 @@ normaliseUrl url =
allContent :: Pattern allContent :: Pattern
allContent = allContent =
"content/essays/*.md" "content/essays/*.md"
.||. "content/essays/*/index.md"
.||. "content/blog/*.md" .||. "content/blog/*.md"
.||. "content/poetry/*.md" .||. "content/poetry/*.md"
.||. "content/fiction/*.md" .||. "content/fiction/*.md"

View File

@ -50,11 +50,11 @@ import Text.Pandoc.Walk
-- replaced with numbered superscripts and no bibliography div, -- replaced with numbered superscripts and no bibliography div,
-- @citedHtml@ is the inline-cited references HTML, and @furtherHtml@ is -- @citedHtml@ is the inline-cited references HTML, and @furtherHtml@ is
-- the further-reading-only references HTML (each empty when absent). -- the further-reading-only references HTML (each empty when absent).
applyCitations :: [Text] -> Pandoc -> IO (Pandoc, Text, Text) applyCitations :: [Text] -> Text -> Pandoc -> IO (Pandoc, Text, Text)
applyCitations frKeys doc applyCitations frKeys bibPath doc
| not (hasCitations frKeys doc) = return (doc, "", "") | not (hasCitations frKeys doc) = return (doc, "", "")
| otherwise = do | otherwise = do
let doc1 = injectMeta frKeys doc let doc1 = injectMeta frKeys bibPath doc
processed <- runIOorExplode $ processCitations doc1 processed <- runIOorExplode $ processCitations doc1
let (body, citedHtml, furtherHtml) = transformAndExtract frKeys processed let (body, citedHtml, furtherHtml) = transformAndExtract frKeys processed
return (body, citedHtml, furtherHtml) return (body, citedHtml, furtherHtml)
@ -79,13 +79,13 @@ hasCitations frKeys doc =
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
-- | Inject default bibliography / CSL paths and nocite for further-reading. -- | Inject default bibliography / CSL paths and nocite for further-reading.
injectMeta :: [Text] -> Pandoc -> Pandoc injectMeta :: [Text] -> Text -> Pandoc -> Pandoc
injectMeta frKeys (Pandoc meta blocks) = injectMeta frKeys bibPath (Pandoc meta blocks) =
let meta1 = if null frKeys then meta let meta1 = if null frKeys then meta
else insertMeta "nocite" (nociteVal frKeys) meta else insertMeta "nocite" (nociteVal frKeys) meta
meta2 = case lookupMeta "bibliography" meta1 of meta2 = case lookupMeta "bibliography" meta1 of
Nothing -> insertMeta "bibliography" Nothing -> insertMeta "bibliography"
(MetaString "data/bibliography.bib") meta1 (MetaString bibPath) meta1
Just _ -> meta1 Just _ -> meta1
meta3 = case lookupMeta "csl" meta2 of meta3 = case lookupMeta "csl" meta2 of
Nothing -> insertMeta "csl" Nothing -> insertMeta "csl"

View File

@ -12,7 +12,7 @@ module Compilers
) where ) where
import Hakyll import Hakyll
import Hakyll.Core.Metadata (lookupStringList) import Hakyll.Core.Metadata (lookupStringList, lookupString)
import Text.Pandoc.Definition (Pandoc (..), Block (..), import Text.Pandoc.Definition (Pandoc (..), Block (..),
Inline (..)) Inline (..))
import Text.Pandoc.Options (ReaderOptions (..), WriterOptions (..), import Text.Pandoc.Options (ReaderOptions (..), WriterOptions (..),
@ -142,10 +142,11 @@ essayCompilerWith rOpts = do
ident <- getUnderlying ident <- getUnderlying
meta <- getMetadata ident meta <- getMetadata ident
let frKeys = map T.pack $ fromMaybe [] (lookupStringList "further-reading" meta) let frKeys = map T.pack $ fromMaybe [] (lookupStringList "further-reading" meta)
let bibPath = T.pack $ fromMaybe "data/bibliography.bib" (lookupString "bibliography" meta)
-- Run citeproc, transform citation spans → superscripts, extract bibliography. -- Run citeproc, transform citation spans → superscripts, extract bibliography.
(pandocWithCites, bibHtml, furtherHtml) <- unsafeCompiler $ (pandocWithCites, bibHtml, furtherHtml) <- unsafeCompiler $
Citations.applyCitations frKeys (itemBody pandocItem) Citations.applyCitations frKeys bibPath (itemBody pandocItem)
-- Inline SVG score fragments and data visualizations (both read files -- Inline SVG score fragments and data visualizations (both read files
-- relative to the source file's directory). -- relative to the source file's directory).

View File

@ -22,6 +22,8 @@ import Data.Time.Format (formatTime, defaultTimeLocale)
import System.FilePath (takeDirectory, takeFileName) import System.FilePath (takeDirectory, takeFileName)
import Text.Read (readMaybe) import Text.Read (readMaybe)
import qualified Data.Text as T import qualified Data.Text as T
import Text.Pandoc (runPure, readMarkdown, writeHtml5String, Pandoc(..), Block(..), Inline(..))
import Text.Pandoc.Options (WriterOptions(..), HTMLMathMethod(..))
import Hakyll import Hakyll
import Hakyll.Core.Metadata (lookupStringList) import Hakyll.Core.Metadata (lookupStringList)
import Authors (authorLinksField) import Authors (authorLinksField)
@ -120,12 +122,36 @@ pageScriptsField = listFieldWith "page-scripts" ctx $ \item -> do
where where
ctx = field "script-src" (return . itemBody) ctx = field "script-src" (return . itemBody)
-- ---------------------------------------------------------------------------
-- Abstract field
-- ---------------------------------------------------------------------------
-- | Renders the abstract using Pandoc to support Markdown and LaTeX math.
-- Strips the outer <p> tag if the abstract is a single paragraph.
abstractField :: Context String
abstractField = field "abstract" $ \item -> do
meta <- getMetadata (itemIdentifier item)
case lookupString "abstract" meta of
Nothing -> fail "no abstract"
Just src -> do
let pandocResult = runPure $ do
doc <- readMarkdown defaultHakyllReaderOptions (T.pack src)
let doc' = case doc of
Pandoc m [Para ils] -> Pandoc m [Plain ils]
_ -> doc
let wOpts = defaultHakyllWriterOptions { writerHTMLMathMethod = KaTeX "" }
writeHtml5String wOpts doc'
case pandocResult of
Left err -> fail $ "Pandoc error rendering abstract: " ++ show err
Right html -> return (T.unpack html)
siteCtx :: Context String siteCtx :: Context String
siteCtx = siteCtx =
constField "site-title" "Levi Neuwirth" constField "site-title" "Levi Neuwirth"
<> constField "site-url" "https://levineuwirth.org" <> constField "site-url" "https://levineuwirth.org"
<> buildTimeField <> buildTimeField
<> pageScriptsField <> pageScriptsField
<> abstractField
<> defaultContext <> defaultContext
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------

View File

@ -6,7 +6,7 @@
-- * Adds @class="link-external"@ to any link whose URL starts with -- * Adds @class="link-external"@ to any link whose URL starts with
-- @http://@ or @https://@ and is not on the site's own domain. -- @http://@ or @https://@ and is not on the site's own domain.
-- * Adds @data-link-icon@ / @data-link-icon-type@ attributes for -- * Adds @data-link-icon@ / @data-link-icon-type@ attributes for
-- per-domain brand icons (wikipedia, arxiv, doi, github, external). -- per-domain brand icons (see 'domainIcon' for the full list).
-- * Adds @target="_blank" rel="noopener noreferrer"@ to external links. -- * Adds @target="_blank" rel="noopener noreferrer"@ to external links.
module Filters.Links (apply) where module Filters.Links (apply) where
@ -61,11 +61,34 @@ isExternal url =
-- | Icon name for the link, matching a file in /images/link-icons/<name>.svg. -- | Icon name for the link, matching a file in /images/link-icons/<name>.svg.
domainIcon :: Text -> Text domainIcon :: Text -> Text
domainIcon url domainIcon url
| "wikipedia.org" `T.isInfixOf` url = "wikipedia" -- Scholarly / reference
| "arxiv.org" `T.isInfixOf` url = "arxiv" | "wikipedia.org" `T.isInfixOf` url = "wikipedia"
| "doi.org" `T.isInfixOf` url = "doi" | "arxiv.org" `T.isInfixOf` url = "arxiv"
| "github.com" `T.isInfixOf` url = "github" | "doi.org" `T.isInfixOf` url = "doi"
| otherwise = "external" | "worldcat.org" `T.isInfixOf` url = "worldcat"
| "orcid.org" `T.isInfixOf` url = "orcid"
| "archive.org" `T.isInfixOf` url = "internet-archive"
-- Code / software
| "github.com" `T.isInfixOf` url = "github"
| "tensorflow.org" `T.isInfixOf` url = "tensorflow"
-- AI companies
| "anthropic.com" `T.isInfixOf` url = "anthropic"
| "openai.com" `T.isInfixOf` url = "openai"
-- Social / media
| "twitter.com" `T.isInfixOf` url = "twitter"
| "x.com" `T.isInfixOf` url = "twitter"
| "reddit.com" `T.isInfixOf` url = "reddit"
| "youtube.com" `T.isInfixOf` url = "youtube"
| "youtu.be" `T.isInfixOf` url = "youtube"
| "tiktok.com" `T.isInfixOf` url = "tiktok"
| "substack.com" `T.isInfixOf` url = "substack"
| "news.ycombinator.com" `T.isInfixOf` url = "hacker-news"
-- News
| "nytimes.com" `T.isInfixOf` url = "new-york-times"
-- Institutions
| "nasa.gov" `T.isInfixOf` url = "nasa"
| "apple.com" `T.isInfixOf` url = "apple"
| otherwise = "external"
-- | Percent-encode characters that would break a @?file=@ query-string value. -- | Percent-encode characters that would break a @?file=@ query-string value.
-- Slashes are intentionally left unencoded so root-relative paths remain -- Slashes are intentionally left unencoded so root-relative paths remain

View File

@ -5,7 +5,7 @@ module Site (rules) where
import Control.Monad (filterM) import Control.Monad (filterM)
import Data.List (intercalate, isPrefixOf) import Data.List (intercalate, isPrefixOf)
import Data.Maybe (fromMaybe) import Data.Maybe (fromMaybe)
import System.FilePath (takeDirectory, takeFileName) import System.FilePath (takeDirectory, takeFileName, replaceExtension)
import Hakyll import Hakyll
import Authors (buildAllAuthors, applyAuthorRules) import Authors (buildAllAuthors, applyAuthorRules)
import Backlinks (backlinkRules) import Backlinks (backlinkRules)
@ -19,6 +19,10 @@ import Tags (buildAllTags, applyTagRules)
import Pagination (blogPaginateRules) import Pagination (blogPaginateRules)
import Stats (statsRules) import Stats (statsRules)
-- All essays: flat files and directory-based (with co-located assets).
allEssays :: Pattern
allEssays = "content/essays/*.md" .||. "content/essays/*/index.md"
-- Poems inside collection subdirectories, excluding their index pages. -- Poems inside collection subdirectories, excluding their index pages.
collectionPoems :: Pattern collectionPoems :: Pattern
collectionPoems = "content/poetry/*/*.md" .&&. complement "content/poetry/*/index.md" collectionPoems = "content/poetry/*/*.md" .&&. complement "content/poetry/*/index.md"
@ -172,17 +176,28 @@ rules = do
>>= relativizeUrls >>= relativizeUrls
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
-- Essays -- Essays — flat (content/essays/foo.md → essays/foo.html) and
-- directory-based (content/essays/slug/index.md → essays/slug/index.html)
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
match "content/essays/*.md" $ do match allEssays $ do
route $ gsubRoute "content/essays/" (const "essays/") route $ customRoute $ \ident ->
`composeRoutes` setExtension "html" let fp = toFilePath ident
in if takeFileName fp == "index.md"
then replaceExtension (drop 8 fp) "html"
else "essays/" ++ replaceExtension (takeFileName fp) "html"
compile $ essayCompiler compile $ essayCompiler
>>= saveSnapshot "content" >>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/essay.html" essayCtx >>= loadAndApplyTemplate "templates/essay.html" essayCtx
>>= loadAndApplyTemplate "templates/default.html" essayCtx >>= loadAndApplyTemplate "templates/default.html" essayCtx
>>= relativizeUrls >>= relativizeUrls
-- Static assets co-located with directory-based essays (figures, data, PDFs, …)
match ("content/essays/**"
.&&. complement "content/essays/*.md"
.&&. complement "content/essays/*/index.md") $ do
route $ gsubRoute "content/" (const "")
compile copyFileCompiler
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
-- Blog posts -- Blog posts
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
@ -300,7 +315,7 @@ rules = do
create ["essays/index.html"] $ do create ["essays/index.html"] $ do
route idRoute route idRoute
compile $ do compile $ do
essays <- recentFirst =<< loadAll ("content/essays/*.md" .&&. hasNoVersion) essays <- recentFirst =<< loadAll (allEssays .&&. hasNoVersion)
let ctx = let ctx =
listField "essays" essayCtx (return essays) listField "essays" essayCtx (return essays)
<> constField "title" "Essays" <> constField "title" "Essays"
@ -316,7 +331,7 @@ rules = do
create ["new.html"] $ do create ["new.html"] $ do
route idRoute route idRoute
compile $ do compile $ do
let allContent = ( "content/essays/*.md" let allContent = ( allEssays
.||. "content/blog/*.md" .||. "content/blog/*.md"
.||. "content/fiction/*.md" .||. "content/fiction/*.md"
.||. allPoetry .||. allPoetry
@ -349,7 +364,7 @@ rules = do
return $ any (\t -> t == p || (p ++ "/") `isPrefixOf` t) ts return $ any (\t -> t == p || (p ++ "/") `isPrefixOf` t) ts
portalList name p = listField name essayCtx $ do portalList name p = listField name essayCtx $ do
essays <- loadAll ("content/essays/*.md" .&&. hasNoVersion) essays <- loadAll (allEssays .&&. hasNoVersion)
posts <- loadAll ("content/blog/*.md" .&&. hasNoVersion) posts <- loadAll ("content/blog/*.md" .&&. hasNoVersion)
fiction <- loadAll ("content/fiction/*.md" .&&. hasNoVersion) fiction <- loadAll ("content/fiction/*.md" .&&. hasNoVersion)
poetry <- loadAll (allPoetry .&&. hasNoVersion) poetry <- loadAll (allPoetry .&&. hasNoVersion)
@ -379,7 +394,7 @@ rules = do
create ["random-pages.json"] $ do create ["random-pages.json"] $ do
route idRoute route idRoute
compile $ do compile $ do
essays <- loadAll ("content/essays/*.md" .&&. hasNoVersion) :: Compiler [Item String] essays <- loadAll (allEssays .&&. hasNoVersion) :: Compiler [Item String]
posts <- loadAll ("content/blog/*.md" .&&. hasNoVersion) :: Compiler [Item String] posts <- loadAll ("content/blog/*.md" .&&. hasNoVersion) :: Compiler [Item String]
fiction <- loadAll ("content/fiction/*.md" .&&. hasNoVersion) :: Compiler [Item String] fiction <- loadAll ("content/fiction/*.md" .&&. hasNoVersion) :: Compiler [Item String]
poetry <- loadAll ("content/poetry/*.md" .&&. hasNoVersion) :: Compiler [Item String] poetry <- loadAll ("content/poetry/*.md" .&&. hasNoVersion) :: Compiler [Item String]
@ -395,7 +410,7 @@ rules = do
compile $ do compile $ do
posts <- fmap (take 30) . recentFirst posts <- fmap (take 30) . recentFirst
=<< loadAllSnapshots =<< loadAllSnapshots
( ( "content/essays/*.md" ( ( allEssays
.||. "content/blog/*.md" .||. "content/blog/*.md"
.||. "content/fiction/*.md" .||. "content/fiction/*.md"
.||. allPoetry .||. allPoetry

View File

@ -16,7 +16,7 @@ constraints: any.Glob ==0.10.2,
any.asn1-parse ==0.9.5, any.asn1-parse ==0.9.5,
any.asn1-types ==0.3.4, any.asn1-types ==0.3.4,
any.assoc ==1.1.1, any.assoc ==1.1.1,
any.async ==2.2.5, any.async ==2.2.6,
any.attoparsec ==0.14.4, any.attoparsec ==0.14.4,
any.attoparsec-aeson ==2.2.0.0, any.attoparsec-aeson ==2.2.0.0,
any.auto-update ==0.1.6, any.auto-update ==0.1.6,

View File

@ -0,0 +1,43 @@
import sys
import csv
import numpy as np
sys.path.insert(0, 'tools')
from viz_theme import apply_monochrome, save_svg
apply_monochrome()
import matplotlib.pyplot as plt
def read_data(filepath):
ops = []
matrix = []
with open(filepath, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
ops.append(row['op'])
matrix.append([float(row['m512']), float(row['m768']), float(row['m1024'])])
return ops, np.array(matrix)
filepath = "content/essays/where-does-simd-help-post-quantum-cryptography/figures/data/cliffs_delta.csv"
ops, matrix = read_data(filepath)
labels = ['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']
fig, ax = plt.subplots(figsize=(6, 5))
im = ax.imshow(matrix, cmap='Greys', vmin=0.9, vmax=1.0)
ax.set_xticks(np.arange(len(labels)))
ax.set_yticks(np.arange(len(ops)))
ax.set_xticklabels(labels)
display_ops = [op.replace('gena', 'gen_a') for op in ops]
ax.set_yticklabels(display_ops)
plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")
for i in range(len(ops)):
for j in range(len(labels)):
val = matrix[i, j]
text_color = "white" if val > 0.95 else "black"
ax.text(j, i, f"{val:.3f}", ha="center", va="center", color=text_color)
ax.set_title("Cliff's delta (ref vs. avx2)")
save_svg(fig)

View File

@ -0,0 +1,10 @@
op,m512,m768,m1024
INVNTT,1.000,1.000,1.000
basemul,1.000,1.000,1.000
frommsg,1.000,1.000,1.000
NTT,1.000,1.000,1.000
iDec,1.000,1.000,1.000
iEnc,1.000,1.000,1.000
iKeypair,1.000,1.000,1.000
gena,1.000,1.000,1.000
noise,1.000,1.000,0.999
1 op m512 m768 m1024
2 INVNTT 1.000 1.000 1.000
3 basemul 1.000 1.000 1.000
4 frommsg 1.000 1.000 1.000
5 NTT 1.000 1.000 1.000
6 iDec 1.000 1.000 1.000
7 iEnc 1.000 1.000 1.000
8 iKeypair 1.000 1.000 1.000
9 gena 1.000 1.000 1.000
10 noise 1.000 1.000 0.999

View File

@ -0,0 +1,5 @@
op,m512_sp,m512_elo,m512_ehi,m768_sp,m768_elo,m768_ehi,m1024_sp,m1024_elo,m1024_ehi
frommsg,45.642857142857146,0.0,0.0,49.15384615384615,0.0,0.0,55.38461538461539,0.0,0.0
INVNTT,56.26086956521739,0.0,0.0,52.22826086956522,0.0,0.010869565217390686,50.49514563106796,0.009708737864080774,0.0
basemul,52.04054054054054,0.0,0.7128841169937061,47.577586206896555,0.0,0.0,41.63333333333333,0.0,0.0
NTT,35.526315789473685,0.010526315789476826,2.395032525133054,39.39080459770115,0.44762277951932816,0.0,34.58585858585859,0.010101010101010388,0.3631210059781438
1 op m512_sp m512_elo m512_ehi m768_sp m768_elo m768_ehi m1024_sp m1024_elo m1024_ehi
2 frommsg 45.642857142857146 0.0 0.0 49.15384615384615 0.0 0.0 55.38461538461539 0.0 0.0
3 INVNTT 56.26086956521739 0.0 0.0 52.22826086956522 0.0 0.010869565217390686 50.49514563106796 0.009708737864080774 0.0
4 basemul 52.04054054054054 0.0 0.7128841169937061 47.577586206896555 0.0 0.0 41.63333333333333 0.0 0.0
5 NTT 35.526315789473685 0.010526315789476826 2.395032525133054 39.39080459770115 0.44762277951932816 0.0 34.58585858585859 0.010101010101010388 0.3631210059781438

View File

@ -0,0 +1,10 @@
op,refnv_sp,refnv_elo,refnv_ehi,ref_sp,ref_elo,ref_ehi,avx2_sp,avx2_elo,avx2_ehi
INVNTT,3.6937872667820737,0.0,0.0001923446816691765,3.6923668525283597,0.0,0.0008062243947173364,186.44660194174756,0.0,0.00970873786408788
basemul,3.209016393442623,6.209637357201814e-05,0.00012419274714359219,3.4479583666933546,0.00013344008540183694,0.00013344008540183694,143.55,0.005555555555559977,0.005555555555531555
frommsg,3.0156494522691704,0.0,0.0,2.676388888888889,0.0,0.0,148.23076923076923,0.0,0.0
NTT,3.691742580076403,0.0010845307227014267,0.0002938583602705158,3.6691004672897196,0.001071270209427766,0.0010718961341775746,126.8989898989899,0.0,1.3050917336631755
iDec,3.5713012771855714,0.00023570612000023416,0.00015086802895014628,3.690161977834612,0.0005032782539924341,0.00046931032063479705,114.75503711558855,0.0010604453870683983,0.0010604453870541874
iEnc,3.084863236932217,0.0001782560024712332,0.00016342197515761825,3.21233254333646,0.00035364887129318845,0.00028601070699840747,30.157900043693072,0.0029733062283590073,0.001753088869445918
iKeypair,3.049990457461021,0.00022319698359352103,0.00019792531427453852,3.207066542768769,0.0006512941219742885,0.0005064778000369863,26.020352541412997,0.0025143592087069067,0.0010972674500919766
gena,2.6965550354099146,0.000484369799391704,0.00048237643023396615,2.7162479142988416,0.0006808616189104555,0.0007206686696927811,12.97504909321936,0.0031123799730270463,0.0032871286177282855
noise,2.977777777777778,0.0,0.0,3.4190382728164868,0.0,0.0033585837650456085,4.070093457943925,0.0,0.0
1 op refnv_sp refnv_elo refnv_ehi ref_sp ref_elo ref_ehi avx2_sp avx2_elo avx2_ehi
2 INVNTT 3.6937872667820737 0.0 0.0001923446816691765 3.6923668525283597 0.0 0.0008062243947173364 186.44660194174756 0.0 0.00970873786408788
3 basemul 3.209016393442623 6.209637357201814e-05 0.00012419274714359219 3.4479583666933546 0.00013344008540183694 0.00013344008540183694 143.55 0.005555555555559977 0.005555555555531555
4 frommsg 3.0156494522691704 0.0 0.0 2.676388888888889 0.0 0.0 148.23076923076923 0.0 0.0
5 NTT 3.691742580076403 0.0010845307227014267 0.0002938583602705158 3.6691004672897196 0.001071270209427766 0.0010718961341775746 126.8989898989899 0.0 1.3050917336631755
6 iDec 3.5713012771855714 0.00023570612000023416 0.00015086802895014628 3.690161977834612 0.0005032782539924341 0.00046931032063479705 114.75503711558855 0.0010604453870683983 0.0010604453870541874
7 iEnc 3.084863236932217 0.0001782560024712332 0.00016342197515761825 3.21233254333646 0.00035364887129318845 0.00028601070699840747 30.157900043693072 0.0029733062283590073 0.001753088869445918
8 iKeypair 3.049990457461021 0.00022319698359352103 0.00019792531427453852 3.207066542768769 0.0006512941219742885 0.0005064778000369863 26.020352541412997 0.0025143592087069067 0.0010972674500919766
9 gena 2.6965550354099146 0.000484369799391704 0.00048237643023396615 2.7162479142988416 0.0006808616189104555 0.0007206686696927811 12.97504909321936 0.0031123799730270463 0.0032871286177282855
10 noise 2.977777777777778 0.0 0.0 3.4190382728164868 0.0 0.0033585837650456085 4.070093457943925 0.0 0.0

View File

@ -0,0 +1,10 @@
op,refnv_sp,refnv_elo,refnv_ehi,ref_sp,ref_elo,ref_ehi,avx2_sp,avx2_elo,avx2_ehi
INVNTT,4.082526315789473,0.0,0.00021052631579010495,3.7465224111282844,0.0,0.00019319938176209916,210.7826086956522,0.0,0.010869565217376476
basemul,3.2770963704630787,0.0016397780187453748,0.0024627477733942804,3.3996364580628406,0.0,0.0,176.9189189189189,0.0,2.4235468345057427
frommsg,3.0109546165884193,0.0,0.0,3.0109546165884193,0.0,0.0,137.42857142857142,0.0,0.0
NTT,3.6866764275256223,0.002157843972798279,0.0010798700725032084,3.7303703703703706,0.0,0.0011056225164107758,132.52631578947367,0.0,8.934358367829702
iDec,3.742600033957779,0.0006353440528448218,0.00042368257587099833,3.79609644087256,0.0002753054612747441,0.0002753370710646408,133.0543259557344,0.0020120724346099905,0.0020120724346099905
iEnc,3.4432478262438213,0.0002504959891131975,0.00030259771432428195,3.530109117810246,0.00039168308874293345,0.00032646898342836295,35.20992436819775,0.0063094659476519155,0.0011068068622037686
iKeypair,3.1751089014071656,9.92090538622925e-05,0.00021725496542801537,3.351041039836322,0.00032261099326946763,0.0003142150864068327,27.8438,0.005767606478706,0.005769913982796027
gena,2.716878579054644,0.00065187098010977,0.0003882364359895085,2.743237945903567,0.0002940023520188184,0.00046488659667787147,12.781735159817352,0.001369863013698236,0.001369863013698236
noise,3.1366495140080044,0.0017923711508616158,0.0,3.433041301627034,0.0,0.0006257822277846437,4.766290182450043,0.0,0.0041446001586527
1 op refnv_sp refnv_elo refnv_ehi ref_sp ref_elo ref_ehi avx2_sp avx2_elo avx2_ehi
2 INVNTT 4.082526315789473 0.0 0.00021052631579010495 3.7465224111282844 0.0 0.00019319938176209916 210.7826086956522 0.0 0.010869565217376476
3 basemul 3.2770963704630787 0.0016397780187453748 0.0024627477733942804 3.3996364580628406 0.0 0.0 176.9189189189189 0.0 2.4235468345057427
4 frommsg 3.0109546165884193 0.0 0.0 3.0109546165884193 0.0 0.0 137.42857142857142 0.0 0.0
5 NTT 3.6866764275256223 0.002157843972798279 0.0010798700725032084 3.7303703703703706 0.0 0.0011056225164107758 132.52631578947367 0.0 8.934358367829702
6 iDec 3.742600033957779 0.0006353440528448218 0.00042368257587099833 3.79609644087256 0.0002753054612747441 0.0002753370710646408 133.0543259557344 0.0020120724346099905 0.0020120724346099905
7 iEnc 3.4432478262438213 0.0002504959891131975 0.00030259771432428195 3.530109117810246 0.00039168308874293345 0.00032646898342836295 35.20992436819775 0.0063094659476519155 0.0011068068622037686
8 iKeypair 3.1751089014071656 9.92090538622925e-05 0.00021725496542801537 3.351041039836322 0.00032261099326946763 0.0003142150864068327 27.8438 0.005767606478706 0.005769913982796027
9 gena 2.716878579054644 0.00065187098010977 0.0003882364359895085 2.743237945903567 0.0002940023520188184 0.00046488659667787147 12.781735159817352 0.001369863013698236 0.001369863013698236
10 noise 3.1366495140080044 0.0017923711508616158 0.0 3.433041301627034 0.0 0.0006257822277846437 4.766290182450043 0.0 0.0041446001586527

View File

@ -0,0 +1,10 @@
op,refnv_sp,refnv_elo,refnv_ehi,ref_sp,ref_elo,ref_ehi,avx2_sp,avx2_elo,avx2_ehi
INVNTT,3.9386252045826513,0.00020458265139122744,0.00020458265139122744,4.006659729448491,0.0008336786786200534,0.00020811654526564638,209.2608695652174,0.010869565217404897,0.010869565217376476
basemul,3.306184521797905,0.02605040612313525,0.002795691291897384,3.545207465120493,0.0,0.0,168.67241379310346,0.0,0.0
frommsg,2.6708333333333334,0.0,0.0,3.0093896713615025,0.0,0.0,147.92307692307693,0.0,0.0
NTT,3.6989152741131632,0.0010840900568913625,0.0,3.681645754304056,0.0,0.0,145.02298850574712,1.6479885057471222,0.0
iDec,3.6437147040368125,0.00019424892094210833,0.0003467108483481418,3.800139609964661,0.0003315569175033062,0.00016580015750289334,132.98167938931297,0.001526717557254642,0.003053435114509284
iEnc,3.3056977990451344,0.00017231513226034778,0.00016363191105694952,3.48133030817818,0.00022700732330438456,0.00021029337701561346,32.81504567436862,0.004063512322623808,0.0006448146157964629
iKeypair,3.109574915272049,0.00020791977755951763,0.00025167432332651174,3.2525126922733425,0.00022163529575136565,0.000286955967172986,24.668559816590246,0.0031435406706883384,0.0007294706127538575
gena,2.7088029828997557,0.0007052965244342957,0.0005931348088656918,2.69161485393067,0.0005617516864933059,0.0005061000727368814,10.337667648020936,0.002917034774819527,0.0013902518809292275
noise,3.0886524822695036,0.0,0.0008865248226950229,3.4156862745098038,0.0,0.0009803921568627416,4.639147802929427,0.0,0.0013315579227697327
1 op refnv_sp refnv_elo refnv_ehi ref_sp ref_elo ref_ehi avx2_sp avx2_elo avx2_ehi
2 INVNTT 3.9386252045826513 0.00020458265139122744 0.00020458265139122744 4.006659729448491 0.0008336786786200534 0.00020811654526564638 209.2608695652174 0.010869565217404897 0.010869565217376476
3 basemul 3.306184521797905 0.02605040612313525 0.002795691291897384 3.545207465120493 0.0 0.0 168.67241379310346 0.0 0.0
4 frommsg 2.6708333333333334 0.0 0.0 3.0093896713615025 0.0 0.0 147.92307692307693 0.0 0.0
5 NTT 3.6989152741131632 0.0010840900568913625 0.0 3.681645754304056 0.0 0.0 145.02298850574712 1.6479885057471222 0.0
6 iDec 3.6437147040368125 0.00019424892094210833 0.0003467108483481418 3.800139609964661 0.0003315569175033062 0.00016580015750289334 132.98167938931297 0.001526717557254642 0.003053435114509284
7 iEnc 3.3056977990451344 0.00017231513226034778 0.00016363191105694952 3.48133030817818 0.00022700732330438456 0.00021029337701561346 32.81504567436862 0.004063512322623808 0.0006448146157964629
8 iKeypair 3.109574915272049 0.00020791977755951763 0.00025167432332651174 3.2525126922733425 0.00022163529575136565 0.000286955967172986 24.668559816590246 0.0031435406706883384 0.0007294706127538575
9 gena 2.7088029828997557 0.0007052965244342957 0.0005931348088656918 2.69161485393067 0.0005617516864933059 0.0005061000727368814 10.337667648020936 0.002917034774819527 0.0013902518809292275
10 noise 3.0886524822695036 0.0 0.0008865248226950229 3.4156862745098038 0.0 0.0009803921568627416 4.639147802929427 0.0 0.0013315579227697327

View File

@ -0,0 +1,10 @@
op,m512_sp,m512_elo,m512_ehi,m768_sp,m768_elo,m768_ehi,m1024_sp,m1024_elo,m1024_ehi
INVNTT,56.26086956521739,0.0,0.0,52.22826086956522,0.0,0.010869565217390686,50.49514563106796,0.009708737864080774,0.0
basemul,52.04054054054054,0.0,0.7128841169937061,47.577586206896555,0.0,0.0,41.63333333333333,0.0,0.0
frommsg,45.642857142857146,0.0,0.0,49.15384615384615,0.0,0.0,55.38461538461539,0.0,0.0
NTT,35.526315789473685,0.010526315789476826,2.395032525133054,39.39080459770115,0.44762277951932816,0.0,34.58585858585859,0.010101010101010388,0.3631210059781438
iDec,35.05030181086519,0.0020120724346099905,0.002012072434602885,34.993893129770996,0.001526717557254642,0.0030534351145021787,31.097560975609756,0.0037115588547180778,0.004241781548248724
iEnc,9.974174506548607,0.0014707072125688114,0.0011068068622019922,9.426007522837184,0.0013889971548284308,0.0005373455131660876,9.38816253823144,0.001122140301749397,0.001223049292088163
iKeypair,8.309,0.0020613877224544552,0.0018621724344871637,7.584462275948312,0.0012591916511350831,0.0003647353063778169,8.113443296049837,0.0015653318677752992,0.0014866204162533592
gena,4.659360730593607,0.00045662100456667076,0.0004566210045657826,3.8406934903500165,0.0009551420262225996,0.0004906771344455052,4.776828000462054,0.0014497812681515398,0.0015659914501355843
noise,1.3883579496090357,0.0,0.0012072677822687616,1.3581890812250332,0.0,0.0,1.1904205607476634,0.001168224299065379,0.0
1 op m512_sp m512_elo m512_ehi m768_sp m768_elo m768_ehi m1024_sp m1024_elo m1024_ehi
2 INVNTT 56.26086956521739 0.0 0.0 52.22826086956522 0.0 0.010869565217390686 50.49514563106796 0.009708737864080774 0.0
3 basemul 52.04054054054054 0.0 0.7128841169937061 47.577586206896555 0.0 0.0 41.63333333333333 0.0 0.0
4 frommsg 45.642857142857146 0.0 0.0 49.15384615384615 0.0 0.0 55.38461538461539 0.0 0.0
5 NTT 35.526315789473685 0.010526315789476826 2.395032525133054 39.39080459770115 0.44762277951932816 0.0 34.58585858585859 0.010101010101010388 0.3631210059781438
6 iDec 35.05030181086519 0.0020120724346099905 0.002012072434602885 34.993893129770996 0.001526717557254642 0.0030534351145021787 31.097560975609756 0.0037115588547180778 0.004241781548248724
7 iEnc 9.974174506548607 0.0014707072125688114 0.0011068068622019922 9.426007522837184 0.0013889971548284308 0.0005373455131660876 9.38816253823144 0.001122140301749397 0.001223049292088163
8 iKeypair 8.309 0.0020613877224544552 0.0018621724344871637 7.584462275948312 0.0012591916511350831 0.0003647353063778169 8.113443296049837 0.0015653318677752992 0.0014866204162533592
9 gena 4.659360730593607 0.00045662100456667076 0.0004566210045657826 3.8406934903500165 0.0009551420262225996 0.0004906771344455052 4.776828000462054 0.0014497812681515398 0.0015659914501355843
10 noise 1.3883579496090357 0.0 0.0012072677822687616 1.3581890812250332 0.0 0.0 1.1904205607476634 0.001168224299065379 0.0

View File

@ -0,0 +1,4 @@
op,m512_sp,m512_elo,m512_ehi,m768_sp,m768_elo,m768_ehi,m1024_sp,m1024_elo,m1024_ehi
KeyGen,5.351663635391034,0.003951776171514432,0.0036136071694450322,5.515256061277458,0.0010128505412421163,0.0011711084383110304,5.92988426026269,0.009300851394026033,0.008673806818412011
Encaps,5.976169109582211,0.0057508565558670455,0.00541865850737544,6.159967741935484,0.0016760536843927198,0.0019668260454155373,6.374312588912245,0.007289526521085499,0.0062883831365772025
Decaps,7.12829219051115,0.0038254678112616958,0.002336315747572648,7.078920782076425,0.0017374106397927136,0.001435830107824998,6.920672062603092,0.007041626152989089,0.00611276112038972
1 op m512_sp m512_elo m512_ehi m768_sp m768_elo m768_ehi m1024_sp m1024_elo m1024_ehi
2 KeyGen 5.351663635391034 0.003951776171514432 0.0036136071694450322 5.515256061277458 0.0010128505412421163 0.0011711084383110304 5.92988426026269 0.009300851394026033 0.008673806818412011
3 Encaps 5.976169109582211 0.0057508565558670455 0.00541865850737544 6.159967741935484 0.0016760536843927198 0.0019668260454155373 6.374312588912245 0.007289526521085499 0.0062883831365772025
4 Decaps 7.12829219051115 0.0038254678112616958 0.002336315747572648 7.078920782076425 0.0017374106397927136 0.001435830107824998 6.920672062603092 0.007041626152989089 0.00611276112038972

View File

@ -0,0 +1,53 @@
import sys
import csv
import numpy as np
sys.path.insert(0, 'tools')
from viz_theme import apply_monochrome, save_svg
apply_monochrome()
import matplotlib.pyplot as plt
def read_data(filepath):
ops = []
m512 = []; m512_err = []
m768 = []; m768_err = []
m1024 = []; m1024_err = []
with open(filepath, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
ops.append(row['op'])
m512.append(float(row['m512_sp']))
m512_err.append([float(row['m512_elo']), float(row['m512_ehi'])])
m768.append(float(row['m768_sp']))
m768_err.append([float(row['m768_elo']), float(row['m768_ehi'])])
m1024.append(float(row['m1024_sp']))
m1024_err.append([float(row['m1024_elo']), float(row['m1024_ehi'])])
m512_err = np.array(m512_err).T
m768_err = np.array(m768_err).T
m1024_err = np.array(m1024_err).T
return ops, m512, m512_err, m768, m768_err, m1024, m1024_err
filepath = "content/essays/where-does-simd-help-post-quantum-cryptography/figures/data/cross_param.csv"
ops, m512, m512_err, m768, m768_err, m1024, m1024_err = read_data(filepath)
fig, ax = plt.subplots(figsize=(8, 4))
bar_width = 0.25
colors = ['#333333', '#777777', '#bbbbbb']
labels = ['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']
x = np.arange(len(ops))
ax.bar(x - bar_width, m512, bar_width, label=labels[0], color=colors[0], yerr=m512_err, edgecolor='none')
ax.bar(x, m768, bar_width, label=labels[1], color=colors[1], yerr=m768_err, edgecolor='none')
ax.bar(x + bar_width, m1024, bar_width, label=labels[2], color=colors[2], yerr=m1024_err, edgecolor='none')
ax.set_xticks(x)
ax.set_xticklabels(ops)
ax.set_ylabel("Speedup ref $\\to$ avx2 ($\\times$)")
ax.set_ylim(bottom=0, top=70)
ax.legend(loc='upper right', frameon=False, fontsize='small')
save_svg(fig)

View File

@ -0,0 +1,70 @@
import sys
import os
import csv
import numpy as np
sys.path.insert(0, 'tools')
from viz_theme import apply_monochrome, save_svg
apply_monochrome()
import matplotlib.pyplot as plt
def read_data(filepath):
ops = []
refnv = []; refnv_err = []
ref = []; ref_err = []
avx2 = []; avx2_err = []
with open(filepath, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
ops.append(row['op'])
refnv.append(float(row['refnv_sp']))
refnv_err.append([float(row['refnv_elo']), float(row['refnv_ehi'])])
ref.append(float(row['ref_sp']))
ref_err.append([float(row['ref_elo']), float(row['ref_ehi'])])
avx2.append(float(row['avx2_sp']))
avx2_err.append([float(row['avx2_elo']), float(row['avx2_ehi'])])
refnv_err = np.array(refnv_err).T
ref_err = np.array(ref_err).T
avx2_err = np.array(avx2_err).T
return ops, refnv, refnv_err, ref, ref_err, avx2, avx2_err
base_path = "content/essays/where-does-simd-help-post-quantum-cryptography/figures/data"
params = [("ML-KEM-512", f"{base_path}/decomp_mlkem512.csv"),
("ML-KEM-768", f"{base_path}/decomp_mlkem768.csv"),
("ML-KEM-1024", f"{base_path}/decomp_mlkem1024.csv")]
fig, axes = plt.subplots(1, 3, figsize=(12, 4), sharey=True)
bar_width = 0.25
colors = ['#333333', '#777777', '#bbbbbb']
labels = ['O3 (no auto-vec)', 'O3 + auto-vec', 'O3 + hand SIMD']
for i, (title, filepath) in enumerate(params):
ops, refnv, refnv_err, ref, ref_err, avx2, avx2_err = read_data(filepath)
ax = axes[i]
x = np.arange(len(ops))
ax.bar(x - bar_width, refnv, bar_width, label=labels[0], color=colors[0], yerr=refnv_err, edgecolor='none')
ax.bar(x, ref, bar_width, label=labels[1], color=colors[1], yerr=ref_err, edgecolor='none')
ax.bar(x + bar_width, avx2, bar_width, label=labels[2], color=colors[2], yerr=avx2_err, edgecolor='none')
ax.set_title(title, pad=10)
ax.set_xticks(x)
# Format xticklabels to replace iDec, iEnc, iKeypair, gena
display_ops = [op.replace('gena', 'gen_a') for op in ops]
ax.set_xticklabels(display_ops, rotation=45, ha='right')
ax.set_yscale('log')
if i == 0:
ax.set_ylabel("Speedup over -O0 ($\times$)")
# Tick formatting
ax.set_ylim(bottom=1, top=500)
import matplotlib.ticker as ticker
ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y, pos: f"${int(y)}\\times$"))
axes[-1].legend(loc='upper right', frameon=False, fontsize='small')
save_svg(fig)

View File

@ -0,0 +1,57 @@
import sys
import csv
import numpy as np
sys.path.insert(0, 'tools')
from viz_theme import apply_monochrome, save_svg
apply_monochrome()
import matplotlib.pyplot as plt
def read_data(filepath):
ops = []
m512 = []; m512_err = []
m768 = []; m768_err = []
m1024 = []; m1024_err = []
with open(filepath, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
ops.append(row['op'])
m512.append(float(row['m512_sp']))
m512_err.append([float(row['m512_elo']), float(row['m512_ehi'])])
m768.append(float(row['m768_sp']))
m768_err.append([float(row['m768_elo']), float(row['m768_ehi'])])
m1024.append(float(row['m1024_sp']))
m1024_err.append([float(row['m1024_elo']), float(row['m1024_ehi'])])
m512_err = np.array(m512_err).T
m768_err = np.array(m768_err).T
m1024_err = np.array(m1024_err).T
return ops, m512, m512_err, m768, m768_err, m1024, m1024_err
filepath = "content/essays/where-does-simd-help-post-quantum-cryptography/figures/data/hand_simd.csv"
ops, m512, m512_err, m768, m768_err, m1024, m1024_err = read_data(filepath)
fig, ax = plt.subplots(figsize=(10, 4))
bar_width = 0.25
colors = ['#333333', '#777777', '#bbbbbb']
labels = ['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']
x = np.arange(len(ops))
ax.bar(x - bar_width, m512, bar_width, label=labels[0], color=colors[0], yerr=m512_err, edgecolor='none')
ax.bar(x, m768, bar_width, label=labels[1], color=colors[1], yerr=m768_err, edgecolor='none')
ax.bar(x + bar_width, m1024, bar_width, label=labels[2], color=colors[2], yerr=m1024_err, edgecolor='none')
ax.set_xticks(x)
display_ops = [op.replace('gena', 'gen_a') for op in ops]
ax.set_xticklabels(display_ops, rotation=45, ha='right')
ax.set_yscale('log')
ax.set_ylabel("Speedup ref $\\to$ avx2 ($\\times$)")
ax.set_ylim(bottom=1, top=100)
import matplotlib.ticker as ticker
ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y, pos: f"${int(y)}\\times$"))
ax.legend(loc='upper left', frameon=False, fontsize='small')
save_svg(fig)

View File

@ -0,0 +1,53 @@
import sys
import csv
import numpy as np
sys.path.insert(0, 'tools')
from viz_theme import apply_monochrome, save_svg
apply_monochrome()
import matplotlib.pyplot as plt
def read_data(filepath):
ops = []
m512 = []; m512_err = []
m768 = []; m768_err = []
m1024 = []; m1024_err = []
with open(filepath, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
ops.append(row['op'])
m512.append(float(row['m512_sp']))
m512_err.append([float(row['m512_elo']), float(row['m512_ehi'])])
m768.append(float(row['m768_sp']))
m768_err.append([float(row['m768_elo']), float(row['m768_ehi'])])
m1024.append(float(row['m1024_sp']))
m1024_err.append([float(row['m1024_elo']), float(row['m1024_ehi'])])
m512_err = np.array(m512_err).T
m768_err = np.array(m768_err).T
m1024_err = np.array(m1024_err).T
return ops, m512, m512_err, m768, m768_err, m1024, m1024_err
filepath = "content/essays/where-does-simd-help-post-quantum-cryptography/figures/data/kem_level.csv"
ops, m512, m512_err, m768, m768_err, m1024, m1024_err = read_data(filepath)
fig, ax = plt.subplots(figsize=(8, 4))
bar_width = 0.25
colors = ['#333333', '#777777', '#bbbbbb']
labels = ['ML-KEM-512', 'ML-KEM-768', 'ML-KEM-1024']
x = np.arange(len(ops))
ax.bar(x - bar_width, m512, bar_width, label=labels[0], color=colors[0], yerr=m512_err, edgecolor='none')
ax.bar(x, m768, bar_width, label=labels[1], color=colors[1], yerr=m768_err, edgecolor='none')
ax.bar(x + bar_width, m1024, bar_width, label=labels[2], color=colors[2], yerr=m1024_err, edgecolor='none')
ax.set_xticks(x)
ax.set_xticklabels(ops)
ax.set_ylabel("Speedup ref $\\to$ avx2 ($\\times$)")
ax.set_ylim(bottom=0, top=9)
ax.legend(loc='upper left', frameon=False, fontsize='small')
save_svg(fig)

View File

@ -0,0 +1,333 @@
---
title: "Where Does SIMD Help Post-Quantum Cryptography? A Micro-Architectural Study of ML-KEM on x86 AVX2"
date: 2026-04-04
abstract: >
We systematically decompose the sources of SIMD speedup for ML-KEM (Kyber) on Intel x86-64 AVX2. By benchmarking four compilation variants, we demonstrate that GCC's auto-vectorizer provides negligible benefit, and that hand-written AVX2 assembly delivers a $35\times$$56\times$ performance increase for core arithmetic operations. This drives an end-to-end KEM speedup of $5.4\times$$7.1\times$.
tags:
- research
- research/cryptography
- research/hpc
- research/compilers
- research/systems
- tech
- tech/hpc
- tech/asm
- tech/C
authors:
- "Levi Neuwirth | /me.html"
affiliation:
- "Department of Computer Science, Brown University | https://cs.brown.edu"
bibliography: data/simd-paper.bib
repository: "https://git.levineuwirth.org/where-simd-helps"
---
## Introduction
The 2024 NIST post-quantum cryptography standards[@fips203; @fips204; @fips205] mark a turning point in deployed cryptography. ML-KEM (Module-Lattice Key Encapsulation Mechanism, FIPS 203) is already being integrated into TLS 1.3 by major browser vendors[@bettini2024] and is planned for inclusion in OpenSSH. A server handling thousands of TLS handshakes per second experiences a non-trivial computational overhead from replacing elliptic-curve key exchange with a lattice-based KEM. These performance concerns propagate to the countless users that use tools like OpenSSH on a daily basis.
Reference implementations of ML-KEM ship with hand-optimized AVX2 assembly for the dominant operations[@kyber-avx2]. Benchmarks routinely report that the AVX2 path is "$5$$7\times$ faster" than the portable C reference. However, such top-level numbers conflate several distinct phenomena: compiler optimization, compiler auto-vectorization, and hand-written SIMD. They also say nothing about *which* operations drive the speedup or *why* the assembly is faster than what a compiler can produce automatically.
### Contributions
We make the following contributions:
1. **Three-way speedup decomposition.** We isolate compiler optimization, auto-vectorization, and hand-written SIMD as separate factors using four compilation variants (the corresponding section).
2. **Statistically rigorous benchmarking.** All comparisons are backed by Mann-Whitney U tests and Cliff's $\delta$ effect-size analysis over $n \ge 2{,}000$ independent observations, with bootstrapped 95% confidence intervals on speedup ratios (the corresponding section).
3. **Mechanistic analysis without hardware counters.** We explain the quantitative speedup pattern analytically from the structure of the NTT butterfly, Montgomery multiplication, and the SHAKE-128 permutation (the corresponding section).
4. **Open reproducible artifact.** The full pipeline from raw SLURM outputs to publication figures is released publicly.
### Scope and roadmap
This report covers Phase 1 of a broader study: ML-KEM on Intel x86-64 with AVX2. Planned extensions include hardware performance counter profiles (PAPI), energy measurement (Intel RAPL), extension to ML-DSA (Dilithium), and cross-ISA comparison with ARM NEON/SVE and RISC-V V. Those results will be incorporated in subsequent revisions.
## Background
### ML-KEM and the Number Theoretic Transform
ML-KEM[@fips203] is a key encapsulation mechanism built on the Module-Learning-With-Errors (Module-LWE) problem. Its security parameter $k \in \{2, 3, 4\}$ controls the module dimension, yielding the three instantiations ML-KEM-512, ML-KEM-768, and ML-KEM-1024. The scheme operates on polynomials in $\mathbb{Z}_q[x]/(x^{256}+1)$ with $q = 3329$.
The computational core is polynomial multiplication, which ML-KEM evaluates using the Number Theoretic Transform (NTT)[@ntt-survey]. The NTT is a modular analog of the Fast Fourier Transform that reduces schoolbook $O(n^2)$ polynomial multiplication to $O(n \log n)$ pointwise operations. For $n = 256$ coefficients and $q = 3329$, the NTT can be computed using a specialized radix-2 Cooley-Tukey butterfly operating over 128 size-2 NTTs in the NTT domain.
The primitive operations benchmarked in this paper are:
- `NTT` / `INVNTT`: forward and inverse NTT over a single polynomial ($n = 256$).
- `basemul`: pointwise multiplication in the NTT domain (base multiplication of two NTT-domain polynomials).
- `poly_frommsg`: encodes a 32-byte message into a polynomial.
- `gen_a`: generates the public matrix $\mathbf{A}$ by expanding a seed with SHAKE-128.
- `poly_getnoise_eta{1,2}`: samples a centered binomial distribution (CBD) noise polynomial using SHAKE-256 output.
- `indcpa_{keypair, enc, dec}`: full IND-CPA key generation, encryption, and decryption.
### AVX2 SIMD on x86-64
[Intel's Advanced Vector Extensions 2](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2) (AVX2) extends the YMM register file to 256-bit width, accommodating sixteen 16-bit integers simultaneously. The ML-KEM AVX2 implementation[@kyber-avx2] by Schwabe and Seiler uses hand-written assembly intrinsics rather than compiler-generated vectorized code.
The key instruction patterns exploited are:
- `vpaddw` / `vpsubw`: packed 16-bit addition/subtraction, operating on 16 coefficients per instruction.
- `vpmullw` / `vpmulhw`: packed 16-bit low/high multiply, used to implement 16-wide Montgomery reduction.
- `vpunpcklwd` / `vpunpckhwd`: interleave operations for the NTT butterfly shuffle pattern.
Because ML-KEM coefficients are 16-bit integers and the NTT butterfly operates independently on 16 coefficient pairs per round, AVX2 offers a theoretical $16\times$ instruction-count reduction for arithmetic steps. As the corresponding section shows, observed speedups *exceed* $16\times$ for `INVNTT` and `basemul` due to additional instruction-level parallelism (ILP) in the unrolled hand-written loops.
### Compilation Variants
To isolate distinct sources of speedup, we define four compilation variants (detailed in the corresponding section):
- **`refo0`** Compiled at `-O0`: the baseline with no compiler optimization.
- **`refnv`** Compiled at `-O3 -fno-tree-vectorize`: full compiler optimization but with auto-vectorization disabled. Isolates the contribution of general compiler optimizations (eg. loop unrolling) from SIMD.
- **`ref`** Compiled at `-O3`: full optimization including GCC's auto-vectorizer, similar to typical production environments.
- **`avx2`** Hand-written AVX2 assembly.
### Hardware Performance Counters and Energy
::: {.annotation .annotation--static}
**Phase 2:** Expand with PAPI and RAPL background once data is collected.
:::
Hardware performance counters (accessed via PAPI[@papi] or Linux `perf_event`) allow measuring IPC, cache miss rates, and branch mispredictions at the instruction level. Intel RAPL[@rapl] provides package- and DRAM-domain energy readings. These will be incorporated in Phase 2 to provide a mechanistic hardware-level explanation complementing the cycle-count analysis presented here.
## Methodology
### Implementation Source
We use the ML-KEM reference implementation from the `pq-crystals/kyber` repository[@kyber-avx2], which provides both a portable C reference (`ref` / `refnv`) and hand-written AVX2 assembly (`avx2`). The implementation targets the CRYSTALS-Kyber specification, functionally identical to FIPS 203.
### Compilation Variants
We compile the same C source under four variant configurations using GCC 13.3.0 on the same machine:
- **`refo0`** `-O0`: unoptimized. Every operation is loaded/stored through memory; no inlining, no register allocation. Establishes a reproducible performance floor.
- **`refnv`** `-O3 -fno-tree-vectorize`: aggressive scalar optimization but with the tree-vectorizer disabled. Isolates the auto-vectorization contribution from general O3 optimizations.
- **`ref`** `-O3`: full optimization with GCC auto-vectorization enabled. Represents realistic scalar-C performance.
- **`avx2`** `-O3` with hand-written AVX2 assembly linked in: the production optimized path.
All four variants are built with position-independent code and identical linker flags. The AVX2 assembly sources use the same `KYBER_NAMESPACE` macro as the C sources to prevent symbol collisions.
### Benchmark Harness
Each binary runs a *spin loop*: $N = 1{,}000$ outer iterations (spins), each performing 20 repetitions of the target operation followed by a median and mean cycle count report via `RDTSC`. Using the median of 20 repetitions per spin suppresses within-spin outliers; collecting 1{,}000 spins produces a distribution of 1{,}000 median observations per binary invocation.
Two independent job submissions per (algorithm, variant) pair yield $n \ge 2{,}000$ independent observations per group (3{,}000 for `ref` and `avx2`, which had a third clean run). All runs used `taskset` to pin to a single logical core, preventing OS scheduling interference.
### Hardware Platform
All benchmarks were conducted on Brown University's [OSCAR HPC cluster](https://docs.ccv.brown.edu/oscar), node `node2334`, pinned via SLURM's `--nodelist` directive to ensure all variants measured on identical hardware. The node specifications are:
| Characteristic | Detail |
|----------------|--------|
| CPU model | Intel Xeon Platinum 8268 (Cascade Lake) |
| Clock speed | 2.90 GHz base |
| ISA extensions | SSE4.2, AVX, AVX2, AVX-512F |
| L1D cache | 32 KB (per core) |
| L2 cache | 1 MB (per core) |
| L3 cache | 35.75 MB (shared) |
| OS | Linux (kernel 3.10) |
| Compiler | GCC 13.3.0 |
**Reproducibility note:** The `perf_event_paranoid` setting on OSCAR nodes is 2, which prevents unprivileged access to hardware performance counters. Hardware counter data (IPC, cache miss rates) will be collected in Phase 2 via alternative means.
::: {.annotation .annotation--static}
**Phase 2:** Hardware counter collection via PAPI.
:::
### Statistical Methodology
Cycle count distributions are right-skewed with occasional outliers from OS interrupts and cache-cold starts (the figure). We therefore use nonparametric statistics throughout:
- **Speedup**: ratio of group medians, $\hat{s} = \text{median}(X_\text{baseline}) / \text{median}(X_\text{variant})$.
- **Confidence interval**: 95% bootstrap CI on $\hat{s}$, computed by resampling both groups independently $B = 5{,}000$ times with replacement.
- **Mann-Whitney U test**: one-sided test for the hypothesis that the variant distribution is stochastically smaller than the baseline ($H_1: P(X_\text{variant} < X_\text{baseline}) > 0.5$).
- **Cliff's $\delta$**: effect size defined as $\delta = [P(X_\text{variant} < X_\text{baseline}) - P(X_\text{variant} > X_\text{baseline})]$, derived from the Mann-Whitney U statistic. $\delta = +1$ indicates that *every* variant observation is faster than *every* baseline observation.
### Energy Measurement
::: {.annotation .annotation--static}
**Phase 2:** Intel RAPL (pkg + DRAM domains), EDP computation, per-operation joules.
:::
Energy measurements via Intel RAPL will be incorporated in Phase 2. The harness already includes conditional RAPL support (`-DWITH_RAPL=ON`) pending appropriate system permissions.
## Results
### Cycle Count Distributions
The figure shows the cycle count distributions for three representative operations in ML-KEM-512, comparing `ref` and `avx2`. All distributions are right-skewed with a long tail from OS interrupts and cache-cold executions. The median (dashed lines) is robust to these outliers, justifying the nonparametric approach of the corresponding section.
The separation between `ref` and `avx2` is qualitatively different across operation types: for `INVNTT` the distributions do not overlap at all (disjoint spikes separated by two orders of magnitude on the log scale); for `gen_a` there is partial overlap; for noise sampling the distributions are nearly coincident.
![Cycle count distributions for three representative ML-KEM-512 operations. Log $x$-axis. Dashed lines mark medians. Right-skew and outlier structure motivate nonparametric statistics.](figures/distributions.pdf)
### Speedup Decomposition
The figure shows the cumulative speedup at each optimization stage for all three ML-KEM parameter sets. Each group of bars represents one operation; the three bars within a group show the total speedup achieved after applying (i) O3 without auto-vec (`refnv`), (ii) O3 with auto-vec (`ref`), and (iii) hand-written AVX2 (`avx2`)—all normalized to the unoptimized `refo0` baseline. The log scale makes the three orders of magnitude of variation legible.
Several structural features are immediately apparent:
- The `refnv` and `ref` bars are nearly indistinguishable for arithmetic operations (NTT, INVNTT, basemul, frommsg), confirming that GCC's auto-vectorizer contributes negligibly to these operations.
- The `avx2` bars are 12 orders of magnitude taller than the `ref` bars for arithmetic operations, indicating that hand-written SIMD dominates the speedup.
- For SHAKE-heavy operations (gen_a, noise), all three bars are much closer together, reflecting the memory-bandwidth bottleneck that limits SIMD benefit.
::: {.figure script="figures/fig_decomp.py" caption="Cumulative speedup at each optimization stage, normalized to `refo0` (1×). Three bars per operation: O3 no auto-vec, O3 + auto-vec, O3 + hand SIMD (AVX2). Log $y$-axis; 95% bootstrap CI shown on `avx2` bars. Sorted by `avx2` speedup."}
:::
### Hand-Written SIMD Speedup
The figure isolates the hand-written SIMD speedup (`ref` $\to$ `avx2`) across all three ML-KEM parameter sets. The table summarizes the numerical values.
Key observations:
- **Arithmetic operations** achieve the largest speedups: $56.3\times$ for `INVNTT` at ML-KEM-512, $52.0\times$ for `basemul`, and $45.6\times$ for `frommsg`. The 95% bootstrap CIs on these ratios are extremely tight (often $[\hat{s}, \hat{s}]$ to two decimal places), reflecting near-perfect measurement stability.
- **gen_a** achieves $3.8\times$$4.7\times$: substantially smaller than arithmetic operations because SHAKE-128 generation is memory-bandwidth limited.
- **Noise sampling** achieves only $1.2\times$$1.4\times$, the smallest SIMD benefit. The centered binomial distribution (CBD) sampler is bit-manipulation-heavy with sequential bitstream reads that do not parallelise well.
- Speedups are broadly consistent across parameter sets for per-polynomial operations, as expected (the corresponding section).
::: {.figure script="figures/fig_hand_simd.py" caption="Hand-written SIMD speedup (`ref` $\to$ `avx2`) per operation, across all three ML-KEM parameter sets. Log $y$-axis. 95% bootstrap CI error bars (often sub-pixel). Sorted by ML-KEM-512 speedup."}
:::
| Operation | ML-KEM-512 | ML-KEM-768 | ML-KEM-1024 |
|-----------|------------|------------|-------------|
| `INVNTT` | $56.3\times$ | $52.2\times$ | $50.5\times$ |
| `basemul` | $52.0\times$ | $47.6\times$ | $41.6\times$ |
| `frommsg` | $45.6\times$ | $49.2\times$ | $55.4\times$ |
| `NTT` | $35.5\times$ | $39.4\times$ | $34.6\times$ |
| `iDec` | $35.1\times$ | $35.0\times$ | $31.1\times$ |
| `iEnc` | $10.0\times$ | $9.4\times$ | $9.4\times$ |
| `iKeypair`| $8.3\times$ | $7.6\times$ | $8.1\times$ |
| `gen_a` | $4.7\times$ | $3.8\times$ | $4.8\times$ |
| `noise` | $1.4\times$ | $1.4\times$ | $1.2\times$ |
*Table 1: Hand-written SIMD speedup (`ref` $\to$ `avx2`), median ratio with 95% bootstrap CI. All Cliff's $\delta = +1.000$, $p < 10^{-300}$.*
### Statistical Significance
All `ref` vs. `avx2` comparisons pass the Mann-Whitney U test at $p < 10^{-300}$. Cliff's $\delta = +1.000$ for all operations except `NTT` at ML-KEM-512 and ML-KEM-1024 ($\delta = +0.999$), meaning AVX2 achieves a strictly smaller cycle count than `ref` in effectively every observation pair.
The figure shows the heatmap of Cliff's $\delta$ values across all operations and parameter sets.
::: {.figure script="figures/cliffs_delta_heatmap.py" caption="Cliff's $\delta$ (`ref` vs. `avx2`) for all operations and parameter sets. $\delta = +1$: AVX2 is faster in every observation pair. Nearly all cells are at $+1.000$."}
:::
### Cross-Parameter Consistency
The figure shows the `avx2` speedup for the four per-polynomial operations across ML-KEM-512, ML-KEM-768, and ML-KEM-1024. Since all three instantiations operate on 256-coefficient polynomials, speedups for `frommsg` and `INVNTT` should be parameter-independent. This holds approximately: frommsg varies by only $\pm{10\%}$, INVNTT by $\pm{6\%}$.
`NTT` shows a more pronounced variation ($35.5\times$ at ML-KEM-512, $39.4\times$ at ML-KEM-768, $34.6\times$ at ML-KEM-1024) that is statistically real (non-overlapping 95% CIs). We attribute this to *cache state effects*: the surrounding polyvec loops that precede each NTT call have a footprint that varies with $k$, leaving different cache residency patterns that affect NTT latency in the scalar `ref` path. The AVX2 path is less sensitive because its smaller register footprint keeps more state in vector registers.
::: {.figure script="figures/fig_cross_param.py" caption="Per-polynomial operation speedup (`ref` $\to$ `avx2`) across security parameters. Polynomial dimension is 256 for all; variation reflects cache-state differences in the calling context."}
:::
### Hardware Counter Breakdown
::: {.annotation .annotation--static}
**Phase 2:** IPC, L1/L2/L3 cache miss rates, branch mispredictions via PAPI. This section will contain bar charts of per-counter values comparing ref and avx2 for each operation, explaining the mechanistic origins of the speedup.
:::
### Energy Efficiency
::: {.annotation .annotation--static}
**Phase 2:** Intel RAPL pkg + DRAM energy readings per operation. EDP (energy-delay product) comparison. Energy per KEM operation.
:::
## Discussion
### Why Arithmetic Operations Benefit Most
The NTT butterfly loop processes 128 pairs of 16-bit coefficients per forward transform. In the scalar `ref` path, each butterfly requires a modular multiplication (implemented as a Barrett reduction), an addition, and a subtraction—roughly 1015 instructions per pair with data-dependent serialization through the multiply-add chain. The AVX2 path uses `vpmullw`/`vpmulhw` to compute 16 Montgomery multiplications per instruction, processing an entire butterfly layer in $\sim$16 fewer instruction cycles.
The observed INVNTT speedup of $56.3\times$ at ML-KEM-512 *exceeds* the theoretical $16\times$ register-width advantage. We attribute this to two compounding factors: (1) the unrolled hand-written assembly eliminates loop overhead and branch prediction pressure; (2) the inverse NTT has a slightly different access pattern than the forward NTT that benefits from out-of-order execution with wide issue ports on the Cascade Lake microarchitecture.
::: {.annotation .annotation--static}
**Phase 2:** Confirm with IPC and port utilisation counters.
:::
### Why the Compiler Cannot Auto-Vectorize NTT
A striking result is that `ref` and `refnv` perform nearly identically for all arithmetic operations ($\leq 10\%$ difference, with `refnv` occasionally faster). This means GCC's tree-vectorizer produces no net benefit for the NTT inner loop.
The fundamental obstacle is *modular reduction*: [Barrett reduction](https://en.wikipedia.org/wiki/Barrett_reduction) and [Montgomery reduction](https://en.wikipedia.org/wiki/Montgomery_modular_multiplication) require a multiply-high operation (`vpmulhw`) that GCC cannot express through the scalar multiply-add chain it generates for the C reference code. Additionally, the NTT butterfly requires coefficient interleaving (odd/even index separation) that the auto-vectorizer does not recognize as a known shuffle pattern. The hand-written assembly encodes these patterns directly in `vpunpck*` instructions.
This finding has practical significance: developers porting ML-KEM to new platforms cannot rely on the compiler to provide SIMD speedup for the NTT. Hand-written intrinsics or architecture-specific assembly are necessary to achieve the substantiate performance gains that we have observed.
### Why SHAKE Operations Benefit Less
`gen_a` expands a public seed into a $k \times k$ matrix of polynomials using SHAKE-128. Each Keccak-f[1600] permutation operates on a 200-byte state that does not fit in AVX2 registers (16 lanes $\times$ 16 bits = 32 bytes). The AVX2 Keccak implementation achieves $3.8\times$$4.7\times$ primarily by batching multiple independent absorb phases and using vectorized XOR across parallel state words—a different kind of SIMD parallelism than the arithmetic path. The bottleneck shifts to memory bandwidth as the permutation state is repeatedly loaded from and stored to L1 cache.
### Why Noise Sampling Barely Benefits
CBD noise sampling reads adjacent bits from a byte stream and computes [Hamming weights](https://en.wikipedia.org/wiki/Hamming_weight). The scalar path already uses bitwise operations with no data-dependent branches (constant-time design). The AVX2 path can batch the popcount computation but remains bottlenecked by the sequential bitstream access pattern. The small $1.2\times$$1.4\times$ speedup reflects this fundamental memory access bottleneck rather than compute limitation.
### NTT Cache-State Variation Across Parameter Sets
The $13\%$ variation in NTT speedup across parameter sets (the corresponding section) despite identical polynomial dimensions suggests that execution context matters even for nominally isolated micro-benchmarks. Higher-$k$ polyvec operations that precede each NTT call have larger memory footprints ($k$ more polynomials in the accumulation buffer), potentially evicting portions of the instruction cache or L1 data cache that the scalar NTT path relies on. The AVX2 path is less affected because it maintains more coefficient state in vector registers between operations.
::: {.annotation .annotation--static}
**Phase 2:** Verify with L1/L2 miss counters split by scalar vs AVX2.
:::
### Implications for Deployment
The end-to-end KEM speedups of $5.4\times$$7.1\times$ (Supplementary, the figure) represent the practical deployment benefit. Deployments that cannot use hand-written SIMD (e.g., some constrained environments, or languages without inline assembly support) should expect performance within a factor of $5$$7$ of the AVX2 reference. Auto-vectorization provides essentially no shortcut: the gap between compiler-optimized C and hand-written SIMD is the full $5$$7\times$, not a fraction of it.
### Limitations
**No hardware counter data (Phase 1).** The mechanistic explanations in this section are derived analytically from instruction-set structure and publicly known microarchitecture details. Phase 2 will validate these with PAPI counter measurements.
::: {.annotation .annotation--static}
**Phase 2:** PAPI counters: IPC, cache miss rates.
:::
**Single microarchitecture.** All results are from Intel Cascade Lake (Xeon Platinum 8268). Speedup ratios may differ on other AVX2 hosts (e.g., Intel Skylake, AMD Zen 3/4) due to differences in execution port configuration, vector throughput, and out-of-order window size.
::: {.annotation .annotation--static}
**Phase 3:** Repeat on AMD Zen, ARM Graviton3, RISC-V.
:::
**Frequency scaling.** OSCAR nodes may operate in a power-capped mode that reduces Turbo Boost frequency under sustained SIMD load. RDTSC counts wall-clock ticks at the invariant TSC frequency, which may differ from the actual core frequency during SIMD execution.
::: {.annotation .annotation--static}
**Phase 2:** Characterize frequency during benchmarks; consider RAPL-normalized cycle counts.
:::
## Related Work
**ML-KEM / Kyber implementations.**
The AVX2 implementation studied here was developed by Schwabe and Seiler[@kyber-avx2] and forms the optimized path in both the `pq-crystals/kyber` reference repository and PQClean[@pqclean]. Bos et al.[@kyber2018] describe the original Kyber submission; FIPS 203[@fips203] is the standardized form. The ARM NEON and Cortex-M4 implementations are available in pqm4[@pqm4]; cross-ISA comparison is planned for Phase 3.
**PQC benchmarking.**
eBACS/SUPERCOP provides a cross-platform benchmark suite[@supercop] that reports median cycle counts for many cryptographic primitives, including Kyber. Our contribution complements this with a statistically rigorous decomposition using nonparametric effect-size analysis and bootstrapped CIs. Kannwischer et al.[@pqm4] present systematic benchmarks on ARM Cortex-M4 (pqm4), which focuses on constrained-device performance rather than SIMD analysis.
**SIMD in cryptography.**
Gueron and Krasnov demonstrated AVX2 speedups for AES-GCM[@gueron2014]; similar techniques underpin the Kyber AVX2 implementation. Bernstein's vectorized polynomial arithmetic for Curve25519[@bernstein2006] established the template of hand-written vector intrinsics for cryptographic field arithmetic.
**NTT optimization.**
Longa and Naehrig[@ntt-survey] survey NTT algorithms for ideal lattice-based cryptography and analyze instruction counts for vectorized implementations. Our measurements provide the first empirical cycle-count decomposition isolating the compiler's contribution vs. hand-written SIMD for the ML-KEM NTT specifically.
**Hardware counter profiling.**
Bernstein and Schwabe[@cachetime] discuss the relationship between cache behavior and cryptographic timing. PAPI[@papi] provides a portable interface to hardware performance counters used in related profiling work. Phase 2 of this study will add PAPI counter collection to provide the mechanistic hardware-level explanation of the speedups observed here.
## Conclusion
We presented the first statistically rigorous decomposition of SIMD speedup in ML-KEM (Kyber), isolating the contributions of compiler optimization, auto-vectorization, and hand-written AVX2 assembly. Our main findings are:
1. **Hand-written SIMD is necessary, not optional.** GCC's auto-vectorizer provides negligible benefit ($<10\%$) for NTT-based arithmetic, and for `INVNTT` actually produces slightly slower code than non-vectorized O3. The full $35\times$$56\times$ speedup on arithmetic operations comes entirely from hand-written assembly.
2. **The distribution of SIMD benefit across operations is highly non-uniform.** Arithmetic operations (NTT, INVNTT, basemul, frommsg) achieve $35\times$$56\times$; SHAKE-based expansion (gen_a) achieves only $3.8\times$$4.7\times$; and noise sampling achieves $1.2\times$$1.4\times$. The bottleneck shifts from compute to memory bandwidth for non-arithmetic operations.
3. **The statistical signal is overwhelming.** Cliff's $\delta = +1.000$ for nearly all operations means AVX2 is faster than `ref` in every single observation pair across $n \ge 2{,}000$ measurements. These results are stable across three ML-KEM parameter sets.
4. **Context affects even isolated micro-benchmarks.** The NTT speedup varies by 13% across parameter sets despite identical polynomial dimensions, attributed to cache-state effects from surrounding polyvec operations.
**Future work.** Planned extensions include: hardware performance counter profiles (IPC, cache miss rates) via PAPI to validate the mechanistic explanations in the corresponding section; energy measurement via Intel RAPL; extension to ML-DSA (Dilithium) and SLH-DSA (SPHINCS+) with the same harness; and cross-ISA comparison with ARM NEON/SVE (Graviton3) and RISC-V V. A compiler version sensitivity study (GCC 1114, Clang 1417) will characterize how stable the auto-vectorization gap is across compiler releases.
**Artifact.** The benchmark harness, SLURM job templates, raw cycle-count data, analysis pipeline, and this paper are released at <https://git.levineuwirth.org/where-simd-helps> under the MIT License.
## Supplementary: KEM-level end-to-end speedup
The figure shows the hand-written SIMD speedup for the top-level KEM operations: key generation (`kyber_keypair`), encapsulation (`kyber_encaps`), and decapsulation (`kyber_decaps`). These composite operations aggregate the speedups of their constituent primitives, weighted by relative cycle counts.
Decapsulation achieves the highest speedup ($6.9\times$$7.1\times$) because it involves the largest share of arithmetic operations (two additional NTT and INVNTT calls for re-encryption verification). Key generation achieves the lowest ($5.3\times$$5.9\times$) because it involves one fewer polynomial multiplication step relative to encapsulation.
::: {.figure script="figures/fig_kem_level.py" caption="End-to-end KEM speedup (`ref` $\to$ `avx2`) for `kyber_keypair`, `kyber_encaps`, and `kyber_decaps`. Intel Xeon Platinum 8268; 95% bootstrap CI."}
:::
### Full Operation Set
::: {.annotation .annotation--static}
**TODO:** Full operation speedup table for all 20 benchmarked operations, including `poly_compress`, `poly_decompress`, `polyvec_compress`, `poly_tomsg`, and the `*_derand` KEM variants.
:::

141
data/simd-paper.bib Normal file
View File

@ -0,0 +1,141 @@
% ── Post-Quantum Cryptography Standards ──────────────────────────────────────
@techreport{fips203,
author = {{National Institute of Standards and Technology}},
title = {{Module-Lattice-Based Key-Encapsulation Mechanism Standard}},
institution = {NIST},
year = {2024},
number = {FIPS 203},
url = {https://doi.org/10.6028/NIST.FIPS.203},
}
@techreport{fips204,
author = {{National Institute of Standards and Technology}},
title = {{Module-Lattice-Based Digital Signature Standard}},
institution = {NIST},
year = {2024},
number = {FIPS 204},
url = {https://doi.org/10.6028/NIST.FIPS.204},
}
@techreport{fips205,
author = {{National Institute of Standards and Technology}},
title = {{Stateless Hash-Based Digital Signature Standard}},
institution = {NIST},
year = {2024},
number = {FIPS 205},
url = {https://doi.org/10.6028/NIST.FIPS.205},
}
% ── Kyber / ML-KEM ───────────────────────────────────────────────────────────
@inproceedings{kyber2018,
author = {Bos, Joppe W. and Ducas, Léo and Kiltz, Eike and Lepoint, Tancrède
and Lyubashevsky, Vadim and Schanck, John M. and Schwabe, Peter
and Seiler, Gregor and Stehlé, Damien},
title = {{CRYSTALS -- Kyber: A CCA-Secure Module-Lattice-Based KEM}},
booktitle = {IEEE European Symposium on Security and Privacy (EuroS\&P)},
year = {2018},
pages = {353--367},
doi = {10.1109/EuroSP.2018.00032},
}
@misc{kyber-avx2,
author = {Schwabe, Peter and Seiler, Gregor},
title = {{High-Speed {AVX2} Implementation of the {Kyber} Key Encapsulation Mechanism}},
note = {AVX2 implementation in the pqclean project},
url = {https://github.com/pq-crystals/kyber},
}
% ── SIMD and Microarchitecture ────────────────────────────────────────────────
@inproceedings{intel-avx2,
author = {{Intel Corporation}},
title = {{Intel 64 and IA-32 Architectures Software Developer's Manual}},
year = {2024},
note = {Volume 2: Instruction Set Reference},
}
@inproceedings{ntt-survey,
author = {Longa, Patrick and Naehrig, Michael},
title = {{Speeding Up the Number Theoretic Transform for Faster Ideal
Lattice-Based Cryptography}},
booktitle = {CANS},
year = {2016},
doi = {10.1007/978-3-319-48965-0_8},
}
% ── Energy Measurement ───────────────────────────────────────────────────────
@inproceedings{rapl,
author = {David, Howard and Gorbatov, Eugene and Hanebutte, Ulf R. and
Khanna, Rahul and Le, Christian},
title = {{RAPL: Memory Power Estimation and Capping}},
booktitle = {ISLPED},
year = {2010},
doi = {10.1145/1840845.1840883},
}
% ── Related Benchmarking Work ────────────────────────────────────────────────
@misc{pqclean,
author = {{PQClean Contributors}},
title = {{PQClean: Clean, portable, tested implementations of post-quantum
cryptography}},
url = {https://github.com/PQClean/PQClean},
}
@misc{liboqs,
author = {{Open Quantum Safe Project}},
title = {{liboqs: C library for quantum-safe cryptographic algorithms}},
url = {https://github.com/open-quantum-safe/liboqs},
}
@misc{pqm4,
author = {Kannwischer, Matthias J. and Rijneveld, Joost and Schwabe, Peter
and Stoffelen, Ko},
title = {{pqm4: Post-quantum crypto library for the ARM Cortex-M4}},
url = {https://github.com/mupq/pqm4},
}
@misc{supercop,
author = {Bernstein, Daniel J. and Lange, Tanja},
title = {{SUPERCOP: System for Unified Performance Evaluation Related to
Cryptographic Operations and Primitives}},
url = {https://bench.cr.yp.to/supercop.html},
}
@misc{papi,
author = {{Innovative Computing Laboratory, University of Tennessee}},
title = {{PAPI: Performance Application Programming Interface}},
url = {https://icl.utk.edu/papi/},
}
@inproceedings{gueron2014,
author = {Gueron, Shay and Krasnov, Vlad},
title = {{Fast Garbling of Circuits Under Standard Assumptions}},
booktitle = {ACM CCS},
year = {2013},
note = {See also: Intel white paper on AES-GCM with AVX2},
}
@misc{bernstein2006,
author = {Bernstein, Daniel J.},
title = {{Curve25519: new Diffie-Hellman speed records}},
year = {2006},
url = {https://cr.yp.to/ecdh.html},
}
@misc{cachetime,
author = {Bernstein, Daniel J. and Schwabe, Peter},
title = {{New AES Software Speed Records}},
year = {2008},
url = {https://cr.yp.to/aes-speed.html},
}
@misc{bettini2024,
author = {{Google Security Blog}},
title = {{Protecting Chrome Traffic with Hybrid Kyber KEM}},
year = {2023},
url = {https://security.googleblog.com/2023/08/protecting-chrome-traffic-with-hybrid.html},
}

0
paper/figures/.gitkeep Normal file
View File

Binary file not shown.

View File

@ -0,0 +1,10 @@
op,m512,m768,m1024
INVNTT,1.000,1.000,1.000
basemul,1.000,1.000,1.000
frommsg,1.000,1.000,1.000
NTT,1.000,1.000,1.000
iDec,1.000,1.000,1.000
iEnc,1.000,1.000,1.000
iKeypair,1.000,1.000,1.000
gena,1.000,1.000,1.000
noise,1.000,1.000,0.999
1 op m512 m768 m1024
2 INVNTT 1.000 1.000 1.000
3 basemul 1.000 1.000 1.000
4 frommsg 1.000 1.000 1.000
5 NTT 1.000 1.000 1.000
6 iDec 1.000 1.000 1.000
7 iEnc 1.000 1.000 1.000
8 iKeypair 1.000 1.000 1.000
9 gena 1.000 1.000 1.000
10 noise 1.000 1.000 0.999

View File

@ -0,0 +1,5 @@
op,m512_sp,m512_elo,m512_ehi,m768_sp,m768_elo,m768_ehi,m1024_sp,m1024_elo,m1024_ehi
frommsg,45.642857142857146,0.0,0.0,49.15384615384615,0.0,0.0,55.38461538461539,0.0,0.0
INVNTT,56.26086956521739,0.0,0.0,52.22826086956522,0.0,0.010869565217390686,50.49514563106796,0.009708737864080774,0.0
basemul,52.04054054054054,0.0,0.7128841169937061,47.577586206896555,0.0,0.0,41.63333333333333,0.0,0.0
NTT,35.526315789473685,0.010526315789476826,2.395032525133054,39.39080459770115,0.44762277951932816,0.0,34.58585858585859,0.010101010101010388,0.3631210059781438
1 op m512_sp m512_elo m512_ehi m768_sp m768_elo m768_ehi m1024_sp m1024_elo m1024_ehi
2 frommsg 45.642857142857146 0.0 0.0 49.15384615384615 0.0 0.0 55.38461538461539 0.0 0.0
3 INVNTT 56.26086956521739 0.0 0.0 52.22826086956522 0.0 0.010869565217390686 50.49514563106796 0.009708737864080774 0.0
4 basemul 52.04054054054054 0.0 0.7128841169937061 47.577586206896555 0.0 0.0 41.63333333333333 0.0 0.0
5 NTT 35.526315789473685 0.010526315789476826 2.395032525133054 39.39080459770115 0.44762277951932816 0.0 34.58585858585859 0.010101010101010388 0.3631210059781438

View File

@ -0,0 +1,10 @@
op,refnv_sp,refnv_elo,refnv_ehi,ref_sp,ref_elo,ref_ehi,avx2_sp,avx2_elo,avx2_ehi
INVNTT,3.6937872667820737,0.0,0.0001923446816691765,3.6923668525283597,0.0,0.0008062243947173364,186.44660194174756,0.0,0.00970873786408788
basemul,3.209016393442623,6.209637357201814e-05,0.00012419274714359219,3.4479583666933546,0.00013344008540183694,0.00013344008540183694,143.55,0.005555555555559977,0.005555555555531555
frommsg,3.0156494522691704,0.0,0.0,2.676388888888889,0.0,0.0,148.23076923076923,0.0,0.0
NTT,3.691742580076403,0.0010845307227014267,0.0002938583602705158,3.6691004672897196,0.001071270209427766,0.0010718961341775746,126.8989898989899,0.0,1.3050917336631755
iDec,3.5713012771855714,0.00023570612000023416,0.00015086802895014628,3.690161977834612,0.0005032782539924341,0.00046931032063479705,114.75503711558855,0.0010604453870683983,0.0010604453870541874
iEnc,3.084863236932217,0.0001782560024712332,0.00016342197515761825,3.21233254333646,0.00035364887129318845,0.00028601070699840747,30.157900043693072,0.0029733062283590073,0.001753088869445918
iKeypair,3.049990457461021,0.00022319698359352103,0.00019792531427453852,3.207066542768769,0.0006512941219742885,0.0005064778000369863,26.020352541412997,0.0025143592087069067,0.0010972674500919766
gena,2.6965550354099146,0.000484369799391704,0.00048237643023396615,2.7162479142988416,0.0006808616189104555,0.0007206686696927811,12.97504909321936,0.0031123799730270463,0.0032871286177282855
noise,2.977777777777778,0.0,0.0,3.4190382728164868,0.0,0.0033585837650456085,4.070093457943925,0.0,0.0
1 op refnv_sp refnv_elo refnv_ehi ref_sp ref_elo ref_ehi avx2_sp avx2_elo avx2_ehi
2 INVNTT 3.6937872667820737 0.0 0.0001923446816691765 3.6923668525283597 0.0 0.0008062243947173364 186.44660194174756 0.0 0.00970873786408788
3 basemul 3.209016393442623 6.209637357201814e-05 0.00012419274714359219 3.4479583666933546 0.00013344008540183694 0.00013344008540183694 143.55 0.005555555555559977 0.005555555555531555
4 frommsg 3.0156494522691704 0.0 0.0 2.676388888888889 0.0 0.0 148.23076923076923 0.0 0.0
5 NTT 3.691742580076403 0.0010845307227014267 0.0002938583602705158 3.6691004672897196 0.001071270209427766 0.0010718961341775746 126.8989898989899 0.0 1.3050917336631755
6 iDec 3.5713012771855714 0.00023570612000023416 0.00015086802895014628 3.690161977834612 0.0005032782539924341 0.00046931032063479705 114.75503711558855 0.0010604453870683983 0.0010604453870541874
7 iEnc 3.084863236932217 0.0001782560024712332 0.00016342197515761825 3.21233254333646 0.00035364887129318845 0.00028601070699840747 30.157900043693072 0.0029733062283590073 0.001753088869445918
8 iKeypair 3.049990457461021 0.00022319698359352103 0.00019792531427453852 3.207066542768769 0.0006512941219742885 0.0005064778000369863 26.020352541412997 0.0025143592087069067 0.0010972674500919766
9 gena 2.6965550354099146 0.000484369799391704 0.00048237643023396615 2.7162479142988416 0.0006808616189104555 0.0007206686696927811 12.97504909321936 0.0031123799730270463 0.0032871286177282855
10 noise 2.977777777777778 0.0 0.0 3.4190382728164868 0.0 0.0033585837650456085 4.070093457943925 0.0 0.0

View File

@ -0,0 +1,10 @@
op,refnv_sp,refnv_elo,refnv_ehi,ref_sp,ref_elo,ref_ehi,avx2_sp,avx2_elo,avx2_ehi
INVNTT,4.082526315789473,0.0,0.00021052631579010495,3.7465224111282844,0.0,0.00019319938176209916,210.7826086956522,0.0,0.010869565217376476
basemul,3.2770963704630787,0.0016397780187453748,0.0024627477733942804,3.3996364580628406,0.0,0.0,176.9189189189189,0.0,2.4235468345057427
frommsg,3.0109546165884193,0.0,0.0,3.0109546165884193,0.0,0.0,137.42857142857142,0.0,0.0
NTT,3.6866764275256223,0.002157843972798279,0.0010798700725032084,3.7303703703703706,0.0,0.0011056225164107758,132.52631578947367,0.0,8.934358367829702
iDec,3.742600033957779,0.0006353440528448218,0.00042368257587099833,3.79609644087256,0.0002753054612747441,0.0002753370710646408,133.0543259557344,0.0020120724346099905,0.0020120724346099905
iEnc,3.4432478262438213,0.0002504959891131975,0.00030259771432428195,3.530109117810246,0.00039168308874293345,0.00032646898342836295,35.20992436819775,0.0063094659476519155,0.0011068068622037686
iKeypair,3.1751089014071656,9.92090538622925e-05,0.00021725496542801537,3.351041039836322,0.00032261099326946763,0.0003142150864068327,27.8438,0.005767606478706,0.005769913982796027
gena,2.716878579054644,0.00065187098010977,0.0003882364359895085,2.743237945903567,0.0002940023520188184,0.00046488659667787147,12.781735159817352,0.001369863013698236,0.001369863013698236
noise,3.1366495140080044,0.0017923711508616158,0.0,3.433041301627034,0.0,0.0006257822277846437,4.766290182450043,0.0,0.0041446001586527
1 op refnv_sp refnv_elo refnv_ehi ref_sp ref_elo ref_ehi avx2_sp avx2_elo avx2_ehi
2 INVNTT 4.082526315789473 0.0 0.00021052631579010495 3.7465224111282844 0.0 0.00019319938176209916 210.7826086956522 0.0 0.010869565217376476
3 basemul 3.2770963704630787 0.0016397780187453748 0.0024627477733942804 3.3996364580628406 0.0 0.0 176.9189189189189 0.0 2.4235468345057427
4 frommsg 3.0109546165884193 0.0 0.0 3.0109546165884193 0.0 0.0 137.42857142857142 0.0 0.0
5 NTT 3.6866764275256223 0.002157843972798279 0.0010798700725032084 3.7303703703703706 0.0 0.0011056225164107758 132.52631578947367 0.0 8.934358367829702
6 iDec 3.742600033957779 0.0006353440528448218 0.00042368257587099833 3.79609644087256 0.0002753054612747441 0.0002753370710646408 133.0543259557344 0.0020120724346099905 0.0020120724346099905
7 iEnc 3.4432478262438213 0.0002504959891131975 0.00030259771432428195 3.530109117810246 0.00039168308874293345 0.00032646898342836295 35.20992436819775 0.0063094659476519155 0.0011068068622037686
8 iKeypair 3.1751089014071656 9.92090538622925e-05 0.00021725496542801537 3.351041039836322 0.00032261099326946763 0.0003142150864068327 27.8438 0.005767606478706 0.005769913982796027
9 gena 2.716878579054644 0.00065187098010977 0.0003882364359895085 2.743237945903567 0.0002940023520188184 0.00046488659667787147 12.781735159817352 0.001369863013698236 0.001369863013698236
10 noise 3.1366495140080044 0.0017923711508616158 0.0 3.433041301627034 0.0 0.0006257822277846437 4.766290182450043 0.0 0.0041446001586527

View File

@ -0,0 +1,10 @@
op,refnv_sp,refnv_elo,refnv_ehi,ref_sp,ref_elo,ref_ehi,avx2_sp,avx2_elo,avx2_ehi
INVNTT,3.9386252045826513,0.00020458265139122744,0.00020458265139122744,4.006659729448491,0.0008336786786200534,0.00020811654526564638,209.2608695652174,0.010869565217404897,0.010869565217376476
basemul,3.306184521797905,0.02605040612313525,0.002795691291897384,3.545207465120493,0.0,0.0,168.67241379310346,0.0,0.0
frommsg,2.6708333333333334,0.0,0.0,3.0093896713615025,0.0,0.0,147.92307692307693,0.0,0.0
NTT,3.6989152741131632,0.0010840900568913625,0.0,3.681645754304056,0.0,0.0,145.02298850574712,1.6479885057471222,0.0
iDec,3.6437147040368125,0.00019424892094210833,0.0003467108483481418,3.800139609964661,0.0003315569175033062,0.00016580015750289334,132.98167938931297,0.001526717557254642,0.003053435114509284
iEnc,3.3056977990451344,0.00017231513226034778,0.00016363191105694952,3.48133030817818,0.00022700732330438456,0.00021029337701561346,32.81504567436862,0.004063512322623808,0.0006448146157964629
iKeypair,3.109574915272049,0.00020791977755951763,0.00025167432332651174,3.2525126922733425,0.00022163529575136565,0.000286955967172986,24.668559816590246,0.0031435406706883384,0.0007294706127538575
gena,2.7088029828997557,0.0007052965244342957,0.0005931348088656918,2.69161485393067,0.0005617516864933059,0.0005061000727368814,10.337667648020936,0.002917034774819527,0.0013902518809292275
noise,3.0886524822695036,0.0,0.0008865248226950229,3.4156862745098038,0.0,0.0009803921568627416,4.639147802929427,0.0,0.0013315579227697327
1 op refnv_sp refnv_elo refnv_ehi ref_sp ref_elo ref_ehi avx2_sp avx2_elo avx2_ehi
2 INVNTT 3.9386252045826513 0.00020458265139122744 0.00020458265139122744 4.006659729448491 0.0008336786786200534 0.00020811654526564638 209.2608695652174 0.010869565217404897 0.010869565217376476
3 basemul 3.306184521797905 0.02605040612313525 0.002795691291897384 3.545207465120493 0.0 0.0 168.67241379310346 0.0 0.0
4 frommsg 2.6708333333333334 0.0 0.0 3.0093896713615025 0.0 0.0 147.92307692307693 0.0 0.0
5 NTT 3.6989152741131632 0.0010840900568913625 0.0 3.681645754304056 0.0 0.0 145.02298850574712 1.6479885057471222 0.0
6 iDec 3.6437147040368125 0.00019424892094210833 0.0003467108483481418 3.800139609964661 0.0003315569175033062 0.00016580015750289334 132.98167938931297 0.001526717557254642 0.003053435114509284
7 iEnc 3.3056977990451344 0.00017231513226034778 0.00016363191105694952 3.48133030817818 0.00022700732330438456 0.00021029337701561346 32.81504567436862 0.004063512322623808 0.0006448146157964629
8 iKeypair 3.109574915272049 0.00020791977755951763 0.00025167432332651174 3.2525126922733425 0.00022163529575136565 0.000286955967172986 24.668559816590246 0.0031435406706883384 0.0007294706127538575
9 gena 2.7088029828997557 0.0007052965244342957 0.0005931348088656918 2.69161485393067 0.0005617516864933059 0.0005061000727368814 10.337667648020936 0.002917034774819527 0.0013902518809292275
10 noise 3.0886524822695036 0.0 0.0008865248226950229 3.4156862745098038 0.0 0.0009803921568627416 4.639147802929427 0.0 0.0013315579227697327

View File

@ -0,0 +1,10 @@
op,m512_sp,m512_elo,m512_ehi,m768_sp,m768_elo,m768_ehi,m1024_sp,m1024_elo,m1024_ehi
INVNTT,56.26086956521739,0.0,0.0,52.22826086956522,0.0,0.010869565217390686,50.49514563106796,0.009708737864080774,0.0
basemul,52.04054054054054,0.0,0.7128841169937061,47.577586206896555,0.0,0.0,41.63333333333333,0.0,0.0
frommsg,45.642857142857146,0.0,0.0,49.15384615384615,0.0,0.0,55.38461538461539,0.0,0.0
NTT,35.526315789473685,0.010526315789476826,2.395032525133054,39.39080459770115,0.44762277951932816,0.0,34.58585858585859,0.010101010101010388,0.3631210059781438
iDec,35.05030181086519,0.0020120724346099905,0.002012072434602885,34.993893129770996,0.001526717557254642,0.0030534351145021787,31.097560975609756,0.0037115588547180778,0.004241781548248724
iEnc,9.974174506548607,0.0014707072125688114,0.0011068068622019922,9.426007522837184,0.0013889971548284308,0.0005373455131660876,9.38816253823144,0.001122140301749397,0.001223049292088163
iKeypair,8.309,0.0020613877224544552,0.0018621724344871637,7.584462275948312,0.0012591916511350831,0.0003647353063778169,8.113443296049837,0.0015653318677752992,0.0014866204162533592
gena,4.659360730593607,0.00045662100456667076,0.0004566210045657826,3.8406934903500165,0.0009551420262225996,0.0004906771344455052,4.776828000462054,0.0014497812681515398,0.0015659914501355843
noise,1.3883579496090357,0.0,0.0012072677822687616,1.3581890812250332,0.0,0.0,1.1904205607476634,0.001168224299065379,0.0
1 op m512_sp m512_elo m512_ehi m768_sp m768_elo m768_ehi m1024_sp m1024_elo m1024_ehi
2 INVNTT 56.26086956521739 0.0 0.0 52.22826086956522 0.0 0.010869565217390686 50.49514563106796 0.009708737864080774 0.0
3 basemul 52.04054054054054 0.0 0.7128841169937061 47.577586206896555 0.0 0.0 41.63333333333333 0.0 0.0
4 frommsg 45.642857142857146 0.0 0.0 49.15384615384615 0.0 0.0 55.38461538461539 0.0 0.0
5 NTT 35.526315789473685 0.010526315789476826 2.395032525133054 39.39080459770115 0.44762277951932816 0.0 34.58585858585859 0.010101010101010388 0.3631210059781438
6 iDec 35.05030181086519 0.0020120724346099905 0.002012072434602885 34.993893129770996 0.001526717557254642 0.0030534351145021787 31.097560975609756 0.0037115588547180778 0.004241781548248724
7 iEnc 9.974174506548607 0.0014707072125688114 0.0011068068622019922 9.426007522837184 0.0013889971548284308 0.0005373455131660876 9.38816253823144 0.001122140301749397 0.001223049292088163
8 iKeypair 8.309 0.0020613877224544552 0.0018621724344871637 7.584462275948312 0.0012591916511350831 0.0003647353063778169 8.113443296049837 0.0015653318677752992 0.0014866204162533592
9 gena 4.659360730593607 0.00045662100456667076 0.0004566210045657826 3.8406934903500165 0.0009551420262225996 0.0004906771344455052 4.776828000462054 0.0014497812681515398 0.0015659914501355843
10 noise 1.3883579496090357 0.0 0.0012072677822687616 1.3581890812250332 0.0 0.0 1.1904205607476634 0.001168224299065379 0.0

View File

@ -0,0 +1,4 @@
op,m512_sp,m512_elo,m512_ehi,m768_sp,m768_elo,m768_ehi,m1024_sp,m1024_elo,m1024_ehi
KeyGen,5.351663635391034,0.003951776171514432,0.0036136071694450322,5.515256061277458,0.0010128505412421163,0.0011711084383110304,5.92988426026269,0.009300851394026033,0.008673806818412011
Encaps,5.976169109582211,0.0057508565558670455,0.00541865850737544,6.159967741935484,0.0016760536843927198,0.0019668260454155373,6.374312588912245,0.007289526521085499,0.0062883831365772025
Decaps,7.12829219051115,0.0038254678112616958,0.002336315747572648,7.078920782076425,0.0017374106397927136,0.001435830107824998,6.920672062603092,0.007041626152989089,0.00611276112038972
1 op m512_sp m512_elo m512_ehi m768_sp m768_elo m768_ehi m1024_sp m1024_elo m1024_ehi
2 KeyGen 5.351663635391034 0.003951776171514432 0.0036136071694450322 5.515256061277458 0.0010128505412421163 0.0011711084383110304 5.92988426026269 0.009300851394026033 0.008673806818412011
3 Encaps 5.976169109582211 0.0057508565558670455 0.00541865850737544 6.159967741935484 0.0016760536843927198 0.0019668260454155373 6.374312588912245 0.007289526521085499 0.0062883831365772025
4 Decaps 7.12829219051115 0.0038254678112616958 0.002336315747572648 7.078920782076425 0.0017374106397927136 0.001435830107824998 6.920672062603092 0.007041626152989089 0.00611276112038972

Binary file not shown.

View File

@ -0,0 +1,30 @@
% Figure: cross-param speedup consistency for per-polynomial operations.
\begin{tikzpicture}
\begin{axis}[
pqc bar,
ybar, ymin=0, ymax=70, ytick distance=10,
bar width=6pt,
width=\columnwidth, height=5cm,
symbolic x coords={frommsg,INVNTT,basemul,NTT},
ylabel={Speedup \varref{} $\to$ \varavx{} ($\times$)},
legend entries={\mlkemk{512}, \mlkemk{768}, \mlkemk{1024}},
legend style={at={(0.99,0.99)}, anchor=north east, font=\small},
]
\addplot+[fill=colM512, draw=colM512!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m512_sp, y error plus=m512_ehi, y error minus=m512_elo,
col sep=comma]{figures/data/cross_param.csv};
\addplot+[fill=colM768, draw=colM768!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m768_sp, y error plus=m768_ehi, y error minus=m768_elo,
col sep=comma]{figures/data/cross_param.csv};
\addplot+[fill=colM1024, draw=colM1024!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m1024_sp, y error plus=m1024_ehi, y error minus=m1024_elo,
col sep=comma]{figures/data/cross_param.csv};
\end{axis}
\end{tikzpicture}

View File

@ -0,0 +1,74 @@
% Figure: speedup decomposition — three panels (one per algorithm), log y-axis.
% Data: paper/figures/data/decomp_{mlkem512,768,1024}.csv
\begin{tikzpicture}
\begin{groupplot}[
group style={group size=3 by 1, horizontal sep=1.6cm, ylabels at=edge left},
pqc bar,
ybar, ymode=log, ymin=1, ymax=500,
ytick={1,2,5,10,20,50,100,200},
yticklabels={$1\times$,$2\times$,$5\times$,$10\times$,$20\times$,$50\times$,$100\times$,$200\times$},
yminorticks=true,
width=5.2cm, height=6.5cm,
symbolic x coords={INVNTT,basemul,frommsg,NTT,iDec,iEnc,iKeypair,gena,noise},
xticklabels={INVNTT,basemul,frommsg,NTT,iDec,iEnc,iKeypair,gen\_a,noise},
ylabel={Speedup over \texttt{-O0} ($\times$)},
]
%% ML-KEM-512
\nextgroupplot[title={\mlkemk{512}}, bar width=3.5pt]
\addplot+[fill=colRefnv, draw=colRefnv!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=refnv_sp, y error plus=refnv_ehi, y error minus=refnv_elo,
col sep=comma]{figures/data/decomp_mlkem512.csv};
\addplot+[fill=colRef, draw=colRef!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=ref_sp, y error plus=ref_ehi, y error minus=ref_elo,
col sep=comma]{figures/data/decomp_mlkem512.csv};
\addplot+[fill=colAvx, draw=colAvx!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=avx2_sp, y error plus=avx2_ehi, y error minus=avx2_elo,
col sep=comma]{figures/data/decomp_mlkem512.csv};
%% ML-KEM-768
\nextgroupplot[title={\mlkemk{768}}, ylabel={}, bar width=3.5pt]
\addplot+[fill=colRefnv, draw=colRefnv!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=refnv_sp, y error plus=refnv_ehi, y error minus=refnv_elo,
col sep=comma]{figures/data/decomp_mlkem768.csv};
\addplot+[fill=colRef, draw=colRef!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=ref_sp, y error plus=ref_ehi, y error minus=ref_elo,
col sep=comma]{figures/data/decomp_mlkem768.csv};
\addplot+[fill=colAvx, draw=colAvx!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=avx2_sp, y error plus=avx2_ehi, y error minus=avx2_elo,
col sep=comma]{figures/data/decomp_mlkem768.csv};
%% ML-KEM-1024
\nextgroupplot[title={\mlkemk{1024}}, ylabel={}, bar width=3.5pt,
legend style={at={(1.0,0.99)}, anchor=north east, font=\scriptsize},
legend entries={O3 (no auto-vec), O3 + auto-vec, O3 + hand SIMD}]
\addplot+[fill=colRefnv, draw=colRefnv!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=refnv_sp, y error plus=refnv_ehi, y error minus=refnv_elo,
col sep=comma]{figures/data/decomp_mlkem1024.csv};
\addplot+[fill=colRef, draw=colRef!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=ref_sp, y error plus=ref_ehi, y error minus=ref_elo,
col sep=comma]{figures/data/decomp_mlkem1024.csv};
\addplot+[fill=colAvx, draw=colAvx!70!black, opacity=0.85,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=avx2_sp, y error plus=avx2_ehi, y error minus=avx2_elo,
col sep=comma]{figures/data/decomp_mlkem1024.csv};
\end{groupplot}
\end{tikzpicture}

View File

@ -0,0 +1,34 @@
% Figure: hand-SIMD speedup (ref->avx2), three algorithms overlaid, log y-axis.
\begin{tikzpicture}
\begin{axis}[
pqc bar,
ybar, ymode=log, ymin=1, ymax=100,
ytick={1,2,5,10,20,50},
yticklabels={$1\times$,$2\times$,$5\times$,$10\times$,$20\times$,$50\times$},
yminorticks=true,
bar width=5pt,
width=\textwidth, height=6cm,
symbolic x coords={INVNTT,basemul,frommsg,NTT,iDec,iEnc,iKeypair,gena,noise},
xticklabels={INVNTT,basemul,frommsg,NTT,iDec,iEnc,iKeypair,gen\_a,noise},
ylabel={Speedup \varref{} $\to$ \varavx{} ($\times$)},
legend entries={\mlkemk{512}, \mlkemk{768}, \mlkemk{1024}},
legend style={at={(0.01,0.99)}, anchor=north west, font=\small},
]
\addplot+[fill=colM512, draw=colM512!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m512_sp, y error plus=m512_ehi, y error minus=m512_elo,
col sep=comma]{figures/data/hand_simd.csv};
\addplot+[fill=colM768, draw=colM768!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m768_sp, y error plus=m768_ehi, y error minus=m768_elo,
col sep=comma]{figures/data/hand_simd.csv};
\addplot+[fill=colM1024, draw=colM1024!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m1024_sp, y error plus=m1024_ehi, y error minus=m1024_elo,
col sep=comma]{figures/data/hand_simd.csv};
\end{axis}
\end{tikzpicture}

View File

@ -0,0 +1,30 @@
% Figure: KEM-level end-to-end speedup (supplementary).
\begin{tikzpicture}
\begin{axis}[
pqc bar,
ybar, ymin=0, ymax=9, ytick distance=1,
bar width=8pt,
width=\columnwidth, height=5cm,
symbolic x coords={KeyGen,Encaps,Decaps},
ylabel={Speedup \varref{} $\to$ \varavx{} ($\times$)},
legend entries={\mlkemk{512}, \mlkemk{768}, \mlkemk{1024}},
legend style={at={(0.01,0.99)}, anchor=north west, font=\small},
]
\addplot+[fill=colM512, draw=colM512!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m512_sp, y error plus=m512_ehi, y error minus=m512_elo,
col sep=comma]{figures/data/kem_level.csv};
\addplot+[fill=colM768, draw=colM768!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m768_sp, y error plus=m768_ehi, y error minus=m768_elo,
col sep=comma]{figures/data/kem_level.csv};
\addplot+[fill=colM1024, draw=colM1024!70!black, opacity=0.88,
error bars/.cd, y dir=both, y explicit]
table[x=op, y=m1024_sp, y error plus=m1024_ehi, y error minus=m1024_elo,
col sep=comma]{figures/data/kem_level.csv};
\end{axis}
\end{tikzpicture}

47
paper/macros.tex Normal file
View File

@ -0,0 +1,47 @@
% ── Shared macros ─────────────────────────────────────────────────────────────
% Algorithm shorthands
\newcommand{\mlkem}{ML-KEM}
\newcommand{\mlkemk}[1]{ML-KEM-#1}
\newcommand{\mldsa}{ML-DSA}
\newcommand{\slhdsa}{SLH-DSA}
% Variant names (monospace)
\newcommand{\varref}{\texttt{ref}}
\newcommand{\varrefnv}{\texttt{refnv}}
\newcommand{\varrefo}{\texttt{refo0}}
\newcommand{\varavx}{\texttt{avx2}}
% Operation shorthand
\newcommand{\op}[1]{\texttt{#1}}
% Speedup formatting: \speedup{45.6}
\newcommand{\speedup}[1]{$#1\times$}
% Phase 2 / future-work placeholder
\newcommand{\phasetwo}[1]{\todo[color=blue!15,caption={Phase 2: #1}]{Phase~2: #1}}
\newcommand{\phasethree}[1]{\todo[color=green!15,caption={Phase 3: #1}]{Phase~3: #1}}
% pgfplots colors (match matplotlib palette)
\definecolor{colRefnv}{HTML}{4C72B0} % blue
\definecolor{colRef}{HTML}{55A868} % green
\definecolor{colAvx}{HTML}{C44E52} % red
\definecolor{colM512}{HTML}{4C72B0}
\definecolor{colM768}{HTML}{55A868}
\definecolor{colM1024}{HTML}{C44E52}
% Shared pgfplots style.
% NOTE: ybar, ymode=log, and bar width CANNOT be used inside \pgfplotsset styles
% due to a pgfkeys namespace issue; apply them inline in each axis instead.
\pgfplotsset{
pqc bar/.style={
ymajorgrids=true,
yminorgrids=true,
grid style={dashed, gray!30},
xtick=data,
x tick label style={rotate=45, anchor=east, font=\small},
legend style={font=\small, at={(0.99,0.99)}, anchor=north east},
error bars/error bar style={line width=0.5pt},
error bars/error mark options={rotate=90, mark size=1.5pt},
},
}

173
paper/main.aux Normal file
View File

@ -0,0 +1,173 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\citation{fips203,fips204,fips205}
\citation{bettini2024}
\citation{kyber-avx2}
\citation{fips203}
\citation{ntt-survey}
\@writefile{toc}{\contentsline {section}{Abstract}{1}{section*.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent }
\newlabel{sec:intro}{{1}{1}{Introduction}{section.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2}Background}{1}{section.2}\protected@file@percent }
\newlabel{sec:background}{{2}{1}{Background}{section.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}ML-KEM and the Number Theoretic Transform}{1}{subsection.2.1}\protected@file@percent }
\citation{kyber-avx2}
\citation{papi}
\citation{rapl}
\citation{kyber-avx2}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}AVX2 SIMD on x86-64}{2}{subsection.2.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Compilation Variants}{2}{subsection.2.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Hardware Performance Counters and Energy}{2}{subsection.2.4}\protected@file@percent }
\newlabel{sec:bg:papi}{{2.4}{2}{Hardware Performance Counters and Energy}{subsection.2.4}{}}
\@writefile{tdo}{\contentsline {todo}{Phase 2: Expand with PAPI and RAPL background once data is collected.}{2}{section*.6}\protected@file@percent }
\pgfsyspdfmark {pgfid1}{20915651}{45096352}
\pgfsyspdfmark {pgfid4}{38210436}{45099302}
\pgfsyspdfmark {pgfid5}{38980483}{44906577}
\@writefile{toc}{\contentsline {section}{\numberline {3}Methodology}{2}{section.3}\protected@file@percent }
\newlabel{sec:methodology}{{3}{2}{Methodology}{section.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Implementation Source}{2}{subsection.3.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Compilation Variants}{2}{subsection.3.2}\protected@file@percent }
\newlabel{sec:meth:variants}{{3.2}{2}{Compilation Variants}{subsection.3.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Benchmark Harness}{2}{subsection.3.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Hardware Platform}{2}{subsection.3.4}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Phase 2: Hardware counter collection via PAPI.}{3}{section*.7}\protected@file@percent }
\pgfsyspdfmark {pgfid6}{12703613}{37681124}
\pgfsyspdfmark {pgfid7}{2015231}{37684074}
\pgfsyspdfmark {pgfid8}{2785278}{37491349}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Statistical Methodology}{3}{subsection.3.5}\protected@file@percent }
\newlabel{sec:meth:stats}{{3.5}{3}{Statistical Methodology}{subsection.3.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Energy Measurement}{3}{subsection.3.6}\protected@file@percent }
\newlabel{sec:meth:energy}{{3.6}{3}{Energy Measurement}{subsection.3.6}{}}
\@writefile{tdo}{\contentsline {todo}{Phase 2: Intel RAPL (pkg + DRAM domains), EDP computation, per-operation joules.}{3}{section*.8}\protected@file@percent }
\pgfsyspdfmark {pgfid11}{3538944}{24335452}
\pgfsyspdfmark {pgfid12}{2015231}{24338402}
\pgfsyspdfmark {pgfid13}{2785278}{24145677}
\@writefile{toc}{\contentsline {section}{\numberline {4}Results}{3}{section.4}\protected@file@percent }
\newlabel{sec:results}{{4}{3}{Results}{section.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Cycle Count Distributions}{3}{subsection.4.1}\protected@file@percent }
\newlabel{sec:results:distributions}{{4.1}{3}{Cycle Count Distributions}{subsection.4.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Speedup Decomposition}{3}{subsection.4.2}\protected@file@percent }
\newlabel{sec:results:decomp}{{4.2}{3}{Speedup Decomposition}{subsection.4.2}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Cycle count distributions for three representative ML-KEM-512 operations. Log $x$-axis. Dashed lines mark medians. Right-skew and outlier structure motivate nonparametric statistics.}}{3}{figure.caption.9}\protected@file@percent }
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
\newlabel{fig:distributions}{{1}{3}{Cycle count distributions for three representative \mlkemk {512} operations. Log $x$-axis. Dashed lines mark medians. Right-skew and outlier structure motivate nonparametric statistics}{figure.caption.9}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Hand-Written SIMD Speedup}{3}{subsection.4.3}\protected@file@percent }
\newlabel{sec:results:simd}{{4.3}{3}{Hand-Written SIMD Speedup}{subsection.4.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Statistical Significance}{3}{subsection.4.4}\protected@file@percent }
\newlabel{sec:results:stats}{{4.4}{3}{Statistical Significance}{subsection.4.4}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Cumulative speedup at each optimization stage, normalized to \texttt {refo0}{} (1×). Three bars per operation: \textcolor {colRefnv}{$\blacksquare $}\nonbreakingspace O3 no auto-vec, \textcolor {colRef}{$\blacksquare $}\nonbreakingspace O3 + auto-vec, \textcolor {colAvx}{$\blacksquare $}\nonbreakingspace O3 + hand SIMD (AVX2). Log $y$-axis; 95\% bootstrap CI shown on \texttt {avx2}{} bars. Sorted by \texttt {avx2}{} speedup.}}{4}{figure.caption.10}\protected@file@percent }
\newlabel{fig:decomp}{{2}{4}{Cumulative speedup at each optimization stage, normalized to \varrefo {} (1×). Three bars per operation: \textcolor {colRefnv}{$\blacksquare $}~O3 no auto-vec, \textcolor {colRef}{$\blacksquare $}~O3 + auto-vec, \textcolor {colAvx}{$\blacksquare $}~O3 + hand SIMD (AVX2). Log $y$-axis; 95\% bootstrap CI shown on \varavx {} bars. Sorted by \varavx {} speedup}{figure.caption.10}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Hand-written SIMD speedup (\texttt {ref}{} $\to $ \texttt {avx2}{}) per operation, across all three ML-KEM{} parameter sets. Log $y$-axis. 95\% bootstrap CI error bars (often sub-pixel). Sorted by ML-KEM-512 speedup.}}{4}{figure.caption.11}\protected@file@percent }
\newlabel{fig:handsimd}{{3}{4}{Hand-written SIMD speedup (\varref {} $\to $ \varavx {}) per operation, across all three \mlkem {} parameter sets. Log $y$-axis. 95\% bootstrap CI error bars (often sub-pixel). Sorted by \mlkemk {512} speedup}{figure.caption.11}{}}
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Hand-written SIMD speedup (\texttt {ref}{} $\to $ \texttt {avx2}{}), median ratio with 95\% bootstrap CI. All Cliff's $\delta = +1.000$, $p < 10^{-300}$.}}{4}{table.caption.12}\protected@file@percent }
\newlabel{tab:simd}{{1}{4}{Hand-written SIMD speedup (\varref {} $\to $ \varavx {}), median ratio with 95\% bootstrap CI. All Cliff's $\delta = +1.000$, $p < 10^{-300}$}{table.caption.12}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Cliff's $\delta $ (\texttt {ref}{} vs.\ \texttt {avx2}{}) for all operations and parameter sets. $\delta = +1$: AVX2 is faster in every observation pair. Nearly all cells are at $+1.000$.}}{4}{figure.caption.13}\protected@file@percent }
\newlabel{fig:cliffs}{{4}{4}{Cliff's $\delta $ (\varref {} vs.\ \varavx {}) for all operations and parameter sets. $\delta = +1$: AVX2 is faster in every observation pair. Nearly all cells are at $+1.000$}{figure.caption.13}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Cross-Parameter Consistency}{4}{subsection.4.5}\protected@file@percent }
\newlabel{sec:results:crossparams}{{4.5}{4}{Cross-Parameter Consistency}{subsection.4.5}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Per-polynomial operation speedup (\texttt {ref}{} $\to $ \texttt {avx2}{}) across security parameters. Polynomial dimension is 256 for all; variation reflects cache-state differences in the calling context.}}{5}{figure.caption.14}\protected@file@percent }
\newlabel{fig:crossparams}{{5}{5}{Per-polynomial operation speedup (\varref {} $\to $ \varavx {}) across security parameters. Polynomial dimension is 256 for all; variation reflects cache-state differences in the calling context}{figure.caption.14}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.6}Hardware Counter Breakdown}{5}{subsection.4.6}\protected@file@percent }
\newlabel{sec:results:papi}{{4.6}{5}{Hardware Counter Breakdown}{subsection.4.6}{}}
\@writefile{tdo}{\contentsline {todo}{Phase 2: IPC, L1/L2/L3 cache miss rates, branch mispredictions via PAPI. This section will contain bar charts of per-counter values comparing ref and avx2 for each operation, explaining the mechanistic origins of the speedup.}{5}{section*.15}\protected@file@percent }
\pgfsyspdfmark {pgfid264}{3538944}{21389118}
\pgfsyspdfmark {pgfid265}{2015231}{21392068}
\pgfsyspdfmark {pgfid266}{2785278}{21199343}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.7}Energy Efficiency}{5}{subsection.4.7}\protected@file@percent }
\newlabel{sec:results:energy}{{4.7}{5}{Energy Efficiency}{subsection.4.7}{}}
\@writefile{tdo}{\contentsline {todo}{Phase 2: Intel RAPL pkg + DRAM energy readings per operation. EDP (energy-delay product) comparison. Energy per KEM operation.}{5}{section*.16}\protected@file@percent }
\pgfsyspdfmark {pgfid269}{3538944}{19496559}
\pgfsyspdfmark {pgfid270}{2015231}{-14840343}
\pgfsyspdfmark {pgfid271}{2785278}{-15033068}
\@writefile{toc}{\contentsline {section}{\numberline {5}Discussion}{5}{section.5}\protected@file@percent }
\newlabel{sec:discussion}{{5}{5}{Discussion}{section.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Why Arithmetic Operations Benefit Most}{5}{subsection.5.1}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Phase 2: Confirm with IPC and port utilisation counters.}{5}{section*.17}\protected@file@percent }
\pgfsyspdfmark {pgfid274}{13184317}{5758368}
\pgfsyspdfmark {pgfid275}{2015231}{-36522418}
\pgfsyspdfmark {pgfid276}{2785278}{-36715143}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Why the Compiler Cannot Auto-Vectorise NTT}{5}{subsection.5.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Why SHAKE Operations Benefit Less}{5}{subsection.5.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Why Noise Sampling Barely Benefits}{5}{subsection.5.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.5}NTT Cache-State Variation Across Parameter Sets}{5}{subsection.5.5}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Phase 2: Verify with L1/L2 miss counters split by scalar vs AVX2.}{5}{section*.18}\protected@file@percent }
\pgfsyspdfmark {pgfid279}{25927376}{9612704}
\pgfsyspdfmark {pgfid282}{38210436}{9615654}
\pgfsyspdfmark {pgfid283}{38980483}{9422929}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.6}Implications for Deployment}{5}{subsection.5.6}\protected@file@percent }
\citation{kyber-avx2}
\citation{pqclean}
\citation{kyber2018}
\citation{fips203}
\citation{pqm4}
\citation{supercop}
\citation{pqm4}
\citation{gueron2014}
\citation{bernstein2006}
\citation{ntt-survey}
\citation{cachetime}
\citation{papi}
\bibstyle{ACM-Reference-Format}
\bibdata{refs}
\bibcite{bernstein2006}{{1}{2006}{{Bernstein}}{{}}}
\bibcite{supercop}{{2}{[n.\,d.]}{{Bernstein and Lange}}{{}}}
\bibcite{cachetime}{{3}{2008}{{Bernstein and Schwabe}}{{}}}
\bibcite{kyber2018}{{4}{2018}{{Bos et~al\mbox {.}}}{{}}}
\bibcite{rapl}{{5}{2010}{{David et~al\mbox {.}}}{{}}}
\bibcite{bettini2024}{{6}{2023}{{Google Security Blog}}{{}}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.7}Limitations}{6}{subsection.5.7}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{No hardware counter data (Phase\nonbreakingspace 1).}{6}{section*.19}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Phase 2: PAPI counters: IPC, cache miss rates.}{6}{section*.20}\protected@file@percent }
\pgfsyspdfmark {pgfid284}{16379392}{38731168}
\pgfsyspdfmark {pgfid285}{2015231}{38734118}
\pgfsyspdfmark {pgfid286}{2785278}{38541393}
\@writefile{toc}{\contentsline {paragraph}{Single microarchitecture.}{6}{section*.21}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Phase 3: Repeat on AMD Zen, ARM Graviton3, RISC-V.}{6}{section*.22}\protected@file@percent }
\pgfsyspdfmark {pgfid289}{6791818}{34708896}
\pgfsyspdfmark {pgfid290}{2015231}{32453210}
\pgfsyspdfmark {pgfid291}{2785278}{32260485}
\@writefile{toc}{\contentsline {paragraph}{Frequency scaling.}{6}{section*.23}\protected@file@percent }
\@writefile{tdo}{\contentsline {todo}{Phase 2: Characterize frequency during benchmarks; consider RAPL-normalized cycle counts.}{6}{section*.24}\protected@file@percent }
\pgfsyspdfmark {pgfid294}{6161296}{30686624}
\pgfsyspdfmark {pgfid295}{2015231}{24009614}
\pgfsyspdfmark {pgfid296}{2785278}{23816889}
\@writefile{toc}{\contentsline {section}{\numberline {6}Related Work}{6}{section.6}\protected@file@percent }
\newlabel{sec:related}{{6}{6}{Related Work}{section.6}{}}
\@writefile{toc}{\contentsline {paragraph}{ML-KEM / Kyber implementations.}{6}{section*.25}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{PQC benchmarking.}{6}{section*.26}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{SIMD in cryptography.}{6}{section*.27}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{NTT optimization.}{6}{section*.28}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{Hardware counter profiling.}{6}{section*.29}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {7}Conclusion}{6}{section.7}\protected@file@percent }
\newlabel{sec:conclusion}{{7}{6}{Conclusion}{section.7}{}}
\@writefile{toc}{\contentsline {paragraph}{Future work.}{6}{section*.30}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{Artifact.}{6}{section*.31}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{References}{6}{section*.33}\protected@file@percent }
\bibcite{gueron2014}{{7}{2013}{{Gueron and Krasnov}}{{}}}
\bibcite{papi}{{8}{[n.\,d.]}{{Innovative Computing Laboratory, University of Tennessee}}{{}}}
\bibcite{pqm4}{{9}{[n.\,d.]}{{Kannwischer et~al\mbox {.}}}{{}}}
\bibcite{ntt-survey}{{10}{2016}{{Longa and Naehrig}}{{}}}
\bibcite{fips204}{{11}{2024a}{{National Institute of Standards and Technology}}{{}}}
\bibcite{fips203}{{12}{2024b}{{National Institute of Standards and Technology}}{{}}}
\bibcite{fips205}{{13}{2024c}{{National Institute of Standards and Technology}}{{}}}
\bibcite{pqclean}{{14}{[n.\,d.]}{{PQClean Contributors}}{{}}}
\bibcite{kyber-avx2}{{15}{[n.\,d.]}{{Schwabe and Seiler}}{{}}}
\newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{0pt}
\newlabel{tocindent1}{6.25499pt}
\newlabel{tocindent2}{10.34999pt}
\newlabel{tocindent3}{0pt}
\newlabel{tocindent4}{0pt}
\newlabel{tocindent5}{0pt}
\@writefile{toc}{\contentsline {section}{\numberline {A}End-to-End KEM Speedup}{7}{appendix.A}\protected@file@percent }
\newlabel{sec:supp:kem}{{A}{7}{End-to-End KEM Speedup}{appendix.A}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces End-to-end KEM speedup (\texttt {ref}{} $\to $ \texttt {avx2}{}) for \texttt {kyber\_keypair}, \texttt {kyber\_encaps}, and \texttt {kyber\_decaps}. Intel Xeon Platinum 8268; 95\% bootstrap CI.}}{7}{figure.caption.34}\protected@file@percent }
\newlabel{fig:kemlevel}{{6}{7}{End-to-end KEM speedup (\varref {} $\to $ \varavx {}) for \op {kyber\_keypair}, \op {kyber\_encaps}, and \op {kyber\_decaps}. Intel Xeon Platinum 8268; 95\% bootstrap CI}{figure.caption.34}{}}
\@writefile{toc}{\contentsline {section}{\numberline {B}Full Operation Set}{7}{appendix.B}\protected@file@percent }
\newlabel{sec:supp:fullops}{{B}{7}{Full Operation Set}{appendix.B}{}}
\@writefile{tdo}{\contentsline {todo}{Full operation speedup table for all 20 benchmarked operations, including \texttt {poly\_compress}, \texttt {poly\_decompress}, \texttt {polyvec\_compress}, \texttt {poly\_tomsg}, and the \texttt {*\_derand} KEM variants.}{7}{section*.35}\protected@file@percent }
\pgfsyspdfmark {pgfid319}{28801187}{27830541}
\newlabel{TotPages}{{7}{7}{}{page.7}{}}
\gdef \@abspage@last{7}

237
paper/main.bbl Normal file
View File

@ -0,0 +1,237 @@
%%% -*-BibTeX-*-
%%% Do NOT edit. File created by BibTeX with style
%%% ACM-Reference-Format-Journals [18-Jan-2012].
\begin{thebibliography}{15}
%%% ====================================================================
%%% NOTE TO THE USER: you can override these defaults by providing
%%% customized versions of any of these macros before the \bibliography
%%% command. Each of them MUST provide its own final punctuation,
%%% except for \shownote{} and \showURL{}. The latter two
%%% do not use final punctuation, in order to avoid confusing it with
%%% the Web address.
%%%
%%% To suppress output of a particular field, define its macro to expand
%%% to an empty string, or better, \unskip, like this:
%%%
%%% \newcommand{\showURL}[1]{\unskip} % LaTeX syntax
%%%
%%% \def \showURL #1{\unskip} % plain TeX syntax
%%%
%%% ====================================================================
\ifx \showCODEN \undefined \def \showCODEN #1{\unskip} \fi
\ifx \showISBNx \undefined \def \showISBNx #1{\unskip} \fi
\ifx \showISBNxiii \undefined \def \showISBNxiii #1{\unskip} \fi
\ifx \showISSN \undefined \def \showISSN #1{\unskip} \fi
\ifx \showLCCN \undefined \def \showLCCN #1{\unskip} \fi
\ifx \shownote \undefined \def \shownote #1{#1} \fi
\ifx \showarticletitle \undefined \def \showarticletitle #1{#1} \fi
\ifx \showURL \undefined \def \showURL {\relax} \fi
% The following commands are used for tagged output and should be
% invisible to TeX
\providecommand\bibfield[2]{#2}
\providecommand\bibinfo[2]{#2}
\providecommand\natexlab[1]{#1}
\providecommand\showeprint[2][]{arXiv:#2}
\bibitem[Bernstein(2006)]%
{bernstein2006}
\bibfield{author}{\bibinfo{person}{Daniel~J. Bernstein}.}
\bibinfo{year}{2006}\natexlab{}.
\newblock \bibinfo{title}{{Curve25519: new Diffie-Hellman speed records}}.
\newblock
\urldef\tempurl%
\url{https://cr.yp.to/ecdh.html}
\showURL{%
\tempurl}
\bibitem[Bernstein and Lange({[n.\,d.]})]%
{supercop}
\bibfield{author}{\bibinfo{person}{Daniel~J. Bernstein} {and}
\bibinfo{person}{Tanja Lange}.} \bibinfo{year}{[n.\,d.]}\natexlab{}.
\newblock \bibinfo{title}{{SUPERCOP: System for Unified Performance Evaluation
Related to Cryptographic Operations and Primitives}}.
\newblock
\urldef\tempurl%
\url{https://bench.cr.yp.to/supercop.html}
\showURL{%
\tempurl}
\bibitem[Bernstein and Schwabe(2008)]%
{cachetime}
\bibfield{author}{\bibinfo{person}{Daniel~J. Bernstein} {and}
\bibinfo{person}{Peter Schwabe}.} \bibinfo{year}{2008}\natexlab{}.
\newblock \bibinfo{title}{{New AES Software Speed Records}}.
\newblock
\urldef\tempurl%
\url{https://cr.yp.to/aes-speed.html}
\showURL{%
\tempurl}
\bibitem[Bos et~al\mbox{.}(2018)]%
{kyber2018}
\bibfield{author}{\bibinfo{person}{Joppe~W. Bos}, \bibinfo{person}{Léo Ducas},
\bibinfo{person}{Eike Kiltz}, \bibinfo{person}{Tancrède Lepoint},
\bibinfo{person}{Vadim Lyubashevsky}, \bibinfo{person}{John~M. Schanck},
\bibinfo{person}{Peter Schwabe}, \bibinfo{person}{Gregor Seiler}, {and}
\bibinfo{person}{Damien Stehlé}.} \bibinfo{year}{2018}\natexlab{}.
\newblock \showarticletitle{{CRYSTALS -- Kyber: A CCA-Secure
Module-Lattice-Based KEM}}. In \bibinfo{booktitle}{\emph{IEEE European
Symposium on Security and Privacy (EuroS\&P)}}. \bibinfo{pages}{353--367}.
\newblock
\href{https://doi.org/10.1109/EuroSP.2018.00032}{doi:\nolinkurl{10.1109/EuroSP.2018.00032}}
\bibitem[David et~al\mbox{.}(2010)]%
{rapl}
\bibfield{author}{\bibinfo{person}{Howard David}, \bibinfo{person}{Eugene
Gorbatov}, \bibinfo{person}{Ulf~R. Hanebutte}, \bibinfo{person}{Rahul
Khanna}, {and} \bibinfo{person}{Christian Le}.}
\bibinfo{year}{2010}\natexlab{}.
\newblock \showarticletitle{{RAPL: Memory Power Estimation and Capping}}. In
\bibinfo{booktitle}{\emph{ISLPED}}.
\newblock
\href{https://doi.org/10.1145/1840845.1840883}{doi:\nolinkurl{10.1145/1840845.1840883}}
\bibitem[{Google Security Blog}(2023)]%
{bettini2024}
\bibfield{author}{\bibinfo{person}{{Google Security Blog}}.}
\bibinfo{year}{2023}\natexlab{}.
\newblock \bibinfo{title}{{Protecting Chrome Traffic with Hybrid Kyber KEM}}.
\newblock
\urldef\tempurl%
\url{https://security.googleblog.com/2023/08/protecting-chrome-traffic-with-hybrid.html}
\showURL{%
\tempurl}
\bibitem[Gueron and Krasnov(2013)]%
{gueron2014}
\bibfield{author}{\bibinfo{person}{Shay Gueron} {and} \bibinfo{person}{Vlad
Krasnov}.} \bibinfo{year}{2013}\natexlab{}.
\newblock \showarticletitle{{Fast Garbling of Circuits Under Standard
Assumptions}}. In \bibinfo{booktitle}{\emph{ACM CCS}}.
\newblock
\newblock
\shownote{See also: Intel white paper on AES-GCM with AVX2}.
\bibitem[{Innovative Computing Laboratory, University of
Tennessee}({[n.\,d.]})]%
{papi}
\bibfield{author}{\bibinfo{person}{{Innovative Computing Laboratory, University
of Tennessee}}.} \bibinfo{year}{[n.\,d.]}\natexlab{}.
\newblock \bibinfo{title}{{PAPI: Performance Application Programming
Interface}}.
\newblock
\urldef\tempurl%
\url{https://icl.utk.edu/papi/}
\showURL{%
\tempurl}
\bibitem[Kannwischer et~al\mbox{.}({[n.\,d.]})]%
{pqm4}
\bibfield{author}{\bibinfo{person}{Matthias~J. Kannwischer},
\bibinfo{person}{Joost Rijneveld}, \bibinfo{person}{Peter Schwabe}, {and}
\bibinfo{person}{Ko Stoffelen}.} \bibinfo{year}{[n.\,d.]}\natexlab{}.
\newblock \bibinfo{title}{{pqm4: Post-quantum crypto library for the ARM
Cortex-M4}}.
\newblock
\urldef\tempurl%
\url{https://github.com/mupq/pqm4}
\showURL{%
\tempurl}
\bibitem[Longa and Naehrig(2016)]%
{ntt-survey}
\bibfield{author}{\bibinfo{person}{Patrick Longa} {and}
\bibinfo{person}{Michael Naehrig}.} \bibinfo{year}{2016}\natexlab{}.
\newblock \showarticletitle{{Speeding Up the Number Theoretic Transform for
Faster Ideal Lattice-Based Cryptography}}. In
\bibinfo{booktitle}{\emph{CANS}}.
\newblock
\href{https://doi.org/10.1007/978-3-319-48965-0_8}{doi:\nolinkurl{10.1007/978-3-319-48965-0_8}}
\bibitem[{National Institute of Standards and Technology}(2024a)]%
{fips204}
\bibfield{author}{\bibinfo{person}{{National Institute of Standards and
Technology}}.} \bibinfo{year}{2024}\natexlab{a}.
\newblock \bibinfo{booktitle}{\emph{{Module-Lattice-Based Digital Signature
Standard}}}.
\newblock \bibinfo{type}{{T}echnical {R}eport} FIPS 204.
\bibinfo{institution}{NIST}.
\newblock
\urldef\tempurl%
\url{https://doi.org/10.6028/NIST.FIPS.204}
\showURL{%
\tempurl}
\bibitem[{National Institute of Standards and Technology}(2024b)]%
{fips203}
\bibfield{author}{\bibinfo{person}{{National Institute of Standards and
Technology}}.} \bibinfo{year}{2024}\natexlab{b}.
\newblock \bibinfo{booktitle}{\emph{{Module-Lattice-Based Key-Encapsulation
Mechanism Standard}}}.
\newblock \bibinfo{type}{{T}echnical {R}eport} FIPS 203.
\bibinfo{institution}{NIST}.
\newblock
\urldef\tempurl%
\url{https://doi.org/10.6028/NIST.FIPS.203}
\showURL{%
\tempurl}
\bibitem[{National Institute of Standards and Technology}(2024c)]%
{fips205}
\bibfield{author}{\bibinfo{person}{{National Institute of Standards and
Technology}}.} \bibinfo{year}{2024}\natexlab{c}.
\newblock \bibinfo{booktitle}{\emph{{Stateless Hash-Based Digital Signature
Standard}}}.
\newblock \bibinfo{type}{{T}echnical {R}eport} FIPS 205.
\bibinfo{institution}{NIST}.
\newblock
\urldef\tempurl%
\url{https://doi.org/10.6028/NIST.FIPS.205}
\showURL{%
\tempurl}
\bibitem[{PQClean Contributors}({[n.\,d.]})]%
{pqclean}
\bibfield{author}{\bibinfo{person}{{PQClean Contributors}}.}
\bibinfo{year}{[n.\,d.]}\natexlab{}.
\newblock \bibinfo{title}{{PQClean: Clean, portable, tested implementations of
post-quantum cryptography}}.
\newblock
\urldef\tempurl%
\url{https://github.com/PQClean/PQClean}
\showURL{%
\tempurl}
\bibitem[Schwabe and Seiler({[n.\,d.]})]%
{kyber-avx2}
\bibfield{author}{\bibinfo{person}{Peter Schwabe} {and} \bibinfo{person}{Gregor
Seiler}.} \bibinfo{year}{[n.\,d.]}\natexlab{}.
\newblock \bibinfo{title}{{Better Bootstrapping in Fully Homomorphic
Encryption}}.
\newblock
\urldef\tempurl%
\url{https://github.com/pq-crystals/kyber}
\showURL{%
\tempurl}
\newblock
\shownote{AVX2 implementation in the pqclean project}.
\end{thebibliography}

77
paper/main.blg Normal file
View File

@ -0,0 +1,77 @@
This is BibTeX, Version 0.99e (TeX Live 2026/Arch Linux)
Capacity: max_strings=200000, hash_size=200000, hash_prime=170003
The top-level auxiliary file: main.aux
The style file: ACM-Reference-Format.bst
Reallocated singl_function (elt_size=8) to 100 items from 50.
Reallocated singl_function (elt_size=8) to 100 items from 50.
Reallocated wiz_functions (elt_size=8) to 6000 items from 3000.
Database file #1: refs.bib
Reallocated singl_function (elt_size=8) to 100 items from 50.
Reallocated wiz_functions (elt_size=8) to 9000 items from 6000.
Reallocated glb_str_ptr (elt_size=8) to 20 items from 10.
Reallocated global_strs (elt_size=200001) to 20 items from 10.
Reallocated glb_str_end (elt_size=8) to 20 items from 10.
Reallocated singl_function (elt_size=8) to 100 items from 50.
Warning--empty year in supercop
Warning--using n.d. in supercop
Warning--empty publisher in kyber2018
Warning--empty address in kyber2018
Warning--empty publisher in rapl
Warning--empty address in rapl
Warning--page numbers missing in both pages and numpages fields in rapl
Warning--empty publisher in gueron2014
Warning--empty address in gueron2014
Warning--page numbers missing in both pages and numpages fields in gueron2014
Warning--empty year in papi
Warning--using n.d. in papi
Warning--empty year in pqm4
Warning--using n.d. in pqm4
Warning--empty publisher in ntt-survey
Warning--empty address in ntt-survey
Warning--page numbers missing in both pages and numpages fields in ntt-survey
Warning--empty year in pqclean
Warning--using n.d. in pqclean
Warning--empty year in kyber-avx2
Warning--using n.d. in kyber-avx2
You've used 15 entries,
6273 wiz_defined-function locations,
1592 strings with 20522 characters,
and the built_in function-call counts, 12963 in all, are:
= -- 1307
> -- 435
< -- 3
+ -- 142
- -- 171
* -- 881
:= -- 1393
add.period$ -- 69
call.type$ -- 15
change.case$ -- 95
chr.to.int$ -- 13
cite$ -- 36
duplicate$ -- 1181
empty$ -- 859
format.name$ -- 203
if$ -- 2909
int.to.chr$ -- 4
int.to.str$ -- 1
missing$ -- 20
newline$ -- 198
num.names$ -- 103
pop$ -- 587
preamble$ -- 1
purify$ -- 186
quote$ -- 0
skip$ -- 444
stack$ -- 0
substring$ -- 727
swap$ -- 81
text.length$ -- 3
text.prefix$ -- 0
top$ -- 0
type$ -- 438
warning$ -- 21
while$ -- 94
width$ -- 0
write$ -- 343
(There were 21 warnings)

2416
paper/main.log Normal file

File diff suppressed because it is too large Load Diff

35
paper/main.out Normal file
View File

@ -0,0 +1,35 @@
\BOOKMARK [1][-]{section*.1}{\376\377\000A\000b\000s\000t\000r\000a\000c\000t}{}% 1
\BOOKMARK [1][-]{section.1}{\376\377\0001\000\040\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{}% 2
\BOOKMARK [1][-]{section.2}{\376\377\0002\000\040\000B\000a\000c\000k\000g\000r\000o\000u\000n\000d}{}% 3
\BOOKMARK [2][-]{subsection.2.1}{\376\377\0002\000.\0001\000\040\000M\000L\000-\000K\000E\000M\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000N\000u\000m\000b\000e\000r\000\040\000T\000h\000e\000o\000r\000e\000t\000i\000c\000\040\000T\000r\000a\000n\000s\000f\000o\000r\000m}{section.2}% 4
\BOOKMARK [2][-]{subsection.2.2}{\376\377\0002\000.\0002\000\040\000A\000V\000X\0002\000\040\000S\000I\000M\000D\000\040\000o\000n\000\040\000x\0008\0006\000-\0006\0004}{section.2}% 5
\BOOKMARK [2][-]{subsection.2.3}{\376\377\0002\000.\0003\000\040\000C\000o\000m\000p\000i\000l\000a\000t\000i\000o\000n\000\040\000V\000a\000r\000i\000a\000n\000t\000s}{section.2}% 6
\BOOKMARK [2][-]{subsection.2.4}{\376\377\0002\000.\0004\000\040\000H\000a\000r\000d\000w\000a\000r\000e\000\040\000P\000e\000r\000f\000o\000r\000m\000a\000n\000c\000e\000\040\000C\000o\000u\000n\000t\000e\000r\000s\000\040\000a\000n\000d\000\040\000E\000n\000e\000r\000g\000y}{section.2}% 7
\BOOKMARK [1][-]{section.3}{\376\377\0003\000\040\000M\000e\000t\000h\000o\000d\000o\000l\000o\000g\000y}{}% 8
\BOOKMARK [2][-]{subsection.3.1}{\376\377\0003\000.\0001\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000S\000o\000u\000r\000c\000e}{section.3}% 9
\BOOKMARK [2][-]{subsection.3.2}{\376\377\0003\000.\0002\000\040\000C\000o\000m\000p\000i\000l\000a\000t\000i\000o\000n\000\040\000V\000a\000r\000i\000a\000n\000t\000s}{section.3}% 10
\BOOKMARK [2][-]{subsection.3.3}{\376\377\0003\000.\0003\000\040\000B\000e\000n\000c\000h\000m\000a\000r\000k\000\040\000H\000a\000r\000n\000e\000s\000s}{section.3}% 11
\BOOKMARK [2][-]{subsection.3.4}{\376\377\0003\000.\0004\000\040\000H\000a\000r\000d\000w\000a\000r\000e\000\040\000P\000l\000a\000t\000f\000o\000r\000m}{section.3}% 12
\BOOKMARK [2][-]{subsection.3.5}{\376\377\0003\000.\0005\000\040\000S\000t\000a\000t\000i\000s\000t\000i\000c\000a\000l\000\040\000M\000e\000t\000h\000o\000d\000o\000l\000o\000g\000y}{section.3}% 13
\BOOKMARK [2][-]{subsection.3.6}{\376\377\0003\000.\0006\000\040\000E\000n\000e\000r\000g\000y\000\040\000M\000e\000a\000s\000u\000r\000e\000m\000e\000n\000t}{section.3}% 14
\BOOKMARK [1][-]{section.4}{\376\377\0004\000\040\000R\000e\000s\000u\000l\000t\000s}{}% 15
\BOOKMARK [2][-]{subsection.4.1}{\376\377\0004\000.\0001\000\040\000C\000y\000c\000l\000e\000\040\000C\000o\000u\000n\000t\000\040\000D\000i\000s\000t\000r\000i\000b\000u\000t\000i\000o\000n\000s}{section.4}% 16
\BOOKMARK [2][-]{subsection.4.2}{\376\377\0004\000.\0002\000\040\000S\000p\000e\000e\000d\000u\000p\000\040\000D\000e\000c\000o\000m\000p\000o\000s\000i\000t\000i\000o\000n}{section.4}% 17
\BOOKMARK [2][-]{subsection.4.3}{\376\377\0004\000.\0003\000\040\000H\000a\000n\000d\000-\000W\000r\000i\000t\000t\000e\000n\000\040\000S\000I\000M\000D\000\040\000S\000p\000e\000e\000d\000u\000p}{section.4}% 18
\BOOKMARK [2][-]{subsection.4.4}{\376\377\0004\000.\0004\000\040\000S\000t\000a\000t\000i\000s\000t\000i\000c\000a\000l\000\040\000S\000i\000g\000n\000i\000f\000i\000c\000a\000n\000c\000e}{section.4}% 19
\BOOKMARK [2][-]{subsection.4.5}{\376\377\0004\000.\0005\000\040\000C\000r\000o\000s\000s\000-\000P\000a\000r\000a\000m\000e\000t\000e\000r\000\040\000C\000o\000n\000s\000i\000s\000t\000e\000n\000c\000y}{section.4}% 20
\BOOKMARK [2][-]{subsection.4.6}{\376\377\0004\000.\0006\000\040\000H\000a\000r\000d\000w\000a\000r\000e\000\040\000C\000o\000u\000n\000t\000e\000r\000\040\000B\000r\000e\000a\000k\000d\000o\000w\000n}{section.4}% 21
\BOOKMARK [2][-]{subsection.4.7}{\376\377\0004\000.\0007\000\040\000E\000n\000e\000r\000g\000y\000\040\000E\000f\000f\000i\000c\000i\000e\000n\000c\000y}{section.4}% 22
\BOOKMARK [1][-]{section.5}{\376\377\0005\000\040\000D\000i\000s\000c\000u\000s\000s\000i\000o\000n}{}% 23
\BOOKMARK [2][-]{subsection.5.1}{\376\377\0005\000.\0001\000\040\000W\000h\000y\000\040\000A\000r\000i\000t\000h\000m\000e\000t\000i\000c\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000s\000\040\000B\000e\000n\000e\000f\000i\000t\000\040\000M\000o\000s\000t}{section.5}% 24
\BOOKMARK [2][-]{subsection.5.2}{\376\377\0005\000.\0002\000\040\000W\000h\000y\000\040\000t\000h\000e\000\040\000C\000o\000m\000p\000i\000l\000e\000r\000\040\000C\000a\000n\000n\000o\000t\000\040\000A\000u\000t\000o\000-\000V\000e\000c\000t\000o\000r\000i\000s\000e\000\040\000N\000T\000T}{section.5}% 25
\BOOKMARK [2][-]{subsection.5.3}{\376\377\0005\000.\0003\000\040\000W\000h\000y\000\040\000S\000H\000A\000K\000E\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000s\000\040\000B\000e\000n\000e\000f\000i\000t\000\040\000L\000e\000s\000s}{section.5}% 26
\BOOKMARK [2][-]{subsection.5.4}{\376\377\0005\000.\0004\000\040\000W\000h\000y\000\040\000N\000o\000i\000s\000e\000\040\000S\000a\000m\000p\000l\000i\000n\000g\000\040\000B\000a\000r\000e\000l\000y\000\040\000B\000e\000n\000e\000f\000i\000t\000s}{section.5}% 27
\BOOKMARK [2][-]{subsection.5.5}{\376\377\0005\000.\0005\000\040\000N\000T\000T\000\040\000C\000a\000c\000h\000e\000-\000S\000t\000a\000t\000e\000\040\000V\000a\000r\000i\000a\000t\000i\000o\000n\000\040\000A\000c\000r\000o\000s\000s\000\040\000P\000a\000r\000a\000m\000e\000t\000e\000r\000\040\000S\000e\000t\000s}{section.5}% 28
\BOOKMARK [2][-]{subsection.5.6}{\376\377\0005\000.\0006\000\040\000I\000m\000p\000l\000i\000c\000a\000t\000i\000o\000n\000s\000\040\000f\000o\000r\000\040\000D\000e\000p\000l\000o\000y\000m\000e\000n\000t}{section.5}% 29
\BOOKMARK [2][-]{subsection.5.7}{\376\377\0005\000.\0007\000\040\000L\000i\000m\000i\000t\000a\000t\000i\000o\000n\000s}{section.5}% 30
\BOOKMARK [1][-]{section.6}{\376\377\0006\000\040\000R\000e\000l\000a\000t\000e\000d\000\040\000W\000o\000r\000k}{}% 31
\BOOKMARK [1][-]{section.7}{\376\377\0007\000\040\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 32
\BOOKMARK [1][-]{section*.33}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 33
\BOOKMARK [1][-]{appendix.A}{\376\377\000A\000\040\000E\000n\000d\000-\000t\000o\000-\000E\000n\000d\000\040\000K\000E\000M\000\040\000S\000p\000e\000e\000d\000u\000p}{}% 34
\BOOKMARK [1][-]{appendix.B}{\376\377\000B\000\040\000F\000u\000l\000l\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000\040\000S\000e\000t}{}% 35

BIN
paper/main.pdf Normal file

Binary file not shown.

56
paper/main.tex Normal file
View File

@ -0,0 +1,56 @@
\documentclass[sigconf, nonacm]{acmart}
% ── Packages ──────────────────────────────────────────────────────────────────
\usepackage{booktabs}
\usepackage{microtype}
\usepackage{subcaption}
\usepackage{todonotes}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.18}
\input{macros}
% ── Metadata ──────────────────────────────────────────────────────────────────
% NOTE: Title targets Phase 1 (ML-KEM, x86 AVX2).
% Update when Phase 2/3 material (ML-DSA, ARM, energy) is incorporated.
\title{Where Does SIMD Help Post-Quantum Cryptography?\\
A Micro-Architectural Study of ML-KEM on x86 AVX2}
\author{Levi Neuwirth}
\affiliation{%
\institution{Brown University}
\city{Providence}
\state{Rhode Island}
\country{USA}
}
\email{ln@levineuwirth.org}
% ── Abstract ──────────────────────────────────────────────────────────────────
\begin{abstract}
\input{sections/abstract}
\end{abstract}
\keywords{post-quantum cryptography, ML-KEM, Kyber, SIMD, AVX2, performance
analysis, micro-architecture, benchmark reproducibility}
% ─────────────────────────────────────────────────────────────────────────────
\begin{document}
\maketitle
\input{sections/intro}
\input{sections/background}
\input{sections/methodology}
\input{sections/results}
\input{sections/discussion}
\input{sections/related}
\input{sections/conclusion}
\bibliographystyle{ACM-Reference-Format}
\bibliography{refs}
\appendix
\input{sections/supplementary}
\end{document}

2
paper/pgftest.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

494
paper/pgftest.log Normal file
View File

@ -0,0 +1,494 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:31
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest.tex
(/tmp/pgftest.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots
.code.tex
\pgfplots@group@current@plot=\count311
\pgfplots@group@current@row=\count312
\pgfplots@group@current@column=\count313
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
calc.code.tex
File: tikzlibrarycalc.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count314
)
No file pgftest.aux.
\openout1 = `pgftest.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count315
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count316
\nofMParguments=\count317
\everyMPshowfont=\toks34
\MPscratchCnt=\count318
\MPscratchDim=\dimen272
\MPnumerator=\count319
\makeMPintoPDFobject=\count320
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
Package pgfplots info on input line 7: Using 'lua backend=false' for axis: ymod
e=log unsupported (yet).
Package pgfplots info on input line 7: Using 'lua backend=false' for axis: x co
ord trafo unsupported.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 9.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 9.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22374 strings out of 469515
603098 string characters out of 5470808
1118991 words of memory out of 5000000
50722 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,739b,2054s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/t
exmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
Output written on pgftest.pdf (1 page, 20045 bytes).
PDF statistics:
21 PDF objects out of 1000 (max. 8388607)
13 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest.pdf Normal file

Binary file not shown.

2
paper/pgftest2.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

513
paper/pgftest2.log Normal file
View File

@ -0,0 +1,513 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:31
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest2.tex
(/tmp/pgftest2.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots
.code.tex
\pgfplots@group@current@plot=\count311
\pgfplots@group@current@row=\count312
\pgfplots@group@current@column=\count313
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
calc.code.tex
File: tikzlibrarycalc.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count314
)
No file pgftest2.aux.
\openout1 = `pgftest2.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 11.
LaTeX Font Info: ... okay on input line 11.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 11.
LaTeX Font Info: ... okay on input line 11.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 11.
LaTeX Font Info: ... okay on input line 11.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 11.
LaTeX Font Info: ... okay on input line 11.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 11.
LaTeX Font Info: ... okay on input line 11.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 11.
LaTeX Font Info: ... okay on input line 11.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 11.
LaTeX Font Info: ... okay on input line 11.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count315
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count316
\nofMParguments=\count317
\everyMPshowfont=\toks34
\MPscratchCnt=\count318
\MPscratchDim=\dimen272
\MPnumerator=\count319
\makeMPintoPDFobject=\count320
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
! Package pgfkeys Error: I do not know the key '/pgfplots/bar width', to which
you passed '5pt', and I am going to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.13 ...bar, bar width=5pt, width=5cm, height=4cm]
This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.
Package pgfplots info on input line 15: Using 'lua backend=false' for axis: ymo
de=log unsupported (yet).
Package pgfplots info on input line 15: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 17.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 17.
Package pgfplots info on input line 17: Using 'lua backend=false' for axis: ymo
de=log unsupported (yet).
Package pgfplots info on input line 17: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest2.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22386 strings out of 469515
603412 string characters out of 5470808
1122992 words of memory out of 5000000
50734 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,740b,2308s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/t
exmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
Output written on pgftest2.pdf (1 page, 20631 bytes).
PDF statistics:
21 PDF objects out of 1000 (max. 8388607)
13 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest2.pdf Normal file

Binary file not shown.

2
paper/pgftest3.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

498
paper/pgftest3.log Normal file
View File

@ -0,0 +1,498 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:32
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest3.tex
(/tmp/pgftest3.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots
.code.tex
\pgfplots@group@current@plot=\count311
\pgfplots@group@current@row=\count312
\pgfplots@group@current@column=\count313
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
calc.code.tex
File: tikzlibrarycalc.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count314
)
No file pgftest3.aux.
\openout1 = `pgftest3.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count315
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count316
\nofMParguments=\count317
\everyMPshowfont=\toks34
\MPscratchCnt=\count318
\MPscratchDim=\dimen272
\MPnumerator=\count319
\makeMPintoPDFobject=\count320
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
Package pgfplots info on input line 11: Using 'lua backend=false' for axis: ymo
de=log unsupported (yet).
Package pgfplots info on input line 11: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 13.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 13.
Package pgfplots info on input line 13: Using 'lua backend=false' for axis: ymo
de=log unsupported (yet).
Package pgfplots info on input line 13: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest3.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22386 strings out of 469515
603412 string characters out of 5470808
1122992 words of memory out of 5000000
50734 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,740b,2310s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/t
exmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
Output written on pgftest3.pdf (1 page, 20634 bytes).
PDF statistics:
21 PDF objects out of 1000 (max. 8388607)
13 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest3.pdf Normal file

Binary file not shown.

2
paper/pgftest4.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

496
paper/pgftest4.log Normal file
View File

@ -0,0 +1,496 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:45
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest4.tex
(/tmp/pgftest4.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count311
)
No file pgftest4.aux.
\openout1 = `pgftest4.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8.
LaTeX Font Info: ... okay on input line 8.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count312
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count313
\nofMParguments=\count314
\everyMPshowfont=\toks34
\MPscratchCnt=\count315
\MPscratchDim=\dimen272
\MPnumerator=\count316
\makeMPintoPDFobject=\count317
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
Package pgfplots info on input line 11: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
! Package pgfkeys Error: I do not know the key '/tikz/ymode', to which you pass
ed 'log', and I am going to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.13 \end{axis}
This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 13.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 13.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest4.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22165 strings out of 469515
595598 string characters out of 5470808
1118992 words of memory out of 5000000
50519 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,734b,2073s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on pgftest4.pdf (1 page, 11971 bytes).
PDF statistics:
16 PDF objects out of 1000 (max. 8388607)
10 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest4.pdf Normal file

Binary file not shown.

2
paper/pgftest5.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

497
paper/pgftest5.log Normal file
View File

@ -0,0 +1,497 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:45
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest5.tex
(/tmp/pgftest5.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count311
)
No file pgftest5.aux.
\openout1 = `pgftest5.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 13.
LaTeX Font Info: ... okay on input line 13.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 13.
LaTeX Font Info: ... okay on input line 13.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 13.
LaTeX Font Info: ... okay on input line 13.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 13.
LaTeX Font Info: ... okay on input line 13.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 13.
LaTeX Font Info: ... okay on input line 13.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 13.
LaTeX Font Info: ... okay on input line 13.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 13.
LaTeX Font Info: ... okay on input line 13.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count312
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count313
\nofMParguments=\count314
\everyMPshowfont=\toks34
\MPscratchCnt=\count315
\MPscratchDim=\dimen272
\MPnumerator=\count316
\makeMPintoPDFobject=\count317
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
Package pgfplots info on input line 16: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
! Package pgfkeys Error: I do not know the key '/tikz/ymode', to which you pass
ed 'log', and I am going to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.18 \end{axis}
This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 18.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 18.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest5.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22168 strings out of 469515
595556 string characters out of 5470808
1118992 words of memory out of 5000000
50521 multiletter control sequences out of 15000+600000
628020 words of font info for 41 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,734b,2077s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/t
exmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb>
Output written on pgftest5.pdf (1 page, 19832 bytes).
PDF statistics:
21 PDF objects out of 1000 (max. 8388607)
13 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest5.pdf Normal file

Binary file not shown.

2
paper/pgftest6.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

496
paper/pgftest6.log Normal file
View File

@ -0,0 +1,496 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:46
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest6.tex
(/tmp/pgftest6.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count311
)
No file pgftest6.aux.
\openout1 = `pgftest6.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 7.
LaTeX Font Info: ... okay on input line 7.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 7.
LaTeX Font Info: ... okay on input line 7.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 7.
LaTeX Font Info: ... okay on input line 7.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 7.
LaTeX Font Info: ... okay on input line 7.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 7.
LaTeX Font Info: ... okay on input line 7.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 7.
LaTeX Font Info: ... okay on input line 7.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 7.
LaTeX Font Info: ... okay on input line 7.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count312
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count313
\nofMParguments=\count314
\everyMPshowfont=\toks34
\MPscratchCnt=\count315
\MPscratchDim=\dimen272
\MPnumerator=\count316
\makeMPintoPDFobject=\count317
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
Package pgfplots info on input line 10: Using 'lua backend=false' for axis: x c
oord trafo unsupported.
! Package pgfkeys Error: I do not know the key '/tikz/ymode', to which you pass
ed 'log', and I am going to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.12 \end{axis}
This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 12.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 12.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest6.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22165 strings out of 469515
595570 string characters out of 5470808
1119992 words of memory out of 5000000
50519 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,734b,2075s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on pgftest6.pdf (1 page, 11993 bytes).
PDF statistics:
16 PDF objects out of 1000 (max. 8388607)
10 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest6.pdf Normal file

Binary file not shown.

2
paper/pgftest7.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

484
paper/pgftest7.log Normal file
View File

@ -0,0 +1,484 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:46
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgftest7.tex
(/tmp/pgftest7.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count311
)
No file pgftest7.aux.
\openout1 = `pgftest7.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count312
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count313
\nofMParguments=\count314
\everyMPshowfont=\toks34
\MPscratchCnt=\count315
\MPscratchDim=\dimen272
\MPnumerator=\count316
\makeMPintoPDFobject=\count317
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots notification 'compat/show suggested version=true': document ha
s been generated with the most recent feature set (\pgfplotsset{compat=1.18}).
Package pgfplots info on input line 7: Using 'lua backend=false' for axis: ymod
e=log unsupported (yet).
Package pgfplots info on input line 7: Using 'lua backend=false' for axis: x co
ord trafo unsupported.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 9.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 9.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgftest7.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
22155 strings out of 469515
595347 string characters out of 5470808
1118992 words of memory out of 5000000
50509 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,9n,118p,734b,2054s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/t
exmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
Output written on pgftest7.pdf (1 page, 20071 bytes).
PDF statistics:
21 PDF objects out of 1000 (max. 8388607)
13 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgftest7.pdf Normal file

Binary file not shown.

2
paper/pgfver.aux Normal file
View File

@ -0,0 +1,2 @@
\relax
\gdef \@abspage@last{1}

478
paper/pgfver.log Normal file
View File

@ -0,0 +1,478 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.6) 4 APR 2026 13:30
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**/tmp/pgfver.tex
(/tmp/pgfver.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(/usr/share/texmf-dist/tex/latex/pgfplots/pgfplots.sty
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex)
Package: pgfplots 2025/08/14 v1.18.2 Data Visualization (1.18.2)
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen149
\Gin@req@width=\dimen150
)
(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks18
\pgfutil@tempdima=\dimen151
\pgfutil@tempdimb=\dimen152
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box53
)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex)
Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a)
))
Package: pgf 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks19
\pgfkeys@temptoks=\toks20
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te
x
\pgfkeys@tmptoks=\toks21
))
\pgf@x=\dimen153
\pgf@y=\dimen154
\pgf@xa=\dimen155
\pgf@ya=\dimen156
\pgf@xb=\dimen157
\pgf@yb=\dimen158
\pgf@xc=\dimen159
\pgf@yc=\dimen160
\pgf@xd=\dimen161
\pgf@yd=\dimen162
\w@pgf@writea=\write3
\r@pgf@reada=\read2
\c@pgf@counta=\count283
\c@pgf@countb=\count284
\c@pgf@countc=\count285
\c@pgf@countd=\count286
\t@pgf@toka=\toks22
\t@pgf@tokb=\toks23
\t@pgf@tokc=\toks24
\pgf@sys@id@count=\count287
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a)
)
Driver file for pgf: pgfsys-pdftex.def
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfsyssoftpath@smallbuffer@items=\count288
\pgfsyssoftpath@bigbuffer@items=\count289
)
(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package xcolor Info: Driver file: pdftex.def on input line 274.
(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx)
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349.
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353.
Package xcolor Info: Model `RGB' extended on input line 1365.
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367.
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368.
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372.
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen163
\pgfmath@count=\count290
\pgfmath@box=\box54
\pgfmath@toks=\toks25
\pgfmath@stack@operand=\toks26
\pgfmath@stack@operation=\toks27
)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code
.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te
x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics
.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count291
))
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@picminx=\dimen164
\pgf@picmaxx=\dimen165
\pgf@picminy=\dimen166
\pgf@picmaxy=\dimen167
\pgf@pathminx=\dimen168
\pgf@pathmaxx=\dimen169
\pgf@pathminy=\dimen170
\pgf@pathmaxy=\dimen171
\pgf@xx=\dimen172
\pgf@xy=\dimen173
\pgf@yx=\dimen174
\pgf@yy=\dimen175
\pgf@zx=\dimen176
\pgf@zy=\dimen177
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@path@lastx=\dimen178
\pgf@path@lasty=\dimen179
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@shorten@end@additional=\dimen180
\pgf@shorten@start@additional=\dimen181
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfpic=\box55
\pgf@hbox=\box56
\pgf@layerbox@main=\box57
\pgf@picture@serial@count=\count292
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgflinewidth=\dimen182
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t
ex
File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@pt@x=\dimen183
\pgf@pt@y=\dimen184
\pgf@pt@temp=\dimen185
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te
x
File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfarrowsep=\dimen186
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@max=\dimen187
\pgf@sys@shading@range@num=\count293
\pgf@shadingcount=\count294
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfexternal@startupbox=\box58
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a)
) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfnodeparttextbox=\box59
)
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a)
\pgf@nodesepstart=\dimen188
\pgf@nodesepend=\dimen189
)
(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a)
))
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
Package: pgffor 2025-08-29 v3.1.11a (3.1.11a)
\pgffor@iter=\dimen190
\pgffor@skip=\dimen191
\pgffor@stack=\toks28
\pgffor@toks=\toks29
))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
Package: tikz 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te
x
File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgf@plot@mark@count=\count295
\pgfplotmarksize=\dimen192
)
\tikz@lastx=\dimen193
\tikz@lasty=\dimen194
\tikz@lastxsaved=\dimen195
\tikz@lastysaved=\dimen196
\tikz@lastmovetox=\dimen197
\tikz@lastmovetoy=\dimen198
\tikzleveldistance=\dimen199
\tikzsiblingdistance=\dimen256
\tikz@figbox=\box60
\tikz@figbox@bg=\box61
\tikz@tempbox=\box62
\tikz@tempbox@bg=\box63
\tikztreelevel=\count296
\tikznumberofchildren=\count297
\tikznumberofcurrentchild=\count298
\tikz@fig@count=\count299
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a)
\pgfmatrixcurrentrow=\count300
\pgfmatrixcurrentcolumn=\count301
\pgf@matrix@numberofcolumns=\count302
)
\tikz@expandcount=\count303
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
topaths.code.tex
File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a)
)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex
\t@pgfplots@toka=\toks30
\t@pgfplots@tokb=\toks31
\t@pgfplots@tokc=\toks32
\pgfplots@tmpa=\dimen257
\c@pgfplots@coordindex=\count304
\c@pgfplots@scanlineindex=\count305
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_l
oader.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryfpu.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_p
gfutil-common-lists.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure
ext.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.te
x
\c@pgfplotsarray@tmp=\count306
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.t
ex)
(/usr/share/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.t
ex
\c@pgfplotstable@counta=\count307
\t@pgfplotstable@a=\toks33
)
(/usr/share/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsdeque.code.te
x) (/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsbinary.data.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading
.code.tex
\c@pgfplotslibrarysurf@no=\count308
(/usr/share/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.
pgfsys-pdftex.def)))
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplotimage.code.tex)))
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex)
(/usr/share/texmf-dist/tex/generic/pgfplots/pgfplots.paths.code.tex)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
\pgfdecoratedcompleteddistance=\dimen258
\pgfdecoratedremainingdistance=\dimen259
\pgfdecoratedinputsegmentcompleteddistance=\dimen260
\pgfdecoratedinputsegmentremainingdistance=\dimen261
\pgf@decorate@distancetomove=\dimen262
\pgf@decorate@repeatstate=\count309
\pgfdecorationsegmentamplitude=\dimen263
\pgfdecorationsegmentlength=\dimen264
)
\tikz@lib@dec@box=\box64
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathmorphing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathmorphing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
decorations.pathreplacing.code.tex
(/usr/share/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorati
ons.pathreplacing.code.tex))
(/usr/share/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.contourlua
.code.tex)
\pgfplots@numplots=\count310
\pgfplots@xmin@reg=\dimen265
\pgfplots@xmax@reg=\dimen266
\pgfplots@ymin@reg=\dimen267
\pgfplots@ymax@reg=\dimen268
\pgfplots@zmin@reg=\dimen269
\pgfplots@zmax@reg=\dimen270
)
(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary
plotmarks.code.tex
File: tikzlibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplotmarks.code.tex
File: pgflibraryplotmarks.code.tex 2025-08-29 v3.1.11a (3.1.11a)
))) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count311
)
No file pgfver.aux.
\openout1 = `pgfver.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
LaTeX Font Info: ... okay on input line 3.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
LaTeX Font Info: ... okay on input line 3.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
LaTeX Font Info: ... okay on input line 3.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
LaTeX Font Info: ... okay on input line 3.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 3.
LaTeX Font Info: ... okay on input line 3.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
LaTeX Font Info: ... okay on input line 3.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
LaTeX Font Info: ... okay on input line 3.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count312
\scratchdimen=\dimen271
\scratchbox=\box65
\nofMPsegments=\count313
\nofMParguments=\count314
\everyMPshowfont=\toks34
\MPscratchCnt=\count315
\MPscratchDim=\dimen272
\MPnumerator=\count316
\makeMPintoPDFobject=\count317
\everyMPtoPDFconversion=\toks35
) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
Package pgfplots Warning: running in backwards compatibility mode (unsuitable t
ick labels; missing features). Consider writing \pgfplotsset{compat=1.18} into
your preamble.
on input line 3.
[1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./pgfver.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
21675 strings out of 469515
581684 string characters out of 5470808
1115990 words of memory out of 5000000
50029 multiletter control sequences out of 15000+600000
627721 words of font info for 40 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
99i,5n,118p,723b,273s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on pgfver.pdf (1 page, 14227 bytes).
PDF statistics:
16 PDF objects out of 1000 (max. 8388607)
10 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
paper/pgfver.pdf Normal file

Binary file not shown.

141
paper/refs.bib Normal file
View File

@ -0,0 +1,141 @@
% ── Post-Quantum Cryptography Standards ──────────────────────────────────────
@techreport{fips203,
author = {{National Institute of Standards and Technology}},
title = {{Module-Lattice-Based Key-Encapsulation Mechanism Standard}},
institution = {NIST},
year = {2024},
number = {FIPS 203},
url = {https://doi.org/10.6028/NIST.FIPS.203},
}
@techreport{fips204,
author = {{National Institute of Standards and Technology}},
title = {{Module-Lattice-Based Digital Signature Standard}},
institution = {NIST},
year = {2024},
number = {FIPS 204},
url = {https://doi.org/10.6028/NIST.FIPS.204},
}
@techreport{fips205,
author = {{National Institute of Standards and Technology}},
title = {{Stateless Hash-Based Digital Signature Standard}},
institution = {NIST},
year = {2024},
number = {FIPS 205},
url = {https://doi.org/10.6028/NIST.FIPS.205},
}
% ── Kyber / ML-KEM ───────────────────────────────────────────────────────────
@inproceedings{kyber2018,
author = {Bos, Joppe W. and Ducas, Léo and Kiltz, Eike and Lepoint, Tancrède
and Lyubashevsky, Vadim and Schanck, John M. and Schwabe, Peter
and Seiler, Gregor and Stehlé, Damien},
title = {{CRYSTALS -- Kyber: A CCA-Secure Module-Lattice-Based KEM}},
booktitle = {IEEE European Symposium on Security and Privacy (EuroS\&P)},
year = {2018},
pages = {353--367},
doi = {10.1109/EuroSP.2018.00032},
}
@misc{kyber-avx2,
author = {Schwabe, Peter and Seiler, Gregor},
title = {{High-Speed {AVX2} Implementation of the {Kyber} Key Encapsulation Mechanism}},
note = {AVX2 implementation in the pqclean project},
url = {https://github.com/pq-crystals/kyber},
}
% ── SIMD and Microarchitecture ────────────────────────────────────────────────
@inproceedings{intel-avx2,
author = {{Intel Corporation}},
title = {{Intel 64 and IA-32 Architectures Software Developer's Manual}},
year = {2024},
note = {Volume 2: Instruction Set Reference},
}
@inproceedings{ntt-survey,
author = {Longa, Patrick and Naehrig, Michael},
title = {{Speeding Up the Number Theoretic Transform for Faster Ideal
Lattice-Based Cryptography}},
booktitle = {CANS},
year = {2016},
doi = {10.1007/978-3-319-48965-0_8},
}
% ── Energy Measurement ───────────────────────────────────────────────────────
@inproceedings{rapl,
author = {David, Howard and Gorbatov, Eugene and Hanebutte, Ulf R. and
Khanna, Rahul and Le, Christian},
title = {{RAPL: Memory Power Estimation and Capping}},
booktitle = {ISLPED},
year = {2010},
doi = {10.1145/1840845.1840883},
}
% ── Related Benchmarking Work ────────────────────────────────────────────────
@misc{pqclean,
author = {{PQClean Contributors}},
title = {{PQClean: Clean, portable, tested implementations of post-quantum
cryptography}},
url = {https://github.com/PQClean/PQClean},
}
@misc{liboqs,
author = {{Open Quantum Safe Project}},
title = {{liboqs: C library for quantum-safe cryptographic algorithms}},
url = {https://github.com/open-quantum-safe/liboqs},
}
@misc{pqm4,
author = {Kannwischer, Matthias J. and Rijneveld, Joost and Schwabe, Peter
and Stoffelen, Ko},
title = {{pqm4: Post-quantum crypto library for the ARM Cortex-M4}},
url = {https://github.com/mupq/pqm4},
}
@misc{supercop,
author = {Bernstein, Daniel J. and Lange, Tanja},
title = {{SUPERCOP: System for Unified Performance Evaluation Related to
Cryptographic Operations and Primitives}},
url = {https://bench.cr.yp.to/supercop.html},
}
@misc{papi,
author = {{Innovative Computing Laboratory, University of Tennessee}},
title = {{PAPI: Performance Application Programming Interface}},
url = {https://icl.utk.edu/papi/},
}
@inproceedings{gueron2014,
author = {Gueron, Shay and Krasnov, Vlad},
title = {{Fast Garbling of Circuits Under Standard Assumptions}},
booktitle = {ACM CCS},
year = {2013},
note = {See also: Intel white paper on AES-GCM with AVX2},
}
@misc{bernstein2006,
author = {Bernstein, Daniel J.},
title = {{Curve25519: new Diffie-Hellman speed records}},
year = {2006},
url = {https://cr.yp.to/ecdh.html},
}
@misc{cachetime,
author = {Bernstein, Daniel J. and Schwabe, Peter},
title = {{New AES Software Speed Records}},
year = {2008},
url = {https://cr.yp.to/aes-speed.html},
}
@misc{bettini2024,
author = {{Google Security Blog}},
title = {{Protecting Chrome Traffic with Hybrid Kyber KEM}},
year = {2023},
url = {https://security.googleblog.com/2023/08/protecting-chrome-traffic-with-hybrid.html},
}

View File

@ -0,0 +1,31 @@
Post-quantum cryptography (PQC) standards are being deployed at scale following
NIST's 2024 finalization of \mlkem{} (FIPS~203), \mldsa{} (FIPS~204), and
\slhdsa{} (FIPS~205). Hand-written SIMD implementations of these algorithms
report dramatic performance advantages, yet the mechanistic origins of these
speedups are rarely quantified with statistical rigor.
We present the first systematic empirical decomposition of SIMD speedup across
the operations of \mlkem{} (Kyber) on Intel x86-64 with AVX2. Using a
reproducible benchmark harness across four compilation variants---\varrefo{}
(unoptimized), \varrefnv{} (O3, auto-vectorization disabled), \varref{}
(O3 with auto-vectorization), and \varavx{} (hand-written AVX2 intrinsics)---we
isolate three distinct contributions: compiler optimization, compiler
auto-vectorization, and hand-written SIMD. All measurements are conducted on a
pinned core of an Intel Xeon Platinum 8268 on Brown University's OSCAR HPC
cluster, with statistical significance assessed via Mann-Whitney U tests and
Cliff's~$\delta$ effect-size analysis across $n \ge 2{,}000$ independent
observations per group.
Our key findings are: (1) hand-written AVX2 assembly accounts for
\speedup{35}--\speedup{56} speedup over compiler-optimized C for the dominant
arithmetic operations (NTT, INVNTT, base multiplication), with Cliff's
$\delta = +1.000$ in every comparison---meaning AVX2 is faster in
\emph{every single} observation pair; (2) GCC's auto-vectorizer contributes
negligibly or even slightly negatively for NTT-based operations because the
modular reduction step prevents vectorization; (3) end-to-end KEM speedups of
\speedup{5.4}--\speedup{7.1} result from a weighted combination of large
per-operation gains and smaller gains in SHAKE-heavy operations (gen\_a:
\speedup{3.8}--\speedup{4.7}; noise sampling: \speedup{1.2}--\speedup{1.4}).
The benchmark harness, raw data, and analysis pipeline are released as an open
reproducible artifact.

View File

@ -0,0 +1,88 @@
% ── 2. Background ─────────────────────────────────────────────────────────────
\section{Background}
\label{sec:background}
\subsection{ML-KEM and the Number Theoretic Transform}
\mlkem{}~\cite{fips203} is a key encapsulation mechanism built on the
Module-Learning-With-Errors (Module-LWE) problem. Its security parameter
$k \in \{2, 3, 4\}$ controls the module dimension, yielding the three
instantiations \mlkemk{512}, \mlkemk{768}, and \mlkemk{1024}. The scheme
operates on polynomials in $\mathbb{Z}_q[x]/(x^{256}+1)$ with $q = 3329$.
The computational core is polynomial multiplication, which \mlkem{} evaluates
using the Number Theoretic Transform (NTT)~\cite{ntt-survey}. The NTT is a
modular analog of the Fast Fourier Transform that reduces schoolbook
$O(n^2)$ polynomial multiplication to $O(n \log n)$ pointwise operations.
For $n = 256$ coefficients and $q = 3329$, the NTT can be computed using a
specialized radix-2 Cooley-Tukey butterfly operating over 128 size-2 NTTs
in the NTT domain.
The primitive operations benchmarked in this paper are:
\begin{itemize}
\item \op{NTT} / \op{INVNTT}: forward and inverse NTT over a single
polynomial ($n = 256$).
\item \op{basemul}: pointwise multiplication in the NTT domain (base
multiplication of two NTT-domain polynomials).
\item \op{poly\_frommsg}: encodes a 32-byte message into a polynomial.
\item \op{gen\_a}: generates the public matrix $\mathbf{A}$ by expanding
a seed with SHAKE-128.
\item \op{poly\_getnoise\_eta\{1,2\}}: samples a centered binomial
distribution (CBD) noise polynomial using SHAKE-256 output.
\item \op{indcpa\_\{keypair, enc, dec\}}: full IND-CPA key generation,
encryption, and decryption.
\end{itemize}
\subsection{AVX2 SIMD on x86-64}
Intel's Advanced Vector Extensions 2 (AVX2) extends the YMM register file to
256-bit width, accommodating sixteen 16-bit integers simultaneously. The
\mlkem{} AVX2 implementation~\cite{kyber-avx2} by Schwabe and Seiler uses
hand-written assembly intrinsics rather than compiler-generated vectorized code.
The key instruction patterns exploited are:
\begin{itemize}
\item \texttt{vpaddw} / \texttt{vpsubw}: packed 16-bit addition/subtraction,
operating on 16 coefficients per instruction.
\item \texttt{vpmullw} / \texttt{vpmulhw}: packed 16-bit low/high multiply,
used to implement 16-wide Montgomery reduction.
\item \texttt{vpunpcklwd} / \texttt{vpunpckhwd}: interleave operations for
the NTT butterfly shuffle pattern.
\end{itemize}
Because \mlkem{} coefficients are 16-bit integers and the NTT butterfly
operates independently on 16 coefficient pairs per round, AVX2 offers a
theoretical $16\times$ instruction-count reduction for arithmetic steps. As
\S\ref{sec:results} shows, observed speedups \emph{exceed} $16\times$ for
\op{INVNTT} and \op{basemul} due to additional instruction-level parallelism
(ILP) in the unrolled hand-written loops.
\subsection{Compilation Variants}
To isolate distinct sources of speedup, we define four compilation variants
(detailed in §\ref{sec:methodology}):
\begin{description}
\item[\varrefo{}] Compiled at \texttt{-O0}: no optimization. Serves as the
unoptimized baseline.
\item[\varrefnv{}] Compiled at \texttt{-O3 -fno-tree-vectorize}: full
compiler optimization but with auto-vectorization disabled. Isolates
the contribution of general compiler optimizations (register
allocation, loop unrolling, constant propagation) from SIMD.
\item[\varref{}] Compiled at \texttt{-O3}: full optimization including GCC's
auto-vectorizer. Represents what production deployments without
hand-tuned SIMD would achieve.
\item[\varavx{}] Hand-written AVX2 assembly: the production-quality
optimized implementation.
\end{description}
\subsection{Hardware Performance Counters and Energy}
\label{sec:bg:papi}
\phasetwo{Expand with PAPI and RAPL background once data is collected.}
Hardware performance counters (accessed via PAPI~\cite{papi} or Linux
\texttt{perf\_event}) allow measuring IPC, cache miss rates, and branch
mispredictions at the instruction level. Intel RAPL~\cite{rapl} provides
package- and DRAM-domain energy readings. These will be incorporated in
Phase~2 to provide a mechanistic hardware-level explanation complementing the
cycle-count analysis presented here.

View File

@ -0,0 +1,46 @@
% ── 7. Conclusion ─────────────────────────────────────────────────────────────
\section{Conclusion}
\label{sec:conclusion}
We presented the first statistically rigorous decomposition of SIMD speedup
in \mlkem{} (Kyber), isolating the contributions of compiler optimization,
auto-vectorization, and hand-written AVX2 assembly. Our main findings are:
\begin{enumerate}
\item \textbf{Hand-written SIMD is necessary, not optional.} GCC's
auto-vectorizer provides negligible benefit ($<10\%$) for NTT-based
arithmetic, and for \op{INVNTT} actually produces slightly slower code
than non-vectorized O3. The full \speedup{35}--\speedup{56} speedup
on arithmetic operations comes entirely from hand-written assembly.
\item \textbf{The distribution of SIMD benefit across operations is
highly non-uniform.} Arithmetic operations (NTT, INVNTT, basemul,
frommsg) achieve \speedup{35}--\speedup{56}; SHAKE-based expansion
(gen\_a) achieves only \speedup{3.8}--\speedup{4.7}; and noise
sampling achieves \speedup{1.2}--\speedup{1.4}. The bottleneck shifts
from compute to memory bandwidth for non-arithmetic operations.
\item \textbf{The statistical signal is overwhelming.} Cliff's $\delta =
+1.000$ for nearly all operations means AVX2 is faster than \varref{}
in every single observation pair across $n \ge 2{,}000$ measurements.
These results are stable across three \mlkem{} parameter sets.
\item \textbf{Context affects even isolated micro-benchmarks.} The NTT
speedup varies by 13\% across parameter sets despite identical
polynomial dimensions, attributed to cache-state effects from
surrounding polyvec operations.
\end{enumerate}
\paragraph{Future work.}
Planned extensions include: hardware performance counter profiles (IPC, cache
miss rates) via PAPI to validate the mechanistic explanations in
§\ref{sec:discussion}; energy measurement via Intel RAPL; extension to
\mldsa{} (Dilithium) and \slhdsa{} (SPHINCS+) with the same harness; and
cross-ISA comparison with ARM NEON/SVE (Graviton3) and RISC-V V. A compiler
version sensitivity study (GCC 11--14, Clang 14--17) will characterize how
stable the auto-vectorization gap is across compiler releases.
\paragraph{Artifact.}
The benchmark harness, SLURM job templates, raw cycle-count data, analysis
pipeline, and this paper are released at
\url{https://github.com/lneuwirth/where-simd-helps} under an open license.

View File

@ -0,0 +1,104 @@
% ── 5. Discussion ─────────────────────────────────────────────────────────────
\section{Discussion}
\label{sec:discussion}
\subsection{Why Arithmetic Operations Benefit Most}
The NTT butterfly loop processes 128 pairs of 16-bit coefficients per forward
transform. In the scalar \varref{} path, each butterfly requires a modular
multiplication (implemented as a Barrett reduction), an addition, and a
subtraction---roughly 10--15 instructions per pair with data-dependent
serialization through the multiply-add chain. The AVX2 path uses
\texttt{vpmullw}/\texttt{vpmulhw} to compute 16 Montgomery multiplications
per instruction, processing an entire butterfly layer in \mbox{$\sim$16}
fewer instruction cycles.
The observed INVNTT speedup of \speedup{56.3} at \mlkemk{512} \emph{exceeds}
the theoretical $16\times$ register-width advantage. We attribute this to
two compounding factors: (1) the unrolled hand-written assembly eliminates
loop overhead and branch prediction pressure; (2) the inverse NTT has a
slightly different access pattern than the forward NTT that benefits from
out-of-order execution with wide issue ports on the Cascade Lake
microarchitecture. \phasetwo{Confirm with IPC and port utilisation counters.}
\subsection{Why the Compiler Cannot Auto-Vectorise NTT}
A striking result is that \varref{} and \varrefnv{} perform nearly identically
for all arithmetic operations ($\leq 10\%$ difference, with \varrefnv{}
occasionally faster). This means GCC's tree-vectorizer produces no net benefit
for the NTT inner loop.
The fundamental obstacle is \emph{modular reduction}: Barrett reduction and
Montgomery reduction require a multiply-high operation (\texttt{vpmulhw}) that
GCC cannot express through the scalar multiply-add chain it generates for the
C reference code. Additionally, the NTT butterfly requires coefficient
interleaving (odd/even index separation) that the auto-vectorizer does not
recognize as a known shuffle pattern. The hand-written assembly encodes these
patterns directly in \texttt{vpunpck*} instructions.
This finding has practical significance: developers porting \mlkem{} to new
platforms cannot rely on the compiler to provide SIMD speedup for the NTT.
Hand-written intrinsics or architecture-specific assembly are necessary.
\subsection{Why SHAKE Operations Benefit Less}
\op{gen\_a} expands a public seed into a $k \times k$ matrix of polynomials
using SHAKE-128. Each Keccak-f[1600] permutation operates on a 200-byte state
that does not fit in AVX2 registers (16 lanes $\times$ 16 bits = 32 bytes). The
AVX2 Keccak implementation achieves \speedup{3.8}--\speedup{4.7} primarily by
batching multiple independent absorb phases and using vectorized XOR across
parallel state words---a different kind of SIMD parallelism than the arithmetic
path. The bottleneck shifts to memory bandwidth as the permutation state is
repeatedly loaded from and stored to L1 cache.
\subsection{Why Noise Sampling Barely Benefits}
CBD noise sampling reads adjacent bits from a byte stream and computes
Hamming weights. The scalar path already uses bitwise operations with no
data-dependent branches (constant-time design). The AVX2 path can batch the
popcount computation but remains bottlenecked by the sequential bitstream
access pattern. The small \speedup{1.2}--\speedup{1.4} speedup reflects
this fundamental memory access bottleneck rather than compute limitation.
\subsection{NTT Cache-State Variation Across Parameter Sets}
The \speedup{13\%} variation in NTT speedup across parameter sets
\ref{sec:results:crossparams}) despite identical polynomial dimensions
suggests that execution context matters even for nominally isolated
micro-benchmarks. Higher-$k$ polyvec operations that precede each NTT call
have larger memory footprints ($k$ more polynomials in the accumulation
buffer), potentially evicting portions of the instruction cache or L1 data
cache that the scalar NTT path relies on. The AVX2 path is less affected
because it maintains more coefficient state in vector registers between
operations. \phasetwo{Verify with L1/L2 miss counters split by scalar vs AVX2.}
\subsection{Implications for Deployment}
The end-to-end KEM speedups of \speedup{5.4}--\speedup{7.1} (Appendix,
Figure~\ref{fig:kemlevel}) represent the practical deployment benefit.
Deployments that cannot use hand-written SIMD (e.g., some constrained
environments, or languages without inline assembly support) should expect
performance within a factor of $5$--$7$ of the AVX2 reference.
Auto-vectorization provides essentially no shortcut: the gap between
compiler-optimized C and hand-written SIMD is the full $5$--$7\times$, not
a fraction of it.
\subsection{Limitations}
\paragraph{No hardware counter data (Phase~1).} The mechanistic explanations
in this section are derived analytically from instruction-set structure and
publicly known microarchitecture details. Phase~2 will validate these with
PAPI counter measurements. \phasetwo{PAPI counters: IPC, cache miss rates.}
\paragraph{Single microarchitecture.} All results are from Intel Cascade Lake
(Xeon Platinum 8268). Speedup ratios may differ on other AVX2 hosts (e.g.,
Intel Skylake, AMD Zen 3/4) due to differences in execution port configuration,
vector throughput, and out-of-order window size.
\phasethree{Repeat on AMD Zen, ARM Graviton3, RISC-V.}
\paragraph{Frequency scaling.} OSCAR nodes may operate in a power-capped mode
that reduces Turbo Boost frequency under sustained SIMD load. RDTSC counts
wall-clock ticks at the invariant TSC frequency, which may differ from the
actual core frequency during SIMD execution.
\phasetwo{Characterize frequency during benchmarks; consider RAPL-normalized
cycle counts.}

51
paper/sections/intro.tex Normal file
View File

@ -0,0 +1,51 @@
% ── 1. Introduction ───────────────────────────────────────────────────────────
\section{Introduction}
\label{sec:intro}
The 2024 NIST post-quantum cryptography standards~\cite{fips203,fips204,fips205}
mark a turning point in deployed cryptography. \mlkem{} (Module-Lattice Key
Encapsulation Mechanism, FIPS~203) is already being integrated into TLS~1.3 by
major browser vendors~\cite{bettini2024} and is planned for inclusion in OpenSSH.
At deployment scale, performance matters: a server handling thousands of TLS
handshakes per second experiences a non-trivial computational overhead from
replacing elliptic-curve key exchange with a lattice-based KEM.
Reference implementations of \mlkem{} ship with hand-optimized AVX2 assembly
for the dominant operations~\cite{kyber-avx2}. Benchmarks routinely report
that the AVX2 path is ``$5$--$7\times$ faster'' than the portable C reference.
However, such top-level numbers conflate several distinct phenomena:
compiler optimization, compiler auto-vectorization, and hand-written SIMD. They
also say nothing about \emph{which} operations drive the speedup or \emph{why}
the assembly is faster than what a compiler can produce automatically.
\subsection*{Contributions}
This paper makes the following contributions:
\begin{enumerate}
\item \textbf{Three-way speedup decomposition.} We isolate compiler
optimization, auto-vectorization, and hand-written SIMD as separate
factors using four compilation variants (§\ref{sec:methodology}).
\item \textbf{Statistically rigorous benchmarking.} All comparisons are
backed by Mann-Whitney U tests and Cliff's~$\delta$ effect-size
analysis over $n \ge 2{,}000$ independent observations, with
bootstrapped 95\% confidence intervals on speedup ratios
\ref{sec:results}).
\item \textbf{Mechanistic analysis without hardware counters.} We explain
the quantitative speedup pattern analytically from the structure of
the NTT butterfly, Montgomery multiplication, and the SHAKE-128
permutation (§\ref{sec:discussion}).
\item \textbf{Open reproducible artifact.} The full pipeline from raw
SLURM outputs to publication figures is released publicly.
\end{enumerate}
\subsection*{Scope and roadmap}
This report covers Phase~1 of a broader study: \mlkem{} on Intel x86-64 with
AVX2. Planned extensions include hardware performance counter profiles (PAPI),
energy measurement (Intel RAPL), extension to \mldsa{} (Dilithium), and
cross-ISA comparison with ARM NEON/SVE and RISC-V V. Those results will be
incorporated in subsequent revisions.

View File

@ -0,0 +1,105 @@
% ── 3. Methodology ────────────────────────────────────────────────────────────
\section{Methodology}
\label{sec:methodology}
\subsection{Implementation Source}
We use the \mlkem{} reference implementation from the \texttt{pq-crystals/kyber}
repository~\cite{kyber-avx2}, which provides both a portable C reference
(\varref{} / \varrefnv{}) and hand-written AVX2 assembly (\varavx{}). The
implementation targets the CRYSTALS-Kyber specification, functionally identical
to FIPS~203.
\subsection{Compilation Variants}
\label{sec:meth:variants}
We compile the same C source under four variant configurations using GCC 13.3.0:
\begin{description}
\item[\varrefo{}] \texttt{-O0}: unoptimized. Every operation is loaded/stored
through memory; no inlining, no register allocation. Establishes a
reproducible performance floor.
\item[\varrefnv{}] \texttt{-O3 -fno-tree-vectorize}: aggressive scalar
optimization but with the tree-vectorizer disabled. Isolates the
auto-vectorization contribution from general O3 optimizations.
\item[\varref{}] \texttt{-O3}: full optimization with GCC auto-vectorization
enabled. Represents realistic scalar-C performance.
\item[\varavx{}] \texttt{-O3} with hand-written AVX2 assembly linked in:
the production optimized path.
\end{description}
All four variants are built with position-independent code and identical linker
flags. The AVX2 assembly sources use the same \texttt{KYBER\_NAMESPACE} macro
as the C sources to prevent symbol collisions.
\subsection{Benchmark Harness}
Each binary runs a \emph{spin loop}: $N = 1{,}000$ outer iterations (spins),
each performing 20~repetitions of the target operation followed by a median
and mean cycle count report via \texttt{RDTSC}. Using the median of 20
repetitions per spin suppresses within-spin outliers; collecting 1{,}000 spins
produces a distribution of 1{,}000 median observations per binary invocation.
Two independent job submissions per (algorithm, variant) pair yield
$n \ge 2{,}000$ independent observations per group (3{,}000 for \varref{} and
\varavx{}, which had a third clean run). All runs used \texttt{taskset} to pin
to a single logical core, preventing OS scheduling interference.
\subsection{Hardware Platform}
All benchmarks were conducted on Brown University's OSCAR HPC cluster, node
\texttt{node2334}, pinned via SLURM's \texttt{{-}{-}nodelist} directive to
ensure all variants measured on identical hardware. The node specifications are:
\begin{center}
\small
\begin{tabular}{ll}
\toprule
CPU model & Intel Xeon Platinum 8268 (Cascade Lake) \\
Clock speed & 2.90\,GHz base \\
ISA extensions & SSE4.2, AVX, AVX2, AVX-512F \\
L1D cache & 32\,KB (per core) \\
L2 cache & 1\,MB (per core) \\
L3 cache & 35.75\,MB (shared) \\
OS & Linux (kernel 3.10) \\
Compiler & GCC 13.3.0 \\
\bottomrule
\end{tabular}
\end{center}
\noindent\textbf{Reproducibility note:} The \texttt{perf\_event\_paranoid}
setting on OSCAR nodes is 2, which prevents unprivileged access to hardware
performance counters. Hardware counter data (IPC, cache miss rates) will be
collected in Phase~2 after requesting elevated permissions from the cluster
administrators. \phasetwo{Hardware counter collection via PAPI.}
\subsection{Statistical Methodology}
\label{sec:meth:stats}
Cycle count distributions are right-skewed with occasional outliers from
OS interrupts and cache-cold starts (Figure~\ref{fig:distributions}). We
therefore use nonparametric statistics throughout:
\begin{itemize}
\item \textbf{Speedup}: ratio of group medians, $\hat{s} =
\text{median}(X_\text{baseline}) / \text{median}(X_\text{variant})$.
\item \textbf{Confidence interval}: 95\% bootstrap CI on $\hat{s}$,
computed by resampling both groups independently $B = 5{,}000$ times
with replacement.
\item \textbf{Mann-Whitney U test}: one-sided test for the hypothesis that
the variant distribution is stochastically smaller than the baseline
($H_1: P(X_\text{variant} < X_\text{baseline}) > 0.5$).
\item \textbf{Cliff's $\delta$}: effect size defined as $\delta =
[P(X_\text{variant} < X_\text{baseline}) -
P(X_\text{variant} > X_\text{baseline})]$, derived from the
Mann-Whitney U statistic. $\delta = +1$ indicates that
\emph{every} variant observation is faster than \emph{every}
baseline observation.
\end{itemize}
\subsection{Energy Measurement}
\label{sec:meth:energy}
\phasetwo{Intel RAPL (pkg + DRAM domains), EDP computation, per-operation joules.}
Energy measurements via Intel RAPL will be incorporated in Phase~2. The harness
already includes conditional RAPL support (\texttt{-DWITH\_RAPL=ON}) pending
appropriate system permissions.

View File

@ -0,0 +1,41 @@
% ── 6. Related Work ───────────────────────────────────────────────────────────
\section{Related Work}
\label{sec:related}
\paragraph{ML-KEM / Kyber implementations.}
The AVX2 implementation studied here was developed by Schwabe and
Seiler~\cite{kyber-avx2} and forms the optimized path in both the
\texttt{pq-crystals/kyber} reference repository and
PQClean~\cite{pqclean}. Bos et al.~\cite{kyber2018} describe the original
Kyber submission; FIPS~203~\cite{fips203} is the standardized form.
The ARM NEON and Cortex-M4 implementations are available in
pqm4~\cite{pqm4}; cross-ISA comparison is planned for Phase~3.
\paragraph{PQC benchmarking.}
eBACS/SUPERCOP provides a cross-platform benchmark suite~\cite{supercop} that
reports median cycle counts for many cryptographic primitives, including Kyber.
Our contribution complements this with a statistically rigorous decomposition
using nonparametric effect-size analysis and bootstrapped CIs. Kannwischer et
al.~\cite{pqm4} present systematic benchmarks on ARM Cortex-M4 (pqm4), which
focuses on constrained-device performance rather than SIMD analysis.
\paragraph{SIMD in cryptography.}
Gueron and Krasnov demonstrated AVX2 speedups for AES-GCM~\cite{gueron2014};
similar techniques underpin the Kyber AVX2 implementation. Bernstein's
vectorized polynomial arithmetic for Curve25519~\cite{bernstein2006} established
the template of hand-written vector intrinsics for cryptographic field
arithmetic.
\paragraph{NTT optimization.}
Longa and Naehrig~\cite{ntt-survey} survey NTT algorithms for ideal
lattice-based cryptography and analyze instruction counts for vectorized
implementations. Our measurements provide the first empirical cycle-count
decomposition isolating the compiler's contribution vs.\ hand-written SIMD for
the ML-KEM NTT specifically.
\paragraph{Hardware counter profiling.}
Bernstein and Schwabe~\cite{cachetime} discuss the relationship between cache
behavior and cryptographic timing. PAPI~\cite{papi} provides a portable
interface to hardware performance counters used in related profiling work.
Phase~2 of this study will add PAPI counter collection to provide the
mechanistic hardware-level explanation of the speedups observed here.

181
paper/sections/results.tex Normal file
View File

@ -0,0 +1,181 @@
% ── 4. Results ────────────────────────────────────────────────────────────────
\section{Results}
\label{sec:results}
\subsection{Cycle Count Distributions}
\label{sec:results:distributions}
Figure~\ref{fig:distributions} shows the cycle count distributions for three
representative operations in \mlkemk{512}, comparing \varref{} and \varavx{}.
All distributions are right-skewed with a long tail from OS interrupts and
cache-cold executions. The median (dashed lines) is robust to these outliers,
justifying the nonparametric approach of §\ref{sec:meth:stats}.
The separation between \varref{} and \varavx{} is qualitatively different
across operation types: for \op{INVNTT} the distributions do not overlap at
all (disjoint spikes separated by two orders of magnitude on the log scale);
for \op{gen\_a} there is partial overlap; for noise sampling the distributions
are nearly coincident.
\begin{figure}[t]
\centering
\includegraphics[width=\columnwidth]{figures/distributions.pdf}
\caption{Cycle count distributions for three representative \mlkemk{512}
operations. Log $x$-axis. Dashed lines mark medians. Right-skew and
outlier structure motivate nonparametric statistics.}
\label{fig:distributions}
\end{figure}
\subsection{Speedup Decomposition}
\label{sec:results:decomp}
Figure~\ref{fig:decomp} shows the cumulative speedup at each optimization stage
for all three \mlkem{} parameter sets. Each group of bars represents one
operation; the three bars within a group show the total speedup achieved after
applying (i)~O3 without auto-vec (\varrefnv{}), (ii)~O3 with auto-vec
(\varref{}), and (iii)~hand-written AVX2 (\varavx{})---all normalized to the
unoptimized \varrefo{} baseline. The log scale makes the three orders of
magnitude of variation legible.
Several structural features are immediately apparent:
\begin{itemize}
\item The \varrefnv{} and \varref{} bars are nearly indistinguishable for
arithmetic operations (NTT, INVNTT, basemul, frommsg), confirming that
GCC's auto-vectorizer contributes negligibly to these operations.
\item The \varavx{} bars are 1--2 orders of magnitude taller than the
\varref{} bars for arithmetic operations, indicating that hand-written
SIMD dominates the speedup.
\item For SHAKE-heavy operations (gen\_a, noise), all three bars are much
closer together, reflecting the memory-bandwidth bottleneck that limits
SIMD benefit.
\end{itemize}
\begin{figure*}[t]
\centering
\input{figures/fig_decomp}
\caption{Cumulative speedup at each optimization stage, normalized to
\varrefo{} (1×). Three bars per operation:
\textcolor{colRefnv}{$\blacksquare$}~O3 no auto-vec,
\textcolor{colRef}{$\blacksquare$}~O3 + auto-vec,
\textcolor{colAvx}{$\blacksquare$}~O3 + hand SIMD (AVX2).
Log $y$-axis; 95\% bootstrap CI shown on \varavx{} bars.
Sorted by \varavx{} speedup.}
\label{fig:decomp}
\end{figure*}
\subsection{Hand-Written SIMD Speedup}
\label{sec:results:simd}
Figure~\ref{fig:handsimd} isolates the hand-written SIMD speedup (\varref{}
$\to$ \varavx{}) across all three \mlkem{} parameter sets. Table~\ref{tab:simd}
summarizes the numerical values.
Key observations:
\begin{itemize}
\item \textbf{Arithmetic operations} achieve the largest speedups:
\speedup{56.3} for \op{INVNTT} at \mlkemk{512}, \speedup{52.0} for
\op{basemul}, and \speedup{45.6} for \op{frommsg}. The 95\% bootstrap
CIs on these ratios are extremely tight (often $[\hat{s}, \hat{s}]$ to
two decimal places), reflecting near-perfect measurement stability.
\item \textbf{gen\_a} achieves \speedup{3.8}--\speedup{4.7}: substantially
smaller than arithmetic operations because SHAKE-128 generation is
memory-bandwidth limited.
\item \textbf{Noise sampling} achieves only \speedup{1.2}--\speedup{1.4},
the smallest SIMD benefit. The centered binomial distribution (CBD)
sampler is bit-manipulation-heavy with sequential bitstream reads that
do not parallelise well.
\item Speedups are broadly consistent across parameter sets for per-polynomial
operations, as expected (§\ref{sec:results:crossparams}).
\end{itemize}
\begin{figure*}[t]
\centering
\input{figures/fig_hand_simd}
\caption{Hand-written SIMD speedup (\varref{} $\to$ \varavx{}) per operation,
across all three \mlkem{} parameter sets. Log $y$-axis.
95\% bootstrap CI error bars (often sub-pixel).
Sorted by \mlkemk{512} speedup.}
\label{fig:handsimd}
\end{figure*}
\begin{table}[t]
\caption{Hand-written SIMD speedup (\varref{} $\to$ \varavx{}), median ratio
with 95\% bootstrap CI. All Cliff's $\delta = +1.000$, $p < 10^{-300}$.}
\label{tab:simd}
\small
\begin{tabular}{lccc}
\toprule
Operation & \mlkemk{512} & \mlkemk{768} & \mlkemk{1024} \\
\midrule
\op{INVNTT} & $56.3\times$ & $52.2\times$ & $50.5\times$ \\
\op{basemul} & $52.0\times$ & $47.6\times$ & $41.6\times$ \\
\op{frommsg} & $45.6\times$ & $49.2\times$ & $55.4\times$ \\
\op{NTT} & $35.5\times$ & $39.4\times$ & $34.6\times$ \\
\op{iDec} & $35.1\times$ & $35.0\times$ & $31.1\times$ \\
\op{iEnc} & $10.0\times$ & $9.4\times$ & $9.4\times$ \\
\op{iKeypair}& $8.3\times$ & $7.6\times$ & $8.1\times$ \\
\op{gen\_a} & $4.7\times$ & $3.8\times$ & $4.8\times$ \\
\op{noise} & $1.4\times$ & $1.4\times$ & $1.2\times$ \\
\bottomrule
\end{tabular}
\end{table}
\subsection{Statistical Significance}
\label{sec:results:stats}
All \varref{} vs.\ \varavx{} comparisons pass the Mann-Whitney U test at
$p < 10^{-300}$. Cliff's $\delta = +1.000$ for all operations except
\op{NTT} at \mlkemk{512} and \mlkemk{1024} ($\delta = +0.999$), meaning AVX2
achieves a strictly smaller cycle count than \varref{} in effectively every
observation pair.
Figure~\ref{fig:cliffs} shows the heatmap of Cliff's $\delta$ values across
all operations and parameter sets.
\begin{figure}[t]
\centering
\includegraphics[width=\columnwidth]{figures/cliffs_delta_heatmap.pdf}
\caption{Cliff's $\delta$ (\varref{} vs.\ \varavx{}) for all operations and
parameter sets. $\delta = +1$: AVX2 is faster in every observation
pair. Nearly all cells are at $+1.000$.}
\label{fig:cliffs}
\end{figure}
\subsection{Cross-Parameter Consistency}
\label{sec:results:crossparams}
Figure~\ref{fig:crossparams} shows the \varavx{} speedup for the four
per-polynomial operations across \mlkemk{512}, \mlkemk{768}, and
\mlkemk{1024}. Since all three instantiations operate on 256-coefficient
polynomials, speedups for \op{frommsg} and \op{INVNTT} should be
parameter-independent. This holds approximately: frommsg varies by only
$\pm{10\%}$, INVNTT by $\pm{6\%}$.
\op{NTT} shows a more pronounced variation ($35.5\times$ at \mlkemk{512},
$39.4\times$ at \mlkemk{768}, $34.6\times$ at \mlkemk{1024}) that is
statistically real (non-overlapping 95\% CIs). We attribute this to
\emph{cache state effects}: the surrounding polyvec loops that precede each
NTT call have a footprint that varies with $k$, leaving different cache
residency patterns that affect NTT latency in the scalar \varref{} path.
The AVX2 path is less sensitive because its smaller register footprint keeps
more state in vector registers.
\begin{figure}[t]
\centering
\input{figures/fig_cross_param}
\caption{Per-polynomial operation speedup (\varref{} $\to$ \varavx{}) across
security parameters. Polynomial dimension is 256 for all; variation
reflects cache-state differences in the calling context.}
\label{fig:crossparams}
\end{figure}
\subsection{Hardware Counter Breakdown}
\label{sec:results:papi}
\phasetwo{IPC, L1/L2/L3 cache miss rates, branch mispredictions via PAPI.
This section will contain bar charts of per-counter values comparing ref and
avx2 for each operation, explaining the mechanistic origins of the speedup.}
\subsection{Energy Efficiency}
\label{sec:results:energy}
\phasetwo{Intel RAPL pkg + DRAM energy readings per operation.
EDP (energy-delay product) comparison. Energy per KEM operation.}

View File

@ -0,0 +1,31 @@
% ── Supplementary: KEM-level end-to-end speedup ───────────────────────────────
\section{End-to-End KEM Speedup}
\label{sec:supp:kem}
Figure~\ref{fig:kemlevel} shows the hand-written SIMD speedup for the
top-level KEM operations: key generation (\op{kyber\_keypair}), encapsulation
(\op{kyber\_encaps}), and decapsulation (\op{kyber\_decaps}). These composite
operations aggregate the speedups of their constituent primitives, weighted by
relative cycle counts.
Decapsulation achieves the highest speedup (\speedup{6.9}--\speedup{7.1})
because it involves the largest share of arithmetic operations (two additional
NTT and INVNTT calls for re-encryption verification). Key generation achieves
the lowest (\speedup{5.3}--\speedup{5.9}) because it involves one fewer
polynomial multiplication step relative to encapsulation.
\begin{figure}[h]
\centering
\input{figures/fig_kem_level}
\caption{End-to-end KEM speedup (\varref{} $\to$ \varavx{}) for
\op{kyber\_keypair}, \op{kyber\_encaps}, and \op{kyber\_decaps}.
Intel Xeon Platinum 8268; 95\% bootstrap CI.}
\label{fig:kemlevel}
\end{figure}
\section{Full Operation Set}
\label{sec:supp:fullops}
\todo[inline]{Full operation speedup table for all 20 benchmarked operations,
including \op{poly\_compress}, \op{poly\_decompress}, \op{polyvec\_compress},
\op{poly\_tomsg}, and the \texttt{*\_derand} KEM variants.}

View File

@ -103,12 +103,13 @@ Extensible YAML frontmatter. Hakyll strips frontmatter before passing to Pandoc,
```yaml ```yaml
title: # page title title: # page title
date: # ISO date (YYYY-MM-DD) — used for sorting, feed, reading-time date: # ISO date (YYYY-MM-DD) — used for sorting, feed, reading-time
abstract: # short description (13 sentences) abstract: # short description (13 sentences). Rendered via Pandoc to support LaTeX math and Markdown.
tags: # hierarchical tag list tags: # hierarchical tag list
authors: # list of author names (defaults to Levi Neuwirth) authors: # list of author names (defaults to Levi Neuwirth)
further-reading: # list of BibTeX keys for the Further Reading section further-reading: # list of BibTeX keys for the Further Reading section
bibliography: # path to .bib file (optional; defaults to data/bibliography.bib) bibliography: # path to .bib file (optional; defaults to data/bibliography.bib)
csl: # path to .csl file (optional; defaults to data/chicago-notes.csl) csl: # path to .csl file (optional; defaults to data/chicago-notes.csl)
repository: # external URL pointing to the content's source code or data repository
# Epistemic profile (all optional; section shown only if `status` is present) # Epistemic profile (all optional; section shown only if `status` is present)
status: # Draft | Working model | Durable | Refined | Superseded | Deprecated status: # Draft | Working model | Durable | Refined | Superseded | Deprecated
@ -138,7 +139,7 @@ Auto-derived at build time: `stability` (from `git log --follow`), `last-reviewe
**Top metadata block:** **Top metadata block:**
1. **Tags** — hierarchical tag list with links to tag index pages 1. **Tags** — hierarchical tag list with links to tag index pages
2. **Description** — the `abstract` field, rendered in italic 2. **Description** — the `abstract` field, rendered via Pandoc (supporting LaTeX math and Markdown formatting), typically in italic
3. **Authors**`authors` list 3. **Authors**`authors` list
4. **Page info** — jump links to bottom metadata sections (Epistemic/Bibliography/Backlinks shown conditionally) 4. **Page info** — jump links to bottom metadata sections (Epistemic/Bibliography/Backlinks shown conditionally)
@ -469,10 +470,11 @@ The spec called for adopting Said Achmiz's `sidenotes.js` directly. Instead a pu
### LaTeX Math — Client-side KaTeX ### LaTeX Math — Client-side KaTeX
The spec described pure build-time SSR. In practice: Pandoc outputs `class="math"` spans, KaTeX renders client-side from a deferred script. Fully static (no server per request). Revisit if build-time SSR becomes important. The spec described pure build-time SSR. In practice: Pandoc outputs `class="math"` spans, KaTeX renders client-side from a deferred script. Fully static (no server per request). Revisit if build-time SSR becomes important.
*Note:* The `abstract` field is parsed natively through Pandoc via a custom `abstractField` compiler in `Contexts.hs` (using KaTeX settings) so that LaTeX math in the frontmatter renders identically to the body text.
### Citation pipeline — key subtleties ### Citation pipeline — key subtleties
1. **`Cite` nodes, not `Span` nodes.** `processCitations` with `class="in-text"` CSL does *not* convert `Cite` nodes to `Span class="citation"` nodes in the Pandoc AST — it only populates their inline content and creates the refs div. The HTML writer wraps them in `<span class="citation">` at write time. Our `Citations.hs` must match `Cite` nodes directly. 1. **`Cite` nodes, not `Span` nodes.** `processCitations` with `class="in-text"` CSL does *not* convert `Cite` nodes to `Span class="citation"` nodes in the Pandoc AST — it only populates their inline content and creates the refs div. The HTML writer wraps them in `<span class="citation">` at write time. Our `Citations.hs` must match `Cite` nodes directly.
2. **Hakyll strips YAML frontmatter.** Hakyll reads frontmatter separately; the body passed to `readPandocWith` has no YAML block, so Pandoc `Meta` is empty. `further-reading` keys are read from Hakyll's metadata API (`lookupStringList`) in `Compilers.hs` and passed explicitly to `Citations.applyCitations`. 2. **Hakyll strips YAML frontmatter.** Hakyll reads frontmatter separately; the body passed to `readPandocWith` has no YAML block, so Pandoc `Meta` is empty. `further-reading` keys and custom `bibliography` paths are read from Hakyll's metadata API (`lookupStringList` / `lookupString`) in `Compilers.hs` and passed explicitly to `Citations.applyCitations` to support custom per-essay `.bib` files (defaulting to `data/bibliography.bib`).
3. **`nocite` format.** Each further-reading key must be a *separate* `Cite` node with `AuthorInText` mode and non-empty fallback content — matching what pandoc produces from `"@key1 @key2"` in YAML. A single `Cite` node with multiple citations is not recognized by citeproc's nocite processing. 3. **`nocite` format.** Each further-reading key must be a *separate* `Cite` node with `AuthorInText` mode and non-empty fallback content — matching what pandoc produces from `"@key1 @key2"` in YAML. A single `Cite` node with multiple citations is not recognized by citeproc's nocite processing.
4. **`collectCiteOrder` queries blocks only**, not the full `Pandoc` (which includes metadata). Querying metadata would pick up the injected `nocite` `Cite` nodes and incorrectly classify further-reading entries as inline citations. 4. **`collectCiteOrder` queries blocks only**, not the full `Pandoc` (which includes metadata). Querying metadata would pick up the injected `nocite` `Cite` nodes and incorrectly classify further-reading entries as inline citations.

View File

@ -600,6 +600,10 @@ nav.site-nav {
/* Jump links: inline, separated by middots */ /* Jump links: inline, separated by middots */
.meta-pagelinks { .meta-pagelinks {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0;
font-size: 0.75rem; font-size: 0.75rem;
color: var(--text-faint); color: var(--text-faint);
} }
@ -624,6 +628,9 @@ nav.site-nav {
.meta-pagelinks a + a::before { .meta-pagelinks a + a::before {
content: " · "; content: " · ";
color: var(--border); color: var(--border);
display: inline-block;
text-decoration: none;
white-space: pre;
} }

View File

@ -53,6 +53,9 @@
/* Source label ("Wikipedia", "arXiv") */ /* Source label ("Wikipedia", "arXiv") */
.popup-source { .popup-source {
display: flex;
align-items: center;
gap: 0.3em;
font-size: 0.65rem; font-size: 0.65rem;
font-weight: 600; font-weight: 600;
font-variant-caps: all-small-caps; font-variant-caps: all-small-caps;
@ -61,6 +64,61 @@
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
/* Icon preceding the source label — same mask-image technique as inline link icons */
.popup-source[data-popup-source]::before {
content: '';
display: inline-block;
flex-shrink: 0;
width: 0.85em;
height: 0.85em;
background-color: currentColor;
mask-size: contain;
mask-repeat: no-repeat;
mask-position: center;
-webkit-mask-size: contain;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
opacity: 0.7;
}
.popup-source[data-popup-source="wikipedia"]::before {
mask-image: url('/images/link-icons/wikipedia.svg');
-webkit-mask-image: url('/images/link-icons/wikipedia.svg');
}
.popup-source[data-popup-source="arxiv"]::before {
mask-image: url('/images/link-icons/arxiv.svg');
-webkit-mask-image: url('/images/link-icons/arxiv.svg');
}
.popup-source[data-popup-source="doi"]::before {
mask-image: url('/images/link-icons/doi.svg');
-webkit-mask-image: url('/images/link-icons/doi.svg');
}
.popup-source[data-popup-source="github"]::before {
mask-image: url('/images/link-icons/github.svg');
-webkit-mask-image: url('/images/link-icons/github.svg');
}
.popup-source[data-popup-source="youtube"]::before {
mask-image: url('/images/link-icons/youtube.svg');
-webkit-mask-image: url('/images/link-icons/youtube.svg');
}
.popup-source[data-popup-source="internet-archive"]::before {
mask-image: url('/images/link-icons/internet-archive.svg');
-webkit-mask-image: url('/images/link-icons/internet-archive.svg');
}
.popup-source[data-popup-source="biorxiv"]::before,
.popup-source[data-popup-source="medrxiv"]::before {
mask-image: url('/images/link-icons/arxiv.svg');
-webkit-mask-image: url('/images/link-icons/arxiv.svg');
}
.popup-source[data-popup-source="openlibrary"]::before {
mask-image: url('/images/link-icons/worldcat.svg');
-webkit-mask-image: url('/images/link-icons/worldcat.svg');
}
.popup-source[data-popup-source="pubmed"]::before {
mask-image: url('/images/link-icons/orcid.svg');
-webkit-mask-image: url('/images/link-icons/orcid.svg');
}
/* Author list (arXiv, DOI, GitHub, etc.) */ /* Author list (arXiv, DOI, GitHub, etc.) */
.popup-authors { .popup-authors {
font-size: 0.75rem; font-size: 0.75rem;

View File

@ -625,3 +625,78 @@ a[data-link-icon="github"]::after {
mask-image: url('/images/link-icons/github.svg'); mask-image: url('/images/link-icons/github.svg');
-webkit-mask-image: url('/images/link-icons/github.svg'); -webkit-mask-image: url('/images/link-icons/github.svg');
} }
a[data-link-icon="worldcat"]::after {
mask-image: url('/images/link-icons/worldcat.svg');
-webkit-mask-image: url('/images/link-icons/worldcat.svg');
}
a[data-link-icon="orcid"]::after {
mask-image: url('/images/link-icons/orcid.svg');
-webkit-mask-image: url('/images/link-icons/orcid.svg');
}
a[data-link-icon="internet-archive"]::after {
mask-image: url('/images/link-icons/internet-archive.svg');
-webkit-mask-image: url('/images/link-icons/internet-archive.svg');
}
a[data-link-icon="tensorflow"]::after {
mask-image: url('/images/link-icons/tensorflow.svg');
-webkit-mask-image: url('/images/link-icons/tensorflow.svg');
}
a[data-link-icon="anthropic"]::after {
mask-image: url('/images/link-icons/anthropic.svg');
-webkit-mask-image: url('/images/link-icons/anthropic.svg');
}
a[data-link-icon="openai"]::after {
mask-image: url('/images/link-icons/openai.svg');
-webkit-mask-image: url('/images/link-icons/openai.svg');
}
a[data-link-icon="twitter"]::after {
mask-image: url('/images/link-icons/twitter.svg');
-webkit-mask-image: url('/images/link-icons/twitter.svg');
}
a[data-link-icon="reddit"]::after {
mask-image: url('/images/link-icons/reddit.svg');
-webkit-mask-image: url('/images/link-icons/reddit.svg');
}
a[data-link-icon="youtube"]::after {
mask-image: url('/images/link-icons/youtube.svg');
-webkit-mask-image: url('/images/link-icons/youtube.svg');
}
a[data-link-icon="tiktok"]::after {
mask-image: url('/images/link-icons/tiktok.svg');
-webkit-mask-image: url('/images/link-icons/tiktok.svg');
}
a[data-link-icon="substack"]::after {
mask-image: url('/images/link-icons/substack.svg');
-webkit-mask-image: url('/images/link-icons/substack.svg');
}
a[data-link-icon="hacker-news"]::after {
mask-image: url('/images/link-icons/hacker-news.svg');
-webkit-mask-image: url('/images/link-icons/hacker-news.svg');
}
a[data-link-icon="new-york-times"]::after {
mask-image: url('/images/link-icons/new-york-times.svg');
-webkit-mask-image: url('/images/link-icons/new-york-times.svg');
}
a[data-link-icon="nasa"]::after {
mask-image: url('/images/link-icons/nasa.svg');
-webkit-mask-image: url('/images/link-icons/nasa.svg');
}
a[data-link-icon="apple"]::after {
mask-image: url('/images/link-icons/apple.svg');
-webkit-mask-image: url('/images/link-icons/apple.svg');
}

View File

@ -15,6 +15,26 @@
display: block; display: block;
} }
/* Force labels and text glyphs to use currentColor instead of default/hardcoded black */
.viz-figure svg g[id^="text_"] path,
.viz-figure svg g[id^="text_"] use {
fill: currentColor !important;
}
/* Ensure axis lines and ticks also follow currentColor */
.viz-figure svg g[id^="axes_"] path,
.viz-figure svg g[id^="xtick_"] line,
.viz-figure svg g[id^="ytick_"] line,
.viz-figure svg g[id^="xtick_"] use,
.viz-figure svg g[id^="ytick_"] use {
stroke: currentColor !important;
}
/* Catch explicit styles on axes paths */
.viz-figure svg g[id^="patch_"] path[style*="stroke: #000000"] {
stroke: currentColor !important;
}
/* ============================================================ /* ============================================================
Interactive figures (Vega-Lite via vega-embed) Interactive figures (Vega-Lite via vega-embed)
============================================================ */ ============================================================ */

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="23 35 205 180"><path d="M47.1 124.4l-30.1 76c0 .3 7.6.6 16.9.6h16.9l3.6-9.2 6-15.8 2.4-6.5 31.5-.3 31.5-.2 3 7.7 6.2 16 3.2 8.3h16.9c9.3 0 16.9-.2 16.9-.4s-8.5-21.7-18.9-47.8L123 77.2 111.8 49H94.5 77.2l-30.1 75.4zm57.3-10.4l9.6 25.2c0 .5-8.8.8-19.5.8s-19.5-.3-19.5-.8c0-.4 3.4-9.5 7.6-20.2l9.6-24.8c1.1-2.9 2.1-5.2 2.3-5s4.7 11.3 9.9 24.8zM140 50.2c0 .7 13.4 34.8 29.8 75.8l29.7 74.5 16.9.3c9.9.1 16.6-.1 16.4-.7-.1-.5-13.8-34.7-30.2-76l-30-75.1h-16.3c-12.4 0-16.3.3-16.3 1.2z"/></svg>

After

Width:  |  Height:  |  Size: 535 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 814 1000"><path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z"/></svg>

After

Width:  |  Height:  |  Size: 632 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="30 30 448 448"><path d="M 30,30 V 478 H 478 V 30 Z"/><path fill="#fff" stroke="#fff" stroke-width="6" d="M 269.2,281.1 V 382 H 237.8 V 279.3 L 158,126 h 37.3 c 52.5,98.3 49.2,101.2 59.3,125.6 12.3,-27 5.8,-24.4 60.6,-125.6 H 350 Z"/></svg>

After

Width:  |  Height:  |  Size: 288 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.1 15"><path d="M.1 1.5c.08.12.12.3.23.4H12.6l.3-.4L6.5 0 .1 1.5z m.3 1h12.2v1.1H.4z M1 4.2h1l.2.1.2 3.7-.1 4.5H1l-.3-.1L.5 8c0-1.5.2-3.7.2-3.7l.3-.1z m10 0h1.1l.2.1.2 3.7-.1 4.5-.3.1h-1l-.3-.1-.2-4.4c0-1.5.2-3.7.2-3.7l.2-.2z m-6.7 0h1l.2.1.2 3.7-.1 4.5-.3.1h-.9l-.3-.1-.2-4.4c0-1.5.2-3.7.2-3.7l.2-.2z m3.4 0H9l.2 3.7-.1 4.5-.3.1h-1l-.3-.1L7.3 8c0-1.5.2-3.7.2-3.7l.2-.1z M.4 13.1h12.3v.6H.4z M0 14.3h13.1v.7H0z"/></svg>

After

Width:  |  Height:  |  Size: 474 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 284.86 299.23" stroke="#000" stroke-width="4"><path d="M93.991 106.699c1.576 5.961 4.119 8.266 8.613 8.266 4.659 0 7.102-2.799 7.102-8.266V5.2h29.184v101.499c0 14.307-1.856 20.506-9.11 27.762-5.228 5.229-14.871 9.271-27.047 9.271-9.837 0-19.25-3.256-25.253-9.27-5.263-5.273-8.154-10.689-12.672-27.764L46.9 39.033c-1.577-5.961-4.119-8.265-8.613-8.265-4.66 0-7.103 2.798-7.103 8.265v101.5H2v-101.5c0-14.306 1.857-20.506 9.111-27.762C16.337 6.044 25.981 2 38.158 2c9.837 0 19.25 3.257 25.253 9.27 5.263 5.273 8.154 10.689 12.672 27.764zM251.552 297.23l-33.704-105.437c-.372-1.164-.723-2.152-1.263-2.811-.926-1.127-2.207-1.719-3.931-1.719s-3.004.592-3.931 1.719c-.539.658-.891 1.646-1.262 2.811L173.758 297.23h-30.167l36.815-115.177c1.918-6 4.66-11.094 8.139-14.488 5.971-5.821 13.007-8.868 24.11-8.868s18.14 3.047 24.109 8.867c3.479 3.395 6.221 8.488 8.14 14.488l36.814 115.177zm-165.931 0c22.529 0 33.518-4.062 42.2-11.389 9.607-8.105 14.202-16.973 14.202-30.213 0-11.699-5.047-22.535-12.731-29.019-10.046-8.479-22.525-11.151-42.872-11.151l-28.5-.001c-10.89 0-15.23-1.117-18.663-3.98-2.358-1.964-3.463-4.885-3.463-8.328 0-3.559 1.01-7.074 3.892-9.475 2.558-2.131 6.045-3.109 12.745-3.109H134.8v-28.668H58.723c-22.529 0-33.517 4.063-42.2 11.389-9.606 8.105-14.202 16.972-14.202 30.212 0 11.701 5.047 22.536 12.731 29.019 10.048 8.479 22.525 11.152 42.872 11.152l28.501.002c10.89 0 15.23 1.115 18.663 3.979 2.358 1.965 3.463 4.885 3.463 8.328 0 3.559-1.01 7.074-3.891 9.475-2.559 2.131-6.046 3.109-12.746 3.109H2.25l-.15 28.537 83.521.13zm166.334-153.266L218.251 38.527c-.372-1.164-.723-2.152-1.263-2.811-.926-1.127-2.207-1.719-3.931-1.719s-3.004.592-3.931 1.719c-.539.658-.891 1.646-1.262 2.811l-33.703 105.437h-30.167l36.815-115.177c1.918-6 4.66-11.094 8.139-14.488 5.971-5.821 13.007-8.868 24.11-8.868s18.14 3.047 24.109 8.867c3.479 3.395 6.221 8.488 8.14 14.488l36.814 115.177z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="1 0.75 13.5 14.75"><path d="M13.994 2.824c0-1.565-1.7-1.956-3.025-1.956v.235c.8 0 1.423.235 1.423.783 0 .313-.267.783-1.067.783-.623 0-1.957-.313-2.936-.626-1.156-.39-2.224-.704-3.113-.704-1.78 0-3.025 1.174-3.025 2.504 0 1.174.98 1.565 1.334 1.722l.09-.157c-.178-.157-.445-.313-.445-.783 0-.313.356-.86 1.245-.86.8 0 1.868.313 3.29.704 1.245.313 2.58.548 3.29.626V7.52L9.724 8.537v.078l1.334 1.017v3.365c-.712.39-1.512.47-2.224.47-1.334 0-2.49-.313-3.47-1.252l3.647-1.565v-5.4L4.565 6.972C4.92 5.955 5.9 5.25 6.878 4.78l-.09-.235c-2.67.626-5.07 2.817-5.07 5.478 0 3.13 2.936 5.478 6.227 5.478 3.558 0 5.87-2.504 5.87-5.087h-.178c-.534 1.017-1.334 1.956-2.313 2.426v-3.21l1.423-1.017v-.078L11.325 7.52V5.094c1.334 0 2.67-.783 2.67-2.27zm-7.74 8.608l-1.067.47c-.623-.704-.98-1.643-.98-2.974 0-.548 0-1.174.178-1.643l1.868-.704zm8.273 2.582c-8.54 4.07-4.27 2.035 0 0z"/></svg>

After

Width:  |  Height:  |  Size: 923 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="1 1 14 14"><path d="M6.563 7.142l1.445-.85 1.445.85v1.7l-1.445.85-1.445-.85zm-.595 1.36l-1.2-.68v-3.4c.085-1.445 1.7-2.55 3.145-2.125.255.085 1.275.425.765.595L6.053 4.337c-.255.34-.085.765-.17 1.2v2.9zm7.14-2.38l-2.9-1.7c-.425 0-.68.34-1.105.425l-2.55 1.445v-1.36l2.975-1.7c1.36-.68 3.145.255 3.485 1.615.085.34.085.765.085 1.105zm-1.105 1.7l-3.315-1.87c.425-.17.765-.5 1.2-.68l3.06 1.785a2.55 2.55 0 0 1 .34 3.655c-.17.17-.935.935-1.02.5V8.077c0-.085-.085-.17-.255-.255zM2.567 5.697c.255-.425 1.02-1.2 1.36-1.02v3.23c.17.34.595.425.935.68l2.55 1.445c-.425.255-.765.5-1.2.68l-2.975-1.7c-1.02-.765-1.36-2.295-.68-3.315zm.68 5.865c-.255-.425-.5-1.36-.255-1.615l2.805 1.615c.425 0 .68-.34 1.105-.425l2.55-1.445v1.36l-3.06 1.7c-1.105.425-2.55 0-3.145-1.105zm5.525 2.295c-.5 0-1.445-.255-1.53-.595l2.805-1.615c.255-.34.085-.765.17-1.2V7.482l1.2.68v3.4c-.085 1.275-1.275 2.295-2.55 2.295zm5.1-7.14c.595-1.7-.425-3.74-2.125-4.25-.765-.425-1.785.17-2.295-.5-1.445-1.2-3.74-.935-4.845.595-.425.5-.5 1.2-1.275 1.275-1.615.68-2.465 2.72-1.785 4.335.255.595.85 1.02.5 1.7-.255 1.785 1.2 3.485 2.9 3.74.68.085 1.36-.17 1.785.425 1.445 1.105 3.655.765 4.76-.68.425-.5.5-1.275 1.275-1.275 1.615-.68 2.465-2.72 1.785-4.335a3.4 3.4 0 0 0-.68-1.02z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 341.8 341.8"><ellipse cx="170.9" cy="170.035" rx="170.301" ry="170.95"/><path d="M284.434 170.035c0-13.796-11.154-24.993-24.898-24.993-6.772 0-12.748 2.6-17.13 6.998-16.93-12.196-40.434-20.194-66.328-21.194l11.353-53.384 36.85 7.798c.398 9.397 8.166 16.995 17.727 16.995 9.76 0 17.727-7.998 17.727-17.795s-7.967-17.795-17.727-17.795c-6.97 0-12.947 4-15.735 9.997l-41.23-8.797c-1.195-.2-2.4 0-3.386.6s-1.593 1.6-1.992 2.8l-12.548 59.583c-26.49.8-50.194 8.597-67.324 21.194-4.382-4.2-10.557-6.998-17.13-6.998-13.744 0-24.898 11.197-24.898 24.993 0 10.197 5.975 18.795 14.74 22.793-.398 2.4-.598 5-.598 7.598 0 38.39 44.418 69.38 99.392 69.38s99.392-30.99 99.392-69.38c0-2.6-.2-5-.598-7.398 8.166-4 14.34-12.796 14.34-22.993zm-170.3 17.795c0-9.797 7.967-17.795 17.727-17.795s17.727 7.998 17.727 17.795-7.967 17.795-17.727 17.795-17.727-7.998-17.727-17.795zm98.994 46.986c-12.15 12.196-35.255 12.996-42.027 12.996s-30.077-1-42.027-12.996c-1.793-1.8-1.793-4.8 0-6.598a4.68 4.68 0 0 1 6.573 0c7.57 7.598 23.902 10.397 35.654 10.397s27.886-2.8 35.654-10.397a4.68 4.68 0 0 1 6.573 0c1.394 2 1.394 4.8-.398 6.598zm-3.187-29.19c-9.76 0-17.727-7.998-17.727-17.795s7.967-17.795 17.727-17.795 17.727 7.998 17.727 17.795-7.967 17.795-17.727 17.795z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 12"><path d="M 0,0 H 11 V 1.4 H 0 Z"/><path d="M 0,2.7 H 11 V 4.1 H 0 Z"/><path d="M 0,5.4 H 11 L 11,12 5.5,9 0,12 Z"/></svg>

After

Width:  |  Height:  |  Size: 181 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z"/></svg>

After

Width:  |  Height:  |  Size: 249 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M412.19 118.66a109.27 109.27 0 0 1-9.45-5.5 132.87 132.87 0 0 1-24.27-20.62c-18.1-20.71-24.86-41.72-27.35-56.43h.1C349.14 23.9 350 16 350.13 16h-82.44v318.78l-.18 12.69c0 .52-.05 1-.08 1.56 0 .23 0 .47-.05.71v.18a70 70 0 0 1-35.22 55.56 68.8 68.8 0 0 1-34.11 9c-38.41 0-69.54-31.32-69.54-70s31.13-70 69.54-70a68.9 68.9 0 0 1 21.41 3.39l.1-83.94a153.14 153.14 0 0 0-118 34.52 161.79 161.79 0 0 0-35.3 43.53c-3.48 6-16.61 30.11-18.2 69.24-1 22.21 5.67 45.22 8.85 54.73v.2c2 5.6 9.75 24.71 22.38 40.82A167.53 167.53 0 0 0 115 470.66v-.2l.2.2c39.91 27.12 84.16 25.34 84.16 25.34 7.66-.31 33.32 0 62.46-13.81 32.32-15.31 50.72-38.12 50.72-38.12a158.46 158.46 0 0 0 27.64-45.93c7.46-19.61 9.95-43.13 9.95-52.53V176.49c1 .6 14.32 9.41 14.32 9.41s19.19 12.3 49.13 20.31c21.48 5.7 50.42 6.9 50.42 6.9v-81.84c-10.14 1.1-30.73-2.1-51.81-12.61z"/></svg>

After

Width:  |  Height:  |  Size: 912 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 612 612"><path d="M612 116.26c-22.525 9.98-46.694 16.75-72.088 19.772 25.93-15.527 45.777-40.155 55.184-69.41C570.774 81 543.927 91.44 515.32 97.1c-22.907-24.437-55.5-39.658-91.63-39.658-69.334 0-125.55 56.217-125.55 125.5 0 9.828 1.11 19.427 3.25 28.606-104.33-5.24-196.84-55.223-258.75-131.17-10.823 18.5-16.98 40.078-16.98 63.1 0 43.56 22.18 81.993 55.835 104.48-20.575-.688-39.926-6.348-56.867-15.756v1.568c0 60.806 43.29 111.55 100.7 123.1-10.517 2.83-21.607 4.398-33.08 4.398a120.5 120.5 0 0 1-23.634-2.333c15.985 49.907 62.336 86.2 117.25 87.194-42.947 33.654-97.1 53.655-155.92 53.655-10.134 0-20.116-.612-29.944-1.72 55.567 35.68 121.54 56.485 192.44 56.485 230.95 0 357.2-191.3 357.2-357.2l-.42-16.253c24.666-17.593 46.005-39.697 62.794-64.86z"/></svg>

After

Width:  |  Height:  |  Size: 815 B

View File

@ -1,19 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z"/></svg>
<!--
Wikipedia globe: circle + central meridian ellipse + equator + two parallels.
All strokes converted to filled paths via stroke-width trick:
use actual SVG stroked paths with stroke="black" fill="none" —
but enclosed in an SVG that has no fill default so mask-image sees strokes.
Using path + stroke here since SVG stroke IS opaque for mask purposes.
-->
<!-- Outer circle -->
<circle cx="8" cy="8" r="6.3" stroke="black" stroke-width="1.2" fill="none"/>
<!-- Central meridian ellipse (longitude line) -->
<ellipse cx="8" cy="8" rx="2.6" ry="6.3" stroke="black" stroke-width="0.9" fill="none"/>
<!-- Equator -->
<line x1="1.7" y1="8" x2="14.3" y2="8" stroke="black" stroke-width="0.85" fill="none"/>
<!-- Upper parallel -->
<path d="M 3.2 4.8 Q 8 3.5 12.8 4.8" stroke="black" stroke-width="0.75" fill="none"/>
<!-- Lower parallel -->
<path d="M 3.2 11.2 Q 8 12.5 12.8 11.2" stroke="black" stroke-width="0.75" fill="none"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 777 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="174.46" height="168.206" viewBox="0 0 177.525 171.162" xmlns:v="https://vecta.io/nano"><path d="M100.26.831c9.76-1.34 19.63-.63 29.45-.74 5.17-.12 10.18 3.69 10.97 8.89 1.49 6.53-4.35 13.32-11.03 12.8-13.51-.72-27.67-1.39-40.44 3.85-9.54 4.01-15.41 13.69-17.11 23.6-1.58 5.71-.43 13.39-6.51 16.71-6.64 4.43-16.7-.88-16.52-8.91 1.29-14.8 5.8-30.16 16.57-40.91 9.13-9.25 21.94-13.76 34.62-15.29zm-70.23 6.74c5.65-1.98 12.33 1.72 13.78 7.5 1.4 4.97-1.69 9.53-2.97 14.16-3.91 11.79-7.82 24.71-4.37 37.08 3.2 10.86 13.4 17.39 23.26 21.58 5.15 1.66 8.67 7.33 7.36 12.69-1.16 6.02-8.06 10.07-13.87 7.95-12.81-5.38-25.32-13.27-32.63-25.45-6.76-11.04-8.11-24.62-6.1-37.22 1.49-10.8 5.1-21.14 8.55-31.44 1.02-3.29 3.72-5.85 6.99-6.85zm74.19 27.23c15.27-2.9 32.25-.95 44.79 8.85 13.45 10.41 20.4 26.7 25.34 42.5 1.33 4.91 4.53 9.99 2.54 15.18-1.99 6.04-9.74 9.09-15.27 5.88-2.86-1.4-4.8-4.17-5.56-7.21-3.2-11.39-6.81-22.96-13.76-32.7-3.75-5.34-9.26-9.51-15.6-11.2-7.64-2.07-15.68-.92-23.28.74-5.16 1.53-11.36-1.38-13.08-6.57-1.7-4.25-.17-9.34 3.26-12.25 2.99-2.43 7-2.54 10.62-3.22zm14.84 36.63c4.34-1.28 9.54.14 12.12 4 7.71 12.94 13.47 28.12 10.82 43.4-2.51 15.96-13.69 28.85-25.91 38.64a375.65 375.65 0 0 1-15.48 11.5c-4.47 3.48-11.67 2.75-15.2-1.74-3.83-4.49-2.93-12.16 1.94-15.54 11.91-8.27 25.09-16.59 31.59-30.1 5.26-11.43.36-24.11-5.71-34.14-3.85-5.61-.69-14.16 5.83-16.02zM6.83 102.491c3.6-1.56 8.02-1.09 11.13 1.34 10.53 7.92 21.53 16.1 34.57 19.19 9.67 2.31 19.78-1.58 26.78-8.29 2.9-2.42 5.32-5.32 7.84-8.11 3.94-4.63 11.88-4.49 15.89-.03 3.59 3.81 3.91 10.37.39 14.32-8.13 9.01-17.49 17.55-29.2 21.48-12.76 4.73-27.1 2.85-39.3-2.64-10.75-4.65-20.28-11.54-29.73-18.35-3.09-2.09-4.8-5.77-5.2-9.38.95-3.87 2.83-8.01 6.83-9.53z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg>

After

Width:  |  Height:  |  Size: 556 B

View File

@ -305,7 +305,7 @@
if (text.length > 600) text = text.slice(0, 600).replace(/\s\S+$/, '') + '\u2026'; if (text.length > 600) text = text.slice(0, 600).replace(/\s\S+$/, '') + '\u2026';
return store(href, return store(href,
'<div class="popup-wikipedia">' '<div class="popup-wikipedia">'
+ '<div class="popup-source">Wikipedia</div>' + srcHtml('wikipedia', 'Wikipedia')
+ '<div class="popup-title">' + esc(page.title) + '</div>' + '<div class="popup-title">' + esc(page.title) + '</div>'
+ '<div class="popup-extract">' + esc(text) + '</div>' + '<div class="popup-extract">' + esc(text) + '</div>'
+ '</div>'); + '</div>');
@ -339,7 +339,7 @@
if (authors.length > 3) authorStr += ' et\u00a0al.'; if (authors.length > 3) authorStr += ' et\u00a0al.';
return store(href, return store(href,
'<div class="popup-arxiv">' '<div class="popup-arxiv">'
+ '<div class="popup-source">arXiv</div>' + srcHtml('arxiv', 'arXiv')
+ '<div class="popup-title">' + esc(title) + '</div>' + '<div class="popup-title">' + esc(title) + '</div>'
+ (authorStr ? '<div class="popup-authors">' + esc(authorStr) + '</div>' : '') + (authorStr ? '<div class="popup-authors">' + esc(authorStr) + '</div>' : '')
+ '<div class="popup-abstract">' + esc(summary) + '</div>' + '<div class="popup-abstract">' + esc(summary) + '</div>'
@ -375,7 +375,7 @@
var meta = [journal, year].filter(Boolean).join(', '); var meta = [journal, year].filter(Boolean).join(', ');
return store(href, return store(href,
'<div class="popup-doi">' '<div class="popup-doi">'
+ '<div class="popup-source">CrossRef</div>' + srcHtml('doi', 'CrossRef')
+ '<div class="popup-title">' + esc(title) + '</div>' + '<div class="popup-title">' + esc(title) + '</div>'
+ (authors ? '<div class="popup-authors">' + esc(authors) + '</div>' : '') + (authors ? '<div class="popup-authors">' + esc(authors) + '</div>' : '')
+ (meta ? '<div class="popup-meta">' + esc(meta) + '</div>' : '') + (meta ? '<div class="popup-meta">' + esc(meta) + '</div>' : '')
@ -402,7 +402,7 @@
.filter(Boolean).join(' \u00b7 '); .filter(Boolean).join(' \u00b7 ');
return store(href, return store(href,
'<div class="popup-github">' '<div class="popup-github">'
+ '<div class="popup-source">GitHub</div>' + srcHtml('github', 'GitHub')
+ '<div class="popup-title">' + esc(data.full_name) + '</div>' + '<div class="popup-title">' + esc(data.full_name) + '</div>'
+ (data.description ? '<div class="popup-abstract">' + esc(data.description) + '</div>' : '') + (data.description ? '<div class="popup-abstract">' + esc(data.description) + '</div>' : '')
+ (meta ? '<div class="popup-meta">' + esc(meta) + '</div>' : '') + (meta ? '<div class="popup-meta">' + esc(meta) + '</div>' : '')
@ -429,7 +429,7 @@
if (desc.length > 300) desc = desc.slice(0, 300).replace(/\s\S+$/, '') + '\u2026'; if (desc.length > 300) desc = desc.slice(0, 300).replace(/\s\S+$/, '') + '\u2026';
return store(href, return store(href,
'<div class="popup-openlibrary">' '<div class="popup-openlibrary">'
+ '<div class="popup-source">Open Library</div>' + srcHtml('openlibrary', 'Open Library')
+ '<div class="popup-title">' + esc(data.title) + '</div>' + '<div class="popup-title">' + esc(data.title) + '</div>'
+ (desc ? '<div class="popup-abstract">' + esc(desc) + '</div>' : '') + (desc ? '<div class="popup-abstract">' + esc(desc) + '</div>' : '')
+ '</div>'); + '</div>');
@ -464,7 +464,7 @@
} }
return store(href, return store(href,
'<div class="popup-biorxiv">' '<div class="popup-biorxiv">'
+ '<div class="popup-source">' + esc(label) + '</div>' + srcHtml(server, label)
+ '<div class="popup-title">' + esc(paper.title) + '</div>' + '<div class="popup-title">' + esc(paper.title) + '</div>'
+ (authorStr ? '<div class="popup-authors">' + esc(authorStr) + '</div>' : '') + (authorStr ? '<div class="popup-authors">' + esc(authorStr) + '</div>' : '')
+ (abstract ? '<div class="popup-abstract">' + esc(abstract) + '</div>' : '') + (abstract ? '<div class="popup-abstract">' + esc(abstract) + '</div>' : '')
@ -484,7 +484,7 @@
if (!data || !data.title) return null; if (!data || !data.title) return null;
return store(href, return store(href,
'<div class="popup-youtube">' '<div class="popup-youtube">'
+ '<div class="popup-source">YouTube</div>' + srcHtml('youtube', 'YouTube')
+ '<div class="popup-title">' + esc(data.title) + '</div>' + '<div class="popup-title">' + esc(data.title) + '</div>'
+ (data.author_name ? '<div class="popup-authors">' + esc(data.author_name) + '</div>' : '') + (data.author_name ? '<div class="popup-authors">' + esc(data.author_name) + '</div>' : '')
+ '</div>'); + '</div>');
@ -516,7 +516,7 @@
var byline = [creator, year].filter(Boolean).join(', '); var byline = [creator, year].filter(Boolean).join(', ');
return store(href, return store(href,
'<div class="popup-archive">' '<div class="popup-archive">'
+ '<div class="popup-source">Internet Archive</div>' + srcHtml('internet-archive', 'Internet Archive')
+ '<div class="popup-title">' + esc(title) + '</div>' + '<div class="popup-title">' + esc(title) + '</div>'
+ (byline ? '<div class="popup-authors">' + esc(byline) + '</div>' : '') + (byline ? '<div class="popup-authors">' + esc(byline) + '</div>' : '')
+ (desc ? '<div class="popup-abstract">' + esc(desc) + '</div>' : '') + (desc ? '<div class="popup-abstract">' + esc(desc) + '</div>' : '')
@ -550,7 +550,7 @@
var meta = [journal, year].filter(Boolean).join(', '); var meta = [journal, year].filter(Boolean).join(', ');
return store(href, return store(href,
'<div class="popup-pubmed">' '<div class="popup-pubmed">'
+ '<div class="popup-source">PubMed</div>' + srcHtml('pubmed', 'PubMed')
+ '<div class="popup-title">' + esc(paper.title) + '</div>' + '<div class="popup-title">' + esc(paper.title) + '</div>'
+ (authors ? '<div class="popup-authors">' + esc(authors) + '</div>' : '') + (authors ? '<div class="popup-authors">' + esc(authors) + '</div>' : '')
+ (meta ? '<div class="popup-meta">' + esc(meta) + '</div>' : '') + (meta ? '<div class="popup-meta">' + esc(meta) + '</div>' : '')
@ -633,5 +633,11 @@
.replace(/"/g, '&quot;'); .replace(/"/g, '&quot;');
} }
/* Emit a .popup-source label with a data-popup-source attribute so CSS
can prepend the matching icon via ::before + mask-image. */
function srcHtml(key, label) {
return '<div class="popup-source" data-popup-source="' + esc(key) + '">' + esc(label) + '</div>';
}
document.addEventListener('DOMContentLoaded', init); document.addEventListener('DOMContentLoaded', init);
}()); }());

View File

@ -22,5 +22,6 @@
$if(status)$<a href="#epistemic">$if(overall-score)$<span class="ep-link-label">Epistemic</span><span class="meta-overall-score" title="Overall score: $overall-score$/100">$overall-score$%</span>$else$Epistemic$endif$</a>$endif$ $if(status)$<a href="#epistemic">$if(overall-score)$<span class="ep-link-label">Epistemic</span><span class="meta-overall-score" title="Overall score: $overall-score$/100">$overall-score$%</span>$else$Epistemic$endif$</a>$endif$
$if(bibliography)$<a href="#bibliography">Bibliography</a>$endif$ $if(bibliography)$<a href="#bibliography">Bibliography</a>$endif$
$if(backlinks)$<a href="#backlinks">Backlinks</a>$endif$ $if(backlinks)$<a href="#backlinks">Backlinks</a>$endif$
$if(repository)$<a href="$repository$">Repository</a>$endif$
</nav> </nav>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More