Marcus & Martin: I tried the dict_keys() method of checking, but even that can fail. Here is an example:
[code] import pmt d = pmt.make_dict() d = pmt.dict_add(d, pmt.intern('a'), pmt.intern('a')) d = pmt.dict_add(d, pmt.intern('b'), pmt.intern('b')) d = pmt.dict_add(d, pmt.intern('c'), pmt.intern('c')) a = pmt.cons(d, pmt.make_u8vector(10, 10)) print pmt.dict_keys(a) [/code] You end up with: ((c . c)) The dict_keys() method will bomb if there are no elements in the dictionary: print pmt.dict_keys(pmt.cons(pmt.make_dict(), pmt.make_u8vector(10, 10))) On Tue, Nov 22, 2016 at 5:55 PM, Dave NotTelling <dmp250...@gmail.com> wrote: > Thanks for the explanation! > > On Tue, Nov 22, 2016 at 5:29 PM, Marcus Müller <marcus.muel...@ettus.com> > wrote: > >> That's a long story. Essentially, a list is a pair of the first element >> and a pair of a second element and a pair of the third element and a pair >> of … >> >> Cheers, >> Marcus >> >> On 22.11.2016 23:18, Dave NotTelling wrote: >> >> I ask because it feels like a bug. Things like ((a . b), (c . d), (e . >> f)) are definitely not pairs (assuming a pair is 2 elements) and (in my >> opinion) should not return true for pmt.is_pair(). >> >> On Tue, Nov 22, 2016 at 5:12 PM, Dave NotTelling <dmp250...@gmail.com> >> wrote: >> >>> Martin, >>> >>> Was that done on purpose? >>> >>> Thank you for the link! I hadn't thought about checking that way. >>> >>> Thanks! >>> >>> -Dave >>> >>> On Tue, Nov 22, 2016 at 5:08 PM, Martin Braun <martin.br...@ettus.com> >>> wrote: >>> >>>> Dave, >>>> >>>> pairs pass is_dict(), which is possibly the root cause here. See also: >>>> https://github.com/gnuradio/gnuradio/blob/31b28f0cf4694378b2 >>>> 6617616d08b4082668962f/gr-uhd/lib/usrp_block_impl.cc#L487-L494 >>>> >>>> Cheers, >>>> M >>>> >>>> On 11/22/2016 01:47 PM, Dave NotTelling wrote: >>>> > I noticed today that the is_dict and is_pair checks are not appearing >>>> to >>>> > work properly. Here is an example that shows the issue: >>>> > >>>> > [code] >>>> > >>>> > #!/usr/bin/python >>>> > >>>> > import pmt >>>> > >>>> > def print_pmt(dictVar): >>>> > print 'isPair:%05s, isDict:%05s, isTuple:%05s => %s' % >>>> > (pmt.is_pair(dictVar), pmt.is_dict(dictVar), pmt.is_tuple(dictVar), >>>> dictVar) >>>> > >>>> > print 'DICT' >>>> > >>>> > d = pmt.make_dict() >>>> > print_pmt(d) >>>> > >>>> > d = pmt.dict_add(d, pmt.intern('a'), pmt.intern('b')) >>>> > print_pmt(d) >>>> > >>>> > d = pmt.dict_add(d, pmt.intern('c'), pmt.intern('d')) >>>> > print_pmt(d) >>>> > >>>> > d = pmt.dict_add(d, pmt.intern('e'), pmt.intern('f')) >>>> > print_pmt(d) >>>> > >>>> > print '\nCONS' >>>> > >>>> > p = pmt.cons(pmt.make_dict(), pmt.make_u8vector(0,0)) >>>> > print_pmt(p) >>>> > >>>> > [/code] >>>> > >>>> > Run that and you'll see what I consider strange behavior. The values >>>> of >>>> > is_pair and is_dict to not match what is expected. Is that by design? >>>> > If so, why? >>>> > >>>> > ((a . b)) is not a pair... It's a single element dictionary >>>> > ((c . d) (a . b)) i can sorta see this being a pair, but it wasn't >>>> > created that way >>>> > ((e . f) (c . d) (a . b)) definitely not a pair as it's 3 elements >>>> > >>>> > (() . #[]) don't dictionaries have to be nested? >>>> > >>>> > >>>> > Thanks! >>>> > >>>> > >>>> > _______________________________________________ >>>> > Discuss-gnuradio mailing list >>>> > Discuss-gnuradio@gnu.org >>>> > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>> > >>>> >>>> >>>> _______________________________________________ >>>> Discuss-gnuradio mailing list >>>> Discuss-gnuradio@gnu.org >>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>> >>> >>> >> >> >> _______________________________________________ >> Discuss-gnuradio mailing >> listDiscuss-gnuradio@gnu.orghttps://lists.gnu.org/mailman/listinfo/discuss-gnuradio >> >> >> >> _______________________________________________ >> Discuss-gnuradio mailing list >> Discuss-gnuradio@gnu.org >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >> >> >
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio