hinge 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. {hinge-0.1.0 → hinge-0.1.2}/PKG-INFO +44 -5
  2. {hinge-0.1.0 → hinge-0.1.2}/README.md +42 -3
  3. {hinge-0.1.0 → hinge-0.1.2}/docs/README.md +1 -0
  4. {hinge-0.1.0 → hinge-0.1.2}/pyproject.toml +1 -1
  5. {hinge-0.1.0 → hinge-0.1.2}/.gitignore +0 -0
  6. {hinge-0.1.0 → hinge-0.1.2}/LICENSE +0 -0
  7. {hinge-0.1.0 → hinge-0.1.2}/hinge/__init__.py +0 -0
  8. {hinge-0.1.0 → hinge-0.1.2}/hinge/config/__init__.py +0 -0
  9. {hinge-0.1.0 → hinge-0.1.2}/hinge/config/logging_setup.py +0 -0
  10. {hinge-0.1.0 → hinge-0.1.2}/hinge/config/settings.py +0 -0
  11. {hinge-0.1.0 → hinge-0.1.2}/hinge/config/types.yaml +0 -0
  12. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/.user.yml +0 -0
  13. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/dbt_project.yml +0 -0
  14. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/apply_time_window.sql +0 -0
  15. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/assert_recipe_supported.sql +0 -0
  16. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/build_incidence.sql +0 -0
  17. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/collapse_path.sql +0 -0
  18. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/filter_bots.sql +0 -0
  19. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/network_edges.sql +0 -0
  20. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/project_bipartite.sql +0 -0
  21. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/macros/slice_edges.sql +0 -0
  22. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/hin/hin_accounts.sql +0 -0
  23. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/hin/hin_artifacts.sql +0 -0
  24. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/hin/hin_capabilities.sql +0 -0
  25. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/hin/hin_edges.sql +0 -0
  26. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/hin/hin_nodes.sql +0 -0
  27. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/hin/hin_repositories.sql +0 -0
  28. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/intermediate/int_developer_repo_affiliation.sql +0 -0
  29. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/intermediate/int_user_artifact_incidence.sql +0 -0
  30. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/artifact_reference.sql +0 -0
  31. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/co_commit_user_user.sql +0 -0
  32. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/co_edit_file_user_user.sql +0 -0
  33. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/co_edit_line_user_user.sql +0 -0
  34. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/dev_interaction.sql +0 -0
  35. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/developer_repo_affiliation.sql +0 -0
  36. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/follow_user_user.sql +0 -0
  37. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/fork_repo_repo.sql +0 -0
  38. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/issue_co_participation.sql +0 -0
  39. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/issue_participation.sql +0 -0
  40. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/pr_author_reviewer.sql +0 -0
  41. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/pr_participation.sql +0 -0
  42. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/pr_reviewer_coreview.sql +0 -0
  43. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/repo_shared_contributors.sql +0 -0
  44. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/star_user_repo.sql +0 -0
  45. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/user_mention_user.sql +0 -0
  46. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/networks/watch_user_repo.sql +0 -0
  47. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/sources/sources.yml +0 -0
  48. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/staging/stg_accounts.sql +0 -0
  49. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/staging/stg_adapter_manifest.sql +0 -0
  50. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/staging/stg_artifacts.sql +0 -0
  51. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/staging/stg_relations.sql +0 -0
  52. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/models/staging/stg_repositories.sql +0 -0
  53. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/profiles.yml +0 -0
  54. {hinge-0.1.0 → hinge-0.1.2}/hinge/dbt/seeds/ref_recipe_requirements.csv +0 -0
  55. {hinge-0.1.0 → hinge-0.1.2}/hinge/frontends/__init__.py +0 -0
  56. {hinge-0.1.0 → hinge-0.1.2}/hinge/frontends/cli/__init__.py +0 -0
  57. {hinge-0.1.0 → hinge-0.1.2}/hinge/frontends/cli/app.py +0 -0
  58. {hinge-0.1.0 → hinge-0.1.2}/hinge/frontends/lib.py +0 -0
  59. {hinge-0.1.0 → hinge-0.1.2}/hinge/frontends/tui/__init__.py +0 -0
  60. {hinge-0.1.0 → hinge-0.1.2}/hinge/frontends/web/__init__.py +0 -0
  61. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/__init__.py +0 -0
  62. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/projection/__init__.py +0 -0
  63. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/projection/projected_graph.py +0 -0
  64. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/projection/projection_spec.py +0 -0
  65. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/protocols/__init__.py +0 -0
  66. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/protocols/dataset_view.py +0 -0
  67. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/protocols/exporter_stage.py +0 -0
  68. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/protocols/projection_stage.py +0 -0
  69. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/protocols/reader_stage.py +0 -0
  70. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/protocols/store_stage.py +0 -0
  71. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/registry.py +0 -0
  72. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/runner.py +0 -0
  73. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/schema/__init__.py +0 -0
  74. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/schema/hin_schema.py +0 -0
  75. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/schema/schema_violation.py +0 -0
  76. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/schema/typed_edge.py +0 -0
  77. {hinge-0.1.0 → hinge-0.1.2}/hinge/kernel/schema/typed_node.py +0 -0
  78. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/__init__.py +0 -0
  79. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/__init__.py +0 -0
  80. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/csv_exporter.py +0 -0
  81. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/dot_exporter.py +0 -0
  82. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/gexf_exporter.py +0 -0
  83. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/gml_exporter.py +0 -0
  84. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/graphml_exporter.py +0 -0
  85. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/jsonld_exporter.py +0 -0
  86. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/networkx_exporter.py +0 -0
  87. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/exporters/parquet_exporter.py +0 -0
  88. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/__init__.py +0 -0
  89. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/dbt_projection.py +0 -0
  90. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/__init__.py +0 -0
  91. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/artifact_reference.py +0 -0
  92. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/co_commit_user_user.py +0 -0
  93. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/co_edit_file_user_user.py +0 -0
  94. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/co_edit_line_user_user.py +0 -0
  95. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/dev_interaction.py +0 -0
  96. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/developer_repo_affiliation.py +0 -0
  97. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/follow_user_user.py +0 -0
  98. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/fork_repo_repo.py +0 -0
  99. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/issue_co_participation.py +0 -0
  100. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/issue_participation.py +0 -0
  101. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/pr_author_reviewer.py +0 -0
  102. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/pr_participation.py +0 -0
  103. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/pr_reviewer_coreview.py +0 -0
  104. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/repo_shared_contributors.py +0 -0
  105. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/star_user_repo.py +0 -0
  106. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/user_mention_user.py +0 -0
  107. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/projection/specs/watch_user_repo.py +0 -0
  108. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/readers/__init__.py +0 -0
  109. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/readers/_numfocus_contract_adapter.py +0 -0
  110. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/readers/numfocus_reader.py +0 -0
  111. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/store/__init__.py +0 -0
  112. {hinge-0.1.0 → hinge-0.1.2}/hinge/stages/store/duckdb_store.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: hinge
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Heterogeneous Information Network tool for GitHub research datasets
5
5
  Project-URL: Homepage, https://github.com/marcotonnarelli/hinge
