Skip to main content

Probability expression library

Project description

Probnode

"Buy Me A Coffee"

Description

Probability expression library

Features

  • Basic events and probability expressions modeling, similar to SymPy
  • Calculation on a chain of probability expressions
  • Contract and/or expand probability expressions chain, using probability mathematical characteristics

Installation

pip install probnode

Quick Usage

  • Events and probability modeling:
  from probnode import Event, P

  e1 = Event("Sample event 1")
  p1 = P(e1)
  e2 = Event("Sample event 2")
  p2 = P(e2)
  
  p3 = P(p1 | p2) # Or Probability expression
  p4 = P(p1 & p2) # And Probability expression
  p5 = P(p1 // p2) # Conditional Probability expression

  # Display mathematical representation of the object(s)
  print(repr(p1))
  • Mathematical treatment on probability expressions:
  # First convert probability expression to math node
  from probnode import N
  n1 = N(p1) # Each below is a (math) node
  n2 = N(p2)
  n3 = N(p3)
  n4 = N(p4)
  n5 = N(p5)

  # A sum of nodes
  snode = n1 + n2 - n4 
  # A product of nodes
  pnode = n5 * n2
  • Contract/ expand mathematical chain of probability nodes

    • Contract
      from probnode.computation import contract
    
      c1 = contract(snode) # P(A) + P(B) - P(A and B) -> P(A or B)
      print(repr(c1))
      c2 = contract(pnode)
      print(repr(c2)) # P(A when B) * P(B) -> P(A and B)
    
    • Expand
      from probnode.computation import expand
    
      x = expand(n3)
      print(repr(x[0])) # P(A or B) -> P(A) + P(B) - P(A and B)
    
  • Value calculations

    node.value will return the value of node

    If node is a chain node (comprising multiple nodes in sum / product mathematic operation), and either children node.value is not defined, the result parent node.value will be None

    n1.value # None

    Node value can be calculated from probability expression value

    p1.value = 0.7
    n1.value # equals 0.7
    

    Or by assigning value to itself

    n1.value = 0.6
    n1.value # equals 0.6
    

    The value assigned to itself takes precedence over the calculated value from its probability expression, or calculated from children nodes (if it is a chain node)

Notes

  • Event does not have value. Only probability of event P(Event("Raining")).value = 0.3 can be assigned value

  • There are normal events, and SureEvent. Probability ofSureEvent is always 1, and assigning value to probability of SureEvent will raise error

  • Nodes, probabilities, events comparisons:

    • Events will be compared based on its name only

    • Probability compared based on its representation (type, value)

    • Nodes compared based on its underlying structure (its probability expressions, children nodes (respecting order))

    • node.is_permutation_of(other) will check if 2 nodes are permutations. For example: N(P(event1)) + N(P(event2)) - N(P(event3)) is permutation of N(P(event2)) - N(P(event3)) + N(P(event1))

  • Expansion returns a list of expanded nodes

  • Contraction return a single contracted node

  • Expansion and contraction will be done 1 time, not exhaustively until unexpandable / uncontractable

Details

Events

  • Normal events

    from probnode import Event

  • Sure events

    from probnode import SureEvent

Probability

  • Simple probability expression: Probability of a single event

  • And probability expression, Or probability expression: Probability expression of 2 probability expressions (Thus, there is only And probability of 2 probability of events, not events themselves.

    P(Event("e1") & Event("e2")),

    ✅ use P(P(Event("e1")) & P(Event("e2"))) instead )

  • Conditional probability expression: Probability of X when Y

    from probnode.probability import SimpleProbabilityExpression, AndProbabilityExpression, OrProbabilityExpression, ConditionalProbabilityExpression
    

Node

  • Normal node (Pure node): Node of a single probability expression

    from probnode.core import Node
    
  • Chain node: a sum or product of nodes

    ✅ use n1 + n2 - n3 to create SumNode instead of invoke directly SumNode() (n1, n2, n3 can be either normal nodes or chain nodes)

"Buy Me A Coffee"

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

probnode-0.1.1.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

probnode-0.1.1-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file probnode-0.1.1.tar.gz.

File metadata

  • Download URL: probnode-0.1.1.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10

File hashes

Hashes for probnode-0.1.1.tar.gz
Algorithm Hash digest
SHA256 01a580aff0e021991d3edb1175215118099b43d05b475702b149489147206b15
MD5 ad19c1fb365f46f96f1a66dc71fbe41b
BLAKE2b-256 02db66be0c4a23e9b1c07c73a3172df4be6fab6c074b50287520f5d630372ad2

See more details on using hashes here.

File details

Details for the file probnode-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: probnode-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10

File hashes

Hashes for probnode-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a8b63b4861294e973a14d01e7339d925269fa60a2c94d0ab0a2b0a5d3552a288
MD5 dc2781ae0f9482274364e09f7e8a662d
BLAKE2b-256 d695c5d99d4e4c84f1057d9a2bff42a4a7081eb9271b60f7e600e52a0eaf2d3f

See more details on using hashes here.

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