openpls-engine 0.7.0a2__py3-none-any.whl

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.
@@ -0,0 +1,161 @@
1
+ Metadata-Version: 2.4
2
+ Name: openpls-engine
3
+ Version: 0.7.0a2
4
+ Summary: PLS-SEM compute engine, a maintained fork of plspm-python with extended metrics (SRMR, d_ULS, HTMT, Q², MGA) powering OpenPLS.
5
+ Home-page: https://github.com/googlecloudplatform/plspm-python
6
+ Author: Jez Humble
7
+ Author-email: Johannes Jacob <johannespjacob@gmail.com>
8
+ License: GPL-3.0-or-later
9
+ Project-URL: Homepage, https://github.com/jojacobsen/openpls-engine
10
+ Project-URL: Issues, https://github.com/jojacobsen/openpls-engine/issues
11
+ Project-URL: OpenPLS web app, https://openpls.app
12
+ Project-URL: Upstream (plspm-python), https://github.com/googlecloudplatform/plspm-python
13
+ Keywords: pls-sem,structural-equation-modeling,statistics,pls,sem
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
20
+ Classifier: Operating System :: OS Independent
21
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
22
+ Classifier: Intended Audience :: Science/Research
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: pandas>=1.5
27
+ Requires-Dist: numpy>=1.23
28
+ Requires-Dist: scipy>=1.10
29
+ Requires-Dist: statsmodels>=0.14
30
+ Requires-Dist: scikit-learn>=1.2
31
+ Dynamic: author
32
+ Dynamic: home-page
33
+ Dynamic: license-file
34
+
35
+ # OpenPLS Engine
36
+
37
+ [![CI](https://github.com/jojacobsen/openpls-engine/actions/workflows/ci.yml/badge.svg)](https://github.com/jojacobsen/openpls-engine/actions/workflows/ci.yml)
38
+ [![PyPI version](https://img.shields.io/pypi/v/openpls-engine.svg)](https://pypi.org/project/openpls-engine/)
39
+ [![Python versions](https://img.shields.io/pypi/pyversions/openpls-engine.svg)](https://pypi.org/project/openpls-engine/)
40
+ [![License: GPL-3.0-or-later](https://img.shields.io/badge/license-GPLv3+-blue.svg)](LICENSE)
41
+
42
+ The compute engine behind [OpenPLS](https://openpls.app), a Python 3 library
43
+ for Partial Least Squares Structural Equation Modeling (PLS-SEM).
44
+
45
+ `openpls-engine` is a fork of
46
+ [`plspm-python`](https://github.com/googlecloudplatform/plspm-python) by Jez
47
+ Humble (Google). It keeps the original algorithm intact and adds the metrics
48
+ and quality criteria that modern PLS-SEM reporting requires: HTMT, SRMR,
49
+ d_ULS, adjusted R², BIC, Stone-Geisser Q², Cronbach α, Dijkstra-Henseler ρ,
50
+ multi-group analysis, and a progress-streaming long bootstrap.
51
+
52
+ The engine also powers [OpenPLS](https://openpls.app) (the hosted web
53
+ application) and the CLI / Docker self-host distribution planned for the next
54
+ phase of the roadmap.
55
+
56
+ > **Status: pre-release (`0.7.0a1`).** All planned ports from the OpenPLS web
57
+ > app are in. Numerical alignment with reference implementations and PyPI
58
+ > publication are tracked in [TODO.md](TODO.md). See
59
+ > [CHANGELOG.md](CHANGELOG.md) for the version history.
60
+
61
+ ## Why fork
62
+
63
+ * Upstream has not seen a release since 2020.
64
+ * OpenPLS adds substantial extensions: SRMR, d_ULS, HTMT, Q², adjusted R²,
65
+ BIC, multi-group analysis (MGA), permutation tests, mean replacement, and a
66
+ long-running bootstrap with BCa confidence intervals.
67
+ * The OpenPLS hosted product depends on a single source of truth for the
68
+ algorithm; a maintained, versioned package makes that practical.
69
+ * The intention is to release `openpls-engine` on PyPI once the API
70
+ stabilizes (see TODO).
71
+
72
+ ## Installation
73
+
74
+ The package is not on PyPI yet. To use it from source:
75
+
76
+ ```sh
77
+ git clone https://github.com/jojacobsen/openpls-engine.git
78
+ cd openpls-engine
79
+ python3 -m pip install -e .
80
+ ```
81
+
82
+ Once published, installation will be:
83
+
84
+ ```sh
85
+ pip install openpls-engine
86
+ ```
87
+
88
+ ## Development
89
+
90
+ ```sh
91
+ python3 -m venv .venv
92
+ source .venv/bin/activate
93
+ pip install -r requirements-dev.txt
94
+ pip install -e .
95
+
96
+ pytest # run the test suite
97
+ ruff check . # lint
98
+ ```
99
+
100
+ CI runs lint and tests on Python 3.10 through 3.13 against every push and
101
+ pull request against `main`.
102
+
103
+ ## Versioning
104
+
105
+ `openpls-engine` follows [Semantic Versioning](https://semver.org). The
106
+ current pre-1.0 line is `0.x`. Tagged releases (`v0.7.0`, `v1.0.0`, ...)
107
+ trigger a GitHub Actions workflow that builds the package and publishes it
108
+ to PyPI via OIDC trusted publishing. The version is the single source of
109
+ truth in [`pyproject.toml`](pyproject.toml) and is exposed at runtime as
110
+ `plspm.__version__`.
111
+
112
+ See [CHANGELOG.md](CHANGELOG.md) for the per-version history.
113
+
114
+ ## Usage
115
+
116
+ The public API mirrors upstream `plspm` 0.5.7. The
117
+ [upstream documentation](https://plspm.readthedocs.io/) is still authoritative
118
+ for the inherited interface; OpenPLS-specific docs will land alongside the
119
+ metric extensions.
120
+
121
+ ```py
122
+ import pandas as pd
123
+ import plspm.config as c
124
+ from plspm.plspm import Plspm
125
+ from plspm.scheme import Scheme
126
+ from plspm.mode import Mode
127
+
128
+ satisfaction = pd.read_csv("tests/data/satisfaction.csv", index_col=0)
129
+
130
+ structure = c.Structure()
131
+ structure.add_path(["IMAG"], ["EXPE", "SAT", "LOY"])
132
+ structure.add_path(["EXPE"], ["QUAL", "VAL", "SAT"])
133
+ structure.add_path(["QUAL"], ["VAL", "SAT"])
134
+ structure.add_path(["VAL"], ["SAT"])
135
+ structure.add_path(["SAT"], ["LOY"])
136
+
137
+ config = c.Config(structure.path(), scaled=False)
138
+ for lv in ["IMAG", "EXPE", "QUAL", "VAL", "SAT", "LOY"]:
139
+ config.add_lv_with_columns_named(lv, Mode.A, satisfaction, lv.lower())
140
+
141
+ result = Plspm(satisfaction, config, Scheme.CENTROID)
142
+ print(result.inner_summary())
143
+ print(result.path_coefficients())
144
+ ```
145
+
146
+ ## License
147
+
148
+ GNU General Public License v3.0, see [LICENSE](LICENSE). Inherited from
149
+ upstream `plspm-python` (also GPL-3.0).
150
+
151
+ ## Attribution
152
+
153
+ This project is a fork of
154
+ [googlecloudplatform/plspm-python](https://github.com/googlecloudplatform/plspm-python)
155
+ by Jez Humble. The upstream R package
156
+ [plspm](https://github.com/gastonstat/plspm) by Gaston Sanchez and the
157
+ [seminr](https://github.com/sem-in-r/seminr) package by Soumya Ray and
158
+ Nicholas Danks remain the conceptual references for the algorithm. See
159
+ [ATTRIBUTION.md](ATTRIBUTION.md) for details.
160
+
161
+ OpenPLS is an independent project and not affiliated with Google.
@@ -0,0 +1,24 @@
1
+ openpls_engine-0.7.0a2.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
2
+ plspm/__init__.py,sha256=VUhao09juqYGQpSDQ8_UMn1pXgW2X319jKkIMPqZOTU,923
3
+ plspm/bootstrap.py,sha256=NtnCxAXPCGzLmnfr4BbQnQYymadD_4t41LvqmWT5sc8,7127
4
+ plspm/config.py,sha256=tVEJFULNmozRDSzT0U-UjYWG9Q7Zt4hPPwnuEIk8Nu4,16973
5
+ plspm/estimator.py,sha256=U2vFiIT1zEDnYXZfx5Ui2QHRwVoiXMoiUB049x8QeSQ,3098
6
+ plspm/fit.py,sha256=TDSu7D3v7YSCyjWQ1Ubaz87TyGAM8IrlIdx02XQIpIQ,4201
7
+ plspm/htmt.py,sha256=XQ3n4N0FC0lPj3VkTL4WkRVczlL9yx3TM2Mo22NPLE8,4545
8
+ plspm/inner_model.py,sha256=Xz7kzKtNyQg5ABQGL1EY1GSBwAIF-vk7nZMiPJ5_Kig,5136
9
+ plspm/inner_summary.py,sha256=Y6jMWhWKhL-NOBQQ4nOYGnqwcE3uJRZY_mabq2cTr_4,4027
10
+ plspm/long_bootstrap.py,sha256=88Xmeoi8o7xeGENTg06syDjt0SukmHxlAvsumRVN9pE,12876
11
+ plspm/mga.py,sha256=H3IJjx6lVQgfz1Eh_Zxwa9eEx7Z4FansBCQ9qv77mK4,8339
12
+ plspm/mode.py,sha256=xPVpYQRz8CYMgma4GS8YBpOdLmQGR9nezWE-k6nhrfk,3021
13
+ plspm/outer_model.py,sha256=fOv0vIHxAHSxyQJGqeGvnvsWbl7SsJTtt8UTGGrlIOY,2107
14
+ plspm/plspm.py,sha256=Eed5hkLvN59KdR4HT8Q1fGZ2_9b4ugwhnp-n1F6Wypo,11107
15
+ plspm/q_squared.py,sha256=zBhZP6VWCQzUBOh0bgXdkE1yoeIa4npR3Aw1qHHl0Dg,5793
16
+ plspm/scale.py,sha256=gvVZ0e27sLhgPJglDwqzt1_9_iMYeI9GLJ0xLbnZ0Lg,4046
17
+ plspm/scheme.py,sha256=UvmgXyG8NOlHKwaFhTKS-5C6c4yfwRqyVU87jd7JLtk,2174
18
+ plspm/unidimensionality.py,sha256=Ssn3wrce7RjykDy7Eg3S7f_hH1eHkzsz1l_4Jl4Ti9Y,4033
19
+ plspm/util.py,sha256=zWsFznTCOZjqEiDovzs7FAdSQdICLd0yCjqERTvipxE,5359
20
+ plspm/weights.py,sha256=L0IjntNhRQuzgHPhKN7Wamc0o6xA1t4TZ6lBTvolwaQ,9392
21
+ openpls_engine-0.7.0a2.dist-info/METADATA,sha256=cZHnGLNwu7f8HZmO0EjCdJQoOerpZScdUd0YnrEy3cI,6132
22
+ openpls_engine-0.7.0a2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
23
+ openpls_engine-0.7.0a2.dist-info/top_level.txt,sha256=guUiqVpR9brhIEhtL9j9GCHzK6wFwN7OIn2m5QGXl_0,6
24
+ openpls_engine-0.7.0a2.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+