[Numpy-discussion] numpy in python callback from threaded c++

Burlen Loring bloring at lbl.gov
Mon Mar 28 16:44:29 EDT 2016


Hi All,

in my c++ code I've added Python binding via swig. one scenario is to 
pass a python function to do some computational work. the Python program 
runs in serial in the main thread but work is handled by a thread pool, 
the callback is invoked from another thread on unique data. Before a 
thread invokes the Python callback it acquires Python's GIL. Also I 
PyEval_InitThreads during module initialization, and have swig'd with 
-threads flag. However, I'm experiencing frequent crashes when thread 
pool size is greater than 1, and valgrind is reporting errors from numpy 
even in case where thread pool size is 1.

Here's the essence of the error reported by valgrind:

    ==10316== Invalid read of size 4
    ==10316==    at 0x4ED7D73: PyObject_Free (obmalloc.c:1013)
    ==10316==    by 0x10D540B0: NpyIter_Deallocate (nditer_constr.c:699)
    ....
    ==10316==  Address 0x20034020 is 3,856 bytes inside a block of size
    4,097 free'd
    ==10316==    at 0x4C29E00: free (vg_replace_malloc.c:530)
    ==10316==    by 0x4F57B22: import_module_level (import.c:2278)
    ==10316==    by 0x4F57B22: PyImport_ImportModuleLevel (import.c:2292)
    ==10316==    by 0x4F36597: builtin___import__ (bltinmodule.c:49)
    ==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
    ==10316==    by 0x4E89C1A: call_function_tail (abstract.c:2578)
    ==10316==    by 0x4E89C1A: PyObject_CallFunction (abstract.c:2602)
    ==10316==    by 0x4F58735: PyImport_Import (import.c:2890)
    ==10316==    by 0x4F588B9: PyImport_ImportModule (import.c:2133)
    ==10316==    by 0x10D334C2: get_forwarding_ndarray_method (methods.c:57)
    ==10316==    by 0x10D372C0: array_mean (methods.c:1932)
    ==10316==    by 0x4F40AC7: call_function (ceval.c:4350)

There are a few of these reported. I'll attach the full output. This is 
from the simplest scenario, where the thread pool has a size of 1. 
Although there are 2 threads, the program is serial as the main thread 
passes work tasks to the thread pool and waits for work to finish.

Here is the work function where above occurs:

    def execute(port, data_in, req):
         sys.stderr.write('descriptive_stats::execute MPI %d\n'%(rank))

         mesh = as_teca_cartesian_mesh(data_in[0])

         table = teca_table.New()
         table.declare_columns(['step','time'], ['ul','d'])
         table << mesh.get_time_step() << mesh.get_time()

         for var_name in var_names:

             table.declare_columns(['min '+var_name, 'avg '+var_name, \
                 'max '+var_name, 'std '+var_name, 'low_q '+var_name, \
                 'med '+var_name, 'up_q '+var_name], ['d']*7)

             var = mesh.get_point_arrays().get(var_name).as_array()

             table << float(np.min(var)) << float(np.average(var)) \
                 << float(np.max(var)) << float(np.std(var)) \
                 << map(float, np.percentile(var, [25.,50.,75.]))

         return table

Again, I'm acquiring the GIL so this should be executed in serial. What 
am I doing wrong? Have I missed some key aspect of using numpy in this 
scenario? Any documentation on using numpy in a scenario like this? Any 
help is greatly appreciated!