6
6
  Project-URL: Repository, https://github.com/marcotonnarelli/hinge
@@ -42,6 +42,20 @@ Requires-Dist: fastapi>=0.111; extra == 'web'
42
42
  Requires-Dist: uvicorn>=0.30; extra == 'web'
43
43
  Description-Content-Type: text/markdown
44
44
 
45
+ <p align="center">
46
+ <img src="https://raw.githubusercontent.com/marcotonnarelli/hinge/main/docs/assets/logo.svg" alt="HINGE logo" width="200">
47
+ </p>
48
+
49
+ <p align="center">
50
+ <a href="https://pypi.org/project/hinge/"><img alt="PyPI" src="https://img.shields.io/pypi/v/hinge"></a>
51
+ <a href="https://pypi.org/project/hinge/"><img alt="Python versions" src="https://img.shields.io/pypi/pyversions/hinge"></a>
52
+ <a href="https://github.com/marcotonnarelli/hinge/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/pypi/l/hinge"></a>
53
+ <a href="https://github.com/astral-sh/ruff"><img alt="Ruff" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json"></a>
54
+ <a href="https://github.com/astral-sh/uv"><img alt="uv" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json"></a>
55
+ <a href="https://mypy-lang.org/"><img alt="mypy" src="https://img.shields.io/badge/types-mypy-blue"></a>
56
+ <img alt="MSR 2027" src="https://img.shields.io/badge/MSR-2027-blueviolet">
57
+ </p>
58
+
45
59
  # HINGE — Heterogeneous Information Network for Generalized Extraction
