Posts: 1,583
Threads: 3
Joined: Mar 2020
Just make variables an iterator/list whatever of integers then. Here I just set it via range, but it could be set any way.
from itertools import product
from more_itertools import grouper
import string
# create the "data"
number_pairs = 3
variables = list(range(number_pairs * 2))
print(f"variables data starts as {variables}")
number = len(variables)
groups = grouper(variables, 2)
finallist = product(*groups)
print(list(finallist)) Output: variables data starts as [0, 1, 2, 3, 4, 5]
[(0, 2, 4), (0, 2, 5), (0, 3, 4), (0, 3, 5), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5)]
Posts: 39
Threads: 11
Joined: Nov 2020
Jan-27-2021, 07:22 PM
(This post was last modified: Jan-27-2021, 07:22 PM by quest_.)
(Jan-27-2021, 06:03 PM)bowlofred Wrote: Just make variables an iterator/list whatever of integers then. Here I just set it via range, but it could be set any way.
from itertools import product
from more_itertools import grouper
import string
# create the "data"
number_pairs = 3
variables = list(range(number_pairs * 2))
print(f"variables data starts as {variables}")
number = len(variables)
groups = grouper(variables, 2)
finallist = product(*groups)
print(list(finallist)) Output: variables data starts as [0, 1, 2, 3, 4, 5]
[(0, 2, 4), (0, 2, 5), (0, 3, 4), (0, 3, 5), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5)]
I apologise, probably it is my fault that I cannot tell what I want exactly but NO! my variables are not 0 2 4 my variables must be that
for variables in itertools.product([0, 1], repeat=(number*2)) After that I should create this groups
And after that I am writing what you recommand:
number =2
for variables in itertools.product([0, 1], repeat=(number*2)): # set of variables for a,ap,b,bp,c,cp like 000000 000001 000011....
#a,ap,b,bp,c,cp= variables[0],variables[1],variables[2],hvariables[3] #giving value for a,ap,b,bp,c,cp
#nlist = [(a,b),(a,bp),(ap,b),(ap,bp)] #binary combination of a,ap,b,bp,c,cp
groups = grouper(variables, 2)
finallist = product(*groups)
print(list(finallist)) And I am getting this error:
Error: raceback (most recent call last):
File "free.py", line 151, in <module>
groups = grouper(variables, 2)
File "/usr/lib/python3/dist-packages/more_itertools/recipes.py", line 295, in grouper
args = [iter(iterable)] * n
TypeError: 'int' object is not iterable
My variable is already a list !!! Why am I gettigng this error?
P.S I also wrote: variable = list(variable) but still it did not work
Posts: 1,583
Threads: 3
Joined: Mar 2020
My variables was just a single list. I'm not completely sure, but maybe you want to run it for each of the groups in your product? Like this?
from itertools import product
from more_itertools import grouper
import string
# create the "data"
number = 2
for variables in product([0, 1], repeat=(number*2)):
print(f"Running for variables = {variables}")
groups = grouper(variables, 2)
finallist = product(*groups)
print(list(finallist)) Output: Running for variables = (0, 0, 0, 0)
[(0, 0), (0, 0), (0, 0), (0, 0)]
Running for variables = (0, 0, 0, 1)
[(0, 0), (0, 1), (0, 0), (0, 1)]
Running for variables = (0, 0, 1, 0)
[(0, 1), (0, 0), (0, 1), (0, 0)]
Running for variables = (0, 0, 1, 1)
[(0, 1), (0, 1), (0, 1), (0, 1)]
...
Posts: 39
Threads: 11
Joined: Nov 2020
Jan-27-2021, 08:07 PM
(This post was last modified: Jan-27-2021, 08:07 PM by quest_.)
(Jan-27-2021, 07:54 PM)bowlofred Wrote: My variables was just a single list. I'm not completely sure, but maybe you want to run it for each of the groups in your product? Like this?
from itertools import product
from more_itertools import grouper
import string
# create the "data"
number = 2
for variables in product([0, 1], repeat=(number*2)):
print(f"Running for variables = {variables}")
groups = grouper(variables, 2)
finallist = product(*groups)
print(list(finallist)) Output: Running for variables = (0, 0, 0, 0)
[(0, 0), (0, 0), (0, 0), (0, 0)]
Running for variables = (0, 0, 0, 1)
[(0, 0), (0, 1), (0, 0), (0, 1)]
Running for variables = (0, 0, 1, 0)
[(0, 1), (0, 0), (0, 1), (0, 0)]
Running for variables = (0, 0, 1, 1)
[(0, 1), (0, 1), (0, 1), (0, 1)]
...
Exactly but still I have the same error??
Error: groups = more_itertools.grouper(variables, 2)
File "/usr/lib/python3/dist-packages/more_itertools/recipes.py", line 295, in grouper
args = [iter(iterable)] * n
TypeError: 'int' object is not iterable
This is working for you but not working for me. This is quite interesting!
Posts: 1,583
Threads: 3
Joined: Mar 2020
Show the entire code (including imports). Your code seems to work for me....
import itertools
import more_itertools
number =2
for variables in itertools.product([0, 1], repeat=(number*2)): # set of variables for a,ap,b,bp,c,cp like 000000 000001 000011....
#a,ap,b,bp,c,cp= variables[0],variables[1],variables[2],hvariables[3] #giving value for a,ap,b,bp,c,cp
#nlist = [(a,b),(a,bp),(ap,b),(ap,bp)] #binary combination of a,ap,b,bp,c,cp
groups = more_itertools.grouper(variables, 2)
finallist = itertools.product(*groups)
print(list(finallist)) Output: [(0, 0), (0, 0), (0, 0), (0, 0)]
[(0, 0), (0, 1), (0, 0), (0, 1)]
[(0, 1), (0, 0), (0, 1), (0, 0)]
[(0, 1), (0, 1), (0, 1), (0, 1)]
[(0, 0), (0, 0), (1, 0), (1, 0)]
[(0, 0), (0, 1), (1, 0), (1, 1)]
[(0, 1), (0, 0), (1, 1), (1, 0)]
[(0, 1), (0, 1), (1, 1), (1, 1)]
[(1, 0), (1, 0), (0, 0), (0, 0)]
[(1, 0), (1, 1), (0, 0), (0, 1)]
[(1, 1), (1, 0), (0, 1), (0, 0)]
[(1, 1), (1, 1), (0, 1), (0, 1)]
[(1, 0), (1, 0), (1, 0), (1, 0)]
[(1, 0), (1, 1), (1, 0), (1, 1)]
[(1, 1), (1, 0), (1, 1), (1, 0)]
[(1, 1), (1, 1), (1, 1), (1, 1)]
Posts: 39
Threads: 11
Joined: Nov 2020
Jan-27-2021, 08:44 PM
(This post was last modified: Jan-27-2021, 09:27 PM by quest_.)
(Jan-27-2021, 08:38 PM)bowlofred Wrote: Show the entire code (including imports). Your code seems to work for me....
import itertools
import more_itertools
number =2
for variables in itertools.product([0, 1], repeat=(number*2)): # set of variables for a,ap,b,bp,c,cp like 000000 000001 000011....
#a,ap,b,bp,c,cp= variables[0],variables[1],variables[2],hvariables[3] #giving value for a,ap,b,bp,c,cp
#nlist = [(a,b),(a,bp),(ap,b),(ap,bp)] #binary combination of a,ap,b,bp,c,cp
groups = more_itertools.grouper(variables, 2)
finallist = itertools.product(*groups)
print(list(finallist)) Output: [(0, 0), (0, 0), (0, 0), (0, 0)]
[(0, 0), (0, 1), (0, 0), (0, 1)]
[(0, 1), (0, 0), (0, 1), (0, 0)]
[(0, 1), (0, 1), (0, 1), (0, 1)]
[(0, 0), (0, 0), (1, 0), (1, 0)]
[(0, 0), (0, 1), (1, 0), (1, 1)]
[(0, 1), (0, 0), (1, 1), (1, 0)]
[(0, 1), (0, 1), (1, 1), (1, 1)]
[(1, 0), (1, 0), (0, 0), (0, 0)]
[(1, 0), (1, 1), (0, 0), (0, 1)]
[(1, 1), (1, 0), (0, 1), (0, 0)]
[(1, 1), (1, 1), (0, 1), (0, 1)]
[(1, 0), (1, 0), (1, 0), (1, 0)]
[(1, 0), (1, 1), (1, 0), (1, 1)]
[(1, 1), (1, 0), (1, 1), (1, 0)]
[(1, 1), (1, 1), (1, 1), (1, 1)]
Quite interesting.. since morning I am trying the make it works but no. Here is the my code:
from typing import Union, Sequence, Tuple, Any
import itertools
import cirq
import numpy as np
import random
import string
from collections import defaultdict
import csv
import pprint
import fileinput
import cvxpy
from cirq.type_workarounds import NotImplementedType
import collections
import more_itertools
...
for variables in itertools.product([0, 1], repeat=(number*2)): # set of deterministic hidden variables for a,ap,b,bp,c,cp like 000000 000001 000011....
print(f"Running for variables = {variables}")
groups_ = more_itertools.grouper(variables, 2)
finallist = itertools.product(*groups_)
print(list(finallist))
... I am using ubuntu and I installed more_itertools like that: sudo apt install python3-more-itertools. And the error is that:
Error: Traceback (most recent call last):
File "free.py", line 150, in <module>
groups_ = more_itertools.grouper(variables, 2)
File "/usr/lib/python3/dist-packages/more_itertools/recipes.py", line 295, in grouper
args = [iter(iterable)] * n
TypeError: 'int' object is not iterable
Posts: 39
Threads: 11
Joined: Nov 2020
Jan-27-2021, 09:25 PM
(This post was last modified: Jan-27-2021, 09:26 PM by quest_.)
Ah ok!
indexess will change their order:
Instead of following line
groups_ = more_itertools.grouper(variables, 2) we should write that:
groups_ = more_itertools.grouper(2,variables)
Posts: 1,583
Threads: 3
Joined: Mar 2020
Very interesting. Is that a different package? I'm not on ubuntu, so just installed via pip.
For this package, the iterable is the first argument.
>>> import inspect
>>> import more_itertools
>>> inspect.signature(more_itertools.grouper)
<Signature (iterable, n, fillvalue=None)>
Posts: 39
Threads: 11
Joined: Nov 2020
(Jan-27-2021, 10:05 PM)bowlofred Wrote: Very interesting. Is that a different package? I'm not on ubuntu, so just installed via pip.
For this package, the iterable is the first argument.
>>> import inspect
>>> import more_itertools
>>> inspect.signature(more_itertools.grouper)
<Signature (iterable, n, fillvalue=None)> I did not check the version explicitly but yeah it made me very angry. Luckily I found. Btw I found from documents ... Maybe they just updated ...
Posts: 1,583
Threads: 3
Joined: Mar 2020
I was interested. According to github, the original description of this function (in the python itertools recipe docs) was with n as the first argument.
The package was created in 2012, the docs "fixed" the signature so the iterator was the first argument in 2013, and then nobody noticed or fixed it in the package until 2019. So the old signature is in more_itertools up through 5.0.0 and the new one since 6.0.0. Looks like the ubuntu package installs 4.2.0 with the "old" signature.
|