Packages

Generic Topological Data Analysis for Elixir

Current section

Files

Jump to
ex_topology assets ex_topology.svg
Raw

assets/ex_topology.svg

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img" aria-labelledby="title desc">
<title id="title">ex_topology - Topological Data Analysis</title>
<desc id="desc">A world-class hexagonal logo featuring persistence diagrams, Betti numbers, and topological structures with deep space purple and bright magenta/cyan colors.</desc>
<defs>
<!-- Background gradient: deep space purple to indigo -->
<linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#1a0f3a"/>
<stop offset="50%" stop-color="#2d1b5e"/>
<stop offset="100%" stop-color="#0f0820"/>
</linearGradient>
<!-- Radial halo glow -->
<radialGradient id="haloGlow" cx="50%" cy="40%" r="70%">
<stop offset="0%" stop-color="#ff00ff" stop-opacity="0.25"/>
<stop offset="50%" stop-color="#00ffff" stop-opacity="0.12"/>
<stop offset="100%" stop-color="#1a0f3a" stop-opacity="0"/>
</radialGradient>
<!-- Hexagon frame gradient -->
<linearGradient id="hexStroke" x1="0%" y1="20%" x2="100%" y2="80%">
<stop offset="0%" stop-color="#ff00ff"/>
<stop offset="50%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<!-- Persistence barcode gradient -->
<linearGradient id="barcodeGrad" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#ff1493"/>
<stop offset="50%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<!-- Simplicial edge gradient -->
<linearGradient id="edgeGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<!-- Cyan/magenta node radial gradient -->
<radialGradient id="nodeGrad" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="1"/>
<stop offset="40%" stop-color="#00ffff" stop-opacity="0.85"/>
<stop offset="100%" stop-color="#ff00ff" stop-opacity="0"/>
</radialGradient>
<!-- Magenta node gradient -->
<radialGradient id="magentaNode" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#ff00ff" stop-opacity="1"/>
<stop offset="50%" stop-color="#ff1493" stop-opacity="0.8"/>
<stop offset="100%" stop-color="#ff00ff" stop-opacity="0"/>
</radialGradient>
<!-- Cyan node gradient -->
<radialGradient id="cyanNode" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#00ffff" stop-opacity="1"/>
<stop offset="50%" stop-color="#00d9ff" stop-opacity="0.8"/>
<stop offset="100%" stop-color="#00ffff" stop-opacity="0"/>
</radialGradient>
<!-- Soft glow filter -->
<filter id="softGlow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="2" result="blur"/>
<feColorMatrix in="blur" type="saturate" values="1.2"/>
</filter>
<!-- Sharp glow filter for nodes -->
<filter id="nodeGlow" x="-100%" y="-100%" width="300%" height="300%">
<feGaussianBlur stdDeviation="1.5" result="blur"/>
<feFlood flood-color="#00ffff" flood-opacity="0.6" result="color"/>
<feComposite in="color" in2="blur" operator="in" result="glow"/>
<feComposite in="glow" in2="SourceGraphic" operator="arithmetic" k2="1" k3="1" result="glowed"/>
</filter>
<!-- Drop shadow -->
<filter id="dropShadow" x="-30%" y="-30%" width="160%" height="160%">
<feDropShadow dx="0" dy="1" stdDeviation="1.5" flood-color="#000000" flood-opacity="0.5"/>
</filter>
<!-- Clip path for hexagon -->
<clipPath id="hexClip">
<polygon points="100,20 170,55 170,145 100,180 30,145 30,55"/>
</clipPath>
</defs>
<!-- Background hexagon with gradients -->
<g filter="url(#dropShadow)">
<!-- Outer hexagon frame -->
<polygon points="100,20 170,55 170,145 100,180 30,145 30,55" fill="url(#bgGrad)" stroke="url(#hexStroke)" stroke-width="2.5" stroke-linejoin="round"/>
<!-- Halo glow -->
<polygon points="100,20 170,55 170,145 100,180 30,145 30,55" fill="url(#haloGlow)"/>
</g>
<!-- Clipped content inside hexagon -->
<g clip-path="url(#hexClip)">
<!-- Subtle grid background -->
<g stroke="#00ffff" stroke-width="0.4" opacity="0.08">
<line x1="30" y1="50" x2="170" y2="50"/>
<line x1="30" y1="80" x2="170" y2="80"/>
<line x1="30" y1="110" x2="170" y2="110"/>
<line x1="30" y1="140" x2="170" y2="140"/>
<line x1="50" y1="20" x2="50" y2="180"/>
<line x1="100" y1="20" x2="100" y2="180"/>
<line x1="150" y1="20" x2="150" y2="180"/>
</g>
<!-- Persistence barcode diagram (bottom left) -->
<g opacity="0.6">
<rect x="35" y="125" width="20" height="1.5" fill="url(#barcodeGrad)" filter="url(#softGlow)"/>
<rect x="35" y="135" width="28" height="1.5" fill="url(#barcodeGrad)" filter="url(#softGlow)"/>
<rect x="35" y="145" width="35" height="1.5" fill="url(#barcodeGrad)" filter="url(#softGlow)"/>
<rect x="35" y="155" width="18" height="1.5" fill="url(#barcodeGrad)" filter="url(#softGlow)"/>
</g>
<!-- Betti number annotation (top right) - simplified -->
<g opacity="0.5" font-family="monospace" font-size="6" fill="#00ffff">
<text x="145" y="35">β₁</text>
</g>
<!-- Central simplicial complex - triangle and edges -->
<g>
<!-- Outer triangle simplices -->
<path d="M 100 40 L 65 120 L 135 120 Z" fill="none" stroke="url(#edgeGrad)" stroke-width="1.2" opacity="0.7" filter="url(#softGlow)"/>
<!-- Inner connecting edges -->
<line x1="100" y1="40" x2="100" y2="85" stroke="url(#edgeGrad)" stroke-width="1" opacity="0.8" filter="url(#softGlow)"/>
<line x1="65" y1="120" x2="100" y2="85" stroke="url(#edgeGrad)" stroke-width="1" opacity="0.8" filter="url(#softGlow)"/>
<line x1="135" y1="120" x2="100" y2="85" stroke="url(#edgeGrad)" stroke-width="1" opacity="0.8" filter="url(#softGlow)"/>
</g>
<!-- Filtration layers - concentric structure -->
<g opacity="0.3" stroke="#ff00ff">
<circle cx="100" cy="85" r="22" fill="none" stroke-width="0.6"/>
<circle cx="100" cy="85" r="30" fill="none" stroke-width="0.6"/>
<circle cx="100" cy="85" r="38" fill="none" stroke-width="0.6"/>
</g>
<!-- Key vertices/nodes with glows -->
<!-- Top vertex (magenta/cyan) -->
<circle cx="100" cy="40" r="2.5" fill="url(#nodeGrad)" filter="url(#nodeGlow)" stroke="#00ffff" stroke-width="0.5"/>
<!-- Bottom left vertex (magenta) -->
<circle cx="65" cy="120" r="2.3" fill="url(#magentaNode)" filter="url(#nodeGlow)" stroke="#ff00ff" stroke-width="0.5"/>
<!-- Bottom right vertex (cyan) -->
<circle cx="135" cy="120" r="2.3" fill="url(#cyanNode)" filter="url(#nodeGlow)" stroke="#00ffff" stroke-width="0.5"/>
<!-- Central vertex (mixed magenta/cyan) -->
<circle cx="100" cy="85" r="1.8" fill="url(#nodeGrad)" filter="url(#nodeGlow)" stroke="#ffffff" stroke-width="0.4"/>
<!-- Supporting vertices (smaller) -->
<circle cx="80" cy="70" r="1.3" fill="url(#cyanNode)" opacity="0.7" filter="url(#nodeGlow)"/>
<circle cx="120" cy="70" r="1.3" fill="url(#magentaNode)" opacity="0.7" filter="url(#nodeGlow)"/>
<circle cx="72" cy="100" r="1.2" fill="url(#magentaNode)" opacity="0.6" filter="url(#nodeGlow)"/>
<circle cx="128" cy="100" r="1.2" fill="url(#cyanNode)" opacity="0.6" filter="url(#nodeGlow)"/>
</g>
<!-- Outer hexagon border (final) -->
<polygon points="100,20 170,55 170,145 100,180 30,145 30,55" fill="none" stroke="url(#hexStroke)" stroke-width="1.8" stroke-linejoin="round" opacity="0.9"/>
</svg>