46
60
 
47
61
  `hinge` ingests GitHub activity datasets (JSONL today; CSV/Parquet planned), persists
@@ -49,7 +63,25 @@ them as a typed multi-relational graph in DuckDB, and exposes **projections**
49
63
  dbt SQL models that derive task-specific sub-graphs and export them to formats
50
64
  consumed by Gephi, NetworkX, igraph, etc.
51
65
 
52
- This is a research artefact accompanying an ICSME 2026 Tools and Data Showcase submission.
66
+ This is a research artefact accompanying an MSR 2027 Data and Tool Showcase Track submission.
67
+
68
+ ## Installation
69
+
70
+ `hinge` is available on PyPI:
71
+
72
+ ```bash
73
+ pip install hinge
74
+ ```
75
+
76
+ This installs the `hinge` CLI and exposes the package as a Python library:
77
+
78
+ ```python
79
+ import hinge
80
+
81
+ hinge.ingest(...)
82
+ hinge.project(...)
83
+ hinge.export(...)
84
+ ```
53
85
 
54
86
  ---
55
87
 
@@ -159,7 +191,7 @@ emits no edges will therefore produce no nodes either. The workaround is to use
159
191
  visible to the exporter, carry metadata in `properties`, and can be filtered out
160
192
  in downstream tools with `G.remove_edges_from(nx.selfloop_edges(G))`.
161
193
 
