Hi Jeff,
I think that this is related to the way that numexpr works (but I don't
have time to look into it) [1]. You may be able to set this value
dynamically. Alternatively, the limit seems to be 256 (on my machine). So
that seems like the threshold to not go above.
Hope this helps.
Be Well
Anthon
1. bottom of the page, http://code.google.com/p/numexpr/
On Wed, Jan 23, 2013 at 10:33 AM, Jeff Reback <jreb...@yahoo.com> wrote:
> It seems there is a limit to the condition sytax when using readWhere
>
> I get various exceptions when passing increasing number of terms
>
> is this some kind of hard coded limit?
>
> is there a way to pre-compile this and test for it? (e.g. when I am
> actually creating the condition)
> - my alternative is simple to drop that part of the condition and filter
> out after
>
> thanks,
>
> Jeff
>
> ans -> [n->2 ,len_selector->58 ]
> --> (399,)
> ans -> [n->10 ,len_selector->234 ]
> --> (999,)
> ans -> [n->100 ,len_selector->2304 ]
> --> (999,)
> ans -> [n->200 ,len_selector->4704 ]
> --> (999,)
> ans -> [n->254 ,len_selector->6000 ]
> --> chr() arg not in range(256)
> ans -> [n->255 ,len_selector->6024 ]
> --> chr() arg not in range(256)
> ans -> [n->300 ,len_selector->7104 ]
> --> chr() arg not in range(256)
> ans -> [n->400 ,len_selector->9504 ]
> --> maximum recursion depth exceeded while calling a Python object
> ans -> [n->500 ,len_selector->11904 ]
> --> maximum recursion depth exceeded while calling a Python object
> ------------ script to reproduce --------
> #!/usr/local/bin/python
> import tables
> import numpy as np
> import datetime, time
> test_file = 'test_select.h5'
> handle = tables.openFile(test_file, "w")
> node = handle.createGroup(handle.root, 'test')
> table = handle.createTable(node, 'table', dict(
> index = tables.Int64Col(),
> column = tables.StringCol(25),
> values = tables.FloatCol(shape=(3)),
> ))
>
> # add data
> r = table.row
> for i in xrange(1000):
> r['index'] = i
> r['column'] = ("str-%d" % (i % 5))
> r['values'] = np.arange(3)
> r.append()
> table.flush()
> handle.close()
>
> def read_for(n):
> handle = tables.openFile(test_file,"r")
> selector = "(index >= 1) & %s" % '(' + ' | '.join([ "(column ==
> 'str-%s')" % v for v in range(n) ]) + ')'
> #print "selector -> [%s] --> %s" % (n,selector)
> try:
> ans = handle.root.test.table.readWhere(selector)
> print "ans -> [n->%-20.20s,len_selector->%-20.20s] --> %s" %
> (n,len(selector),ans.shape)
> except (Exception), detail:
> print "ans -> [n->%-20.20s,len_selector->%-20.20s] --> %s" %
> (n,len(selector),str(detail))
> handle.close()
>
> for n in [ 2, 10, 100, 200, 254, 255, 300, 400, 500 ]:
> read_for(n)
>
>
> ------------------------------------------------------------------------------
> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
> MVPs and experts. ON SALE this month only -- learn more at:
> http://p.sf.net/sfu/learnnow-d2d
> _______________________________________________
> Pytables-users mailing list
> Pytables-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pytables-users
>
>
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users