A comprehensive astrology library for natal chart calculations, analysis, and geometric chart layout extraction.
Project description
Nataly
This library was developed to generate artistic natal posters with astronomical precision. For chart visuals and more details, visit: https://goker.art/natal
A comprehensive Python library for astrological chart calculations and analysis.
Features
- Natal Chart Calculations: Complete birth chart calculations with Swiss Ephemeris
- Transit Analysis: Transit chart calculations and aspect analysis
- Comprehensive Data: Planets, asteroids, lunar nodes, angles, and more
- Distribution Analysis: Elements, modalities, polarities, quadrants, hemispheres
- Aspect Calculations: Major and minor aspects with configurable orbs
- House Systems: Support for Placidus and other house systems
- Dignities: Planetary dignities (domicile, exaltation, detriment, fall)
- Filtering: Advanced filtering for celestial bodies by type, sign, house, etc.
Installation
You can install Nataly using pip:
pip install nataly
For development installation:
git clone https://github.com/gokerDEV/nataly.git
cd nataly
pip install -e .
Quick Start
import datetime
import pytz
from nataly import NatalChart, create_orb_config
# Create a natal chart
birth_dt = datetime.datetime(1990, 2, 27, 7, 15, tzinfo=pytz.UTC)
chart = NatalChart(
person_name="Joe Doe",
dt_utc=birth_dt,
lat=38.25, # Izmir, Turkey
lon=27.09,
orb_config=create_orb_config('Placidus')
)
# Get planetary positions
sun = chart.get_body_by_name("Sun")
print(f"Sun: {sun.signed_dms} in House {sun.house}")
# Get aspects
for aspect in chart.aspects:
print(f"{aspect.body1.name} {aspect.symbol} {aspect.body2.name} (orb: {aspect.orb_str})")
# Get distributions
print("Element distribution:", chart.element_distribution)
print("Modality distribution:", chart.modality_distribution)
Advanced Usage
Filtering Celestial Bodies
from nataly import BodyFilter
# Get only planets (excluding luminaries)
planets_filter = BodyFilter(
include_planets=True,
include_luminaries=False,
include_asteroids=False
)
planets = chart.get_bodies(planets_filter)
# Get bodies in specific signs
fire_signs = chart.get_bodies_by_signs(["Aries", "Leo", "Sagittarius"])
# Get retrograde bodies
retrograde = chart.get_retrograde_bodies()
Transit Analysis
from nataly import AstroEngine
# Create transit chart
transit_dt = datetime.datetime.now(pytz.UTC)
transit_chart = NatalChart(
person_name="Current Transit",
dt_utc=transit_dt,
lat=38.25,
lon=27.09
)
# Calculate aspects between transit and natal
engine = AstroEngine()
transit_aspects = engine.get_aspects(
transit_chart.bodies_dict,
chart.bodies_dict
)
Custom Orb Configuration
from nataly import OrbConfig
# Create custom orb configuration
custom_orbs = {
'luminaries': {
'Conjunction': 10.0,
'Opposition': 10.0,
'Trine': 8.0,
'Square': 8.0
},
'planets': {
'Conjunction': 8.0,
'Opposition': 8.0,
'Trine': 6.0,
'Square': 6.0
},
'angles': {
'Conjunction': 1.0,
'Opposition': 1.0,
'Trine': 1.0,
'Square': 1.0
}
}
orb_config = OrbConfig.from_dict(custom_orbs)
chart = NatalChart(
person_name="Custom Orbs",
dt_utc=birth_dt,
lat=38.25,
lon=27.09,
orb_config=orb_config
)
Examples
Check the examples/ directory for complete examples:
astrological_analysis.py: Comprehensive chart analysis with report generationbasic_usage.py: Basic library usage examples
Development
To set up the development environment:
pip install -e ".[dev]"
Run tests:
pytest
Format code:
black nataly/
Lint code:
flake8 nataly/
Dependencies
Required
swisseph>=2.10.0: Swiss Ephemeris for planetary calculationspytz>=2021.1: Timezone handling
Optional
numpy>=1.20.0: Advanced calculationspandas>=1.3.0: Data analysismatplotlib>=3.3.0: Chart visualizationseaborn>=0.11.0: Enhanced plotting
Ephemeris Files
For accurate calculations, download Swiss Ephemeris files:
- Go to https://www.astro.com/swisseph/swedownload_j.htm
- Download ephemeris files (e.g.,
seas_18.se1) - Place files in
./nataly/ephe/directory
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for your changes
- Run the test suite
- Submit a pull request
Geometric Chart Layout (NEW in 0.1.3)
Nataly now provides geometric layout data for visualizing natal charts via the ChartLayout class:
from nataly import NatalChart, ChartLayout
import datetime, pytz
# Create a natal chart
birth_dt = datetime.datetime(1990, 2, 27, 9, 15, tzinfo=pytz.UTC)
chart = NatalChart(
person_name="Joe Doe",
dt_utc=birth_dt,
lat=38.4192, # Izmir, Turkey
lon=27.1287
)
# Get geometric layout data for visualization
layout = ChartLayout(chart)
layout_data = layout.get_data()
print("Chart center:", layout_data["center"])
print("First house line:", layout_data["natal"]["houses"][0])
print("First planet position:", layout_data["natal"]["bodies"][0])
See examples/basic_usage.py for a runnable sample.
Version History
- 0.1.3: Added ChartLayout for geometric chart layout extraction and public API, new example in basic_usage.py
- 0.1.0: Initial release with complete astrological functionality
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nataly-0.1.3.tar.gz.
File metadata
- Download URL: nataly-0.1.3.tar.gz
- Upload date:
- Size: 31.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a7ed4ff5beb6f96159781c6226622711f84fca858bc768def0fd26a8fd5a4eb
|
|
| MD5 |
809641140b98a9e743ad2c361d248b3d
|
|
| BLAKE2b-256 |
1ff7f6cdccc4d99a0239bc98f85ef7b6cb44dc713cac98dcfc63f6a4fca59901
|
File details
Details for the file nataly-0.1.3-py3-none-any.whl.
File metadata
- Download URL: nataly-0.1.3-py3-none-any.whl
- Upload date:
- Size: 33.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
708824714f8df5f2248ed6d293f2c45f3f9aff13eadcd631353e720f23dd6b09
|
|
| MD5 |
a01c87a941348f05cf02982875822e58
|
|
| BLAKE2b-256 |
3417028aaa25101bb056c9455c6559eef9a1a750a140167c76f002ea6d2e16db
|