Metadata-Version: 2.1
Name: kerykeion
Version: 4.0a4
Summary: A python library for astrology.
Home-page: https://github.com/g-battaglia/kerykeion
License: GPL-2.0
Keywords: astrology,ephemeris,astrology library,birtchart,svg,zodiac,zodiac-sing,astronomical-algorithms,synastry,astrology-calculator
Author: Giacomo Battaglia
Author-email: battaglia.giacomo@yahoo.it
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Scientific/Engineering :: Astronomy
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Dist: jsonpickle (>=3.0.1,<4.0.0)
Requires-Dist: pydantic (>=1.10.4,<2.0.0)
Requires-Dist: pyswisseph (>=2.10.3.1,<3.0.0.0)
Requires-Dist: pytz (>=2022.7,<2023.0)
Requires-Dist: requests (>=2.28.1,<3.0.0)
Requires-Dist: requests-cache (>=0.9.7,<0.10.0)
Requires-Dist: terminaltables (>=3.1.10,<4.0.0)
Project-URL: Repository, https://github.com/g-battaglia/kerykeion
Description-Content-Type: text/markdown

<h1 align=center>Kerykeion</h1>
<div align="center">
    <a href="#">
        <img src="https://img.shields.io/github/contributors/g-battaglia/kerykeion?color=blue&logo=github" alt="contributors">
    </a>
    <a href="#">
        <img src="https://img.shields.io/github/stars/g-battaglia/kerykeion.svg?logo=github" alt="stars">
    </a>
    <a href="#">
        <img src="https://img.shields.io/github/forks/g-battaglia/kerykeion.svg?logo=github" alt="forks">
    </a>
    <a href="https://pypi.org/project/kerykeion" target="_blank">
        <img src="https://visitor-badge.laobi.icu/badge?page_id=g-battaglia.kerykeion" alt="visitors"/>
    </a>    
    <a href="https://pypi.org/project/kerykeion" target="_blank">
        <img src="https://img.shields.io/pypi/v/kerykeion?label=pypi%20package" alt="Package version">
    </a>
    <a href="https://pypi.org/project/kerykeion" target="_blank">
        <img src="https://img.shields.io/pypi/pyversions/kerykeion.svg" alt="Supported Python versions">
    </a>
</div>

&nbsp;

Kerykeion is a python library for Astrology.
It can calculate all the planet and house position,
also it can calculate the aspects of a single persone or between two, you can set how many planets you
need in the settings in the utility module.
It also can generate an SVG of a birthchart, a composite chart or a transit chart.

## Installation

Kerykeion is a *Python 3.9* package, make sure you have *Python 3.9* or above installed on your system.

```bash
pip3 install kerykeion
```

## Usage

Here some examples:

```python

# Import the main class for creating a kerykeion instance:
from kerykeion import KrInstance

# Create a kerykeion instance:
# Args: Name, year, month, day, hour, minuts, city, nation(optional)
kanye = KrInstance("Kanye", 1977, 6, 8, 8, 45, "Atlanta")

# Get the information about the sun in the chart:
# (The position of the planets always starts at 0)
kanye.sun

#> {'name': 'Sun', 'quality': 'Mutable', 'element': 'Air', 'sign': 'Gem', 'sign_num': 2, 'pos': 17.598992059774275, 'abs_pos': 77.59899205977428, 'emoji': '♊️', 'house': '12th House', 'retrograde': False}

# Get informations about the first house:
kanye.first_house

#> {'name': 'First House', 'quality': 'Cardinal', 'element': 'Water', 'sign': 'Can', 'sign_num': 3, 'pos': 17.995779673209114, 'abs_pos': 107.99577967320911, 'emoji': '♋️'}

# Get element of the moon sign:
kanye.moon.get("element")

#> 'Water'

```

**To avoid connecting to GeoNames (eg. avoiding hourly limit or no internet connection) you should instance kerykeion like this:**

```python
kanye = KrInstance(
    "Kanye", 1977, 6, 8, 8, 45,
    lng=50, lat=50, tz_str="Europe/Rome"
    )
```

## Generate a SVG Chart:

