Collection of tools to arrange bound methods into a graph.
Project description
Arcbound
Collection of tools to arrange bound methods into a graph.
Arcbound contains a series of decorators to aid data-driven programming, where the methods and properties of a class are abstracted as nodes on a graph, inter-connected by arcs (directed edges).
Installation
pip install arcbound
Usage example
import math
from typing import Tuple, Union
import arcbound as ab
import attr
@ab.graph
@attr.s(auto_attribs=True)
class QuadraticSolver(object):
""" Calculates the solutions to a given quadratic equation.
Input parameters:
a: Quadratic coefficient.
b: Linear coefficient.
c: Constant.
"""
a: float = 0.
b: float = 0.
c: float = 0.
# Here we explicitly define the coefficient arcs.
@property
@ab.arcs(a="a", b="b", c="c")
def discriminant(self, a: float, b: float, c: float) -> float:
""" Discriminant of the quadratic equation; used to determine the
number of roots and if they are rational.
"""
return b * b - 4 * a * c
# Here we use the auto_arcs decorator to automatically link to the
# property of the same name.
@property
@ab.auto_arcs()
def roots(
self,
a: float,
b: float,
discriminant: float
) -> Tuple[Union[float, complex], ...]:
""" Returns the root(s) of the equation.
"""
if discriminant == 0:
roots = (-b / (2 * a),)
elif discriminant > 0:
roots = (
(-b + math.sqrt(discriminant)) / (2 * a),
(-b - math.sqrt(discriminant)) / (2 * a),
)
else:
real = -b / (2 * a)
imag = math.sqrt(-discriminant) / (2 * a)
roots = (
complex(real, imag),
complex(real, -imag)
)
return roots
# Since this property is not decorated with an arcbound decorator, a node
# is not generated on the arcbound_graph.
@property
def number_of_roots(self) -> int:
""" Returns the number of roots.
"""
discriminant = self.discriminant
return (
1 if discriminant == 0. else
2
)
quad_solver = QuadraticSolver(a=1, b=4, c=3)
quad_solver.roots
# (-1,0, -3.0)
# Create a function that solves for the discriminant of a quadratic equation.
# Retains the defaults of a=1, b=4, and c=3 from the quad_solver object.
discriminant_solver = quad_solver.get_arcbound_node("discriminant")
discriminant_solver(a=2, b=4)
# -8
quad_solver.visualize_arcbound_graph()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
arcbound-0.0.5.tar.gz
(8.3 kB
view hashes)
Built Distribution
arcbound-0.0.5-py3-none-any.whl
(21.7 kB
view hashes)