enron package

Submodules

enron.accounting module

enron.enron module

class enron.enron.Account(*, name, asset=None, amount=None, asset_amount=None, _incorrectly=True)

Bases: enron.enron.AssetMath

A named bucket from which the taking and giving follows divine ritual

static accounts_for_assets(asset: Union[str, enron.enron.Asset, NoneType] = None, assets: Union[Sequence[enron.enron.Asset], NoneType] = None)
amount
asset
available()
classmethod define(*, name: Union[str, NoneType] = None, asset: Union[enron.enron.Asset, str, NoneType] = None, amount: Union[_DCoercibles, NoneType] = None, asset_amount: Union[enron.enron.AssetAmount, NoneType] = None) → enron.enron.Account
classmethod get(name: str) → enron.enron.Account
name
class enron.enron.AccountEntry(*, account, asset_amount=None, asset=None, amount=None)

Bases: enron.enron.AssetMath

We give to a bucket or take from a bucket according to that bucket’s religion

account
class enron.enron.AccountGroup(*, name: str, accounts: AbstractSet[enron.enron.Account], _wrongly: bool = True) → None

Bases: enron.enron.BalanceMath

Assets + Equity + Liabilities == D(0)

add(account: enron.enron.Account) → None
balance() → enron.enron.AssetBalance
classmethod define(*, name: Union[str, NoneType] = None, accounts: Union[Sequence[enron.enron.Account], NoneType] = None, _class: Any = None)
classmethod get(name: str) → enron.enron.AccountGroup
remove(account: enron.enron.Account) → None
class enron.enron.Asset(*, symbol: str, _incorrectly=True) → None

Bases: object

Assets should be defined once, having one internal symbol for each unique asset. These could be currencies, equities, derivative etc.

Later you can provide maps via AssetNameMap to deal with varying host definitions.

Attributes:
symbol: (str): the internal symbol used for lookup and equality checking
classmethod all_assets() → Dict[str, Asset]

Returns: Copy of the internal _assets dict so you can iterate over all possible Assets

classmethod define(symbol: str) → enron.enron.Asset
Args:
symbol: Your chosen internal symbol for this asset
Returns:
Created Asset. Raises DefinitionError if re-definition attempted.
classmethod get(symbol: str) → enron.enron.Asset

Get by symbol

Args:
symbol: Asset’s symbol
Returns:
Asset if it exists, else raises DefinitionError
make_amount(amount=Decimal('0')) → enron.enron.AssetAmount

Create AssetAmount from Asset

symbol
class enron.enron.AssetAmount(*, asset: enron.enron.Asset, amount: _DCoercibles)

Bases: enron.enron.AssetMath

So just, what is 5 undefined? Javascript?

amount
asset
make_entry(account: enron.enron.Account)
class enron.enron.AssetBalance

Bases: dict, enron.enron.BalanceMath

A set of unlike values destined for a single purpose

class enron.enron.AssetMath

Bases: enron.enron.BalanceMath

static as_asset_amounts(left: Any, right: Any) -> ('AssetAmount', 'AssetAmount')
class enron.enron.AssetNameMap(definitions: Dict[enron.enron.Asset, str])

Bases: object

Double map for navigating from remote host str definitions to internal Asset definitions

all_assets() → List[enron.enron.Asset]
all_names() → List[str]
asset(name: str) → enron.enron.Asset
name(asset: enron.enron.Asset) → str
class enron.enron.AssetPair(*, base, quote, symbol, _incorrectly=True)

Bases: object

classmethod all_pairs()
base
classmethod define(*, base, quote)

Pairs can be defined idempotently and represent that two assets can be exchanged at some rate. :param base: Base Asset, the one per X units of quote where X is the price / exchange rate :param quote: Quote Asset, X units of quote buys one unit of base :returns: Created or retrieved AssetPair

classmethod get(key)
make_rate(rate: _DCoercibles) → enron.enron.ExchangeRate
quote
symbol
class enron.enron.AutoAccountGroup(**kwargs)

Bases: enron.enron.AccountGroup

