1{ lib
2, baycomp
3, bottleneck
4, buildPythonPackage
5, chardet
6, copyDesktopItems
7, cython
8, fetchFromGitHub
9, fetchurl
10, httpx
11, joblib
12, keyring
13, keyrings-alt
14, makeDesktopItem
15, matplotlib
16, nix-update-script
17, numpy
18, oldest-supported-numpy
19, openpyxl
20, opentsne
21, orange-canvas-core
22, orange-widget-base
23, pandas
24, pyqtgraph
25, pyqtwebengine
26, python
27, python-louvain
28, pythonOlder
29, pyyaml
30, qt5
31, qtconsole
32, recommonmark
33, requests
34, scikit-learn
35, scipy
36, serverfiles
37, setuptools
38, sphinx
39, wheel
40, xlrd
41, xlsxwriter
42}:
43
44let
45 self = buildPythonPackage rec {
46 pname = "orange3";
47 version = "3.35.0";
48 format = "pyproject";
49
50 disabled = pythonOlder "3.7";
51
52 src = fetchFromGitHub {
53 owner = "biolab";
54 repo = "orange3";
55 rev = "refs/tags/${version}";
56 hash = "sha256-dj/Z4uOjA4nidd45dnHZDyHZP6Fy/MGC8asqOPV7U7A=";
57 };
58
59 postPatch = ''
60 substituteInPlace pyproject.toml \
61 --replace "setuptools>=41.0.0,<50.0" "setuptools"
62 sed -i 's;\(scikit-learn\)[^$]*;\1;g' requirements-core.txt
63 sed -i 's;pyqtgraph[^$]*;;g' requirements-gui.txt # TODO: remove after bump with a version greater than 0.13.1
64 '';
65
66 nativeBuildInputs = [
67 copyDesktopItems
68 cython
69 oldest-supported-numpy
70 qt5.wrapQtAppsHook
71 recommonmark
72 setuptools
73 sphinx
74 wheel
75 ];
76
77 enableParallelBuilding = true;
78
79 propagatedBuildInputs = [
80 numpy
81 scipy
82 chardet
83 openpyxl
84 opentsne
85 qtconsole
86 bottleneck
87 matplotlib
88 joblib
89 requests
90 keyring
91 scikit-learn
92 pandas
93 pyqtwebengine
94 serverfiles
95 orange-canvas-core
96 python-louvain
97 xlrd
98 xlsxwriter
99 httpx
100 pyqtgraph
101 orange-widget-base
102 keyrings-alt
103 pyyaml
104 baycomp
105 ];
106
107 # FIXME: ImportError: cannot import name '_variable' from partially initialized module 'Orange.data' (most likely due to a circular import) (/build/source/Orange/data/__init__.py)
108 doCheck = false;
109
110 pythonImportsCheck = [ "Orange" "Orange.data._variable" ];
111
112 desktopItems = [
113 (makeDesktopItem {
114 name = "orange";
115 exec = "orange-canvas";
116 desktopName = "Orange Data Mining";
117 genericName = "Data Mining Suite";
118 comment = "Explore, analyze, and visualize your data";
119 icon = "orange-canvas";
120 mimeTypes = [ "application/x-extension-ows" ];
121 categories = [ "Science" "Education" "ArtificialIntelligence" "DataVisualization" "NumericalAnalysis" "Qt" ];
122 keywords = [ "Machine Learning" "Scientific Visualization" "Statistical Analysis" ];
123 })
124 ];
125
126 postInstall = ''
127 wrapProgram $out/bin/orange-canvas \
128 "${"$"}{qtWrapperArgs[@]}"
129 mkdir -p $out/share/icons/hicolor/{256x256,48x48}/apps
130 cp distribute/icon-256.png $out/share/icons/hicolor/256x256/apps/orange-canvas.png
131 cp distribute/icon-48.png $out/share/icons/hicolor/48x48/apps/orange-canvas.png
132 '';
133
134 passthru = {
135 updateScript = nix-update-script { };
136 tests.unittests = self.overridePythonAttrs (old: {
137 pname = "${old.pname}-tests";
138 format = "other";
139
140 preCheck = ''
141 export HOME=$(mktemp -d)
142 export QT_PLUGIN_PATH="${qt5.qtbase.bin}/${qt5.qtbase.qtPluginPrefix}"
143 export QT_QPA_PLATFORM_PLUGIN_PATH="${qt5.qtbase.bin}/lib/qt-${qt5.qtbase.version}/plugins";
144 export QT_QPA_PLATFORM=offscreen
145
146 rm Orange -rf
147 cp -r ${self}/${python.sitePackages}/Orange .
148 chmod +w -R .
149
150 rm Orange/tests/test_url_reader.py # uses network
151 rm Orange/tests/test_ada_boost.py # broken: The 'base_estimator' parameter of AdaBoostRegressor must be an object implementing 'fit' and 'predict' or a str among {'deprecated'}. Got None instead.
152 '';
153
154 checkPhase = ''
155 runHook preCheck
156 ${python.interpreter} -m unittest -b -v ./Orange/**/test*.py
157 runHook postCheck
158 '';
159
160 postInstall = "";
161
162 doBuild = false;
163 doInstall = false;
164
165 nativeBuildInputs = [ self ] ++ old.nativeBuildInputs;
166 });
167 };
168
169 meta = with lib; {
170 description = "Data mining and visualization toolbox for novice and expert alike";
171 homepage = "https://orangedatamining.com/";
172 changelog = "https://github.com/biolab/orange3/blob/${version}/CHANGELOG.md";
173 license = with licenses; [ gpl3Plus ];
174 maintainers = with maintainers; [ lucasew ];
175 mainProgram = "orange-canvas";
176 };
177 };
178in
179self