Changeset 21e8408 for python/lib


Ignore:
Timestamp:
Apr 29, 2016, 11:48:39 PM (8 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
Children:
e84f7b9
Parents:
b055b4e
Message:

python/lib/gen_code.py: switch to using PyObjects? instead of fvec, cvec, fmat

File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/lib/gen_code.py

    rb055b4e r21e8408  
    4949
    5050newfromtype_fn = {
    51         'fvec_t*': 'new_fvec',
    52         'fmat_t*': 'new_fmat',
    53         'cvec_t*': 'new_cvec',
     51        'fvec_t*': 'new_py_fvec',
     52        'fmat_t*': 'new_py_fmat',
     53        'cvec_t*': 'new_py_cvec',
    5454        }
    5555
    5656delfromtype_fn = {
    57         'fvec_t*': 'del_fvec',
    58         'fmat_t*': 'del_fmat',
    59         'cvec_t*': 'del_cvec',
     57        'fvec_t*': 'Py_DECREF',
     58        'fmat_t*': 'Py_DECREF',
     59        'cvec_t*': 'Py_DECREF',
    6060        }
    6161
     
    169169        self.do_inputs = [get_params_types_names(self.do_proto)[1]]
    170170        self.do_outputs = get_params_types_names(self.do_proto)[2:]
    171         self.outputs_flat = get_output_params(self.do_proto)
    172         self.output_results = "; ".join(self.outputs_flat)
     171        struct_output_str = ["PyObject *{0[name]}; {1} c_{0[name]}".format(i, i['type'][:-1]) for i in self.do_outputs]
     172        self.struct_outputs = ";\n    ".join(struct_output_str)
    173173
    174174        #print ("input_params: ", map(split_type, get_input_params(self.do_proto)))
     
    202202    {do_inputs_list};
    203203    // output results
    204     {output_results};
     204    {struct_outputs};
    205205}} Py_{shortname};
    206206"""
     
    380380        return NULL;
    381381    }}""".format(refs = refs, pyparamtypes = pyparamtypes, **self.__dict__)
    382         for p in input_params:
    383             out += """
     382        for input_param in input_params:
     383            out += """
     384
    384385    if (!{pytoaubio}(py_{0[name]}, &(self->{0[name]}))) {{
    385386        return NULL;
    386387    }}""".format(input_param, pytoaubio = pytoaubio_fn[input_param['type']])
     388        out += """
     389
     390    // TODO: check input sizes"""
     391        for output_param in output_params:
     392            out += """
     393
     394    Py_INCREF(self->{0[name]});
     395    if (!{pytoaubio}(self->{0[name]}, &(self->c_{0[name]}))) {{
     396        return NULL;
     397    }}""".format(output_param, pytoaubio = pytoaubio_fn[output_param['type']])
    387398        do_fn = get_name(self.do_proto)
    388399        inputs = ", ".join(['&(self->'+p['name']+')' for p in input_params])
     400        c_outputs = ", ".join(["&(self->c_%s)" % p['name'] for p in self.do_outputs])
    389401        outputs = ", ".join(["self->%s" % p['name'] for p in self.do_outputs])
    390402        out += """
    391403
    392     {do_fn}(self->o, {inputs}, {outputs});
    393 
    394     return (PyObject *) {aubiotonumpy} ({outputs});
     404    {do_fn}(self->o, {inputs}, {c_outputs});
     405
     406    return {outputs};
    395407}}
    396408""".format(
    397409        do_fn = do_fn,
    398         aubiotonumpy = pyfromaubio_fn[output['type']],
    399         inputs = inputs, outputs = outputs,
     410        inputs = inputs, outputs = outputs, c_outputs = c_outputs,
    400411        )
    401412        return out
Note: See TracChangeset for help on using the changeset viewer.