14 "git.arvados.org/arvados.git/sdk/go/arvados"
15 "github.com/kshedden/gonpy"
18 type exportNumpy struct {
22 func (cmd *exportNumpy) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
26 fmt.Fprintf(stderr, "%s\n", err)
29 flags := flag.NewFlagSet("", flag.ContinueOnError)
30 flags.SetOutput(stderr)
31 pprof := flags.String("pprof", "", "serve Go profile data at http://`[addr]:port`")
32 runlocal := flags.Bool("local", false, "run on local host (default: run in an arvados container)")
33 projectUUID := flags.String("project", "", "project `UUID` for output data")
34 inputFilename := flags.String("i", "", "input `file`")
35 outputFilename := flags.String("o", "", "output `file`")
36 err = flags.Parse(args)
37 if err == flag.ErrHelp {
40 } else if err != nil {
47 log.Println(http.ListenAndServe(*pprof, nil))
52 if *outputFilename != "" {
53 err = errors.New("cannot specify output file in container mode: not implemented")
56 runner := arvadosContainerRunner{
57 Name: "lightning export-numpy",
58 Client: arvados.NewClientFromEnv(),
59 ProjectUUID: *projectUUID,
63 err = runner.TranslatePaths(inputFilename)
67 runner.Args = []string{"export-numpy", "-local=true", "-i", *inputFilename, "-o", "/mnt/output/library.npy"}
75 cgs, err := ReadCompactGenomes(stdin)
80 for _, cg := range cgs {
81 if cols < len(cg.Variants) {
82 cols = len(cg.Variants)
86 out := make([]uint16, rows*cols)
87 for row, cg := range cgs {
88 for i, v := range cg.Variants {
89 out[row*cols+i] = uint16(v)
93 var output io.WriteCloser
94 if *outputFilename == "" {
95 output = nopCloser{cmd.output}
97 output, err = os.OpenFile(*outputFilename, os.O_CREATE|os.O_WRONLY, 0777)
103 bufw := bufio.NewWriter(output)
104 npw, err := gonpy.NewWriter(nopCloser{bufw})
108 npw.Shape = []int{rows, cols}
121 type nopCloser struct {
125 func (nopCloser) Close() error { return nil }