Skip to main content

create Natal Chart with ease

Project description

Natal

ci-badge pypi-badge MIT-badge black-badge

create Natal Chart with ease

Features

  • SVG natal chart generation in pure python
    • light, dark or auto theme based on user's computer settings
    • printing friendly mono theme
  • highly configurable with yaml file
    • all planets, asteroids, vertices can be enabled / disabled
    • orbs for each apect
    • light and dark theme color definitions
    • chart stroke, opacity, font, spacing between planets ...etc
  • high precision astrological data with Swiss Ephemeris
  • timezone, latitude and longitude database from GeoNames
    • auto aware of daylight saving for given time and location
  • natal chart data statistics
    • element, quality, and polarity counts
    • planets in each houses
    • aspect pair counts
    • aspects cross reference table
  • thoroughly tested with pytest

Sample Charts

  • default dark theme
  • default light theme
  • mono theme

Quick Start

  • installation

pip install natal

  • generate a chart
from natal import Data, Chart

# create chart data object
mimi = Data(
  name = "MiMi",
  city = "Taipei",
  dt = "1980-04-20 14:30"
)

# return natal chart in SVG string
Chart(mimi, width=600).svg

# create transit data object
current = Data(
  name = "Current",
  city = "Taipei",
  dt = datetime.now()
)

# create a transit chart
transit_chart = Chart(
    data1=mimi, 
    data2=current, 
    width=600
)

# view the composite chart in jupyter notebook
from IPython.display import HTML

HTML(transit_chart.svg)

following SVG chart will be produced:

Data Object

## -- retrieve natal chart properties -- ##

mimi.planets     # list[Planet]
mimi.houses      # list[House]
mimi.extras      # list[Extra]
mimi.vertices    # list[Vertex]
mimi.signs       # list[Sign]
mimi.aspects     # list[Aspect]
mimi.quadrants   # list[list[Aspectable]]

# Planet object 
sun = mimi.planets[0]

sun.degree # 30.33039116987769
sun.normalized_degree # 230.62043431588035 # degree relative to Asc
sun.color # fire
sun.speed # 0.9761994105153413
sun.retro # False
sun.dms # 00°19'
sun.signed_dms # 00°♉19'
sun.signed_deg # 0
sun.sign.name # taurus
sun.sign.symbol # ♉
sun.sign.value # 2
sun.sign.color # earth
sun.sign.ruler # venus
sun.sign.classic_ruler # venus
sun.sign.element # earth
sun.sign.quality # fixed
sun.sign.polarity # negative

# Aspect object
aspect = mimi.aspects[0]

aspect.body1 # sun Planet obj 
aspect.body2 # mars Planet obj
aspect.aspect_member # AspectMember(name='trine', symbol='△', value=120, color='air')
aspect.applying # False
aspect.orb # 3.3424

Stats

  • statistics of Data object in tabular form
from natal import Data, Stats

mimi = Data(
    name = "MiMi",
    city = "Taipei",
    dt = "1980-04-20 14:30"
)

transit = Data(
    name = "Transit",
    city = "Taipei",
    dt = "2024-10-10 12:00"
)

stats = Stats(data1=mimi, data2=transit)

print(stats.full_report("ascii"))
  • following ascii report will be created
  • Note: fonts with double space char support is suggested for better ascii table display eg. Sarasa Mono TC
# Element Distribution (MiMi)

| element   |  count  | bodies                                        |
|-----------|---------|-----------------------------------------------|
| earth     |    4    | sun ♉, jupiter ♍, saturn ♍, asc ♍         |
| water     |    2    | moon ♋, uranus ♏                            |
| fire      |    4    | mercury ♈, mars ♌, neptune ♐, mean_node ♌ |
| air       |    3    | venus ♊, pluto ♎, mc ♊                     |


# Quality Distribution (MiMi)

| quality   |  count  | bodies                                                     |
|-----------|---------|------------------------------------------------------------|
| fixed     |    4    | sun ♉, mars ♌, uranus ♏, mean_node ♌                   |
| cardinal  |    3    | moon ♋, mercury ♈, pluto ♎                              |
| mutable   |    6    | venus ♊, jupiter ♍, saturn ♍, neptune ♐, asc ♍, mc ♊ |


# Polarity Distribution (MiMi)

| polarity   |  count  | bodies                                                                   |
|------------|---------|--------------------------------------------------------------------------|
| negative   |    6    | sun ♉, moon ♋, jupiter ♍, saturn ♍, uranus ♏, asc ♍                |
| positive   |    7    | mercury ♈, venus ♊, mars ♌, neptune ♐, pluto ♎, mean_node ♌, mc ♊ |


# Celestial Bodies (MiMi)