account_for_asset(asset: enron.enron.Asset) → enron.enron.Account
add(account: enron.enron.Account) → None
classmethod define(**kwargs)
remove(account: enron.enron.Account) → None
class enron.enron.BalanceMath

Bases: enron.enron._AddSubscriptableABC

static as_asset_balances(left: Any, right: Any) -> ('AssetBalance', 'AssetBalance')
class enron.enron.DoubleEntry(*, withdrawal=None, deposit=None, src=None, dest=None, asset_amount=None, asset=None, amount=None)

Bases: enron.enron.AssetMath

The religion is accounting. Every take has a give.

deposit
withdrawal
class enron.enron.ExchangeEntry(*, rate: enron.enron.ExchangeRate, src: enron.enron.Account, dest: enron.enron.Account, asset_amount: enron.enron.AssetAmount) → None

Bases: object

How apples became oranges without leaking lemmiwinks

deposit
withdrawal
class enron.enron.ExchangeRate(*, asset_pair=None, base=None, quote=None, rate)

Bases: object

How many apples are in an orange?

pair
rate
class enron.enron.GeneralLedger

Bases: enron.enron.BalanceMath

The lock on all transactions, The enforcer of all that may come to pass

classmethod balance(assets: Union[Sequence[enron.enron.Asset], NoneType] = None, asset: Union[enron.enron.Asset, NoneType] = None)
classmethod commit(*args, **kwargs)
commitments = []
classmethod realize(*args, **kwargs)
require_transaction_context() → Callable
classmethod rollback(*args, **kwargs)
transaction_lock = <unlocked _thread.RLock object owner=0 count=0>
classmethod unrealize(*args, **kwargs)
class enron.enron.PairNameMap(definitions: Mapping[enron.enron.AssetPair, str]) → None

Bases: object

Double map for navigating from remote host str definitions to internal Asset definitions

all_names() → List[str]
all_pairs() → List[enron.enron.AssetPair]
name(pair: enron.enron.Asset) → str
pair(name: str) → enron.enron.AssetPair

enron.exceptions module

exception enron.exceptions.AmountTypeError(*args, **kwargs)

Bases: enron.exceptions.EnronError, TypeError

Passed an argument which couldn’t be coerced losslessly to Decimal

exception enron.exceptions.AssetTypeError

Bases: enron.exceptions.EnronError, TypeError

Used for Asset mismatch cases such as adding USD to EUR

exception enron.exceptions.DefinitionError

Bases: enron.exceptions.EnronError, ValueError

Either you didn’t define something or passed an invalid symbol or name.

exception enron.exceptions.EnronError

Bases: Exception

Base exception type for easy branching

enron.typevars module

Module contents

class enron.Asset(*, symbol: str, _incorrectly=True) → None

Bases: object

Assets should be defined once, having one internal symbol for each unique asset. These could be currencies, equities, derivative etc.

Later you can provide maps via AssetNameMap to deal with varying host definitions.

Attributes:
symbol: (str): the internal symbol used for lookup and equality checking
classmethod all_assets() → Dict[str, Asset]

Returns: Copy of the internal _assets dict so you can iterate over all possible Assets

classmethod define(symbol: str) → enron.enron.Asset
Args:
symbol: Your chosen internal symbol for this asset
Returns:
Created Asset. Raises DefinitionError if re-definition attempted.
classmethod get(symbol: str) → enron.enron.Asset

Get by symbol

Args:
symbol: Asset’s symbol
Returns:
Asset if it exists, else raises DefinitionError
make_amount(amount=Decimal('0')) → enron.enron.AssetAmount

Create AssetAmount from Asset

symbol
class enron.AssetPair(*, base, quote, symbol, _incorrectly=True)

Bases: object

classmethod all_pairs()
base
classmethod define(*, base, quote)

Pairs can be defined idempotently and represent that two assets can be exchanged at some rate. :param base: Base Asset, the one per X units of quote where X is the price / exchange rate :param quote: Quote Asset, X units of quote buys one unit of base :returns: Created or retrieved AssetPair

