Skip to main content

A forward-oriented programming paradigm for Python.

Project description

pyfop

Implements forward-oriented programming in Python. This shares configuration arguments across multiple components and determines their values after the main business logic.

build codecov Downloads

Dependencies: None
Developer: Emmanouil (Manios) Krasanakis
Contant: maniospas@hotmail.com

Features

:alembic: Adapt arguments to usage context
:surfer: Argument sharing between methods
:rocket: Speed up development
:hammer_and_wrench: Easy adoption with decorators

Quickstart

Enable lazy execution and automatically set arguments with defaults as aspects:

@lazy
@autoaspects
def affine(x, scale=1, offset=0):
    return x*scale + offset

Produce results with normal python code:

GM = (affine(2)*affine(8))**0.5

Declare aspect argument values to be shared with all method calls:

print(GM(scale=3))  # 12

Advanced features

Lazy methods calling lazy methods:

@lazy
@autoaspects
def gm(x, y, affine=affine):
    return (affine(x)*affine(y))**0.5

GM = gm(2, 8)
print(GM(scale=3))  # 12

Show context, for example to understand which aspects can be controlled:

print(GM.get_input_context(scale=3))
# context:
#	- scale:
#		 value: 3,
#		 priority: Priority.HIGH
#		 shares: 1
#	- offset:
#		 value: 1,
#		 priority: Priority.INCREASED
#		 shares: 4

Aspects are shared with all methods conttibuting to the result:

@lazy
@autoaspects
def square(x, scale=1):
    return scale*x*x

print(affine(2)(scale=2))  # 4
print((affine(2)+square(1))(scale=2))  # 5

Manually declare priority-based aspects to resolve conflicting defaults:

@lazy
def logpp(x, offset=Aspect(1, Priority.INCREASED)):
    import math
    return math.log(x+offset)/math.log(2)

result = affine(2)+log(3)
print(result(scale=2))  # 5+2=7

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

pyfop-0.3.2.tar.gz (14.7 kB view hashes)

Uploaded Source

Built Distribution

pyfop-0.3.2-py3-none-any.whl (16.4 kB view hashes)

Uploaded Python 3

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