| body      | sign      |  house  |
|-----------|-----------|---------|
| sun       | 00°♉19'  |    8    |
| moon      | 08°♋29'  |   10    |
| mercury   | 08°♈28'  |    8    |
| venus     | 15°♊12'  |   10    |
| mars      | 26°♌59'  |   12    |
| jupiter   | 00°♍17'℞ |   12    |
| saturn    | 21°♍03'℞ |    1    |
| uranus    | 24°♏31'℞ |    3    |
| neptune   | 22°♐29'℞ |    4    |
| pluto     | 20°♎06'℞ |    2    |
| mean_node | 26°♌03'℞ |   12    |
| asc       | 09°♍42'  |    1    |
| mc        | 09°♊13'  |   10    |


# Houses (MiMi)

|  house  | sign     | ruler   | ruler sign   |  ruler house  |
|---------|----------|---------|--------------|---------------|
|    1    | 09°♍41' | mercury | ♈           |       8       |
|    2    | 07°♎13' | venus   | ♊           |      10       |
|    3    | 07°♏38' | pluto   | ♎           |       2       |
|    4    | 09°♐13' | jupiter | ♍           |      12       |
|    5    | 10°♑25' | saturn  | ♍           |       1       |
|    6    | 10°♒44' | uranus  | ♏           |       3       |
|    7    | 09°♓41' | neptune | ♐           |       4       |
|    8    | 07°♈13' | mars    | ♌           |      12       |
|    9    | 07°♉38' | venus   | ♊           |      10       |
|   10    | 09°♊13' | mercury | ♈           |       8       |
|   11    | 10°♋25' | moon    | ♋           |      10       |
|   12    | 10°♌44' | sun     | ♉           |       8       |


# Quadrants (MiMi)

| quadrant   |  count  | bodies                                |
|------------|---------|---------------------------------------|
| 1st ◵      |    3    | saturn, uranus, pluto                 |
| 2nd ◶      |    1    | neptune                               |
| 3rd ◷      |    2    | sun, mercury                          |
| 4th ◴      |    5    | moon, venus, mars, jupiter, mean_node |


# Hemispheres (MiMi)

| hemisphere   |  count  | bodies                                                       |
|--------------|---------|--------------------------------------------------------------|
| ←            |    8    | saturn, uranus, pluto, moon, venus, mars, jupiter, mean_node |
| →            |    3    | neptune, sun, mercury                                        |
| ↑            |    7    | sun, mercury, moon, venus, mars, jupiter, mean_node          |
| ↓            |    4    | saturn, uranus, pluto, neptune                               |


# Celestial Bodies of Transit in MiMi's chart

| Transit   | sign      |  house  |
|-----------|-----------|---------|
| sun       | 17°♎20'  |    2    |
| moon      | 09°♑49'  |    4    |
| mercury   | 24°♎04'  |    2    |
| venus     | 20°♏44'  |    3    |
| mars      | 19°♋29'  |   11    |
| jupiter   | 21°♊20'℞ |   10    |
| saturn    | 13°♓47'℞ |    7    |
| uranus    | 26°♉39'℞ |    9    |
| neptune   | 27°♓59'℞ |    7    |
| pluto     | 29°♑38'℞ |    5    |
| mean_node | 05°♈52'℞ |    7    |
| asc       | 08°♑29'  |    4    |
| mc        | 22°♎28'  |    2    |


# Aspects of Transit vs MiMi

| Transit   |  aspect  | MiMi      |  phase  | orb    |
|-----------|----------|-----------|---------|--------|
| sun       |    △     | venus     |   ← →   | 2° 08' |
| sun       |    ☌     | pluto     |   → ←   | 2° 46' |
| moon      |    ☍     | moon      |   → ←   | 1° 20' |
| moon      |    □     | mercury   |   ← →   | 1° 21' |
| moon      |    △     | asc       |   ← →   | 0° 07' |
| mercury   |    ⚹     | mars      |   → ←   | 2° 55' |
| mercury   |    ⚹     | neptune   |   ← →   | 1° 35' |
| mercury   |    ☌     | pluto     |   ← →   | 3° 58' |
| mercury   |    ⚹     | mean_node |   → ←   | 1° 59' |
| venus     |    ⚹     | saturn    |   → ←   | 0° 19' |
| venus     |    ☌     | uranus    |   → ←   | 3° 47' |
| venus     |    □     | mean_node |   → ←   | 5° 19' |
| mars      |    ⚹     | saturn    |   → ←   | 1° 34' |
| mars      |    △     | uranus    |   → ←   | 5° 02' |
| mars      |    □     | pluto     |   → ←   | 0° 38' |
| jupiter   |    ☌     | venus     |   → ←   | 6° 08' |
| jupiter   |    □     | saturn    |   ← →   | 0° 17' |
| jupiter   |    ☍     | neptune   |   → ←   | 1° 09' |
| jupiter   |    △     | pluto     |   ← →   | 1° 13' |
| jupiter   |    ⚹     | mean_node |   → ←   | 4° 43' |
| saturn    |    △     | moon      |   → ←   | 5° 18' |
| saturn    |    □     | venus     |   ← →   | 1° 25' |
| saturn    |    ☍     | asc       |   → ←   | 4° 05' |
| saturn    |    □     | mc        |   → ←   | 4° 34' |
| uranus    |    □     | mars      |   ← →   | 0° 20' |
| uranus    |    □     | jupiter   |   ← →   | 3° 38' |
| uranus    |    △     | saturn    |   ← →   | 5° 36' |
| uranus    |    ☍     | uranus    |   ← →   | 2° 08' |
| uranus    |    □     | mean_node |   ← →   | 0° 36' |
| neptune   |    △     | uranus    |   ← →   | 3° 28' |
| neptune   |    □     | neptune   |   → ←   | 5° 31' |
| pluto     |    □     | sun       |   ← →   | 0° 41' |
| mean_node |    □     | moon      |   ← →   | 2° 36' |
| mean_node |    ☌     | mercury   |   ← →   | 2° 35' |
| mean_node |    ⚹     | mc        |   ← →   | 3° 20' |
| asc       |    ☍     | moon      |   → ←   | 0° 01' |
| asc       |    □     | mercury   |   → ←   | 0° 02' |
| asc       |    △     | asc       |   → ←   | 1° 13' |
| mc        |    ⚹     | mars      |   ← →   | 4° 31' |
| mc        |    ⚹     | neptune   |   → ←   | 0° 01' |
| mc        |    ☌     | pluto     |   ← →   | 2° 22' |
| mc        |    ⚹     | mean_node |   → ←   | 3° 35' |


