15 "git.arvados.org/arvados.git/sdk/go/arvados"
16 "github.com/kshedden/gonpy"
19 type exportNumpy struct{}
21 func (cmd *exportNumpy) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
25 fmt.Fprintf(stderr, "%s\n", err)
28 flags := flag.NewFlagSet("", flag.ContinueOnError)
29 flags.SetOutput(stderr)
30 pprof := flags.String("pprof", "", "serve Go profile data at http://`[addr]:port`")
31 runlocal := flags.Bool("local", false, "run on local host (default: run in an arvados container)")
32 projectUUID := flags.String("project", "", "project `UUID` for output data")
33 inputFilename := flags.String("i", "-", "input `file`")
34 outputFilename := flags.String("o", "-", "output `file`")
35 err = flags.Parse(args)
36 if err == flag.ErrHelp {
39 } else if err != nil {
45 log.Println(http.ListenAndServe(*pprof, nil))
50 if *outputFilename != "-" {
51 err = errors.New("cannot specify output file in container mode: not implemented")
54 runner := arvadosContainerRunner{
55 Name: "lightning export-numpy",
56 Client: arvados.NewClientFromEnv(),
57 ProjectUUID: *projectUUID,
61 err = runner.TranslatePaths(inputFilename)
65 runner.Args = []string{"export-numpy", "-local=true", "-i", *inputFilename, "-o", "/mnt/output/library.npy"}
73 var input io.ReadCloser
74 if *inputFilename == "-" {
75 input = ioutil.NopCloser(stdin)
77 input, err = os.Open(*inputFilename)
83 cgs, err := ReadCompactGenomes(input)
92 for _, cg := range cgs {
93 if cols < len(cg.Variants) {
94 cols = len(cg.Variants)
98 out := make([]uint16, rows*cols)
99 for row, cg := range cgs {
100 for i, v := range cg.Variants {
101 out[row*cols+i] = uint16(v)
105 var output io.WriteCloser
106 if *outputFilename == "-" {
107 output = nopCloser{stdout}
109 output, err = os.OpenFile(*outputFilename, os.O_CREATE|os.O_WRONLY, 0777)
115 bufw := bufio.NewWriter(output)
116 npw, err := gonpy.NewWriter(nopCloser{bufw})
120 npw.Shape = []int{rows, cols}
133 type nopCloser struct {
137 func (nopCloser) Close() error { return nil }