TimeFeatures 2.1.0__tar.gz → 2.1.1__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.
- {timefeatures-2.1.0/TimeFeatures.egg-info → timefeatures-2.1.1}/PKG-INFO +38 -24
- timefeatures-2.1.1/README.md +101 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1/TimeFeatures.egg-info}/PKG-INFO +38 -24
- {timefeatures-2.1.0 → timefeatures-2.1.1}/TimeFeatures.egg-info/SOURCES.txt +10 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/changes.rst +2 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/conf.py +6 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/index.rst +9 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/widgets/load-from-db.rst +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/widgets/save-to-db.rst +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/widgets/time-feature-constructor.rst +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/widgets/variable-dependency-graph.rst +5 -0
- timefeatures-2.1.1/imgs/installation.png +0 -0
- timefeatures-2.1.1/imgs/widgets/owloadfromdb.png +0 -0
- timefeatures-2.1.1/imgs/widgets/owsavetodb.png +0 -0
- timefeatures-2.1.1/imgs/widgets/owtimefeaturesconstructor.png +0 -0
- timefeatures-2.1.1/imgs/widgets/owvariabledependencygraph.png +0 -0
- timefeatures-2.1.1/imgs/workflow.png +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/setup.py +12 -2
- timefeatures-2.1.1/timefeatures/__init__.py +5 -0
- timefeatures-2.1.1/timefeatures/__version__.py +3 -0
- timefeatures-2.1.1/timefeatures/help_html/.buildinfo +4 -0
- timefeatures-2.1.1/timefeatures/help_html/_images/owloadfromdb.png +0 -0
- timefeatures-2.1.1/timefeatures/help_html/_images/owsavetodb.png +0 -0
- timefeatures-2.1.1/timefeatures/help_html/_images/owtimefeaturesconstructor.png +0 -0
- timefeatures-2.1.1/timefeatures/help_html/_images/owvariabledependencygraph.png +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/changes.rst.txt +2 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/index.rst.txt +9 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/widgets/load-from-db.rst.txt +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/widgets/save-to-db.rst.txt +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/widgets/time-feature-constructor.rst.txt +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/widgets/variable-dependency-graph.rst.txt +5 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/documentation_options.js +1 -1
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/changes.html +4 -4
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/genindex.html +2 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/index.html +8 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/installation.html +2 -2
- timefeatures-2.1.1/timefeatures/help_html/objects.inv +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/search.html +2 -2
- timefeatures-2.1.1/timefeatures/help_html/searchindex.js +1 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/widgets/load-from-db.html +8 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/widgets/save-to-db.html +8 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/widgets/time-feature-constructor.html +8 -2
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/widgets/variable-dependency-graph.html +8 -2
- timefeatures-2.1.0/README.md +0 -87
- timefeatures-2.1.0/imgs/installation.png +0 -0
- timefeatures-2.1.0/imgs/workflow.png +0 -0
- timefeatures-2.1.0/timefeatures/__init__.py +0 -0
- timefeatures-2.1.0/timefeatures/help_html/objects.inv +0 -0
- timefeatures-2.1.0/timefeatures/help_html/searchindex.js +0 -1
- {timefeatures-2.1.0 → timefeatures-2.1.1}/LICENSE +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/MANIFEST.in +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/TimeFeatures.egg-info/dependency_links.txt +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/TimeFeatures.egg-info/entry_points.txt +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/TimeFeatures.egg-info/requires.txt +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/TimeFeatures.egg-info/top_level.txt +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/Makefile +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/installation.rst +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/docs/requirements.txt +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/setup.cfg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help.py +0 -0
- /timefeatures-2.1.0/timefeatures/help_html/.buildinfo → /timefeatures-2.1.1/timefeatures/help_html/.buildinfo.bak +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/installation.rst.txt +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/alabaster.css +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/basic.css +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/custom.css +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/doctools.js +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/file.png +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/github-banner.svg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/language_data.js +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/minus.png +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/plus.png +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/pygments.css +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/searchtools.js +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_static/sphinx_highlight.js +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/__init__.py +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/icons/graphgenerator.svg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/icons/loaddatadb.svg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/icons/savedatadb.svg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/icons/timefeature-xs.svg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/icons/timefeature.svg +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/owloadfromdb.py +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/owsavetodb.py +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/owtimefeaturesconstructor.py +0 -0
- {timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/widgets/owvardependencygraph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: TimeFeatures
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Timefeatures add-on for Orange 3 data mining software.
|
|
5
5
|
Home-page: https://github.com/alervgr/Orange-TimeFeatures
|
|
6
6
|
Author: Alejandro Rivas García
|
|
@@ -42,15 +42,37 @@ Dynamic: provides-extra
|
|
|
42
42
|
Dynamic: requires-dist
|
|
43
43
|
Dynamic: summary
|
|
44
44
|
|
|
45
|
-
Orange3 TimeFeatures
|
|
46
|
-
===============
|
|
45
|
+
# Orange3 TimeFeatures
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
[](https://pypi.org/project/TimeFeatures/)
|
|
48
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
49
|
+
[](https://www.python.org/downloads/)
|
|
50
|
+
[](https://orangedatamining.com/)
|
|
51
|
+
|
|
52
|
+
TimeFeatures is an add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables, and includes widgets to save and load data and configuration tables from a database.
|
|
49
53
|
|
|
50
54
|
[Orange]: https://orangedatamining.com/
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
## Features
|
|
57
|
+
|
|
58
|
+
- 🕐 **7 time-window functions** — `shift`, `sum`, `mean`, `min`, `max`, `count`, `sd` with full chunk-boundary correctness
|
|
59
|
+
- 🔗 **Chained descriptors** — derived variables can reference each other; topological sort resolves the evaluation order automatically
|
|
60
|
+
- 🛡️ **Secure evaluation** — expressions run in a restricted `eval` sandbox (`__builtins__` replaced, curated whitelist only)
|
|
61
|
+
- 🗄️ **PostgreSQL & MySQL** — persist and reload datasets via SQLAlchemy with dialect-agnostic SQL generation
|
|
62
|
+
- 📊 **Directed weighted dependency graphs** — edge weights reflect temporal window size; visualise in Network Explorer
|
|
63
|
+
- ⚡ **Bulk upload performance** — pandas `DataFrame.to_sql` with chunked multi-row INSERTs
|
|
64
|
+
- 💾 **Workflow persistence** — variable definitions survive save/reload without clicking Send first
|
|
65
|
+
|
|
66
|
+
## Widgets
|
|
67
|
+
|
|
68
|
+
| Widget | Description |
|
|
69
|
+
|---|---|
|
|
70
|
+
| **Time Features Constructor** | Defines new variables from existing ones using Python-style expressions and time-window functions. Supports chained descriptors with automatic topological sorting. |
|
|
71
|
+
| **Variable Dependency Graph** | Builds a directed, weighted dependency graph from the variable definitions. Edge weights summarise how far back or forward in time each variable looks. |
|
|
72
|
+
| **Save to DB** | Persists the resulting dataset to a SQL database (PostgreSQL or MySQL), with full SQL-injection defences, three write modes (create / overwrite / append) and an optional completion email. |
|
|
73
|
+
| **Load from DB** | Lists datasets previously stored by Save to DB and pulls the chosen one back into Orange, optionally marking the class column directly so no Select Columns widget is needed. |
|
|
74
|
+
|
|
75
|
+
## Installation
|
|
54
76
|
|
|
55
77
|
### Orange add-on installer
|
|
56
78
|
|
|
@@ -64,21 +86,10 @@ To install the add-on with pip use
|
|
|
64
86
|
|
|
65
87
|
pip install TimeFeatures
|
|
66
88
|
|
|
67
|
-
To install the add-on from source, run
|
|
68
|
-
|
|
69
|
-
python setup.py install
|
|
70
|
-
|
|
71
|
-
To register this add-on with Orange, but keep the code in the development directory (do not copy it to
|
|
72
|
-
Python's site-packages directory), run
|
|
73
|
-
|
|
74
|
-
python setup.py develop
|
|
75
|
-
|
|
76
|
-
You can also run
|
|
89
|
+
To install the add-on from source in editable mode, run
|
|
77
90
|
|
|
78
91
|
pip install -e .
|
|
79
92
|
|
|
80
|
-
which is sometimes preferable as you can *pip uninstall* packages later.
|
|
81
|
-
|
|
82
93
|
### Anaconda
|
|
83
94
|
|
|
84
95
|
If using Anaconda Python distribution, simply run
|
|
@@ -97,8 +108,7 @@ If using Anaconda Python distribution, simply run
|
|
|
97
108
|
* PyMySQL>=1.0.0
|
|
98
109
|
* Orange3-Network>=1.8.0
|
|
99
110
|
|
|
100
|
-
Usage
|
|
101
|
-
-----
|
|
111
|
+
## Usage
|
|
102
112
|
|
|
103
113
|
After the installation, the widgets from this add-on are registered with Orange. To run Orange from the terminal,
|
|
104
114
|
use
|
|
@@ -111,21 +121,25 @@ or
|
|
|
111
121
|
|
|
112
122
|
New widgets are in the toolbox bar under Time-Features section.
|
|
113
123
|
|
|
114
|
-
Documentation
|
|
115
|
-
-------------
|
|
124
|
+
## Documentation
|
|
116
125
|
|
|
117
126
|
The add-on includes Sphinx documentation for each widget. Orange resolves the
|
|
118
127
|
local HTML pages through its internal Help panel, not through an internet URL.
|
|
119
128
|
To rebuild the documentation locally, run
|
|
120
129
|
|
|
121
130
|
pip install -e ".[docs]"
|
|
131
|
+
python -m sphinx -b html docs docs/build/html
|
|
132
|
+
|
|
133
|
+
The bundled in-app help is pre-built under `timefeatures/help_html/`. To
|
|
134
|
+
regenerate it (e.g. after editing the `.rst` files), run
|
|
135
|
+
|
|
122
136
|
python -m sphinx -b html docs timefeatures/help_html
|
|
123
137
|
|
|
124
138
|
Use the widget help action in Orange to open the corresponding page inside the
|
|
125
139
|
Orange Help window.
|
|
126
140
|
|
|
127
|
-
Workflow Example
|
|
128
|
-
|
|
141
|
+
## Workflow Example
|
|
142
|
+
|
|
129
143
|
This is an example of how you can use this add-on.
|
|
130
144
|
|
|
131
145
|

|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Orange3 TimeFeatures
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/TimeFeatures/)
|
|
4
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](https://orangedatamining.com/)
|
|
7
|
+
|
|
8
|
+
TimeFeatures is an add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables, and includes widgets to save and load data and configuration tables from a database.
|
|
9
|
+
|
|
10
|
+
[Orange]: https://orangedatamining.com/
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- 🕐 **7 time-window functions** — `shift`, `sum`, `mean`, `min`, `max`, `count`, `sd` with full chunk-boundary correctness
|
|
15
|
+
- 🔗 **Chained descriptors** — derived variables can reference each other; topological sort resolves the evaluation order automatically
|
|
16
|
+
- 🛡️ **Secure evaluation** — expressions run in a restricted `eval` sandbox (`__builtins__` replaced, curated whitelist only)
|
|
17
|
+
- 🗄️ **PostgreSQL & MySQL** — persist and reload datasets via SQLAlchemy with dialect-agnostic SQL generation
|
|
18
|
+
- 📊 **Directed weighted dependency graphs** — edge weights reflect temporal window size; visualise in Network Explorer
|
|
19
|
+
- ⚡ **Bulk upload performance** — pandas `DataFrame.to_sql` with chunked multi-row INSERTs
|
|
20
|
+
- 💾 **Workflow persistence** — variable definitions survive save/reload without clicking Send first
|
|
21
|
+
|
|
22
|
+
## Widgets
|
|
23
|
+
|
|
24
|
+
| Widget | Description |
|
|
25
|
+
|---|---|
|
|
26
|
+
| **Time Features Constructor** | Defines new variables from existing ones using Python-style expressions and time-window functions. Supports chained descriptors with automatic topological sorting. |
|
|
27
|
+
| **Variable Dependency Graph** | Builds a directed, weighted dependency graph from the variable definitions. Edge weights summarise how far back or forward in time each variable looks. |
|
|
28
|
+
| **Save to DB** | Persists the resulting dataset to a SQL database (PostgreSQL or MySQL), with full SQL-injection defences, three write modes (create / overwrite / append) and an optional completion email. |
|
|
29
|
+
| **Load from DB** | Lists datasets previously stored by Save to DB and pulls the chosen one back into Orange, optionally marking the class column directly so no Select Columns widget is needed. |
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
### Orange add-on installer
|
|
34
|
+
|
|
35
|
+
Install from Orange add-on installer through Options -> Add-ons.
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
### Using pip
|
|
40
|
+
|
|
41
|
+
To install the add-on with pip use
|
|
42
|
+
|
|
43
|
+
pip install TimeFeatures
|
|
44
|
+
|
|
45
|
+
To install the add-on from source in editable mode, run
|
|
46
|
+
|
|
47
|
+
pip install -e .
|
|
48
|
+
|
|
49
|
+
### Anaconda
|
|
50
|
+
|
|
51
|
+
If using Anaconda Python distribution, simply run
|
|
52
|
+
|
|
53
|
+
pip install TimeFeatures
|
|
54
|
+
|
|
55
|
+
**Required Dependencies**:
|
|
56
|
+
|
|
57
|
+
* numpy>=1.22.4
|
|
58
|
+
* AnyQt>=0.2.0
|
|
59
|
+
* PyQt5>=5.15.6
|
|
60
|
+
* PyQtWebEngine>=5.15.6
|
|
61
|
+
* scipy>=1.7.3
|
|
62
|
+
* SQLAlchemy>=1.4.0
|
|
63
|
+
* psycopg2-binary>=2.9.9
|
|
64
|
+
* PyMySQL>=1.0.0
|
|
65
|
+
* Orange3-Network>=1.8.0
|
|
66
|
+
|
|
67
|
+
## Usage
|
|
68
|
+
|
|
69
|
+
After the installation, the widgets from this add-on are registered with Orange. To run Orange from the terminal,
|
|
70
|
+
use
|
|
71
|
+
|
|
72
|
+
orange-canvas
|
|
73
|
+
|
|
74
|
+
or
|
|
75
|
+
|
|
76
|
+
python3 -m Orange.canvas
|
|
77
|
+
|
|
78
|
+
New widgets are in the toolbox bar under Time-Features section.
|
|
79
|
+
|
|
80
|
+
## Documentation
|
|
81
|
+
|
|
82
|
+
The add-on includes Sphinx documentation for each widget. Orange resolves the
|
|
83
|
+
local HTML pages through its internal Help panel, not through an internet URL.
|
|
84
|
+
To rebuild the documentation locally, run
|
|
85
|
+
|
|
86
|
+
pip install -e ".[docs]"
|
|
87
|
+
python -m sphinx -b html docs docs/build/html
|
|
88
|
+
|
|
89
|
+
The bundled in-app help is pre-built under `timefeatures/help_html/`. To
|
|
90
|
+
regenerate it (e.g. after editing the `.rst` files), run
|
|
91
|
+
|
|
92
|
+
python -m sphinx -b html docs timefeatures/help_html
|
|
93
|
+
|
|
94
|
+
Use the widget help action in Orange to open the corresponding page inside the
|
|
95
|
+
Orange Help window.
|
|
96
|
+
|
|
97
|
+
## Workflow Example
|
|
98
|
+
|
|
99
|
+
This is an example of how you can use this add-on.
|
|
100
|
+
|
|
101
|
+

|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: TimeFeatures
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Timefeatures add-on for Orange 3 data mining software.
|
|
5
5
|
Home-page: https://github.com/alervgr/Orange-TimeFeatures
|
|
6
6
|
Author: Alejandro Rivas García
|
|
@@ -42,15 +42,37 @@ Dynamic: provides-extra
|
|
|
42
42
|
Dynamic: requires-dist
|
|
43
43
|
Dynamic: summary
|
|
44
44
|
|
|
45
|
-
Orange3 TimeFeatures
|
|
46
|
-
===============
|
|
45
|
+
# Orange3 TimeFeatures
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
[](https://pypi.org/project/TimeFeatures/)
|
|
48
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
49
|
+
[](https://www.python.org/downloads/)
|
|
50
|
+
[](https://orangedatamining.com/)
|
|
51
|
+
|
|
52
|
+
TimeFeatures is an add-on for [Orange] 3 data mining software for generating synthetic data using datasets with time series, generating graphs of relationships between the generated variables, and includes widgets to save and load data and configuration tables from a database.
|
|
49
53
|
|
|
50
54
|
[Orange]: https://orangedatamining.com/
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
## Features
|
|
57
|
+
|
|
58
|
+
- 🕐 **7 time-window functions** — `shift`, `sum`, `mean`, `min`, `max`, `count`, `sd` with full chunk-boundary correctness
|
|
59
|
+
- 🔗 **Chained descriptors** — derived variables can reference each other; topological sort resolves the evaluation order automatically
|
|
60
|
+
- 🛡️ **Secure evaluation** — expressions run in a restricted `eval` sandbox (`__builtins__` replaced, curated whitelist only)
|
|
61
|
+
- 🗄️ **PostgreSQL & MySQL** — persist and reload datasets via SQLAlchemy with dialect-agnostic SQL generation
|
|
62
|
+
- 📊 **Directed weighted dependency graphs** — edge weights reflect temporal window size; visualise in Network Explorer
|
|
63
|
+
- ⚡ **Bulk upload performance** — pandas `DataFrame.to_sql` with chunked multi-row INSERTs
|
|
64
|
+
- 💾 **Workflow persistence** — variable definitions survive save/reload without clicking Send first
|
|
65
|
+
|
|
66
|
+
## Widgets
|
|
67
|
+
|
|
68
|
+
| Widget | Description |
|
|
69
|
+
|---|---|
|
|
70
|
+
| **Time Features Constructor** | Defines new variables from existing ones using Python-style expressions and time-window functions. Supports chained descriptors with automatic topological sorting. |
|
|
71
|
+
| **Variable Dependency Graph** | Builds a directed, weighted dependency graph from the variable definitions. Edge weights summarise how far back or forward in time each variable looks. |
|
|
72
|
+
| **Save to DB** | Persists the resulting dataset to a SQL database (PostgreSQL or MySQL), with full SQL-injection defences, three write modes (create / overwrite / append) and an optional completion email. |
|
|
73
|
+
| **Load from DB** | Lists datasets previously stored by Save to DB and pulls the chosen one back into Orange, optionally marking the class column directly so no Select Columns widget is needed. |
|
|
74
|
+
|
|
75
|
+
## Installation
|
|
54
76
|
|
|
55
77
|
### Orange add-on installer
|
|
56
78
|
|
|
@@ -64,21 +86,10 @@ To install the add-on with pip use
|
|
|
64
86
|
|
|
65
87
|
pip install TimeFeatures
|
|
66
88
|
|
|
67
|
-
To install the add-on from source, run
|
|
68
|
-
|
|
69
|
-
python setup.py install
|
|
70
|
-
|
|
71
|
-
To register this add-on with Orange, but keep the code in the development directory (do not copy it to
|
|
72
|
-
Python's site-packages directory), run
|
|
73
|
-
|
|
74
|
-
python setup.py develop
|
|
75
|
-
|
|
76
|
-
You can also run
|
|
89
|
+
To install the add-on from source in editable mode, run
|
|
77
90
|
|
|
78
91
|
pip install -e .
|
|
79
92
|
|
|
80
|
-
which is sometimes preferable as you can *pip uninstall* packages later.
|
|
81
|
-
|
|
82
93
|
### Anaconda
|
|
83
94
|
|
|
84
95
|
If using Anaconda Python distribution, simply run
|
|
@@ -97,8 +108,7 @@ If using Anaconda Python distribution, simply run
|
|
|
97
108
|
* PyMySQL>=1.0.0
|
|
98
109
|
* Orange3-Network>=1.8.0
|
|
99
110
|
|
|
100
|
-
Usage
|
|
101
|
-
-----
|
|
111
|
+
## Usage
|
|
102
112
|
|
|
103
113
|
After the installation, the widgets from this add-on are registered with Orange. To run Orange from the terminal,
|
|
104
114
|
use
|
|
@@ -111,21 +121,25 @@ or
|
|
|
111
121
|
|
|
112
122
|
New widgets are in the toolbox bar under Time-Features section.
|
|
113
123
|
|
|
114
|
-
Documentation
|
|
115
|
-
-------------
|
|
124
|
+
## Documentation
|
|
116
125
|
|
|
117
126
|
The add-on includes Sphinx documentation for each widget. Orange resolves the
|
|
118
127
|
local HTML pages through its internal Help panel, not through an internet URL.
|
|
119
128
|
To rebuild the documentation locally, run
|
|
120
129
|
|
|
121
130
|
pip install -e ".[docs]"
|
|
131
|
+
python -m sphinx -b html docs docs/build/html
|
|
132
|
+
|
|
133
|
+
The bundled in-app help is pre-built under `timefeatures/help_html/`. To
|
|
134
|
+
regenerate it (e.g. after editing the `.rst` files), run
|
|
135
|
+
|
|
122
136
|
python -m sphinx -b html docs timefeatures/help_html
|
|
123
137
|
|
|
124
138
|
Use the widget help action in Orange to open the corresponding page inside the
|
|
125
139
|
Orange Help window.
|
|
126
140
|
|
|
127
|
-
Workflow Example
|
|
128
|
-
|
|
141
|
+
## Workflow Example
|
|
142
|
+
|
|
129
143
|
This is an example of how you can use this add-on.
|
|
130
144
|
|
|
131
145
|

|
|
@@ -21,9 +21,15 @@ docs/widgets/time-feature-constructor.rst
|
|
|
21
21
|
docs/widgets/variable-dependency-graph.rst
|
|
22
22
|
imgs/installation.png
|
|
23
23
|
imgs/workflow.png
|
|
24
|
+
imgs/widgets/owloadfromdb.png
|
|
25
|
+
imgs/widgets/owsavetodb.png
|
|
26
|
+
imgs/widgets/owtimefeaturesconstructor.png
|
|
27
|
+
imgs/widgets/owvariabledependencygraph.png
|
|
24
28
|
timefeatures/__init__.py
|
|
29
|
+
timefeatures/__version__.py
|
|
25
30
|
timefeatures/help.py
|
|
26
31
|
timefeatures/help_html/.buildinfo
|
|
32
|
+
timefeatures/help_html/.buildinfo.bak
|
|
27
33
|
timefeatures/help_html/changes.html
|
|
28
34
|
timefeatures/help_html/genindex.html
|
|
29
35
|
timefeatures/help_html/index.html
|
|
@@ -31,6 +37,10 @@ timefeatures/help_html/installation.html
|
|
|
31
37
|
timefeatures/help_html/objects.inv
|
|
32
38
|
timefeatures/help_html/search.html
|
|
33
39
|
timefeatures/help_html/searchindex.js
|
|
40
|
+
timefeatures/help_html/_images/owloadfromdb.png
|
|
41
|
+
timefeatures/help_html/_images/owsavetodb.png
|
|
42
|
+
timefeatures/help_html/_images/owtimefeaturesconstructor.png
|
|
43
|
+
timefeatures/help_html/_images/owvariabledependencygraph.png
|
|
34
44
|
timefeatures/help_html/_sources/changes.rst.txt
|
|
35
45
|
timefeatures/help_html/_sources/index.rst.txt
|
|
36
46
|
timefeatures/help_html/_sources/installation.rst.txt
|
|
@@ -10,7 +10,11 @@ sys.path.insert(0, str(ROOT))
|
|
|
10
10
|
project = "TimeFeatures"
|
|
11
11
|
author = "Alejandro Rivas Garcia"
|
|
12
12
|
copyright = "2026, Alejandro Rivas Garcia"
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
# Read version from the single source of truth.
|
|
15
|
+
_version_globals = {}
|
|
16
|
+
exec((ROOT / "timefeatures" / "__version__.py").read_text(encoding="utf-8"), _version_globals)
|
|
17
|
+
release = _version_globals["__version__"]
|
|
14
18
|
version = ".".join(release.split(".")[:2])
|
|
15
19
|
|
|
16
20
|
# -- General configuration ------------------------------------------------
|
|
@@ -47,7 +51,7 @@ html_theme_options = {
|
|
|
47
51
|
"description": (
|
|
48
52
|
"Time-series feature engineering for Orange3: build derived "
|
|
49
53
|
"variables, visualise their dependencies, and persist data to "
|
|
50
|
-
"PostgreSQL."
|
|
54
|
+
"PostgreSQL or MySQL."
|
|
51
55
|
),
|
|
52
56
|
"github_user": "alervgr",
|
|
53
57
|
"github_repo": "Orange-TimeFeatures",
|
|
@@ -81,11 +81,20 @@ Project
|
|
|
81
81
|
Building this documentation
|
|
82
82
|
---------------------------
|
|
83
83
|
|
|
84
|
+
**Development build** (for previewing locally):
|
|
85
|
+
|
|
84
86
|
.. code-block:: bash
|
|
85
87
|
|
|
86
88
|
pip install -e ".[docs]"
|
|
87
89
|
python -m sphinx -b html docs docs/build/html
|
|
88
90
|
|
|
91
|
+
**In-app help** (bundled with the wheel so Orange's Help panel works
|
|
92
|
+
offline):
|
|
93
|
+
|
|
94
|
+
.. code-block:: bash
|
|
95
|
+
|
|
96
|
+
python -m sphinx -b html docs timefeatures/help_html
|
|
97
|
+
|
|
89
98
|
The HTML build is also bundled with the wheel so Orange's in-app help
|
|
90
99
|
panel can resolve every widget's *Help* action without internet
|
|
91
100
|
access.
|
|
@@ -7,6 +7,11 @@ connects to a SQL database, lists the datasets previously persisted by
|
|
|
7
7
|
``Table`` — optionally marking the class column on the fly so no
|
|
8
8
|
**Select Columns** widget is needed downstream.
|
|
9
9
|
|
|
10
|
+
.. figure:: ../../imgs/widgets/owloadfromdb.png
|
|
11
|
+
:alt: Load from DB widget interface.
|
|
12
|
+
|
|
13
|
+
The Load from DB widget.
|
|
14
|
+
|
|
10
15
|
Inputs
|
|
11
16
|
------
|
|
12
17
|
|
|
@@ -7,6 +7,11 @@ database. Two dialects are supported out of the box:
|
|
|
7
7
|
- **PostgreSQL** — through ``psycopg2``.
|
|
8
8
|
- **MySQL** — through ``pymysql``.
|
|
9
9
|
|
|
10
|
+
.. figure:: ../../imgs/widgets/owsavetodb.png
|
|
11
|
+
:alt: Save to DB widget interface.
|
|
12
|
+
|
|
13
|
+
The Save to DB widget.
|
|
14
|
+
|
|
10
15
|
Both drivers are reached via **SQLAlchemy**, which keeps the SQL
|
|
11
16
|
generation, identifier quoting and type rendering dialect-agnostic. The
|
|
12
17
|
actual upload uses a `pandas <https://pandas.pydata.org/>`_ DataFrame
|
|
@@ -6,6 +6,11 @@ categorical or text variables from existing ones via Python-style
|
|
|
6
6
|
expressions and a family of time-window functions. It is the central
|
|
7
7
|
widget for time-series feature engineering inside |addon|.
|
|
8
8
|
|
|
9
|
+
.. figure:: ../../imgs/widgets/owtimefeaturesconstructor.png
|
|
10
|
+
:alt: Time Features Constructor widget interface.
|
|
11
|
+
|
|
12
|
+
The Time Features Constructor widget.
|
|
13
|
+
|
|
9
14
|
Inputs
|
|
10
15
|
------
|
|
11
16
|
|
|
@@ -7,6 +7,11 @@ their expressions. Edge weights reflect the time-window size used by the
|
|
|
7
7
|
expression, making it easy to spot which derived features have the
|
|
8
8
|
widest temporal footprint.
|
|
9
9
|
|
|
10
|
+
.. figure:: ../../imgs/widgets/owvariabledependencygraph.png
|
|
11
|
+
:alt: Variable Dependency Graph widget interface.
|
|
12
|
+
|
|
13
|
+
The Variable Dependency Graph widget.
|
|
14
|
+
|
|
10
15
|
Inputs
|
|
11
16
|
------
|
|
12
17
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
from setuptools import setup
|
|
2
|
+
from pathlib import Path
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
HERE = Path(__file__).resolve().parent
|
|
5
|
+
|
|
6
|
+
with open(HERE / 'README.md', 'r', encoding='utf-8') as f:
|
|
4
7
|
ABOUT = f.read()
|
|
5
8
|
|
|
9
|
+
# Read version from the canonical location without importing the package
|
|
10
|
+
# (which would trigger Qt/Orange imports during install).
|
|
11
|
+
_version_globals = {}
|
|
12
|
+
exec((HERE / "timefeatures" / "__version__.py").read_text(encoding="utf-8"), _version_globals)
|
|
13
|
+
VERSION = _version_globals["__version__"]
|
|
14
|
+
|
|
15
|
+
|
|
6
16
|
CLASSIFIERS = [
|
|
7
17
|
'Development Status :: 4 - Beta',
|
|
8
18
|
'Environment :: Plugins',
|
|
@@ -41,7 +51,7 @@ setup(name="TimeFeatures",
|
|
|
41
51
|
"Sphinx>=7.0",
|
|
42
52
|
],
|
|
43
53
|
},
|
|
44
|
-
version=
|
|
54
|
+
version=VERSION,
|
|
45
55
|
author="Alejandro Rivas García",
|
|
46
56
|
author_email="alejandrorivasgarcia@gmail.com",
|
|
47
57
|
keywords=[
|
|
Binary file
|
|
Binary file
|
|
@@ -81,11 +81,20 @@ Project
|
|
|
81
81
|
Building this documentation
|
|
82
82
|
---------------------------
|
|
83
83
|
|
|
84
|
+
**Development build** (for previewing locally):
|
|
85
|
+
|
|
84
86
|
.. code-block:: bash
|
|
85
87
|
|
|
86
88
|
pip install -e ".[docs]"
|
|
87
89
|
python -m sphinx -b html docs docs/build/html
|
|
88
90
|
|
|
91
|
+
**In-app help** (bundled with the wheel so Orange's Help panel works
|
|
92
|
+
offline):
|
|
93
|
+
|
|
94
|
+
.. code-block:: bash
|
|
95
|
+
|
|
96
|
+
python -m sphinx -b html docs timefeatures/help_html
|
|
97
|
+
|
|
89
98
|
The HTML build is also bundled with the wheel so Orange's in-app help
|
|
90
99
|
panel can resolve every widget's *Help* action without internet
|
|
91
100
|
access.
|
|
@@ -7,6 +7,11 @@ connects to a SQL database, lists the datasets previously persisted by
|
|
|
7
7
|
``Table`` — optionally marking the class column on the fly so no
|
|
8
8
|
**Select Columns** widget is needed downstream.
|
|
9
9
|
|
|
10
|
+
.. figure:: ../../imgs/widgets/owloadfromdb.png
|
|
11
|
+
:alt: Load from DB widget interface.
|
|
12
|
+
|
|
13
|
+
The Load from DB widget.
|
|
14
|
+
|
|
10
15
|
Inputs
|
|
11
16
|
------
|
|
12
17
|
|
{timefeatures-2.1.0 → timefeatures-2.1.1}/timefeatures/help_html/_sources/widgets/save-to-db.rst.txt
RENAMED
|
@@ -7,6 +7,11 @@ database. Two dialects are supported out of the box:
|
|
|
7
7
|
- **PostgreSQL** — through ``psycopg2``.
|
|
8
8
|
- **MySQL** — through ``pymysql``.
|
|
9
9
|
|
|
10
|
+
.. figure:: ../../imgs/widgets/owsavetodb.png
|
|
11
|
+
:alt: Save to DB widget interface.
|
|
12
|
+
|
|
13
|
+
The Save to DB widget.
|
|
14
|
+
|
|
10
15
|
Both drivers are reached via **SQLAlchemy**, which keeps the SQL
|
|
11
16
|
generation, identifier quoting and type rendering dialect-agnostic. The
|
|
12
17
|
actual upload uses a `pandas <https://pandas.pydata.org/>`_ DataFrame
|
|
@@ -6,6 +6,11 @@ categorical or text variables from existing ones via Python-style
|
|
|
6
6
|
expressions and a family of time-window functions. It is the central
|
|
7
7
|
widget for time-series feature engineering inside |addon|.
|
|
8
8
|
|
|
9
|
+
.. figure:: ../../imgs/widgets/owtimefeaturesconstructor.png
|
|
10
|
+
:alt: Time Features Constructor widget interface.
|
|
11
|
+
|
|
12
|
+
The Time Features Constructor widget.
|
|
13
|
+
|
|
9
14
|
Inputs
|
|
10
15
|
------
|
|
11
16
|
|
|
@@ -7,6 +7,11 @@ their expressions. Edge weights reflect the time-window size used by the
|
|
|
7
7
|
expression, making it easy to spot which derived features have the
|
|
8
8
|
widest temporal footprint.
|
|
9
9
|
|
|
10
|
+
.. figure:: ../../imgs/widgets/owvariabledependencygraph.png
|
|
11
|
+
:alt: Variable Dependency Graph widget interface.
|
|
12
|
+
|
|
13
|
+
The Variable Dependency Graph widget.
|
|
14
|
+
|
|
10
15
|
Inputs
|
|
11
16
|
------
|
|
12
17
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=686e5160" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=f6a572b4" />
|
|
12
|
-
<script src="_static/documentation_options.js?v=
|
|
12
|
+
<script src="_static/documentation_options.js?v=20623aea"></script>
|
|
13
13
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
|
14
14
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
15
15
|
<link rel="index" title="Index" href="genindex.html" />
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
<p class="blurb">Time-series feature engineering for Orange3: build derived variables, visualise their dependencies, and persist data to PostgreSQL.</p>
|
|
34
|
+
<p class="blurb">Time-series feature engineering for Orange3: build derived variables, visualise their dependencies, and persist data to PostgreSQL or MySQL.</p>
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|
|
@@ -94,8 +94,8 @@
|
|
|
94
94
|
|
|
95
95
|
<section id="changelog">
|
|
96
96
|
<h1>Changelog<a class="headerlink" href="#changelog" title="Link to this heading">¶</a></h1>
|
|
97
|
-
<section id="
|
|
98
|
-
<h2>
|
|
97
|
+
<section id="id1">
|
|
98
|
+
<h2>2.1.1 — 2026-06-09<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h2>
|
|
99
99
|
<p><strong>Load from DB (new widget)</strong></p>
|
|
100
100
|
<ul class="simple">
|
|
101
101
|
<li><p>Lists every dataset registered in the <code class="docutils literal notranslate"><span class="pre">datasets</span></code> metadata table
|