```python
from kerykeion import KrInstance, MakeSvgInstance

first = KrInstance("Jack", 1990, 6, 15, 15, 15, "Roma")
second = KrInstance("Jane", 1991, 10, 25, 21, 00, "Roma")

# Set the type, it can be Natal, Composite or Transit

name = MakeSvgInstance(first, chart_type="Composite", second_obj=second)
name.makeSVG()
print(len(name.aspects_list))

#> Generating kerykeion object for Jack...
#> Generating kerykeion object for Jane...
#> Jack birth location: Roma, 41.89193, 12.51133
#> SVG Generated Correctly
#> 38

```

![alt text](http://centuryboy.altervista.org/JackComposite_Chart.svg)


# Report

To print a report of all the data:

```python
from kerykeion import Report, KrInstance

kanye = KrInstance("Kanye", 1977, 6, 8, 8, 45, "Atlanta")
report = Report(kanye)
report.print_report()

```

Returns:

```
+- Kerykeion report for Kanye -+
+----------+------+-------------+-----------+----------+
| Date     | Time | Location    | Longitude | Latitude |
+----------+------+-------------+-----------+----------+
| 8/6/1977 | 8:45 | Atlanta, US | -84.38798 | 33.749   |
+----------+------+-------------+-----------+----------+
+-----------+------+-------+------+----------------+
| Planet    | Sign | Pos.  | Ret. | House          |
+-----------+------+-------+------+----------------+
| Sun       | Gem  | 17.6  | -    | Twelfth House  |
| Moon      | Pis  | 16.43 | -    | Ninth House    |
| Mercury   | Tau  | 26.29 | -    | Eleventh House |
| Venus     | Tau  | 2.03  | -    | Tenth House    |
| Mars      | Tau  | 1.79  | -    | Tenth House    |
| Jupiter   | Gem  | 14.61 | -    | Eleventh House |
| Saturn    | Leo  | 12.8  | -    | Second House   |
| Uranus    | Sco  | 8.27  | R    | Fourth House   |
| Neptune   | Sag  | 14.69 | R    | Fifth House    |
| Pluto     | Lib  | 11.45 | R    | Fourth House   |
| Mean_Node | Lib  | 21.49 | R    | Fourth House   |
| True_Node | Lib  | 22.82 | R    | Fourth House   |
+-----------+------+-------+------+----------------+
+----------------+------+----------+
| House          | Sign | Position |
+----------------+------+----------+
| First House    | Can  | 18.0     |
| Second House   | Leo  | 9.51     |
| Third House    | Vir  | 4.02     |
| Fourth House   | Lib  | 3.98     |
| Fifth House    | Sco  | 9.39     |
| Sixth House    | Sag  | 15.68    |
| Seventh House  | Cap  | 18.0     |
| Eighth House   | Aqu  | 9.51     |
| Ninth House    | Pis  | 4.02     |
| Tenth House    | Ari  | 3.98     |
| Eleventh House | Tau  | 9.39     |
| Twelfth House  | Gem  | 15.68    |
+----------------+------+----------+

```

And if you want to export it to a file:

```bash
$ python3 your_script_name.py > file.txt 
```

## Other exeples of possibles usecase

```python
# Get all aspects between two persons:

from kerykeion import CompositeAspects, KrInstance
first = KrInstance("Jack", 1990, 6, 15, 15, 15, "Roma")
second = KrInstance("Jane", 1991, 10, 25, 21, 00, "Roma")

name = CompositeAspects(first, second)
aspect_list = name.get_relevant_aspects()
print(aspect_list[0])

#> Generating kerykeion object for Jack...
#> Generating kerykeion object for Jane...
#> {'p1_name': 'Sun', 'p1_abs_pos': 84.17867971515636, 'p2_name': 'Sun', 'p2_abs_pos': 211.90472999502984, 'aspect': 'trine', 'orbit': 7.726050279873476, 'aspect_degrees': 120, 'color': '#36d100', 'aid': 6, 'diff': 127.72605027987348, 'p1': 0, 'p2': 0}

```

## Documentation

Most of the functions and the classes are self documented by the types and have docstrings.
An auto-generated documentation [is available here](https://g-battaglia.github.io/kerykeion).

Sooner or later I'll try to write an extensive documentation.

## Development

You can clone this repository or download a zip file using the right side buttons.

## Contributing

Feel free to contribute to the code!

