Skip to main content

boc is a Python extension that adds Behavior-oriented concurrency built on top of cross-interpreter data.

Project description

bocpy

BOC Logo

Behavior-Oriented Concurrency (BOC) is a new paradigm for parallel and concurrent programming which is particularly well-suited to Python. In a BOC program, data is shared such that each behavior has unique temporal ownership of the data, removing the need for locks to coordinate access. For Python programmers, this brings a lot of benefits. Behaviors are implemented as decorated functions, and from the programmer's perspective, those functions work like normal. Importantly, the programmer's task shifts from solving concurrent data access problems to organizing data flow through functions. The resulting programs are easier to understand, easier to support, easier to extend, and unlock multi-core performance due to the ability to schedule behaviors to run efficiently across multiple processes.

BOC has been implemented in several languages, including as a foundational aspect of the research language Verona, and now has been implemented in Python.

Getting Started

You can install boc via PyPi:

pip install bocpy

We provide pre-compiled wheels for Python 3.10 onwards on most platforms, but if you have problems with your particular platform/version combination, please file an issue on this repository.

[!NOTE] the boc library depends on the Cross-Interpreter Data mechanism, which was introduced in Python 3.7. We explicitly test and provide wheels for all versions of Python that have not been end-of-lifed (3.10.19 as of time of writing is the oldest version we support). The library may not work in older versions of Python.

A behavior can be thought of as a function which depends on zero or more concurrently-owned data objects (which we call cowns). As a programmer, you indicate that you want the function to be called once all of those resources are available. For example, let's say that you had two complex and time-consuming operations, and you needed to act on the basis of both of their outcomes:

def buy_cheese():
    logger = logging.getLogger("cheese_shop")
    for name in all_known_cheeses():
        if is_available(logger, name):
            return name
    
    cleanup_shop(logger)
    return None


def order_meal(exclude: str):
    logger = logging.getLogger("greasy_spoon")
    for dish in menu():
        logger.info(dish)
        if exclude.lower() not in dish.lower():
            logger.info(f"That doesn't have much {exclude} in it")
            return dish

        vikings(logger)
        if random.random() < 0.3:
            logger.info("<bloody vikings>")

    return None


cheese = buy_cheese()
meal = order_meal(exclude="spam")

if meal is not None:
    eat(meal)
elif cheese is not None:
    eat(cheese)

if meal is not None:
    print("I really wanted some cheese...")
elif cheese is not None:
    print("Cheesy comestibles")

return_to_library()

The code above will work, but requires the purveying of cheese and the navigation of the menu for non-spam options to happen sequentially. If we wanted to do these tasks in parallel, we will end up with some version of nested waiting, which can result in deadlock. With BOC, we would write the above like this:

from bocpy import wait, when, Cown

# ...

def buy_cheese():
    cheese = Cown(None)

    @when(cheese)
    def _(cheese):
        logger = logging.getLogger("cheese_shop")
        for name in all_known_cheeses():
            if is_available(logger, name):
                cheese.value = name
                return

        cleanup_shop(logger)

    return cheese


def order_meal(exclude: str):
    order = Cown(None)

    @when(order)
    def _(order):
        logger = logging.getLogger("greasy_spoon")
        logger.info("We have...")
        for dish in menu():
            logger.info(dish)
            if exclude.lower() not in dish.lower():
                logger.info(f"That doesn't have much {exclude} in it")
                order.value = dish
                return

            vikings(logger)
            if random.random() < 0.3:
                logger.info("<bloody vikings>")

    return order


cheese = buy_cheese()
meal = order_meal(exclude="spam")


@when(cheese, meal)
def _(cheese, meal):
    if meal.value is not None:
        eat(meal.value)
    elif cheese.value is not None:
        eat(cheese.value)
    else:
        print("<stomach rumbles>")


@when(cheese, meal)
def _(cheese, meal):
    if meal.value is not None:
        print("I really wanted cheese...")
    elif cheese.value is not None:
        print("Cheesy comestibles!")

    return_to_library()


wait()

You can view the full example here

The underlying BOC scheduler ensures that this operates without deadlock, by construction.

Examples

We provide a few examples to show different ways of using BOC in a program:

  1. Atomic Bank Transfer: Shows an example where two objects (in this case, bank accounts), interact in an atomic way.
  2. Dining Philosophers: The classic Dining Philosphers problem implemented using BOC.
  3. Fibonacci: A parallel implementation of Fibonacci calculation.
  4. Cooking: The example from the BOC tutorial.
  5. Boids: An agent-based bird flocking example demonstrating the Matrix class to do distributed computation over cores.

Why BOC for Python?

For many Python programmers, the GIL has established a programming model in which they do not have to think about the many potential issues that are introduced by concurrency, in particular data races. One of the best features of BOC is that, due to the way behaviors interact with concurrently owned data (cowns), each behavior can operate over its data without a need to change this familiar programming model. Even in a free-threading context, BOC will reduce contention on locks and provide programs which are data-race free by construction. Our initial research and experiments with BOC have shown near linear scaling over cores, with up to 32 concurrent worker processes.

This library

Our implementation is built on top of the subinterpreters mechanism and the Cross-Interpreter Data, or XIData, API. As of Python 3.12, sub-interpreters have their own GIL and thus run in parallel, and thus BOC will also run fully in parallel.

In addition the providing the when function decorator, the library also exposes low-level Erlang-style send and selective receive functions which enable lock-free communication across threads and subinterpreters. See the Primes and Calculator examples for the usage of these lower-level functions.

Additional Info

BOC is built on a solid foundation of serious scholarship and engineering. For further reading, please see:

  1. When Concurrency Matters: Behaviour-Oriented Concurrency
  2. Reference implementation in C#
  3. OOPSLA23 Talk

Trademarks This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies.

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

bocpy-0.1.0.tar.gz (77.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

bocpy-0.1.0-cp314-cp314-win_amd64.whl (94.7 kB view details)

Uploaded CPython 3.14Windows x86-64

bocpy-0.1.0-cp314-cp314-win32.whl (91.8 kB view details)

Uploaded CPython 3.14Windows x86

bocpy-0.1.0-cp314-cp314-musllinux_1_2_x86_64.whl (253.2 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

bocpy-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl (256.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

bocpy-0.1.0-cp314-cp314-macosx_14_0_x86_64.whl (97.1 kB view details)

Uploaded CPython 3.14macOS 14.0+ x86-64

bocpy-0.1.0-cp314-cp314-macosx_11_0_arm64.whl (92.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

bocpy-0.1.0-cp313-cp313-win_amd64.whl (93.6 kB view details)

Uploaded CPython 3.13Windows x86-64

bocpy-0.1.0-cp313-cp313-win32.whl (90.3 kB view details)

Uploaded CPython 3.13Windows x86

bocpy-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl (253.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

bocpy-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl (255.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

bocpy-0.1.0-cp313-cp313-macosx_14_0_x86_64.whl (97.3 kB view details)

Uploaded CPython 3.13macOS 14.0+ x86-64

bocpy-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (92.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

bocpy-0.1.0-cp312-cp312-win_amd64.whl (93.6 kB view details)

Uploaded CPython 3.12Windows x86-64

bocpy-0.1.0-cp312-cp312-win32.whl (90.5 kB view details)

Uploaded CPython 3.12Windows x86

bocpy-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl (253.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

bocpy-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl (256.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

bocpy-0.1.0-cp312-cp312-macosx_14_0_x86_64.whl (97.2 kB view details)

Uploaded CPython 3.12macOS 14.0+ x86-64

bocpy-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (92.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

bocpy-0.1.0-cp311-cp311-win_amd64.whl (93.5 kB view details)

Uploaded CPython 3.11Windows x86-64

bocpy-0.1.0-cp311-cp311-win32.whl (90.6 kB view details)

Uploaded CPython 3.11Windows x86

bocpy-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl (251.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

bocpy-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (253.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

bocpy-0.1.0-cp311-cp311-macosx_14_0_x86_64.whl (97.2 kB view details)

Uploaded CPython 3.11macOS 14.0+ x86-64

bocpy-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (92.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

bocpy-0.1.0-cp310-cp310-win_amd64.whl (93.6 kB view details)

Uploaded CPython 3.10Windows x86-64

bocpy-0.1.0-cp310-cp310-win32.whl (90.5 kB view details)

Uploaded CPython 3.10Windows x86

bocpy-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl (242.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

bocpy-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (245.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

bocpy-0.1.0-cp310-cp310-macosx_14_0_x86_64.whl (97.4 kB view details)

Uploaded CPython 3.10macOS 14.0+ x86-64

bocpy-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (93.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file bocpy-0.1.0.tar.gz.

File metadata

  • Download URL: bocpy-0.1.0.tar.gz
  • Upload date:
  • Size: 77.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9b68eb855030dfd12dac0394d854e61e593ea9f176bd002766b0c9ec40f1a310
MD5 82905ec182f02c5fdb6b2a2a4008d64a
BLAKE2b-256 04a622f944dc68d3e7fee264257d5b588bcd197db6eda77d6e9c3339c486f519

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 94.7 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b7f92436f86bc670cfdde4cf38534ea0bd2617ef72fd5698fd1f1319faa70d8e
MD5 5b7bde7d31b0ad626101e6f98be7f979
BLAKE2b-256 3cae44e50d7d3dd75505cd36f5c3af54811d0939a9cccee5caf0583ae4c4a354

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp314-cp314-win32.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp314-cp314-win32.whl
  • Upload date:
  • Size: 91.8 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 073c5f9f76ef5a6ae57875cd40745cdd44111a06a7ed5882b7cf7585ee07e735
MD5 bbccd17812fffbcf1dfe6d04e05fb040
BLAKE2b-256 b1801d0e1f487cad08205247191c5323549a1e61811b38f8e9a0d47d89dd66c3

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7bb60d120184658dcb8055731fd2d882db4e8782e18f7652e0e1f17b68fcefb5
MD5 8d858d63e2e2b313fbbd96924163fafd
BLAKE2b-256 5f9ccb023bc104449c8b0efd8843ac6d5f84d13e6ceb9cccb59075b0af3cfdc7

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9b63353482708d2773676bc6b2545b607eac205919e122d3cd49d20eaee6557
MD5 d4286a1b3b4e6ca6007b02e97e7d4733
BLAKE2b-256 6ba57927fc34a9f44d5ce6d06b64294d72f645b124978e15a30f024ef9468b2b

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp314-cp314-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp314-cp314-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 2ae42ee1a76b7cc97fb6633536eb398ffb747f5fc10612ae866441f8cb2dc50b
MD5 b16c8301989a082c5894a6c0ef288e1c
BLAKE2b-256 b42b63dae1d7985f2b213538c1c2c145213bf54c873a4666ea1df2b75ce92de3

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 82465f8d11b23009452dfcf26e22399241615be746cbbf2813483c6f516b2ae4
MD5 0df42130bec94cda872fcef131fc6df9
BLAKE2b-256 4753963f51a66860c37eea9fcca17c6d7bcc76653730fd66835b84eea8c0642b

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 93.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 39234e55f7ad7427b01c9e7ff0b8bf1e1ca41d0dc9ba8ed09b8b8b2505bbd041
MD5 485cf93e8fb4b2fd0edff45ddb1103d2
BLAKE2b-256 4982c4c655a14897084d34301d45b3371ff4b6ca553d737bf788a39feba0e26a

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 90.3 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 0c42d1cbf0fa16a39771054a73d7569c85df32f6d44d427aa1a2d040389ff901
MD5 70e35de2b21fd6aa24b84a90f11b93c7
BLAKE2b-256 1bf2d6560a99a4ae4ec64d03ecce764383646f824fa9c8d4249d81b6403f42b8

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8d9c1be04a411a957c2ee639b17023df65f692a9b06cc082afa142f6a4780677
MD5 2d89869e22de7dc2f6d67871bae14332
BLAKE2b-256 877ce78326cf0e86c593656e28f8b6766b3d32bf46abfffd041b9d7769fc1e29

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 503b1358260748d5d33270fb0895b95788344eda6750919c59ddf1c9ebebae14
MD5 6054cdf3630b5db2de65ce59abea56f8
BLAKE2b-256 f76661ec88d49ee8de6acbd198c4b7351326a2305665cac1a5b63bc129efd686

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp313-cp313-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp313-cp313-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 662c44b812cbfa86c4965f0fc9bb24898a2580137a732a869fc48feadd823714
MD5 eaf16b1f4044131dacf300187aa1dbd5
BLAKE2b-256 db45003f2923cce160be441d70cada0910db57a313ac6d0f6ff7759aab38502c

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b672b0839e70ab0664b33a4af3b9e0b551909b562743b410eeb08359f3ad0d52
MD5 8bf5a8797c9523116d93c4c52002d8bf
BLAKE2b-256 fc0f4b07d3bb97d7503b4b4e24eed1068e1473140081abc20af8844d6f701c3b

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 93.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 47a0bc756c92615f3bba56117446b048eb223a06ddd531d26ac2acc627181a93
MD5 ac1c34c326ddf120b029c4eda61b9662
BLAKE2b-256 c7a4c167aa0283de1d2f3550b8e029875cc0afe557562165d9811377f4f5c3b8

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 90.5 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 4847d518ffefcdb08414890238d59a0780b3f6b14a4124f178146db92d468e06
MD5 28aa9791f890f45d7193c0be359673fa
BLAKE2b-256 8d6825d9a2796b565d309dfb93901e7583f6efeb974ace0a55414df3acc3d355

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7ee56431dc439becf469a99bdd8970d255c2124b2487e1414e8e172c5bbdcb3f
MD5 7e9b2ae512b1de93f1f6ec13f614f3af
BLAKE2b-256 d3137240f628dbdaa82c6372a59c15ab527722ef02ddb762a596849e411e823e

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db5c868df8e8aba9cacd471ddce95fd88266c99b3a80b8662ca903e9b4fd12e1
MD5 7b43a04f851817145955e5f50d7ca313
BLAKE2b-256 82bbd1edf9377ee0d989906df524c6917814e5a6113a770fab147a6bc2adabca

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp312-cp312-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp312-cp312-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 8e3bb7045069ce54f6a4c422bb6e112dcb6196abe605d190f729b6813c54c61c
MD5 4d6a3a6a787af1e2fbb8eee36d8e82b5
BLAKE2b-256 bae955a7151d28ec29426544d50d50e66187a86d58646bf923bb077adfd9d08a

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0744003aa6c1b217a5810aeb0d110b4b9109b4851a598e3d9c8188e36f82607c
MD5 fdd939620871d2e98705f2cfbe398ddb
BLAKE2b-256 e2c7e4497ccafaf2191db399bf8a093e392bffa2961ce7a7aa6e6051d328bc0a

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 93.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 de678c3ee50761ed310302d00d42b3222eb69c2375e88e0cb31faad8b9f468ab
MD5 6eb3ec5e0458fec94d493509ef1bff5d
BLAKE2b-256 9e383346c9933a2fb408cf75715f543825afb358b15561926a5c01f68275db8c

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 90.6 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 2d19f47aa60a1bb6dd732cf7972b956f7b9f91a658677bb40f03e5fcfe6e2eee
MD5 a950c36b0e28f7404d15fd96ac99773b
BLAKE2b-256 365cddd9bc539f52bb457a810a3a0d873ad974693a7cf3742f2a2806e4923e02

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 271f7e831a6e0ae349de839d560adc55752e6d1589c0b9d328c99ad7184403fc
MD5 006b7fdc20c43c58876b5511ae3661c3
BLAKE2b-256 9f5c6d91b47ae3e2efccf1503953d8d46c4daaddc8ff37e3ce2708d84d0809cf

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d1bf29aaf253704cb7fd2f6ba4de5b3f6035121bd3dfdda8646be1a7038ded6c
MD5 bc50253b663741e1c09c848038023b51
BLAKE2b-256 d877304053d403fce94dc1ca966c32b90375da8f92cdd4927180e2135181d684

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp311-cp311-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp311-cp311-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 3d6d790378a3232ff9f0c394d911bfb187a7dfd93f038f93c7078df938c75e83
MD5 b541395af24bd135bfbb7490092e7222
BLAKE2b-256 563cfa466686c27d0e90c625ff72fc824cac1f0900f9de0b2ce4b0dbfe1dfaaa

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e010eccae8776e23dc5c5838773a6f918304afd33c89d9d210f6dace080409d
MD5 4bce430ee421a67b7064b6d71e1d47b5
BLAKE2b-256 5ba633fb3cdc18c370d691d353c88136de5f5dcad3d01beb8c87826c3d5fc15a

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 93.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 44136fe274de9d190badcda37f028b5829f64cc1e11af4a55bd8fa3fc8a33fb5
MD5 ebe2babd557d7876bf0e1fc5861cfd93
BLAKE2b-256 17e1d29259cf7a0f06e78ba3cfe0ac7d6974588ea3b66c01e542ec23773dd104

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: bocpy-0.1.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 90.5 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for bocpy-0.1.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 e88bb7bb2c9b7765d15d28896dec27078f647b580d57e28d4c2f876f6eaaea88
MD5 c1247bd6ed71ded9a44389fa90c51a71
BLAKE2b-256 d4f3c4b14393f51dcb193893475c3d6b766d38710c416dd6d133956d61365a5c

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 74059fe1320de31ad6163571d355660c78bdab27e436207540a7e013ff7d68cf
MD5 5457ca248f9d584dcfe0acf8191c4cfa
BLAKE2b-256 94ff6b4ba2846cdf173442e652f4471f9cca9841c63cf8ee74b77cb7d12b374f

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 29bdc39c3011782f4a340cc2e6659ad39e8c829af2e0023181c8dddc417f7016
MD5 7f771daf76510bd3380e352878df8a7e
BLAKE2b-256 2a86b8fd5057fea158a517c0908baf6c578d141d74e67385dc2e132368140b06

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp310-cp310-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp310-cp310-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 f2b9c9ca4d7008a4d7926ddf25909b2e7dced52975b9ef468f76a77be3b451e9
MD5 208c0f26e70157f9f3a28d91760ab1e9
BLAKE2b-256 97434d1c102f0b301bbc8980b0127dfe69c81aa61992b0ba4f9db662d78ac4df

See more details on using hashes here.

File details

Details for the file bocpy-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bocpy-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d01de15f4ba7792896e49f3c2e363dda23dd89070579d53fc150d2c90cfa559
MD5 c41992b4d2e443157fcda389b5f36e50
BLAKE2b-256 d086e9de6be78eb72bdfe1f8353790312d82d1c4035c5fe5ef16233e78796e52

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page