summaryrefslogtreecommitdiff
path: root/pkgs/development/python-modules/viser/default.nix
blob: 032bbd622ae8d02accec79bb44fb7129d2f672bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
{
  lib,

  buildPythonPackage,
  fetchFromGitHub,

  # nativeBuildInputs
  nodejs,
  fetchYarnDeps,
  yarnConfigHook,

  # build-system
  hatchling,

  # dependencies
  imageio,
  msgspec,
  nodeenv,
  numpy,
  opencv-python,
  plyfile,
  psutil,
  requests,
  rich,
  scikit-image,
  scipy,
  tqdm,
  trimesh,
  typing-extensions,
  websockets,
  yourdfpy,

  # optional-dependencies
  hypothesis,
  pre-commit,
  pandas,
  pyright,
  pytest,
  ruff,
  gdown,
  matplotlib,
  plotly,
  # pyliblzfse,
  robot-descriptions,
  torch,
  tyro,

  # nativeCheckInputs
  pytestCheckHook,
}:

buildPythonPackage rec {
  pname = "viser";
  version = "1.0.4";
  pyproject = true;

  src = fetchFromGitHub {
    owner = "nerfstudio-project";
    repo = "viser";
    tag = "v${version}";
    hash = "sha256-AS5D6pco6wzQ414yxvv0K9FB3tfP1BvqigRLJJXDduU=";
  };

  postPatch = ''
    # prepare yarn offline cache
    mkdir -p node_modules
    cd src/viser/client
    cp package.json yarn.lock ../../..
    ln -s ../../../node_modules

    # fix: [vite-plugin-eslint] Failed to load config "react-app" to extend from.
    substituteInPlace vite.config.mts --replace-fail \
      "eslint({ failOnError: false, failOnWarning: false })," ""

    cd ../../..
  '';

  nativeBuildInputs = [
    yarnConfigHook
    nodejs
  ];

  yarnOfflineCache = fetchYarnDeps {
    yarnLock = src + "/src/viser/client/yarn.lock";
    hash = "sha256-4x+zJIqjVoKmEdOUPGpCuMmlRBfF++3oWtbNYAvd2ko=";
  };

  preBuild = ''
    cd src/viser/client
    yarn --offline build
    cd ../../..
  '';

  build-system = [
    hatchling
  ];

  dependencies = [
    imageio
    msgspec
    nodeenv
    numpy
    opencv-python
    plyfile
    psutil
    requests
    rich
    scikit-image
    scipy
    tqdm
    trimesh
    typing-extensions
    websockets
    yourdfpy
  ];

  optional-dependencies = {
    dev = [
      hypothesis
      pre-commit
      pyright
      pytest
      ruff
    ];
    examples = [
      gdown
      matplotlib
      pandas
      plotly
      plyfile
      # pyliblzfse
      robot-descriptions
      torch
      tyro
    ];
  };

  nativeCheckInputs = [
    hypothesis
    pytestCheckHook
  ];

  pythonImportsCheck = [
    "viser"
  ];

  meta = {
    changelog = "https://github.com/nerfstudio-project/viser/releases/tag/${src.tag}";
    description = "Web-based 3D visualization + Python";
    homepage = "https://github.com/nerfstudio-project/viser";
    license = lib.licenses.asl20;
    maintainers = with lib.maintainers; [ nim65s ];
  };
}