Elder Futhark Runes¶
An Elder Futhark rune-casting engine with the 24-rune deck plus single-rune and Norns spreads.
Casting is RNG-driven. Reversals are optional via allow_reversals, and the eight symmetrical runes
are never reversed.
from fortune_telling_core import RandomRng, ReadingRequest
from fortune_telling_core.traditions.runes import RUNE_DECK, NORNS, build_engine
request = ReadingRequest(
deck_id=RUNE_DECK.id,
spread_id=NORNS.id,
options={"allow_reversals": "true"},
)
reading = build_engine().read(request, rng=RandomRng(seed=42))
runes ¶
RUNE_DECK
module-attribute
¶
RUNE_DECK = Deck(
id="runes.deck.elder-futhark.v1",
symbols=tuple(
(
Symbol(
id=rune.symbol_id,
name=rune.name,
attributes={
"slug": rune.slug,
"glyph": rune.glyph,
"letter": rune.letter,
"aett": rune.aett,
"keyword": rune.keyword,
"cycle_index": str(rune.index),
"reversible": "true"
if rune.reversible
else "false",
},
)
)
for rune in RUNES
),
)
NORNS
module-attribute
¶
NORNS = Spread(
id="runes.spread.norns.v1",
name="Norns",
positions=(
Position(
"urdr",
"Urðr",
"That which has become: the past.",
),
Position(
"verdandi",
"Verðandi",
"That which is becoming: the present.",
),
Position(
"skuld",
"Skuld",
"That which shall be: the future.",
),
),
)
SINGLE_RUNE
module-attribute
¶
SINGLE_RUNE = Spread(
id="runes.spread.single.v1",
name="Single Rune",
positions=(
Position(
"focus",
"Focus",
"The central message of the casting.",
),
),
)
RuneEngine ¶
Bases: AbstractEngine
Elder Futhark rune-casting engine.
The engine draws from the bundled 24-rune deck into a single-rune or Norns
(past/present/future) spread, with optional reversals through the request
option allow_reversals=true. The eight symmetrical runes have no
reversed form and are always cast upright, even when reversals are enabled.
deck ¶
Return the Elder Futhark deck for a request.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
ReadingRequest
|
Reading request whose |
required |
Returns:
| Type | Description |
|---|---|
Deck
|
The bundled rune deck. |
Raises:
| Type | Description |
|---|---|
ValidationError
|
If the request names an unsupported deck. |
Source code in src/fortune_telling_core/traditions/runes/engine.py
spread ¶
Return the rune spread requested by id.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
ReadingRequest
|
Reading request whose |
required |
Returns:
| Type | Description |
|---|---|
Spread
|
|
Raises:
| Type | Description |
|---|---|
ValidationError
|
If the spread is not supported. |
Source code in src/fortune_telling_core/traditions/runes/engine.py
draw ¶
Cast runes for the requested spread.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
ReadingRequest
|
Reading request. Set |
required |
rng
|
Rng
|
Random source used to shuffle the deck and choose reversals. |
required |
Returns:
| Type | Description |
|---|---|
Draw
|
A draw containing one selection per spread position. |
Raises:
| Type | Description |
|---|---|
ValidationError
|
If the requested deck or spread is unsupported. |
ExhaustedRngError
|
If the supplied RNG cannot provide enough values. |
Source code in src/fortune_telling_core/traditions/runes/engine.py
build_engine ¶
Create an Elder Futhark rune engine.
Returns:
| Type | Description |
|---|---|
RuneEngine
|
A new |