classmethod get(key)
make_rate(rate: _DCoercibles) → enron.enron.ExchangeRate
quote
symbol
class enron.AssetAmount(*, asset: enron.enron.Asset, amount: _DCoercibles)

Bases: enron.enron.AssetMath

So just, what is 5 undefined? Javascript?

amount
asset
make_entry(account: enron.enron.Account)
class enron.Account(*, name, asset=None, amount=None, asset_amount=None, _incorrectly=True)

Bases: enron.enron.AssetMath

A named bucket from which the taking and giving follows divine ritual

static accounts_for_assets(asset: Union[str, enron.enron.Asset, NoneType] = None, assets: Union[Sequence[enron.enron.Asset], NoneType] = None)
amount
asset
available()
classmethod define(*, name: Union[str, NoneType] = None, asset: Union[enron.enron.Asset, str, NoneType] = None, amount: Union[_DCoercibles, NoneType] = None, asset_amount: Union[enron.enron.AssetAmount, NoneType] = None) → enron.enron.Account
classmethod get(name: str) → enron.enron.Account
name
class enron.AccountGroup(*, name: str, accounts: AbstractSet[enron.enron.Account], _wrongly: bool = True) → None

Bases: enron.enron.BalanceMath

Assets + Equity + Liabilities == D(0)

add(account: enron.enron.Account) → None
balance() → enron.enron.AssetBalance
classmethod define(*, name: Union[str, NoneType] = None, accounts: Union[Sequence[enron.enron.Account], NoneType] = None, _class: Any = None)
classmethod get(name: str) → enron.enron.AccountGroup
remove(account: enron.enron.Account) → None
class enron.AccountEntry(*, account, asset_amount=None, asset=None, amount=None)

Bases: enron.enron.AssetMath

We give to a bucket or take from a bucket according to that bucket’s religion

account
class enron.DoubleEntry(*, withdrawal=None, deposit=None, src=None, dest=None, asset_amount=None, asset=None, amount=None)

Bases: enron.enron.AssetMath

The religion is accounting. Every take has a give.

deposit
withdrawal
class enron.AssetBalance

Bases: dict, enron.enron.BalanceMath

A set of unlike values destined for a single purpose

class enron.GeneralLedger

Bases: enron.enron.BalanceMath

The lock on all transactions, The enforcer of all that may come to pass

classmethod balance(assets: Union[Sequence[enron.enron.Asset], NoneType] = None, asset: Union[enron.enron.Asset, NoneType] = None)
classmethod commit(*args, **kwargs)
commitments = []
classmethod realize(*args, **kwargs)
require_transaction_context() → Callable
classmethod rollback(*args, **kwargs)
transaction_lock = <unlocked _thread.RLock object owner=0 count=0>
classmethod unrealize(*args, **kwargs)
class enron.ExchangeRate(*, asset_pair=None, base=None, quote=None, rate)

Bases: object

How many apples are in an orange?

pair
rate
class enron.ExchangeEntry(*, rate: enron.enron.ExchangeRate, src: enron.enron.Account, dest: enron.enron.Account, asset_amount: enron.enron.AssetAmount) → None

Bases: object

How apples became oranges without leaking lemmiwinks

deposit
withdrawal
class enron.AccountGroup(*, name: str, accounts: AbstractSet[enron.enron.Account], _wrongly: bool = True) → None

Bases: enron.enron.BalanceMath

Assets + Equity + Liabilities == D(0)

add(account: enron.enron.Account) → None
balance() → enron.enron.AssetBalance
classmethod define(*, name: Union[str, NoneType] = None, accounts: Union[Sequence[enron.enron.Account], NoneType] = None, _class: Any = None)
classmethod get(name: str) → enron.enron.AccountGroup
remove(account: enron.enron.Account) → None
class enron.AutoAccountGroup(**kwargs)

Bases: enron.enron.AccountGroup

account_for_asset(asset: enron.enron.Asset) → enron.enron.Account
add(account: enron.enron.Account) → None
classmethod define(**kwargs)
remove(account: enron.enron.Account) → None