# Aspect Cross Reference of Transit(cols) vs MiMi(rows)

╭─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬───────┬──────┬─────────╮
│     │ ☉   │ ☽   │ ☿   │ ♀   │ ♂   │ ♃   │ ♄   │ ♅   │ ♆   │ ♇   │ ☊   │ Asc   │ MC   │  Total  │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ☉   │     │     │     │     │     │     │     │     │     │ □   │     │       │      │    1    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ☽   │     │ ☍   │     │     │     │     │ △   │     │     │     │ □   │ ☍     │      │    4    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ☿   │     │ □   │     │     │     │     │     │     │     │     │ ☌   │ □     │      │    3    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♀   │ △   │     │     │     │     │ ☌   │ □   │     │     │     │     │       │      │    3    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♂   │     │     │ ⚹   │     │     │     │     │ □   │     │     │     │       │ ⚹    │    3    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♃   │     │     │     │     │     │     │     │ □   │     │     │     │       │      │    1    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♄   │     │     │     │ ⚹   │ ⚹   │ □   │     │ △   │     │     │     │       │      │    4    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♅   │     │     │     │ ☌   │ △   │     │     │ ☍   │ △   │     │     │       │      │    4    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♆   │     │     │ ⚹   │     │     │ ☍   │     │     │ □   │     │     │       │ ⚹    │    4    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ♇   │ ☌   │     │ ☌   │     │ □   │ △   │     │     │     │     │     │       │ ☌    │    5    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ ☊   │     │     │ ⚹   │ □   │     │ ⚹   │     │ □   │     │     │     │       │ ⚹    │    5    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ Asc │     │ △   │     │     │     │     │ ☍   │     │     │     │     │ △     │      │    3    │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼───────┼──────┼─────────┤
│ MC  │     │     │     │     │     │     │ □   │     │     │     │ ⚹   │       │      │    2    │
╰─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴───────┴──────┴─────────╯

Configuration

  • create a natal_config.yml file in project root to override the defaults in config.py
  • a sample config as follow:
theme_type: light

light_theme:
    fire: "#ff0000"
    earth: "#ffff00"
    air: "#00ff00"
    water: "#0000ff"
    points: "#00ffff"

display:
    mean_node: True
    chiron: True

orb:
    conjunction: 8
    opposition: 8
    trine: 6
    square: 6
    sextile: 6

read the docs for complete references

Tech Stack

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

natal-0.4.1.tar.gz (995.3 kB view details)

Uploaded Source

Built Distribution

natal-0.4.1-py3-none-any.whl (991.4 kB view details)

Uploaded Python 3

File details

Details for the file natal-0.4.1.tar.gz.

File metadata

  • Download URL: natal-0.4.1.tar.gz
  • Upload date:
  • Size: 995.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.10.12 Linux/6.5.0-1025-azure

File hashes

Hashes for natal-0.4.1.tar.gz
Algorithm Hash digest
SHA256 3372ab86d54d8dc2f9c761c70d6ca9c82dce39c31052084cbc48d2507d15143c
MD5 f0e73fa836bc338efe95ab6699830685
BLAKE2b-256 317b15273ab03393d1251a305304fda41095eb0e9bc2cc976f927ca26b889fc5

See more details on using hashes here.

File details

Details for the file natal-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: natal-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 991.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.10.12 Linux/6.5.0-1025-azure

File hashes

Hashes for natal-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a03d10eebb361094e5eb638f8f831457b2611527efff2ff48bc0ff05325d395e
MD5 b11650042528bbbe4b75b8d908161a54
BLAKE2b-256 99b38f10f9c28a98deb29c3cf6b46fc8aa05a590762608ce02bf722e6c279524

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page