On Sat, Nov 19, 2022 at 5:14 PM Daniele Nicolodi <[email protected]> wrote:

> On 19/11/2022 21:13, Martin Blais wrote:
> > On Sat, Nov 19, 2022 at 2:32 PM Daniele Nicolodi <[email protected]
> > <mailto:[email protected]>> wrote:
> >
> >     On 19/11/2022 19:42, Martin Blais wrote:
> >      > On Sat, Nov 19, 2022 at 4:12 AM Peter <[email protected]
> >     <mailto:[email protected]>
> >      > <mailto:[email protected]
> >     <mailto:[email protected]>>> wrote:
> >      >
> >      >     I'd like to fetch the sum (per account) of the amount of
> money I
> >      >     sent from my checking account to any account during the year.
> The
> >      >     goal is to compute the average outflow per month to get a
> better
> >      >     understanding of the cashflow.
> >      >
> >      >     I tired:
> >      >
> >      >     SELECT account, other_accounts, sum(units(position)) WHERE
> >     account ~
> >      >     "Assets:Cash:Checking" group by account, other_accounts
> >      >
> >      >     or
> >      >
> >      >     SELECT account, other_accounts, units(sum(position)) WHERE
> >     account ~
> >      >     "Assets:Cash:Checking" group by account, other_accounts
> >      >
> >      >     and variations of that. Each query failed by telling me
> >      >
> >      >      > TypeError: unhashable type: 'list'
> >      >
> >      >     I guess, there's a problem calculating a hash or so, but I
> don't
> >      >     know. Tried to search in this group, but I didn't find
> anything
> >      >     related that helped (I'm pretty sure I used the wrong search
> >     term, tbh).
> >      >
> >      >     How do I get the summarized outflow from the checking account
> >     to any
> >      >     other account using bean-query?
> >      >
> >      >
> >      > This is a bug introduced in
> ca24621e377130fa4763812c0b8ebb8c62ebb9b0
> >      > Daniele: are you okay with rolling this back?
> >      > My version of "hashable" was more lenient actually, and I think
> >     would
> >      > work in this case.
> >      > For this purpose we don't actually care much about a proper
> >     definition
> >      > of hashable because the stream of data is frozen in time.
> >      > I don't even remember why I made a check. Might have been that
> >     computing
> >      > a hash of an inventory isn't useful; alternatively we could just
> >     allow
> >      > it and make Inventory hashable... and remove the check altogether.
> >
> >       From memory, without looking at the code, the columns in the
> >     "group by"
> >     clause need to be hashable because "group by" is implemented with a
> >     Python dictionary.
> >
> > Yes but it's a dictionary we know isn't going to change - everything is
> > frozen at that stage, at least for the duration of the query execution -
> > so we can compute a hash anyway.
> > Nothing in the query itself can mutate the stream of directives.
>
> Sure, but this code is going to fail anyway
>
> https://github.com/beancount/beancount/blob/a6352005a466bf3377d7caf5b1570d3bd08207fe/beancount/query/query_execute.py#L328
>
> beanquery has very similar code.
>

I don't understand what you're saying. We just make it not fail.



>
> >     An exception would have been raised if the check would let the list
> >     pass. Indeed, it seems that the reported exception is from the code
> in
> >     beancount v2 and not from the code in beanquery.
> >
> >     The fix is to return other_accounts as a tuple and not as a list.
> >
> > Maybe; I still think Python's notion of hashable doesn't apply here.
>
> It applies as long as the think is implemented as Python dictionary :-)
>

It actually doesn't matter what it is.
What matters is that its value - whatever it is, mutable or not - is
derived from the non-aggregate expressions and then thrown away.
The fact that it's a Python dict is irrelevant.
It's not going to live beyond the retrieval of the accumulator for the
aggregates.



>
> Cheers,
> Dan
>
> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/911f0706-ff61-4559-bb0e-608c4aa34d9d%40grinta.net
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhN_kehUHnoC1Gtgv_AdKEXUpQfiv4QHh2dLb5BxCfQgDg%40mail.gmail.com.

Reply via email to