Container request priority flag.
[lightning.git] / pca.go
1 package main
2
3 import (
4         "flag"
5         "fmt"
6         "io"
7         _ "net/http/pprof"
8
9         "git.arvados.org/arvados.git/sdk/go/arvados"
10 )
11
12 type pythonPCA struct{}
13
14 func (cmd *pythonPCA) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
15         var err error
16         defer func() {
17                 if err != nil {
18                         fmt.Fprintf(stderr, "%s\n", err)
19                 }
20         }()
21         flags := flag.NewFlagSet("", flag.ContinueOnError)
22         flags.SetOutput(stderr)
23         projectUUID := flags.String("project", "", "project `UUID` for output data")
24         inputFilename := flags.String("i", "-", "input `file`")
25         priority := flags.Int("priority", 500, "container request priority")
26         err = flags.Parse(args)
27         if err == flag.ErrHelp {
28                 err = nil
29                 return 0
30         } else if err != nil {
31                 return 2
32         }
33
34         runner := arvadosContainerRunner{
35                 Name:        "lightning pca",
36                 Client:      arvados.NewClientFromEnv(),
37                 ProjectUUID: *projectUUID,
38                 RAM:         120000000000,
39                 VCPUs:       1,
40                 Priority:    *priority,
41         }
42         err = runner.TranslatePaths(inputFilename)
43         if err != nil {
44                 return 1
45         }
46         runner.Prog = "python3"
47         runner.Args = []string{"-c", `import sys
48 import scipy
49 from sklearn.decomposition import PCA
50 scipy.save(sys.argv[2], PCA(n_components=4).fit_transform(scipy.load(sys.argv[1])))`, *inputFilename, "/mnt/output/pca.npy"}
51         var output string
52         output, err = runner.Run()
53         if err != nil {
54                 return 1
55         }
56         fmt.Fprintln(stdout, output+"/pca.npy")
57         return 0
58 }