Thanks
Burlen

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20160328/0b0381fb/attachment.html>
-------------- next part --------------
==10316== Thread 2:
==10316== Invalid read of size 4
==10316==    at 0x4ED7D73: PyObject_Free (obmalloc.c:1013)
==10316==    by 0x10D540B0: NpyIter_Deallocate (nditer_constr.c:699)
==10316==    by 0x112B01EE: iterator_loop (ufunc_object.c:1511)
==10316==    by 0x112B01EE: execute_legacy_ufunc_loop (ufunc_object.c:1660)
==10316==    by 0x112B01EE: PyUFunc_GenericFunction (ufunc_object.c:2627)
==10316==    by 0x112B0D95: ufunc_generic_call (ufunc_object.c:4253)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F3E009: do_call (ceval.c:4568)
==10316==    by 0x4F3E009: call_function (ceval.c:4373)
==10316==    by 0x4F3E009: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)
==10316==  Address 0x20034020 is 3,856 bytes inside a block of size 4,097 free'd
==10316==    at 0x4C29E00: free (vg_replace_malloc.c:530)
==10316==    by 0x4F57B22: import_module_level (import.c:2278)
==10316==    by 0x4F57B22: PyImport_ImportModuleLevel (import.c:2292)
==10316==    by 0x4F36597: builtin___import__ (bltinmodule.c:49)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4E89C1A: call_function_tail (abstract.c:2578)
==10316==    by 0x4E89C1A: PyObject_CallFunction (abstract.c:2602)
==10316==    by 0x4F58735: PyImport_Import (import.c:2890)
==10316==    by 0x4F588B9: PyImport_ImportModule (import.c:2133)
==10316==    by 0x10D334C2: get_forwarding_ndarray_method (methods.c:57)
==10316==    by 0x10D372C0: array_mean (methods.c:1932)
==10316==    by 0x4F40AC7: call_function (ceval.c:4350)
==10316==    by 0x4F40AC7: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)
==10316==  Block was alloc'd at
==10316==    at 0x4C28D06: malloc (vg_replace_malloc.c:299)
==10316==    by 0x4F57800: import_module_level (import.c:2220)
==10316==    by 0x4F57800: PyImport_ImportModuleLevel (import.c:2292)
==10316==    by 0x4F36597: builtin___import__ (bltinmodule.c:49)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4E89C1A: call_function_tail (abstract.c:2578)
==10316==    by 0x4E89C1A: PyObject_CallFunction (abstract.c:2602)
==10316==    by 0x4F58735: PyImport_Import (import.c:2890)
==10316==    by 0x4F588B9: PyImport_ImportModule (import.c:2133)
==10316==    by 0x10D334C2: get_forwarding_ndarray_method (methods.c:57)
==10316==    by 0x10D372C0: array_mean (methods.c:1932)
==10316==    by 0x4F40AC7: call_function (ceval.c:4350)
==10316==    by 0x4F40AC7: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)
==10316== 
==10316== Conditional jump or move depends on uninitialised value(s)
==10316==    at 0x4ED7D7C: PyObject_Free (obmalloc.c:1013)
==10316==    by 0x10D540B0: NpyIter_Deallocate (nditer_constr.c:699)
==10316==    by 0x112B01EE: iterator_loop (ufunc_object.c:1511)
==10316==    by 0x112B01EE: execute_legacy_ufunc_loop (ufunc_object.c:1660)
==10316==    by 0x112B01EE: PyUFunc_GenericFunction (ufunc_object.c:2627)
==10316==    by 0x112B0D95: ufunc_generic_call (ufunc_object.c:4253)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F3E009: do_call (ceval.c:4568)
==10316==    by 0x4F3E009: call_function (ceval.c:4373)
==10316==    by 0x4F3E009: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)
==10316==  Uninitialised value was created by a heap allocation
==10316==    at 0x4C29326: operator new(unsigned long) (vg_replace_malloc.c:334)
==10316==    by 0x1E913C79: __gnu_cxx::new_allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::allocate(unsigned long, void const*) (new_allocator.h:104)
==10316==    by 0x1E900B2B: std::allocator_traits<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::allocate(std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, unsigned long) (alloc_traits.h:360)
==10316==    by 0x1E8EDA41: std::_Vector_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_allocate(unsigned long) (stl_vector.h:170)
==10316==    by 0x1E90C4B7: void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_emplace_back_aux<char const*&>(char const*&) (vector.tcc:412)
==10316==    by 0x1E8F7C46: void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::emplace_back<char const*&>(char const*&) (vector.tcc:101)
==10316==    by 0x1E8E250C: void teca_array_collection::declare<char const*&, double>(char const*&, double) (teca_array_collection.h:126)
==10316==    by 0x1E8C0729: void teca_table::declare_column<char const*&, double>(char const*&, double) (teca_table.h:153)
==10316==    by 0x1E7C92D6: teca_table_declare_column(teca_table*, char const*, char const*) (teca_py_alg.cxx:7651)
==10316==    by 0x1E7C9506: teca_table_declare_columns(teca_table*, _object*, _object*) (teca_py_alg.cxx:7704)
==10316==    by 0x1E86E072: _wrap_teca_table_declare_columns (teca_py_alg.cxx:59491)
==10316==    by 0x4F40AC7: call_function (ceval.c:4350)
==10316==    by 0x4F40AC7: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F3E4F9: fast_function (ceval.c:4436)
==10316==    by 0x4F3E4F9: call_function (ceval.c:4371)
==10316==    by 0x4F3E4F9: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)
==10316== 
==10316== Use of uninitialised value of size 8
==10316==    at 0x4ED7D94: PyObject_Free (obmalloc.c:1013)
==10316==    by 0x10D540B0: NpyIter_Deallocate (nditer_constr.c:699)
==10316==    by 0x112B01EE: iterator_loop (ufunc_object.c:1511)
==10316==    by 0x112B01EE: execute_legacy_ufunc_loop (ufunc_object.c:1660)
==10316==    by 0x112B01EE: PyUFunc_GenericFunction (ufunc_object.c:2627)
==10316==    by 0x112B0D95: ufunc_generic_call (ufunc_object.c:4253)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F3E009: do_call (ceval.c:4568)
==10316==    by 0x4F3E009: call_function (ceval.c:4373)
==10316==    by 0x4F3E009: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4F3E3DE: fast_function (ceval.c:4446)
==10316==    by 0x4F3E3DE: call_function (ceval.c:4371)
==10316==    by 0x4F3E3DE: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)
==10316==  Uninitialised value was created by a heap allocation
==10316==    at 0x4C29326: operator new(unsigned long) (vg_replace_malloc.c:334)
==10316==    by 0x1E913C79: __gnu_cxx::new_allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::allocate(unsigned long, void const*) (new_allocator.h:104)
==10316==    by 0x1E900B2B: std::allocator_traits<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::allocate(std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, unsigned long) (alloc_traits.h:360)
==10316==    by 0x1E8EDA41: std::_Vector_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_allocate(unsigned long) (stl_vector.h:170)
==10316==    by 0x1E90C4B7: void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_emplace_back_aux<char const*&>(char const*&) (vector.tcc:412)
==10316==    by 0x1E8F7C46: void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::emplace_back<char const*&>(char const*&) (vector.tcc:101)
==10316==    by 0x1E8E250C: void teca_array_collection::declare<char const*&, double>(char const*&, double) (teca_array_collection.h:126)
==10316==    by 0x1E8C0729: void teca_table::declare_column<char const*&, double>(char const*&, double) (teca_table.h:153)
==10316==    by 0x1E7C92D6: teca_table_declare_column(teca_table*, char const*, char const*) (teca_py_alg.cxx:7651)
==10316==    by 0x1E7C9506: teca_table_declare_columns(teca_table*, _object*, _object*) (teca_py_alg.cxx:7704)
==10316==    by 0x1E86E072: _wrap_teca_table_declare_columns (teca_py_alg.cxx:59491)
==10316==    by 0x4F40AC7: call_function (ceval.c:4350)
==10316==    by 0x4F40AC7: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F3E4F9: fast_function (ceval.c:4436)
==10316==    by 0x4F3E4F9: call_function (ceval.c:4371)
==10316==    by 0x4F3E4F9: PyEval_EvalFrameEx (ceval.c:2987)
==10316==    by 0x4F41F9B: PyEval_EvalCodeEx (ceval.c:3582)
==10316==    by 0x4EBA5DB: function_call (funcobject.c:526)
==10316==    by 0x4E89AC2: PyObject_Call (abstract.c:2546)
==10316==    by 0x4F38096: PyEval_CallObjectWithKeywords (ceval.c:4219)
==10316==    by 0x1E8A088A: teca_py_algorithm::execute_callback::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_py_algorithm.h:279)
==10316==    by 0x1E8E2BDC: std::_Function_handler<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&), teca_py_algorithm::execute_callback>::_M_invoke(std::_Any_data const&, unsigned int&&, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (functional:1857)
==10316==    by 0x1EE1046A: std::function<std::shared_ptr<teca_dataset const> (unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&)>::operator()(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) const (functional:2271)
==10316==    by 0x1EE0F51A: teca_programmable_algorithm::execute(unsigned int, std::vector<std::shared_ptr<teca_dataset const>, std::allocator<std::shared_ptr<teca_dataset const> > > const&, teca_metadata const&) (teca_programmable_algorithm.cxx:103)
==10316==    by 0xFAB96A4: teca_algorithm::request_data(std::pair<std::shared_ptr<teca_algorithm>, unsigned int>&, teca_metadata const&) (teca_algorithm.cxx:627)
==10316==    by 0xFAF854D: teca_data_request::operator()() (teca_threaded_algorithm.cxx:43)
==10316==    by 0xFB02975: _ZSt8__invokeI17teca_data_requestIEENSt9enable_ifIXaaaantsrSt17is_member_pointerIT_E5valuentsrSt11is_functionIS3_E5valuentsrS5_INSt14remove_pointerIS3_E4typeEE5valueENSt9result_ofIFRS3_DpOT0_EE4typeEE4typeESC_SF_ (functional:201)
==10316==    by 0xFB02721: std::result_of<teca_data_request& ()>::type std::reference_wrapper<teca_data_request>::operator()<>() const (functional:428)
==10316==    by 0xFB02561: std::shared_ptr<teca_dataset const> std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFB022EF: std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>::operator()() (functional:1520)
==10316==    by 0xFB0200D: std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> >::operator()() const (future:1319)
==10316==    by 0xFB01CEE: std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<std::shared_ptr<teca_dataset const> >, std::__future_base::_Result_base::_Deleter>, std::_Bind_simple<std::reference_wrapper<teca_data_request> ()>, std::shared_ptr<teca_dataset const> > >::_M_invoke(std::_Any_data const&) (functional:1857)
==10316==    by 0xFAF8FBC: std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const (functional:2271)
==10316==    by 0xFAF8374: std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (future:527)
==10316==    by 0xFAFD50D: void std::_Mem_fn_base<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), true>::operator()<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*, void>(std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) const (functional:600)
==10316==    by 0xFAFC4F4: void std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) (functional:1531)
==10316==    by 0xFAFB102: std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>::operator()() (functional:1520)
==10316==    by 0xFAF9CF9: void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >() (mutex:697)
==10316==    by 0x52480E8: __pthread_once_slow (pthread_once.c:116)
==10316==    by 0xFAF55D8: __gthread_once(int*, void (*)()) (gthr-default.h:699)
==10316==    by 0xFAF8BB5: void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) (mutex:729)
==10316==    by 0xFAF7F10: std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) (future:387)
==10316==    by 0xFB00E53: std::__future_base::_Task_state<teca_data_request, std::allocator<int>, std::shared_ptr<teca_dataset const> ()>::_M_run() (future:1403)
==10316==    by 0xFAF95CC: std::packaged_task<std::shared_ptr<teca_dataset const> ()>::operator()() (future:1547)
==10316==    by 0xFAF5926: teca_thread_pool::create_threads(unsigned int)::{lambda()#1}::operator()() const (teca_threaded_algorithm.cxx:123)
==10316==    by 0xFAF76ED: void std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::_M_invoke<>(std::_Index_tuple<>) (functional:1531)
==10316==    by 0xFAF7656: std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()>::operator()() (functional:1520)
==10316==    by 0xFAF7593: std::thread::_Impl<std::_Bind_simple<teca_thread_pool::create_threads(unsigned int)::{lambda()#1} ()> >::_M_run() (thread:115)
==10316==    by 0x1030AF2F: ??? (in /usr/lib64/libstdc++.so.6.0.21)
==10316==    by 0x5241609: start_thread (pthread_create.c:334)


More information about the NumPy-Discussion mailing list