162
- See [dev_interaction.sql](hinge/dbt/models/networks/dev_interaction.sql)
194
+ See [dev_interaction.sql](https://github.com/marcotonnarelli/hinge/blob/main/hinge/dbt/models/networks/dev_interaction.sql)
163
195
  for a full working example with a documented input/output contract.
164
196
 
165
197
  ### Step 2 — Create the spec module
@@ -229,7 +261,14 @@ The SQL file is temporarily added to the built-in dbt project, so it can use
229
261
  `hinge/dbt/macros/`. It must still emit the standard `network_edges` schema.
230
262
  Use `--name valid_model_name` if the filename is not a valid dbt identifier.
231
263
 
232
- See [docs/custom-projections.md](docs/custom-projections.md).
264
+ See [custom-projections.md](https://github.com/marcotonnarelli/hinge/blob/main/docs/custom-projections.md).
265
+
266
+ ### Third-party plugins
267
+
268
+ Readers, exporters, projection specs, stores, and projection engines can be
269
+ shipped as separate PyPI packages — `hinge` discovers them through standard
270
+ Python entry-points, with no plugin API to learn beyond the kernel protocols.
271
+ See [plugins.md](https://github.com/marcotonnarelli/hinge/blob/main/docs/plugins.md) for the contract and a worked example.
233
272
 
234
273
  ---
235
274
 
@@ -1,3 +1,17 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/marcotonnarelli/hinge/main/docs/assets/logo.svg" alt="HINGE logo" width="200">
3
+ </p>
4
+
5
+ <p align="center">
6
+ <a href="https://pypi.org/project/hinge/"><img alt="PyPI" src="https://img.shields.io/pypi/v/hinge"></a>
7
+ <a href="https://pypi.org/project/hinge/"><img alt="Python versions" src="https://img.shields.io/pypi/pyversions/hinge"></a>
8
+ <a href="https://github.com/marcotonnarelli/hinge/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/pypi/l/hinge"></a>
9
+ <a href="https://github.com/astral-sh/ruff"><img alt="Ruff" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json"></a>
10
+ <a href="https://github.com/astral-sh/uv"><img alt="uv" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json"></a>
11
+ <a href="https://mypy-lang.org/"><img alt="mypy" src="https://img.shields.io/badge/types-mypy-blue"></a>
12
+ <img alt="MSR 2027" src="https://img.shields.io/badge/MSR-2027-blueviolet">
13
+ </p>
14
+
1
15
  # HINGE — Heterogeneous Information Network for Generalized Extraction
2
16
 
3
17
  `hinge` ingests GitHub activity datasets (JSONL today; CSV/Parquet planned), persists
@@ -5,7 +19,25 @@ them as a typed multi-relational graph in DuckDB, and exposes **projections**
5
19
  dbt SQL models that derive task-specific sub-graphs and export them to formats
6
20
  consumed by Gephi, NetworkX, igraph, etc.
7
21
 
8
- This is a research artefact accompanying an ICSME 2026 Tools and Data Showcase submission.
22
+ This is a research artefact accompanying an MSR 2027 Data and Tool Showcase Track submission.
23
+
24
+ ## Installation
25
+
26
+ `hinge` is available on PyPI:
27
+
28
+ ```bash
29
+ pip install hinge
30
+ ```
31
+
32
+ This installs the `hinge` CLI and exposes the package as a Python library:
33
+
34
+ ```python
35
+ import hinge
36
+
37
+ hinge.ingest(...)
38
+ hinge.project(...)
39
+ hinge.export(...)
40
+ ```
9
41
 
10
42
  ---
11
43
 
@@ -115,7 +147,7 @@ emits no edges will therefore produce no nodes either. The workaround is to use
115
147
  visible to the exporter, carry metadata in `properties`, and can be filtered out
116
148
  in downstream tools with `G.remove_edges_from(nx.selfloop_edges(G))`.
117
149
 
118
- See [dev_interaction.sql](hinge/dbt/models/networks/dev_interaction.sql)
150
+ See [dev_interaction.sql](https://github.com/marcotonnarelli/hinge/blob/main/hinge/dbt/models/networks/dev_interaction.sql)
119
151
  for a full working example with a documented input/output contract.
120
152
 
121
153
  ### Step 2 — Create the spec module
@@ -185,7 +217,14 @@ The SQL file is temporarily added to the built-in dbt project, so it can use
185
217
  `hinge/dbt/macros/`. It must still emit the standard `network_edges` schema.
186
218
  Use `--name valid_model_name` if the filename is not a valid dbt identifier.
187
219
 
188
- See [docs/custom-projections.md](docs/custom-projections.md).
220
+ See [custom-projections.md](https://github.com/marcotonnarelli/hinge/blob/main/docs/custom-projections.md).
221
+
222
+ ### Third-party plugins
223
+
224
+ Readers, exporters, projection specs, stores, and projection engines can be
225
+ shipped as separate PyPI packages — `hinge` discovers them through standard
226
+ Python entry-points, with no plugin API to learn beyond the kernel protocols.
227
+ See [plugins.md](https://github.com/marcotonnarelli/hinge/blob/main/docs/plugins.md) for the contract and a worked example.
189
228
 
190
229
  ---
191
230
 
@@ -6,6 +6,7 @@ Current maintained docs:
6
6
  |---|---|
7
7
  | [architecture.md](architecture.md) | Microkernel + pipeline architecture, dependency rules, and extension points. |
8
8
  | [custom-projections.md](custom-projections.md) | How to write and run local dbt SQL projections. |
9
+ | [plugins.md](plugins.md) | How to publish a third-party plugin (reader, exporter, projection spec, store). |
9
10
  | [architecture.drawio](architecture.drawio) | Current architecture diagram source. |
10
11
 
11
12
  Historical design sketches, backup diagrams, and executable prototype notebook files were removed from `docs/` to keep the public documentation focused on the current `hinge` tool. They remain recoverable from git history.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "hinge"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Heterogeneous Information Network tool for GitHub research datasets"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes