# Coposet
Coposet is a tool for manipulating posets and allowing them to be and exporting them to various formats.
## Posets (Partially Ordered Sets)
A poset is a set with a partial order relation (≤) that is:
- **Reflexive**: a ≤ a
- **Antisymmetric**: if a ≤ b and b ≤ a, then a = b
- **Transitive**: if a ≤ b and b ≤ c, then a ≤ c
The product of two posets P and Q creates a new poset P × Q where:
- Elements: All pairs (p, q) where p ∈ P and q ∈ Q
- Ordering: (p1, q1) ≤ (p2, q2) if and only if p1 ≤ p2 in P AND q1 ≤ q2 in Q
## Schema
### Core
posetspace:
- id: uuid
- name: string
- description: string
- posets: list of posets
- default_poset: poset
- elements: list of elements
- projections?: list of posetspaces
- injections?: list of posetspaces
- consensus(consensus_type) -> poset
poset:
- id: uuid
- name: string
- description: string
- posetspace: posetspace
- relations: list of relations
- enrichment?: posetspace
- product(poset, poset) -> (poset, posetspace)
- coproduct(poset, poset) -> (poset, posetspace)
- export(format: format) -> string
element:
- id: uuid
- name: string
- description: string
- posetspace: posetspace
relation<T: posetspace, E: posetspace>:
- id: uuid
- less: element<where less.posetspace == T>
- greater: element<where greater.posetspace == T>
- enrichment?: element<where enrichment.posetspace == E>
### Helpers
consensus_type:
- derive<T: posetspace>(array of posets<T>, dropEnrichments: boolean) -> poset<T>
format enum:
- mcdp, latex
### Voting
voter:
- poset: poset
- next_antichain(voted_antichain: voted_antichain<T>) -> Either<antichain<T>, poset>
antichain<T: posetspace>:
- id: uuid
- element: element<T>
- comparisons: set of elements<T>
voted_antichain<T: posetspace>:
- id: uuid
- antichain: antichain<T>
- new_less: set of elements<T>
- new_greater: set of elements<T>
### Enricher
enricher:
- poset: poset
- enrichment: posetspace
- enrich(relations: set<(relation<poset>, element<enrichment>)>) -> poset
## Details
We will use the [posets](https://pypi.org/project/posets/) library for the basic poset operations under the hood. This will be connected by a thin interface that converts the posets from the posets library to the coposet types we need to add on our layer of voting and consensus.
We should look into using [networkx](https://networkx.org) for the complex poset operations involved in consensus and voting.
Raw data
{
"_id": null,
"home_page": "https://github.com/daydemir/partial",
"name": "coposet",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.13",
"maintainer_email": null,
"keywords": "poset, partial-order, mathematics, codesign, consensus, voting",
"author": "Deniz Aydin",
"author_email": "deniz@aydemir.us",
"download_url": "https://files.pythonhosted.org/packages/96/0a/3b54114e2fae90ab40ae68663de4ac65048f4e6bcba5020446535c166683/coposet-0.0.1.tar.gz",
"platform": null,
"description": "# Coposet\n\nCoposet is a tool for manipulating posets and allowing them to be and exporting them to various formats.\n\n## Posets (Partially Ordered Sets)\n\nA poset is a set with a partial order relation (\u2264) that is:\n- **Reflexive**: a \u2264 a\n- **Antisymmetric**: if a \u2264 b and b \u2264 a, then a = b\n- **Transitive**: if a \u2264 b and b \u2264 c, then a \u2264 c\n\nThe product of two posets P and Q creates a new poset P \u00d7 Q where:\n - Elements: All pairs (p, q) where p \u2208 P and q \u2208 Q\n - Ordering: (p1, q1) \u2264 (p2, q2) if and only if p1 \u2264 p2 in P AND q1 \u2264 q2 in Q\n\n## Schema\n\n### Core\n\nposetspace:\n- id: uuid\n- name: string\n- description: string\n- posets: list of posets\n- default_poset: poset\n- elements: list of elements\n- projections?: list of posetspaces\n- injections?: list of posetspaces\n- consensus(consensus_type) -> poset\n\nposet:\n- id: uuid\n- name: string\n- description: string\n- posetspace: posetspace\n- relations: list of relations\n- enrichment?: posetspace\n- product(poset, poset) -> (poset, posetspace)\n- coproduct(poset, poset) -> (poset, posetspace)\n- export(format: format) -> string\n\nelement:\n- id: uuid\n- name: string\n- description: string\n- posetspace: posetspace\n\nrelation<T: posetspace, E: posetspace>:\n- id: uuid\n- less: element<where less.posetspace == T>\n- greater: element<where greater.posetspace == T>\n- enrichment?: element<where enrichment.posetspace == E>\n\n### Helpers\n\nconsensus_type:\n- derive<T: posetspace>(array of posets<T>, dropEnrichments: boolean) -> poset<T>\n\nformat enum:\n- mcdp, latex\n\n### Voting\nvoter:\n- poset: poset\n- next_antichain(voted_antichain: voted_antichain<T>) -> Either<antichain<T>, poset>\n\nantichain<T: posetspace>:\n- id: uuid\n- element: element<T>\n- comparisons: set of elements<T>\n\nvoted_antichain<T: posetspace>:\n- id: uuid\n- antichain: antichain<T>\n- new_less: set of elements<T>\n- new_greater: set of elements<T>\n\n### Enricher\n\nenricher:\n- poset: poset\n- enrichment: posetspace\n- enrich(relations: set<(relation<poset>, element<enrichment>)>) -> poset\n\n\n## Details\n\nWe will use the [posets](https://pypi.org/project/posets/) library for the basic poset operations under the hood. This will be connected by a thin interface that converts the posets from the posets library to the coposet types we need to add on our layer of voting and consensus.\n\nWe should look into using [networkx](https://networkx.org) for the complex poset operations involved in consensus and voting.\n",
"bugtrack_url": null,
"license": null,
"summary": "Collaborative partial orders",
"version": "0.0.1",
"project_urls": {
"Documentation": "https://github.com/daydemir/partial/blob/main/README.md",
"Homepage": "https://github.com/daydemir/partial",
"Repository": "https://github.com/daydemir/partial"
},
"split_keywords": [
"poset",
" partial-order",
" mathematics",
" codesign",
" consensus",
" voting"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0710a714c79c67878d59196f01fa0cfb2bf01f451ce064ce03d737906e88d5ad",
"md5": "5a7d63242c90b5d8809fff7f4f7add1d",
"sha256": "975bfc8276c1455a90780c599d2f86ea1dc6fd837a4c3498909828b718058689"
},
"downloads": -1,
"filename": "coposet-0.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5a7d63242c90b5d8809fff7f4f7add1d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.13",
"size": 20399,
"upload_time": "2025-07-10T14:23:12",
"upload_time_iso_8601": "2025-07-10T14:23:12.178342Z",
"url": "https://files.pythonhosted.org/packages/07/10/a714c79c67878d59196f01fa0cfb2bf01f451ce064ce03d737906e88d5ad/coposet-0.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "960a3b54114e2fae90ab40ae68663de4ac65048f4e6bcba5020446535c166683",
"md5": "9a8af4ab7a7c09306896d04e28f58074",
"sha256": "1e954b862dce0d7d99a1c881c72427d8f719039c8e86d32fe0621b25433abea1"
},
"downloads": -1,
"filename": "coposet-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "9a8af4ab7a7c09306896d04e28f58074",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.13",
"size": 17911,
"upload_time": "2025-07-10T14:23:13",
"upload_time_iso_8601": "2025-07-10T14:23:13.154842Z",
"url": "https://files.pythonhosted.org/packages/96/0a/3b54114e2fae90ab40ae68663de4ac65048f4e6bcba5020446535c166683/coposet-0.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-10 14:23:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "daydemir",
"github_project": "partial",
"github_not_found": true,
"lcname": "coposet"
}