Trying to compare this to universe-starter-agent (A3C)

Setting up openai/universe, I used the "universe starter agent" as a smoke test.
After adjusting the number of workers to better utilize my CPU, I saw the default PongDeterministic-v3 start winning after about 45 minutes.
Then I wanted to try GA3C on the same machine; given that you quote results of 6x or better, I expected it to perform at least as good as that result.
However, it turns out that with GA3C the agent only starts winning after roughly 90 minutes.
I'm assuming that either my first (few) run(s) on the starter agent were just lucky, or that my runs on GA3C were unlucky. Also I assume that the starter agent has other changes from the A3C that you compared GA3C against, at least in parameters, possibly in algorithm.
So, what can I (an experienced software engineer but with no background in ML), do to make the two methods more comparable on my machine? Is it just a matter of tweaking a few parameters? Is Pong not a good choice to make the comparison?
I have an i7-3930k, a GTX 1060 (6 GB) and 32 GB of RAM.

The OpenAI agent uses an LSTM policy network & GAE for the loss function.
This repo has a far simpler implementation of A3C, using a vanilla feed forward network for the policy & I'm pretty sure using a less recent loss function (though I haven't confirmed that last point recently).
While I personally had high hopes that this implementation would be useful for speeding things up, I've recently gone back to working with the OpenAI framework for my testing. I think some people have been working to get the LSTM policy working w/ GPU based A3C, but I haven't seen any working code that improves on the OpenAI type model....
I'd love to be corrected if I'm incorrect on any of the above.

ok, that explains it.
Is "get LSTM policy working with GA3C" an open research problem or merely a matter of implementation details?

And does Pong happen to be particularly sensitive to LSTM or would it be no different in the other Atari games?

I did a few tests with the universe starter agent when it was just released. Based on that limited experience, it seemed that the setup was a bit overfit to Pong--performance was reasonable for other games, but exceptionally fast for Pong. But as the previous commenter mentioned, it also uses an LSTM and GAE, which are helpful in some cases. If you run more extensive tests, I'd be curious to know how it performs on a wider suite of games.

okay; anyones in particular I should try?
On 24 March 2017 at 15:35, swtyree<EMAIL_ADDRESS>wrote:

I did a few tests with the universe starter agent when it was just
released. Based on that limited experience, it seemed that the setup was a
bit overfit to Pong--performance was reasonable for other games, but
exceptionally fast for Pong. But as the previous commenter mentioned, it
also uses an LSTM and GAE, which are helpful in some cases. If you run more
extensive tests, I'd be curious to know how it performs on a wider suite of
games.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/NVlabs/GA3C/issues/22#issuecomment-289039757, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABsunYj60Qwjk0Lont7EQhuj0ubhWKU_ks5ro9S6gaJpZM4MoUlS
.

I did run it on CoasterRacer, and that "never" (for an impatient layperson)
seemed to get anywhere; the difference there as compared to another racing
game I briefly tried (Dusk Racer) is that it takes a significant amount of
effort to ever even get a single reward.
On 24 March 2017 at 15:36, Nicolai Czempin<EMAIL_ADDRESS>wrote:

okay; anyones in particular I should try?
On 24 March 2017 at 15:35, swtyree<EMAIL_ADDRESS>wrote:

I did a few tests with the universe starter agent when it was just
released. Based on that limited experience, it seemed that the setup was a
bit overfit to Pong--performance was reasonable for other games, but
exceptionally fast for Pong. But as the previous commenter mentioned, it
also uses an LSTM and GAE, which are helpful in some cases. If you run more
extensive tests, I'd be curious to know how it performs on a wider suite of
games.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/NVlabs/GA3C/issues/22#issuecomment-289039757, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABsunYj60Qwjk0Lont7EQhuj0ubhWKU_ks5ro9S6gaJpZM4MoUlS
.

The appendix of the original A3C paper has a ton of comparisons across different games & models, which should help you avoid some testing.
LSTM A3C is widely implemented open-source - a quick search should turn up a few options. The Universe & Miyosuda implementations seems to be the most commonly used.

`The appendix of the original A3C paper has a ton of comparisons across different games & models, which should help you avoid some testing.'
Not sure what this refers to; are you saying I could have avoided wasting time on CoasterRacer by being more aware of the comparisons? My goal was just to "play around with openai universe" rather than get deep into testing. If anything, I'd be interested in adding an environment such as MAME or one of the other emulators, which is more obviously an engineering task.
'LSTM A3C is widely implemented open-source - a quick search should turn up a few options. The Universe & Miyosuda implementations seems to be the most commonly used'
Is this a response to my question about GA3C with LSTM? If so, the implicit assumption is that there are no fundamental issues that would complicate an endeavour to do so, for example by looking at the A3C implementations. Is this what you're saying? My understanding from the GA3C paper is that they consider it to be a fundamental approach and that A3C just happened to perform the best, so adding LSTM should not be a big deal.

also, what would be a better venue to have discussions such as this one? Don't really want to clutter up the project issues.

I simply meant - there exists a readily available corpus of tests conducted by professional researchers. Use it as you wish.
Implementing LSTM policy is simply an engineering issue, albeit a moderately difficult one in this case. Have at it - and please publish if you get good results! There are other issues open in this repo, I believe, where there are already discussions around LSTM/GPU.

@nczempin you should add a GAE, cuz it's the most crucial part but easy to implement. LSTM don't really affect you results so much (but LSTM can helps a bit with dynamic of the game).
PS> see some results from vanilla article (last page)

I simply meant - there exists a readily available corpus of tests conducted by professional researchers. Use it as you wish.
Well, the "which ones should I try" was really offering my "services" to @swtyree: in case I make some more comparisons with my setup anyway it doesn't make a big difference to me which other roms I try, so if someone does have a preference, I might as well support that.

Implementing LSTM policy is simply an engineering issue, albeit a moderately difficult one in this case. Have at it - and please publish if you get good results!

"Publish" sounds intimidating to me, but if I do get anything off the ground, I promise to put the source up on github; perhaps fork and PR here. I probably have to brush up my background in this area a little first (and I definitely have some things I'd like to do first, as mentioned before), so don't hold your breath.

There are other issues open in this repo, I believe, where there are already discussions around LSTM/GPU.

I saw an issue on the universe starter agent, asking about GPU. It doesn't seem to have gone anywhere.

Please check out the pull requests section. GAE has been already implemented by @etienne87 in this pull request. He also implemented an specific pre-processing and configuration which provides a better comparison with starter agent.

@nczempin you should add a GAE, cuz it's the most crucial part but easy to implement. LSTM don't really affect you results so much (but LSTM can helps a bit with dynamics of the game).
PS> see some results from vanilla article (last page)

GAE being? All I get is Google App Engine, and I don't find a reference to the term in the A3C paper.

Please check out the pull requests section. GAE has been already implemented by @etienne87 in this pull request. He also implemented an specific pre-processing and configuration which provides a better comparison with starter agent.

I'll have a look at that. Should I use a different game from the purportedly overfitted Pong, or would it be fine? I guess we'd know the answer when/if I try...

GAE stands for Generalized Advantage Estimation. It's always a good idea to start by Pong (since it's usually the fastest to converge), but as long as you avoid pong specific logic. things should generalize to other games as well.

Okay, I checked out the PR, but it breaks the dependencies on the vanilla openai-universe.
I'm willing to give it a whirl if it once the PR is in a usable state more or less as-is.

if you see some results from original paper, there are some good environments such as: Amidar, Berzerk and Krull for faster converge. But DeepMind trained all of these games with the same parameters, since that the gamma (discount factor) can be taken for each environment individually to get the better results.

So am I right in assessing that my issue #22 essentially boils down to issue #3?

or should I rename it to something that specifically references GAE?

Ah, I see what you mean, with those games LSTM didn't actually help that
much (although the same holds for pong). GAE doesn't seem to be isolated in
the table; I guess I'll have to read the paper a bit more.
In the meantime I'll give Amidar a whirl. You seem to have picked the bold
ones in the "A3C FF, 1 day" column, would it also make sense to try
Seaquest, if FF 1 day vs. LSTM is what we're looking at?
On 24 March 2017 at 17:04, Dennis Korotyaev<EMAIL_ADDRESS>wrote:

if you see some results https://arxiv.org/pdf/1602.01783.pdf#19 from
original paper, there are some good environments such as: Amidar, Berzerk
and Krull for faster converge. But DeepMind trained all of these games
with the same parameters, since that the gamma (discount factor) can be
taken for each environment individually to get the better results.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/NVlabs/GA3C/issues/22#issuecomment-289065804, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABsunQe8uFrIsGD6vHSvYtm9izPbGfz8ks5ro-mDgaJpZM4MoUlS
.

@nczempin you can try with Seaquest, Boxing or other similar with more policy oriented approach than value (Breakout).
PS> I prefer Boxing cuz it's simply enough, but it takes a lot of time to see some distinguishes from a random (8mil for me for a almost vanilla A3C), than Breakout for example

So after around 24000 seconds (400 minutes, 6.6667 hours), here's what I get with GA3C:
[Time:    23999] [Episode:    20379 Score:   350.0000] [RScore:   268.7030 RPPS:   966] [PPS:  1258 TPS:   210] [NT: 16 NP:  2 NA:  9]
[Time:    23999] [Episode:    20380 Score:   317.0000] [RScore:   268.7230 RPPS:   966] [PPS:  1258 TPS:   210] [NT: 16 NP:  2 NA:  9]
[Time:    24001] [Episode:    20381 Score:   355.0000] [RScore:   268.8350 RPPS:   966] [PPS:  1258 TPS:   210] [NT: 16 NP:  2 NA:  9]
[Time:    24004] [Episode:    20382 Score:   295.0000] [RScore:   268.8870 RPPS:   966] [PPS:  1258 TPS:   210] [NT: 16 NP:  2 NA:  9]
[Time:    24008] [Episode:    20383 Score:   247.0000] [RScore:   268.8910 RPPS:   965] [PPS:  1258 TPS:   210] [NT: 16 NP:  3 NA:  8]
It seemed to make progress right from the start, unlike with Pong, where both algorithms seemed to be clueless for a while and then "suddenly get it" and no longer lose, followed by a very long time of very slow growth of average score (the points it conceded always seemed to be the very first few ones, once it had one a single point it seemed to go into very similar states.

Based on the latest version of our paper, we get more stable and faster convergence for TRAINING_MIN_BATCH_SIZE = 20 ... 40 in Config.py. If you haven't done it yet, you can try this.

Based on the latest version of our paper, we get more stable and faster convergence for TRAINING_MIN_BATCH_SIZE = 20 ... 40 in Config.py. If you haven't done it yet, you can try this.

On Pong again or on any of the other ones I'll try?

@nczempin DeepMind reaches almost 284 within 1 day (80 millions). You result isn't so bad, since that DeepMind selects 5 best runs from 50 and averaged it. You also can encounter with some saturation or exploration problem after some time. If you use RMSProp as target optimizer you can anneal the learning rate a bit slower.
PS> and, as you can see, DeepMind has some instability in training. It seems that a Hogwild can cause such issue, but we more synchronize way you can see the same.

The improvement with TRAINING_MIN_BATCH_SIZE should be observed for all games (although we tested few of them only).

Here's the situation with python3 train.py --num-workers 6 --env-id Amidar-v0 --log-dir /tmp/amidar
after roughly 8 hours:

I picked 6 workers because that's how many cores my CPU has, but perhaps up to 12 could have helped, given Hyperthreading etc. But naive "analysis" suggests that GA3C still wins in this particular case, because it gets more than double the score.
It would be interesting to know how much the speedup is due to using the CPU cores more efficiently because of the dynamic load balancing vs. including the GPU.
Even just getting a dynamic number of threads, without any specific GPU improvements, is a big convenience over having to pick them yourself statically.

GA3C PongDeterministic-v3 again with TRAINING_MIN_BATCH_SIZE=20:
[Time:     2702] [Episode:     3682 Score:   -21.0000] [RScore:   -20.2860 RPPS:  1513] [PPS:  1513 TPS:    51] [NT:  5 NP:  4 NA: 26]
...
[Time:     8993] [Episode:     7191 Score:    -7.0000] [RScore:   -14.3570 RPPS:  1514] [PPS:  1286 TPS:    44] [NT:  6 NP:  3 NA: 43]

GA3C PongDeterministic-v3 again with TRAINING_MIN_BATCH_SIZE=40:
[Time:     2701] [Episode:     3988 Score:   -21.0000] [RScore:   -20.1950 RPPS:  1663] [PPS:  1637 TPS:    31] [NT:  7 NP:  3 NA: 44]
[Time:     5402] [Episode:     6053 Score:   -13.0000] [RScore:   -17.0820 RPPS:  1628] [PPS:  1512 TPS:    29] [NT: 11 NP:  2 NA: 35]
[Time:     8996] [Episode:     7551 Score:   -10.0000] [RScore:   -13.0080 RPPS:  1609] [PPS:  1494 TPS:    28] [NT: 15 NP:  4 NA: 32]

GA3C PongDeterministic-v3 again with TRAINING_MIN_BATCH_SIZE=40, with changes from https://github.com/NVlabs/GA3C/pull/18:
[Time:     2701] [Episode:     3118 Score:   -12.0000] [RScore:   -16.1090 RPPS:  1939] [PPS:  1915 TPS:    36] [NT:  6 NP:  1 NA: 41]
Still not reaching that "starting to win after 45 minutes" I get with universe-starter-agent.

GA3C Amidar-v0 with TRAINING_MIN_BATCH_SIZE=40, with GAE changes from https://github.com/NVlabs/GA3C/pull/18:
[Time:    10374] [Episode:    13975 Score:   296.0000] [RScore:   219.0260 RPPS:  1919] [PPS:  1882 TPS:    35] [NT: 16 NP:  8 NA: 55]
...
[Time:    10801] [Episode:    14456 Score:     2.0000] [RScore:   154.3180 RPPS:  1713] [PPS:  1867 TPS:    35] [NT: 14 NP:  5 NA: 52] (trying something new? there was a string of 2.00 scores)

BTW I should probably compile my own Tensorflow, not sure how much effect it will have though:
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.

Hm, there seems to be something wrong with _play.sh. I decided I wanted to pause the training and have a look at an agent playing, perhaps seeing why it only got 2 points all of a sudden.
Naively, I thought I could just let one agent run in parallel to the training; it should not affect the big picture overall.
But I got an error:
`tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [256,6] rhs shape= [256,10]
[[Node: save/Assign_22 = Assign[T=DT_FLOAT, _class=["loc:@logits_p/w"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/gpu:0"](logits_p/w/RMSProp_1, save/RestoreV2_22/_11)]]
Caused by op u'save/Assign_22', defined at:
File "GA3C.py", line 59, in
Server().main()
File "/home/nczempin/git/ml/GA3C/ga3c/Server.py", line 48, in init
self.model = NetworkVP(Config.DEVICE, Config.NETWORK_NAME, Environment().get_num_actions())
File "/home/nczempin/git/ml/GA3C/ga3c/NetworkVP.py", line 65, in init
self.saver = tf.train.Saver({var.name: var for var in vars}, max_to_keep=0)
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1040, in init
self.build()
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1070, in build
restore_sequentially=self._restore_sequentially)
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 675, in build
restore_sequentially, reshape)
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 414, in _AddRestoreOps
assign_ops.append(saveable.restore(tensors, shapes))
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 155, in restore
self.op.get_shape().is_fully_defined())
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/ops/gen_state_ops.py", line 47, in assign
use_locking=use_locking, name=name)
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 763, in apply_op
op_def=op_def)
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2327, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/home/nczempin/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1226, in init
self._traceback = _extract_stack()
InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [256,6] rhs shape= [256,10]
[[Node: save/Assign_22 = Assign[T=DT_FLOAT, _class=["loc:@logits_p/w"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/gpu:0"](logits_p/w/RMSProp_1, save/RestoreV2_22/_11)]]`
So I thought that perhaps you're not meant to run _train.sh and _play.sh concurrently, so, thinking that _train.py would just pick up from a checkpoint I stopped it and then tried running _play.sh.
Turns out I got the same error.
So I thought, perhaps it's because of the GAE changes, so I checked out the master branch and tried again. Same result.
So right now I'm not sure what's going on; there may be something in the GAE changes that modifies the written data so that there is a problem when reading it back?
Then I tried continuing the _train.sh process, and was slightly surprised that the time started back at 0, not at the point where I had left it.
Right now it's a little hard for me to tell if there was an inadvertent _clean.sh thrown in somewhere, or if this is expected behaviour and I just need to add the time at which I stopped to the new time value, or if this is an error caused by the GAE changes.

Okay, I'll stop that Amidar run for now, because I need the machine for other things. There was some wonky stuff going on; I'll save the results.txt (what's left of it after the restart) and the checkpoints/ directory, just in case anyone wants to have a look.
[Time:     1327] [Episode:    18465 Score:     2.0000] [RScore:    10.8540 RPPS:  1866] [PPS:  1857 TPS:    35] [NT:  8 NP:  5 NA: 33]

If you use gym for your experiments -> try to use all in Deterministic mode, since that Amidar-v0 should be AmidarDeterministic-v3 or wrap manually v0 to become a deterministic with constant frame skipping.
PS> DeepMind's 1-day is equal to 80mil and they use 16 parallel workers.

If you use gym for your experiments -> try to use all in Deterministic mode, since that Amidar-v0 should be AmidarDeterministic-v3 or wrap v0 manually to become a deterministic with constant frame skipping.
PS> DeepMind's 1-day is equal to 80mil and they use 16 parallel workers.

Oh, okay, I'll do that. Would that explain the sudden meltdown?

@nczempin no, mostly not --> but it can affect on the learning process in time and quality >> stochastic gym's v0 environments can lead you agent from the same state to one another within 2 or 5 frames randomly:
https://github.com/openai/gym/blob/master/gym/envs/atari/atari_env.py#L80

Hm.
with ./_clean.sh;./_train.sh ATARI_GAME='BoxingDeterministic-v3' TRAINING_MIN_BATCH_SIZE=40 with GAE I seem to get a similarly strange behaviour; I'm guessing it's a bug in the GAE code (I will let the non-GAE version run overnight for comparison):
[Time:    11415] [Episode:    12890 Score:     4.0000] [RScore:     3.2790 RPPS:  1912] [PPS:  1909 TPS:    36] [NT: 25 NP:  2 NA: 31]
Here's the "high water mark" of RScore (average score over the default 1000 episodes):
[Time:     7652] [Episode:     9265 Score:    68.0000] [RScore:    60.2050 RPPS:  1905] [PPS:  1910 TPS:    36] [NT: 22 NP:  4 NA: 34]

./_clean.sh;./_train.sh ATARI_GAME='BoxingDeterministic-v3' TRAINING_MIN_BATCH_SIZE=40 without the changes from the GAE PR
[Time:     3601] [Episode:     2634 Score:     5.0000] [RScore:     1.6630 RPPS:  1560] [PPS:  1565 TPS:    30] [NT:  6 NP:  2 NA: 35]
[Time:     5885] [Episode:     5200 Score:    81.0000] [RScore:    68.2340 RPPS:  1583] [PPS:  1579 TPS:    30] [NT:  8 NP:  3 NA: 36]
[Time:     7200] [Episode:     8165 Score:    88.0000] [RScore:    88.1870 RPPS:  1575] [PPS:  1579 TPS:    30] [NT:  7 NP:  3 NA: 34]
[Time:     8045] [Episode:    10298 Score:   100.0000] [RScore:    92.0040 RPPS:  1564] [PPS:  1577 TPS:    30] [NT:  7 NP:  3 NA: 34]
[Time:    24041] [Episode:    55034 Score:    96.0000] [RScore:    99.0730 RPPS:   649] [PPS:  1505 TPS:    28] [NT:  8 NP:  5 NA: 20]

Thx for the experiments! I also notice some meltdowns through the training process with Atari Boxing,
for example:
A3C-FF_without-GAE

A3C-LSTM1_without-GAE

A3C-LSTM2_without-GAE

Thx for the experiments! I also notice some meltdowns through the training process with Atari Boxing
Hm.
That would indicate that I should leave it running for longer and not look at the score.

And perhaps that I need to clarify my intuition about what the score represents.
So just using your (@4SkyNet) bottom diagram "A3C-LSTM2_without-GAE", my understanding was that at around 20 M, we would have had a network that would have given us 80 points on average, within some variation (but none that would ever, within probabilistic confidence, cause us to go below 40 or so points).
And between 20 and 22.5, we are exploring and not finding improvement, but we could always go back to what we had at 20 M.
And it does not mean that we have found a configuration that turns out after more exploration to only be worth 20 points on average (which is sorta what it feels like when the reported scores start going down).
Is my intuition reasonable?

@nczempin I think these meltdowns can be caused by some agent's generalization issues wrt exploration and these meltdowns are more environment dependent to my mind --> I don't see such behavior for Breakout in comparison to the Boxing, cuz the first one has more stable environment dynamics.
For example (as I see from visual output):
Boxing agent start to beat the opponent and make some pressure on it.
It has to do more pressure to get more rewards through the time.
And (suddenly) if your agent comes a little behind the opponent,
the game unfoldы them in the opposite direction:
your agent trains to boxing from left to right,
but it has to boxing from right to left from now.
PS> wrt original results DeepMind also has some a bit worse results from 4-day training compare to 1-day (FF).

PS> wrt original results DeepMind also has some a bit worse results from 4-day training compare to 1-day (FF).

That is confusing me; how can the results be worse after 4 days than after 1 day? Or are you saying this is with different algorithms?
Presumably you can always go back to a previous policy that was better, or is it only that we "thought" it was better and now it turns out that it wasn't?

python3 train.py --num-workers 6 --env-id BoxingDeterministic-v3 --log-dir /tmp/boxingd3

@nczempin have you implemented the version with LSTM in TF? I am currently trying in pytorch but I had to add the c, h states in queues of experiences.  Also note that for GAE, i let the parameter self.tau to 1, which is perhaps not the best choice & in theory should not change the performance.

@nczempin have you implemented the version with LSTM in TF? I am currently trying in pytorch but I had to add the c, h states in queues of experiences. Also note that for GAE, i let the parameter self.tau to 1, which is perhaps not the best choice & in theory should not change the performance.

@etienne87 I haven't implemented anything; I just used the GA3C from the head here, from your PR plus the 2 changes, and I'm comparing them to https://github.com/openai/universe-starter-agent with the same environments on the same machine.
Maybe I misunderstood the question?
I was scared for a moment that there may be a bug in your GAE, but @4SkyNet clarified that the observations are more likely to be independent of your GAE changes.

That is confusing me; how can the results be worse after 4 days than after 1 day? Or are you saying this is with different algorithms?

No, algorithms are the same (A3C-FF 1-day & A3C-FF 4-day), but results could be worse after 4-day:

It seems like we get the highest (algo limit) result (see bolds) and then diverge a bit.
For Pong we see the follows (wrt this table):
A3C-FF 1-day: 11.4
A3C-FF 4-day: 5.6

Presumably you can always go back to a previous policy that was better, or is it only that we "thought" it was better and now it turns out that it wasn't?

It's hard to have strictly point in this case. Sometimes it really better than the old one (results, mentioned above), sometimes we just "thought" it was better (boxing meltdown example).

@4SkyNet have you implemented the version with LSTM in TF? I am currently trying in pytorch but I had to add the c, h states in queues of experiences.

@etienne87 unfortunately not. LSTM's which I show is from another version of A3C (similar to vanilla, but a bit synchronous and distributed). I didn't do something with GA3C yet, but it's good to have more versions with LSTM / GAE / Exploration Bonus / etc (may be I turn on it later, I don't really know...)

Also note that for GAE, i let the parameter self.tau to 1

Thx to point it out! @nczempin what tau do you use in starter agent?
PS> I usually set it to 0.97 for TRPO for example

@nczempin what tau do you use in starter agent?
PS> I usually set it to 0.97 for TRPO for example

I use defaults for anything I don't specifically mention

@nczempin, it is my fault, i did not take the time to put the parameter in the Config.py. The parameter is just laying there in ProcessAgent.py

I think we can avoid some meltdowns or get them smoother for some environments if my intuition is right.
This technique called augmentation and it widely used in deep learning:
we can flip the input observation from left to right (by np.fliplr(image) for example)
A3C stacks images for a state representation as some kind of motion,
since we can't randomly flip the input image from left to right at any time within the episode.
But we can do such flipping for whole episode and starts all games with some probability (0.5) to be flipped or not within whole episode.
It make sense for some environments, but it also could cause a bit longer training, but I hope we can avoid some meltdowns by this techniques.

Hum, if you flip image you need to map actions as well, or we need label-safe augmentations techniques.

@nczempin, it is my fault, i did not take the time to put the parameter in the Config.py. The parameter is just laying there in ProcessAgent.py

It wouldn't have made any difference if you had put it in Config.py; I would not have touched it. Or are you saying that you should not have included it?
Also, @4SkyNet asked about the "starter agent"; by that I was assuming he meant the universe-starter-agent. Does that even have this parameter?

Universe starter agent with
python3 train.py --num-workers 12 --env-id BoxingDeterministic-v3 --log-dir /tmp/boxingd3_12 to see how much effect using 12 workers on my 6-core, 12 threads (hyperthreading) i7 would have.

Hum, if you flip image you need to map actions as well, or we need label-safe augmentations techniques.

You are right >> actions should remaps too if it applicable --> and it's simple enough for left-right flipping, where we've to remap left to right && right to left (for Atari games)

Does that even have this parameter?

Yes, they call it lambda and it's equal to 1.0  by defaults

Hm, I've also notices that the episode time becomes a bit shorter for your Boxing within the training --> it's a goo sign, but it's hard to properly control it with currant A3C:
Common episode is equal to 2min, but when your agent reaches 100 points --> you've get KO and game turns in terminal state to start the new one from scratch

@nczempin hm, I've also notices that the episode time becomes a bit shorter for your Boxing within the training --> it's a goo sign, but it's hard to properly control it with currant A3C: Common episode is equal to 2min, but when your agent reaches 100 points --> you've get KO and game turns in terminal state to start the new one from scratch
Are you saying either of the A3Cs have implicit assumptions about episode lengths being more uniform? Or just the original one?
In general, eventually agents will reach maximum scores. In ALE for many of them that roll over the score, this is not actually possible; an episode could potentially play to infinity. It is an open question there how to handle the situation of wrapping. Depending on how the Python interface is used, agents might be discouraged to wrap the score. IMHO it's pointless to keep going once you can wrap the score (for an agent; not necessarily for a human).

@nczempin as I see everything correctly --> there are no improvements from 6 to 12 agents in time >> global_step/sec a bit more 600 for both cases

I thought I saw I slight improvement in wall-clock time, but I didn't look at it in detail. I guess I should have included the fps images as well.

Are you saying either of the A3Cs have implicit assumptions about episode lengths being more uniform? Or just the original one?

No, you just control the training quality by acquiring of some reward (discounted reward).
There are no information about your lives or KOs(in boxing case) for current A3C

Okay, I think I need to clarify what I was referring to:
I don't understand this statement:

but it's hard to properly control it with current A3C:

It sounded to me like you're saying that episodes terminating early is somehow a problem, because some trait of "current A3C" somehow optimizes for episodes that don't terminate early.

It sounded to me like you're saying that episodes terminating early is somehow a problem, because some trait of "current A3C" somehow optimizes for episodes that don't terminate early.

A3C sets the last terminal discounted reward to 0, that's not so good for Boxing.
It's better to set this value to relatively big value to encourage the agent to reach KOs
as soon as possible (we clips all rewards in -1..1, since we can set to only 1 for current algo).
From the other hand, if we have some lives and when we lost the live we should set reward
signal to some negative value --> but we don't control such cases in A3C

A3C sets the last terminal discounted reward to 0

Really? What is the motivation behind this?
I can see how it would make a difference if you had just one final reward at the end and that would be set to 0 (although I'm not sure I understand this correctly), but in Boxing you simply terminate early when one of the players reaches 100, but it is not like one big punch that gets you from 0 to 100.

we clips all rewards in -1..1, since we can set to only 1 for current algo

Wouldn't normalizing be better than clipping? And for both options, wouldn't knowing the max score be helpful? I can't even imagine how you'd clip or normalize without knowing the max (other than the max-seen-so-far), to be honest.
Once (,if this gets implemented,) (some of) the Atari games get to have maximum values in ALE, e. g. Boxing has 100, Pong 21, perhaps there could/should be some way to take advantage of this in algorithms; but wouldn't this count as domain knowledge?

if we have some lives and when we lost the live we should set reward
signal to some negative value --> but we don't control such cases in A3C

I also thought about including other reward signals in ALE, but in the end the number of lives is just part of the state, and with behaviour that minimizes losing lives presumably you'd maximize the score. Or maximizing the rewards will turn out to involve avoiding to lose lives.

Universe Starter Agent:
python3 train.py --num-workers 12 --env-id SeaquestDeterministic-v3 --log-dir /tmp/seaquestd3_12
Wall clock time: just over 10 hours.

Regular GA3C stuck near 1700 points on Seaquest after 12 hours (but still better than universe starter agent):
[Time:     3600] [Episode:     4009 Score:   520.0000] [RScore:   573.0000 RPPS:  1647] [PPS:  1636 TPS:    31] [NT: 10 NP:  2 NA: 32]

[Time:     7201] [Episode:     6712 Score:   560.0000] [RScore:   650.4000 RPPS:  1589] [PPS:  1625 TPS:    31] [NT: 15 NP:  4 NA: 34]

[Time:     9271] [Episode:     8357 Score:  1220.0000] [RScore:  1000.7400 RPPS:  1614] [PPS:  1626 TPS:    31] [NT: 15 NP:  2 NA: 28]

[Time:    16630] [Episode:    13066 Score:  1720.0000] [RScore:  1700.0000 RPPS:  1648] [PPS:  1641 TPS:    31] [NT: 10 NP:  6 NA: 41]

[Time:    27096] [Episode:    19523 Score:  1760.0000] [RScore:  1700.1600 RPPS:  1639] [PPS:  1647 TPS:    31] [NT: 17 NP:  3 NA: 36]

[Time:    45286] [Episode:    30468 Score:  1680.0000] [RScore:  1705.9800 RPPS:  1620] [PPS:  1636 TPS:    31] [NT:  8 NP:  4 NA: 34]

after a promising start, GAE gets stuck near 212 points:
[Time:    19148] [Episode:    36972 Score:   200.0000] [RScore:   212.2800 RPPS:  1936] [PPS:  1996 TPS:    38] [NT:  9 NP:  2 NA: 38]

Montezuma's Revenge, basic GA3C (one can hope):

[Time:    36385] [Episode:    77507 Score:     0.0000] [RScore:     0.3000 RPPS:  1219] [PPS:  1473 TPS:    28] [NT: 35 NP:  4 NA: 35]

I've just added Adventure to ALE: , that might be even harder than Montezuma's Revenge with current algorithms.
I wonder if intrinsic motivation would help it, like it did Montezuma's (a little bit; Adventure is not quite as dangerous as Montezuma's, but the rewards are even sparser).

I'm trying to move my changes to ALE into gym; it's quite tedious because they have diverged, and it's not immediately obvious in what way.

Okay, I seem to have managed to get it to work; here's Adventure running:
[Time:       34] [Episode:        1 Score:    -1.0000] [RScore:    -1.0000 RPPS:    43] [PPS:    44 TPS:    26] [NT:  1 NP:  2 NA: 33]
Really wondering if it will ever get a +1.
Any tips on which implementation I should pick to make this more likely would be appreciated.
Would it be of any help to step in and control manually (sorta off-policy learning)?
Change to openai/atari-py
Change to openai/gym

Huh, the agent reached a score of 0. That's only possible by timing out of the episode. I hope it doesn't learn to sit idly at home forever...
[Time:     2369] [Episode:      182 Score:     0.0000] [RScore:    -0.9945 RPPS:   921] [PPS:   922 TPS:    30] [NT:  2 NP:  4 NA: 31]
Which parameters do I need to set so it will eventually explore to bringing the chalice back to the golden castle?
I'm guessing there's no hope yet; it may require custom rewards to encourage exploration, opening castle doors, etc.
I'm currently looking into providing custom rewarders for openai/universe. The docs are sparse...

Unsurprisingly, the GA3C agent got nowhere on Adventure. Perhaps "distance of chalice to yellow castle" and "have discovered chalice" should somehow be added as rewards, but the values would be somewhat arbitrary.
[Time:    50487] [Episode:     2815 Score:     0.0000] [RScore:    -0.9160 RPPS:  1425] [PPS:  1456 TPS:    28] [NT:  6 NP:  2 NA: 22]

In any case, I think I've answered my original question about GA3C vs. universe-starter-agent and will close this hughe thread now.

So ... what are the conclusions?

GA3C indeed makes better use of available resources; the GAE can help a lot but needs some parameter tweaking that I'm not ready for.
But mainly the conclusion is that I need to spend more time learning about how all of these things work before I can actually give a conclusion.
So I'll continue to try and help in areas where I can bring in my skills (e. g. adding more games to ALE, perhaps add an environment to Gym, other engineering-focused tasks that will satisfy my curiosity and perhaps help the researchers or others), and go right back to Supervised Learning, with maybe a little bit of generic (not general) AI thrown in, plus work my way through Tensorflow tutorials (possibly look at the other libraries), maybe implement some of the classic algorithms from scratch myself, etc.

A3C sets the last terminal discounted reward to 0

Really? What is the motivation behind this?

Indeed - I think that the main motivation about it that terminal isn't good (for most Atari games, since also we use the same set of parameters for all games) and we also can't do some estimation by value "function"

we clips all rewards in -1..1, since we can set to only 1 for current algo

Wouldn't normalizing be better than clipping?

ALE, e. g. Boxing has 100, Pong 21, perhaps there could/should be some way to take advantage of this in algorithms;

Perhaps, but we have to do some investigation of pros and cons wrt rewards changes.
There are some good thoughts from Hado van Hasselt.

I also thought about including other reward signals in ALE

It's good to do some reasonable investigation in this way.

the number of lives is just part of the state

Hm, I don't think so, cuz we just got the raw image as state.
But gym has some access to the lives, I'm not sure about of ALE, but I think it also does.

maximizing the rewards will turn out to involve avoiding to lose lives

Mostly yup, especially if it slowdown rewards gain. But some AI's in some games try also to loss their lives if they could get some advantage.

I wonder if intrinsic motivation would help it, like it did Montezuma's (a little bit; Adventure is not quite as dangerous as Montezuma's, but the rewards are even sparser).

You are right. The intrinsic motivation extremely helps you in such game types > you can add it to some A3C implementation (exploration bonus)

Any tips on which implementation I should pick to make this more likely would be appreciated.

So I'll continue to try and help in areas where I can bring in my skills (e. g. adding more games to ALE, perhaps add an environment to Gym, other engineering-focused tasks that will satisfy my curiosity and perhaps help the researchers or others)

It's great to hear. I also recommend to see on Retro-Learning-Environment (RLE) - it cover not only Atari and also some SNES and even Sega perhaps.

I'm guessing there's no hope yet; it may require custom rewards to encourage exploration, opening castle doors, etc.

Yup, or do something like this

GA3C indeed makes better use of available resources;

Yeah - it's the main reason to organize your data workflow in more efficient way.
It's vanilla A3C, but we can add some reasonably improvements to it.

the number of lives is just part of the state

Hm, I don't think so, cuz we just got the raw image as state.
But gym has some access to the lives, I'm not sure about of ALE, but I think it also does.

Okay, I have to be careful here; what I meant was, the number of lives is (in many cases, ALE does indeed allow to query this, but it's not strictly necessary) part of the internal state of the game, not necessarily of the state that's observed by the agent (which is just pixels).

A3C sets the last terminal discounted reward to 0

Really? What is the motivation behind this?

Indeed - I think that the main motivation about it that terminal isn't good (for most Atari games, since also we use the same set of parameters for all games) and we also can't do some estimation by value "function"

But then how does GA3C even see the -1 on Adventure? Or are you saying the original A3C does it, while GA3C doesn't?
Adventure provides a good reason not simply to use 0 upon "fail", because there is a difference between "failing because eaten" and "failing because we timed out".
Hm, or maybe there isn't.

But then how does GA3C even see the -1 on Adventure? Or are you saying the original A3C does it, while GA3C doesn't?

No, all rewards for both should represents (since clipping) as -1, 1 or 0 if we said about vanilla A3C.
But we don't use these raw rewards --> we use its discounted sum wrt gamma:
It looks like as follows:
def discounted_reward(real_rewards, gamma):
    discounted_r = np.zeros_like(real_rewards, dtype=np.float32)
    running_add = 0
    for t in reversed(range(0, discounted_r.size)):
        running_add = running_add * gamma + r[t]
        discounted_r[t] = running_add
    return discounted_r

rew_test = [1, -1, 0, 1, 0]
print(discounted_reward(rew_test, .95))

[ 0.72187066 -1.31918108  0.80844843  0.91000599 -1.12114406]

And if terminal is reached we just set running_add to 0 for A3C,
if not --> we estimate it by value "function"
I can said some things not so accurate as it seems like it strictly zero.
We just skip out future estimation, cuz it ends but holds the last receiving reward.
Anyway, this reward could be higher for some games, but we lose some kind of
generality if we o that.

Still not sure I understand: Are you saying shooting a regular space invader gives as much reward as shooting a mothership?
The discounting is orthogonal to that question.
Apart from that, I'm not really in a position to argue about any of this. When I have a better understanding of actor-critic and all that I need to know before that, I may revisit this. So far I've watched the David Silver lectures, and I have some catching up to do.
In my engineer mindset I also like to implement all these different techniques like TD(lambda) etc., and obviously there is a lot I have to do before I even get to regular AC.

Are you saying shooting a regular space invader gives as much reward as shooting a mothership?
The discounting is orthogonal to that question.

Yes, but I don't really know about space invaders scores > all of them is clipped in -1..1 for generalization and it's not good way if we want to give more from specific environments (perhaps, we have to do some investigation, cuz "blind" moves can also affect in negative way).
Discounting reward it just some technique wrt horizon of view to our received rewards. It could be more optimistic, for example, if we hit "motherships". And it is also affect on behavior, for example again:
gamma=0.95 is more preferable than gamma=0.99 for PacMan, since in the last case it has more fear to do some things and sitting in the corner.

Not sure I follow.
The rewards come from the environment, the algorithm is trying to figure out how to get these rewards and the algorithms are ranked based on how well they do compared to other algorithms (or humans) in score. If you treat a regular space invader the same as a mothership (indirectly; your algorithm knows nothing about different types, it just knows that in state s1 it was better to move slightly to the right and then shoot, to get the (points for the) mothership rather than to the left and get the points for the regular invader.
That is completely general as long as the environment gives out rewards.
As I said, I know what discounting reward is and what it is for; like in finance, getting a reward now is better than getting a rewards tomorrow, and how much better is determined by the discount factor, which is usually a measure of uncertainty; in finance it is dynamic, based on risk vs. reward.
But the discount factor doesn't have anything to do with the reward coming from a mothership or not, unless your algorithm takes into account that to get the higher score it also risks dying more often.
And when you have very sparse rewards, it makes sense to have a low discount factor (a high gamma), because otherwise the reward might disappear after enough steps due to rounding. Although technically if the rewards are really sparse (like in Adventure, only +1 right at the end) it shouldn't make any difference as long as you don't round to 0. The 1 will always be more than any other reward.
I guess in that case (rounding it away) it may even make sense to dynamically adjust the gamma: If you keep finishing episodes without getting any rewards, gamma should eventually be increased so that later rewards eventually get counted in the present.

@nczempin you definitely right.
And it's not so simple with gammas, but you can try.
PS> for chess we always get +1, -1 or 0 at the end and some hand-crafting intermediate rewards often hurts than helps, cuz it really hard to estimate such things by human)


[#170056541] UAA group member's origin should equal "uaa"

What
The origin field of a group member is not the same as the origin field of a user. From https://docs.cloudfoundry.org/api/uaa/version/74.4.0/index.html#add-member:

origin: The originating IDP of the entity, or "uaa" for groups and internal users

So users signing in with Google should have an origin of google, but their group memberships should have an origin of uaa.
How to review

See that the tests go green;
Code review.

I've run this manually against staging and it worked as expected 🎉:

The existing group memberships with origin=google were all removed.
New group memberships with origin=uaa were created.
Subsequent runs don't make any unexpected changes.

Who can review
Not @46bit.

Confession: I think this could do with a refactoring to better encapsulate lots of things. But I don't think that should be a priority–the tests and README hopefully document things well.


Cart.php allows you to enter negative numbers of Qty

if ($items['qty'] == 0)
{
   unset($this->_cart_contents[$items['rowid']]);
   return TRUE;
}

Qty allows you to enter negative numbers, creating discounts in the shopping cart.
"<=" solves the problem.

The shopping cart was deprecated, and abandoned in Dec 2016.
https://github.com/bcit-ci/ci3-cart-library


improve packages required section for mac

- Install packages on MacOS
  - nginx [here](https://www.javatpoint.com/installing-nginx-on-mac)
  - certbot `brew install certbot`
  - redis-server [here](https://medium.com/@petehouston/install-and-config-redis-on-mac-os-x-via-homebrew-eb8df9a4f298)
  - git from [here](https://www.atlassian.com/git/tutorials/install-git)
  - python3 [here](https://docs.python-guide.org/starting/install3/osx/)
  - poetry `pip3 install poetry` or from [here](https://python-poetry.org/docs/#installation)
  - tmux `brew install tmux`

links can't contain atlassian or medium links....

fixed in https://github.com/threefoldtech/js-sdk/commit/621ac8f3da9a236659acad11ec442060bd4201ae

verified.


updated protocole in STX logo (fixes 969)

Description:
Updates the protocoles in the link to STX next from http to https (CfP and WRK protocols are OK)
New imports / dependencies:
None
Unit Tests:
None
What tests do I need to run to validate this change:
Check with web tools

Codecov Report

Merging #972 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #972   +/-   ##
=======================================
  Coverage   87.69%   87.69%
=======================================
  Files         110      110
  Lines        2884     2884
  Branches       23       23
=======================================
  Hits         2529     2529
  Misses        353      353
  Partials        2        2

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 3129022...6c6b3a4. Read the comment docs.


Storage Items Skipped

I was testing an extrinsic which executes some storage migration, and noticed that lots of storage items seem to be ignored.
The main logic of the call looks like this:
match OldLedger::<T>::drain().next() {
                ... // do something here

OldLedger is just a simple storage map, and the above snippet is called in a loop - so many entries are deleted/migrated per call.
When I test this using the try-runtime, there are around 21k entries.
But when I tested it with chopsticks, I noticed that the migration is done using way too few extrinsic calls,
because it seems to omit lots of items. Only a few hundred entries got migrated. And it seems to be different each time I redo the migration.
It might be that this is some known shortcoming, but I checked the existing issues and didn't notice anything covering this.

would you be able to produce a wasm or something so we can reproduce the issue?

Of course!

Please use shibuya-118 from Astar's v5.28.0 release
Shibuya has been upgraded yesterday, so I'd suggest to fetch the state from block the 5335600
use the extrinsic dappStakingMigration -> migrate(None)

When running the migration yesterday, it took hours for all the steps to complete, with roughly 21k entries to migrate, and 130k to delete. But when using the fork, it can take only a few calls to complete everything.

This is a limitation of chopsticks, in this scenario you can't drain more than 1000 keys. This is a low priority issue because you really shouldn't use chopsticks to drain your entire storage because it will take forever. What you should do is clearPrefix OldLedger and insert some entries for testing. https://github.com/AcalaNetwork/chopsticks/blob/77bf6207248372bf2e5dee4efda637b7d20b6c83/configs/kusama.yml#L22

Thanks for the explanation and the link, I'll keep it mind for the future. 👍
The goal of my test was to let the migration script run for some time, just to confirm everything works as I expect.
I only raised the issue after seeing the discrepancy between try-runtime testing & amount of entries migrated/deleted.
Is the 1000 limit related to how many storage items can be read/written during a single call? Or is it related to a particular storage item (e.g. map)?


Error doing "make -j$(nproc)"

[  1%] Generating ../../../lib/xpp/include/xpp/proto/x.hpp
[  2%] sphinx-build man: see doc/builder-man.log
[  2%] sphinx-build html: see doc/builder-html.log
[  6%] Built target jsoncpp_lib_static
[ 11%] Built target polybar-msg
[ 12%] Generating ../../../lib/xpp/include/xpp/proto/composite.hpp
Traceback (most recent call last):
File "/opt/polybar/lib/xpp/generators/cpp_client.py", line 3101, in
from xcbgen.state import Module
File "/usr/lib/python3/dist-packages/xcbgen/state.py", line 7, in
from xcbgen import matcher
File "/usr/lib/python3/dist-packages/xcbgen/matcher.py", line 12, in
from xcbgen.xtypes import *
File "/usr/lib/python3/dist-packages/xcbgen/xtypes.py", line 5, in
from xcbgen.align import Alignment, AlignmentLog
File "/usr/lib/python3/dist-packages/xcbgen/align.py", line 5, in
from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.9/fractions.py)
make[2]: *** [lib/xpp/CMakeFiles/xpp.dir/build.make:93: ../lib/xpp/include/xpp/proto/x.hpp] Error 1
make[2]: *** Deleting file '../lib/xpp/include/xpp/proto/x.hpp'
[ 13%] Generating ../../../lib/xpp/include/xpp/proto/randr.hpp
Traceback (most recent call last):
File "/opt/polybar/lib/xpp/generators/cpp_client.py", line 3101, in
from xcbgen.state import Module
File "/usr/lib/python3/dist-packages/xcbgen/state.py", line 7, in
from xcbgen import matcher
File "/usr/lib/python3/dist-packages/xcbgen/matcher.py", line 12, in
from xcbgen.xtypes import *
File "/usr/lib/python3/dist-packages/xcbgen/xtypes.py", line 5, in
from xcbgen.align import Alignment, AlignmentLog
File "/usr/lib/python3/dist-packages/xcbgen/align.py", line 5, in
from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.9/fractions.py)
make[2]: *** [lib/xpp/CMakeFiles/xpp.dir/build.make:81: ../lib/xpp/include/xpp/proto/composite.hpp] Error 1
make[2]: *** Deleting file '../lib/xpp/include/xpp/proto/composite.hpp'
[ 14%] Generating ../../../lib/xpp/include/xpp/proto/xkb.hpp
Traceback (most recent call last):
File "/opt/polybar/lib/xpp/generators/cpp_client.py", line 3101, in
from xcbgen.state import Module
File "/usr/lib/python3/dist-packages/xcbgen/state.py", line 7, in
from xcbgen import matcher
File "/usr/lib/python3/dist-packages/xcbgen/matcher.py", line 12, in
from xcbgen.xtypes import *
File "/usr/lib/python3/dist-packages/xcbgen/xtypes.py", line 5, in
from xcbgen.align import Alignment, AlignmentLog
File "/usr/lib/python3/dist-packages/xcbgen/align.py", line 5, in
from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.9/fractions.py)
make[2]: *** [lib/xpp/CMakeFiles/xpp.dir/build.make:85: ../lib/xpp/include/xpp/proto/randr.hpp] Error 1
make[2]: *** Deleting file '../lib/xpp/include/xpp/proto/randr.hpp'
Traceback (most recent call last):
File "/opt/polybar/lib/xpp/generators/cpp_client.py", line 3101, in
from xcbgen.state import Module
File "/usr/lib/python3/dist-packages/xcbgen/state.py", line 7, in
from xcbgen import matcher
File "/usr/lib/python3/dist-packages/xcbgen/matcher.py", line 12, in
from xcbgen.xtypes import *
File "/usr/lib/python3/dist-packages/xcbgen/xtypes.py", line 5, in
from xcbgen.align import Alignment, AlignmentLog
File "/usr/lib/python3/dist-packages/xcbgen/align.py", line 5, in
from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.9/fractions.py)
make[2]: *** [lib/xpp/CMakeFiles/xpp.dir/build.make:89: ../lib/xpp/include/xpp/proto/xkb.hpp] Error 1
make[2]: *** Deleting file '../lib/xpp/include/xpp/proto/xkb.hpp'
make[2]: Target 'lib/xpp/CMakeFiles/xpp.dir/depend' not remade because of errors.
make[1]: *** [CMakeFiles/Makefile2:660: lib/xpp/CMakeFiles/xpp.dir/all] Error 2
[ 17%] Built target i3ipc++
WARNING: html_static_path entry '/opt/polybar/doc/_static' does not exist
WARNING: html_static_path entry '/opt/polybar/doc/_static' does not exist
[ 17%] Built target doc_html
[ 17%] Built target doc_man
[ 17%] Built target doc
make[1]: Target 'all' not remade because of errors.
make: *** [Makefile:149: all] Error 2
make: Target 'default_target' not remade because of errors.

Duplicate of #2293


[HTTP] Remove forwarded config and add it as a optional param to client actions

Description:
$subject.

Closing this as this is not a high priority task.


API Response Trait :: failValidationError() Status Code 422

Hello!
I am studying the new documentation and that the failValidationError() method of the API Response Trait library responds to code 400 by default.
I'm not sure, but I just see how to answer the code validation errors at http://doers.statuspage.io/api/v1/users/ and http://stackoverflow.com/questions/16133923/400-Vs-422-response-to-post-of-date as 422.
I wonder if this can be changed in the default system.
Thank you. CI 4 is incredible.

The SO link you provided has much more concrete arguments for using 400 than StatusPage using a 422. By default, I think it should stay a 400, since that link is very much inline with much of the reading up on it that I had done previously. If a developer wishes to use a different value, they can always customize it for their needs.


New keyboard actions:   sleep/panic button and background mode

x should pause playback and hide player (and player editor, if it is open).
Pressing it again would restore player's visibility and resume playback.
b  should just toggle player visibility (keeping playback in the background)

spacebar pauses/plays current YouTube video


[HUDI-1479] Use HoodieEngineContext to parallelize fetching of partiton paths

What is the purpose of the pull request
In HUDI-1510 we moved HoodieEngineContext so it can be used to parallelize fetching of partition paths from FileSystemBackedMetadata implementation. This PR actually uses it to do the parallelization.
In addition, we fix HoodieTableMetadata to create HoodieBackedTableMetadata or FileSystemBackedTableMetadata depending on whether metadata is enabled or not.
Committer checklist

[x] Has a corresponding JIRA in PR title & commit

[x] Commit message is descriptive of the change

[ ] CI is green

[ ] Necessary doc changes done or have another open PR

[ ] For large changes, please consider breaking it into sub-tasks under an umbrella JIRA.

Codecov Report

Merging #2417 (145372c) into master (17df517) will decrease coverage by 40.10%.
The diff coverage is 100.00%.

@@              Coverage Diff              @@
##             master    #2417       +/-   ##
=============================================
- Coverage     50.19%   10.09%   -40.11%
+ Complexity     2990       48     -2942
=============================================
  Files           415       52      -363
  Lines         18439     1853    -16586
  Branches       1885      223     -1662
=============================================
- Hits           9255      187     -9068
+ Misses         8427     1653     -6774
+ Partials        757       13      -744

Flag
Coverage Δ
Complexity Δ

hudicli
?
?

hudiclient
?
?

hudicommon
?
?

hudiflink
?
?

hudihadoopmr
?
?

hudisparkdatasource
?
?

hudisync
?
?

huditimelineservice
?
?

hudiutilities
10.09% <100.00%> (-59.57%)
0.00 <1.00> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

The diff coverage is 100.00%.

@@              Coverage Diff              @@
##             master    #2417       +/-   ##
=============================================
- Coverage     50.19%   10.09%   -40.11%
+ Complexity     2990       48     -2942
=============================================
  Files           415       52      -363
  Lines         18439     1853    -16586
  Branches       1885      223     -1662
=============================================
- Hits           9255      187     -9068
+ Misses         8427     1653     -6774
+ Partials        757       13      -744

Flag
Coverage Δ
Complexity Δ

hudicli
?
?

hudiclient
?
?

hudicommon
?
?

hudiflink
?
?

hudihadoopmr
?
?

hudisparkdatasource
?
?

hudisync
?
?

huditimelineservice
?
?

hudiutilities
10.09% <100.00%> (-59.57%)
0.00 <1.00> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

 Please revert back. We discussed this before and chose to deliberately keep HoodieJavaEngineContext untouched. Every other engine context lives with its client.

moved HoodieJavaEngineContext to hudi-common and remove HoodieLocalEngineContext
Let's not do this. Please revert back. We discussed this before and chose to deliberately keep HoodieJavaEngineContext untouched. Every other engine context lives with its client.

@n3nash please drop me a ping once the CI is happy

@n3nash please drop me a ping once the CI is happy


3120 deprecate env aliases config v2

Migrated from GitLab: https://gitlab.com/meltano/files-dbt/-/merge_requests/12
Originally created by @kgpayne on 2022-05-26 11:48:20

@aaronsteers We can merge this now, ahead of 2.0, as this will also work in pre-2.0 installations.


Feat: Add attention forward pass and bump cust to 0.3.2

u can merge this when you need to, not going to merge it myself since idk why u closed it


[Feature Request] merge all library

#248 # Why/User Benefit/User Problem
It would benefit those who have a big library and who might not think to check each and every Manga to see if it needs to merge or not. It's not a problem, but it would make it really super user friendly.
What/Requirements
Instead of merging each Manga one by one, a "merge all" button could be added which would look at the whole library at once, automatically update the manga which are 100% same, and would ask if it would not be sure, so the user could change/select the correct.
Ps: is there a donation button somewhere?

this would be nice. or even a filter that shows that theres missing chapters

no plans to add this.  I will add a couple filter options though


Update syntax

Codecov Report
All modified lines are covered by tests :white_check_mark:

Files
Coverage Δ

src/objectory/registry.py
100.00% <100.00%> (ø)

src/objectory/utils/config.py
100.00% <100.00%> (ø)

src/objectory/utils/object_helpers.py
100.00% <100.00%> (ø)

:loudspeaker: Thoughts on this report? Let us know!.


Add set function for sliding_semaphore max_difference

This allows the semaphore distance to be adjusted after initial use.
Largely obsolete now, due to the limiting_executor, but I have some code still using this.

Added a mutex. Hope this can be merged now.

My bad. just that one mistake. fixed now. please check.


Protocol Owned Liquidity & Stability Fund Display

We are in the process of building a smart contract for the Balanced DAO Fund to be able to supply liquidity on the Balanced DEX. We should display the liquidity details in the Performance Details section, probably below "Holdings". We essentially need to break up holdings into three categories:

DAO Fund
Protocol Owned Liquidity (should look similar to a liquidity details section, where the DAO Fund is the user)
Stability Fund (should look similar to Holdings)

@BennyOptions you can preview the design here: http://balanced-development.s3-website-us-east-1.amazonaws.com/stats-dev/financial-statements/

perfect @parrot9design!

blocked by the deployment of the stability fund and POL contracts

Resolved in https://github.com/balancednetwork/balanced-network-info/pull/134.


[WIP] Fix windows build for large sync tests

Motivation
Attempts to fix windows build issue described in https://github.com/ZcashFoundation/zebra/issues/1651
This PR by now is just to test stuff starting by removing the conditional and reproduce the problem again.
Solution
None yet.
Review
Please don't review yet.
Related Issues
Closes https://github.com/ZcashFoundation/zebra/issues/1651
Follow Up Work
https://github.com/ZcashFoundation/zebra/issues/1730

This feels like a workaround, rather than a solution to the underlying issue.
Did you find out why these errors are happening?
Are we running out of disk space?

LINK : fatal error LNK1201: error writing to program database 'D:\a\zebra\zebra\target\debug\deps\acceptance-2152ea11e4e85cec.pdb'; check for insufficient disk space, invalid path, or insufficient privilege

LINK : fatal error LNK1318: Unexpected PDB error; FILE_SYSTEM (3) 'D:\a\zebra\zebra\target\debug\deps\acceptance-7abd02c8246b2b6d.pdb'

@dconnolly can probably tell you how to make the disks bigger across all our platforms.

The error is definitely lack of space in the D:\ drive of windows. I don't know if it is possible to have more space but as a workaround in the last version of this PR i am deleting the build folder between the normal tests and the ignored tests. In my previous test i got timed out in windows after 45 minutes so i think this it's a little tight thus extended the time to 60 minutes even if the past pass was done in 42 minutes.

The error is definitely lack of space in the D:\ drive of windows. I don't know if it is possible to have more space

Yeah GitHub runners have 14GB of disk space, which sounds low for our needs; I haven't looked yet if we can config more space, or if we should/can aggressively clean up build results where possible for these jobs
https://docs.github.com/en/actions/reference/specifications-for-github-hosted-runners#supported-runners-and-hardware-resources

The error is definitely lack of space in the D:\ drive of windows. I don't know if it is possible to have more space

Yeah GitHub runners have 14GB of disk space, which sounds low for our needs; I haven't looked yet if we can config more space, or if we should/can aggressively clean up build results where possible for these jobs, as @oxarbitrage is doing in latest changes
https://docs.github.com/en/actions/reference/specifications-for-github-hosted-runners#supported-runners-and-hardware-resources

I don't think we can increase runner disk space, the only paid storage options are for build artefacts and packages:
https://docs.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions#about-billing-for-github-actions
GitHub supports self-hosted runners with different virtual machine configs, but they don't recommend using self-hosted runners on public repositories for security reasons:
https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
I'll follow up with some suggestions about making the build smaller, once I've checked the details.

I suggest we try to remove unnecessary build data (which will be faster). If that isn't enough, then we can delete build products between jobs (which is slower).
We can disable incremental compilation, because we only compile once in CI:
CARGO_INCREMENTAL=0

Environmental variables:
https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-reads
Incremental compilation:

Incremental compilation causes rustc to save additional information to disk which will be reused when recompiling the crate

https://doc.rust-lang.org/cargo/reference/profiles.html#incremental
Enabling basic optimisations:
I also checked the rustc code generation flags. We could reduce code size by enabling optimisation level 1, but that might make panic messages and backtraces less useful. So let's see how we go disabling incremental compilation first.
RUSTFLAGS="-C opt-level=1"

https://doc.rust-lang.org/rustc/codegen-options/index.html#opt-level
I'm pretty sure all our code is being built using the test profile, but we should check that we're not building the zebrad acceptance tests binary in dev, release, or bench mode. Because that could double our disk space usage.

To be clear, I think we should try these things one at a time, and stop at the first one that works.

I seems that disabling incremental builds alone will just do it. I am not sure how tight we are with this but should work by now, when and if we get new problems about disk space we might consider the other options. Marking the PR as ready now.

I am not sure how tight we are with this

It would be nice if CI reported the remaining disk space when the build finished. But that's not a blocker for this PR.
On Linux and macOS, that's df -h. Not sure about Windows though. There aren't any GitHub actions for it either.

I am not sure how tight we are with this

It would be nice if CI reported the remaining disk space when the build finished. But that's not a blocker for this PR.
On Linux and macOS, that's df -h. Not sure about Windows though. There aren't any GitHub actions for it either.

This is now #1744.


Refactor config builder

Motivation
At present, config builder is a little confusing and inconsistent; it contains a lot of unnecessary code complexity which makes it difficult to reason about with respect to the actual generated configs. This PR takes some steps to simplifying config builder. It does so in 6 commits:

Commits 1 - 3 refactor key manager config, validator config and full node config, respectively. Here, we avoid using setter methods() where appropriate and simply make the internal fields public. This not only removes a lot of code, but it makes future refactors easier and helps to avoid potential errors: for example, full node config currently has two methods (public() and enable_remote_authentication()) which both modify the same internal field "enable_remote_authentication".. and one of the methods appears to be unused in the code base? Moreover, as public() is undocumented (and arguably, not well named) it's unclear what this method should actually do..

Commit 4 renames some of the fields in validator config builder: (i) to provide more self clarity; and (ii) to be consistent with the names in validator config. This helps avoid confusion about what config builder is doing.

Commit 5 renames some of the fields in full node config builder to be consistent with validator config and the rest of the config code.

Note: in commits 4 and 5, this PR does not change the fields/arguments exposed by config-builder/main.rs. This is because changes to the names of these arguments may break external dependencies (e.g., docker containers). If we think it's worth fixing these arguments, this can be done in a future PR.
Have you read the Contributing Guidelines on pull requests?
Yes.
Test Plan
All existing tests still pass.
Related PRs
None.

Thanks, David! 😄 @bors-libra r=davidiw

:pushpin: Commit 6bfb946 has been approved by davidiw

:hourglass: Testing commit 6bfb94602564b60aa2915c2d54df55470edc32b9 with merge 299a9950080a2ad1d0d1adf69722246ad15c7ae3...

:sunny: Test successful - checks-actions_land_blocking_test, checks-circle_commit_workflow
Approved by: davidiw
Pushing 299a9950080a2ad1d0d1adf69722246ad15c7ae3 to master...


BFO terms in AmiGO are confusing

Having BFO terms in AmiGO is confusing. Can we not load them?
http://amigo.geneontology.org/amigo/term/BFO:0000003
Thanks,
Rama

Unfortunately, I can't remember what additional steps are necessary beyond the above code and letting the loader naturally load after an update. I've done the update, and if the loader is successful, I'll consider this closed for 2.2.

Does this require us (stanford) to do a push?
R

When the time comes, this will be included in the 2.2 release.

Confirmed removal on last labs load.


replaces IMDbPY with imdbparser in movie module

Fixes: #375

Thanks @JindalMohit! 👍

@elihusmails Can you elaborate more on the source code not compiling part? 🤔


Blockly Pond renames variables x and y, only on compressed

Describe the bug
Generated code with variables x and y, renames them to x2 and y2, unlike running on uncompressed which does not rename these variables.

To Reproduce

Steps to reproduce the behavior:

Go to https://blockly.games/admin
Set debug to uncompressed
Go to https://blockly.games/pond-duck?lang=en
Add a function definition block with parameters x, y, and z, any order
Observe generated code does not rename variables
Repeat previous steps, but set debug compressed and observe generated code renames x and y to x2 and y2

Expected behavior
Compressed should not rename variables x and y.

Desktop (please complete the following information):

OS: Ubuntu
Browser chrome

Additional context
Can be repro'd on blockly.games or locally using code on master.
Does not repro on Blockly developer playground.

The Closure Compiler renames all sorts of things to make the code shorter.  In this case, Blockly.Block.prototype.getFieldValue is being renamed to x (and y is some other function I don't immediately recognize).  The result is that x and y are global variables when compiled.
Blockly's JS generator scans the current environment for globals, and renames any conflicts.  That deals with stuff like Math, or encodeURIComponent that would cause a conflict in any environment.  In this case renaming x and y is not needed since those two globals only exist in the browser's environment, not the JS-Interpreter's sandbox.
To summarize, the renaming is not required, but it is harmless, and it is the expected behaviour of Blockly's code generators.
In any event, if this were to be addressed, it would be on Blockly's side, not Blockly Games.


Can you clarify the support (or lack of support) for web-browsers?

Hello, and thanks for working on this great open source project. I'm seeing this in the docs:

Note that web-browser Javascript is currently not supported (only NodeJS runtimes).

However it's not clear to me if that means importing this library into a browser javascript app is just not officially support or if it's there are specific features that would totally break. Is there any more information about this? Is this only meant for Electron apps?

At the beginning, we were hoping that the "JS" Readium2 components (i.e. r2-utils-js, r2-lcp-js, r2-shared-js, r2-opds-js, r2-streamer-js, r2-navigator-js) would somewhat support isomorphic Javascript / dual NodeJS + browser runtimes (with r2-testapp-js and readium-desktop / Thorium focusing specifically on Electron). However in practice the development priorities / real-world integration context has been Electron + NodeJS.
There is some "vanilla" JS/TS available in the codebase, including some useful DOM/CSS-related functionality, but these are currently not isolated / usable as off-the-shelf building blocks for web-browser applications.
As for r2-navigator-js more specifically: this is totally engineered around Electron (webview instead of browser iframe, and quite a few other critical functional dependencies) ... so the package should really be named r2-navigator-electron.
Sorry for the confusion.

Thank you for the response, this is super helpful!

This looks like a great project, I wish I was deploying to Electron rather than Web.   Any suggestions on a web-browser compatible alternative?  I am currently using epub.js, but I am looking for something that supports SMIL and media types.
It looks like this might be an option:  https://github.com/readium/readium-js but it is not ideal for many reasons, one of which is that it does not appear to be maintained any longer.

The "Readium Web" project is in its infancy, I'm afraid: https://github.com/readium/web
So EPUB.js / ReadiumJS / etc. are indeed your most likely options at the moment.

ok thanks!  I explored pulling out the media-overlays module from r2-navigator-js, but it appears that it will require a fair amount of refactoring before it will function happily in a web browser.  Now I am headed down the path of borrowing code from Readium-js that handles parsing the package.opf and the smil XML files.  I plan to take this and build my own audio controls and highlighting functionality.

For what it's worth, it's not too hard to use Readium CSS and them implement your own interactive web page on top of that with whatever JS tools you prefer.


Add cursor actions

This makes alt + <, alt + >, alt + delete work
Fixes #53 #157
WIP
There's one open question. How do we want to trigger those methods?
Should I add a new variable in here?https://github.com/zeit/hyperterm/blame/master/app/lib/components/terms.js#L21-L23
Or just set it up in the ui and don't use commands and reducers?

The only reason the write object exists is for extensibility, so that plugins can alter the writes all throughout the Redux pipeline. It's a bit overkill, but I think well justified for that specific reason.
Is this something we can use mousetrap to capture?
https://github.com/zeit/hyperterm/blob/master/app/lib/containers/hyperterm.js#L37

Is this something we can use mousetrap to capture?

Yes. But I had to ignore the alt key onKeyDown in hterm: https://github.com/zeit/hyperterm/pull/217/files#diff-c48d64c2956762890a45849618f86817R32
So now everything is working. But I'm not using dispatch yet.
I

I've also renamed the tab shortcuts. So this would be ready to merge.

Please be patient. We're all living in different time zones. And it's 3am in CA.
And we're not working full time on that project.

Wonderful as always @marcbachmann 🙏

This works just as expected, really awesome - thank you!

I love this, but how to modify the key binding?

You can't yet 😞


Specify ruby-version and bump nokogiri

My other PR was failing on CircleCI with the following error
Gem::InstallError: public_suffix requires Ruby version >= 2.0.

@cshold

👍


More CYW43 config tweaks

Re-synchronise the PICO_CMAKE_CONFIG: entries with the corresponding PICO_CONFIG: entries
Fix a silly typo I made in #2002
Enhance config-extraction scripts to catch similar typos in future

This is a follow-up to the previous #2002 (I spotted the typo, and ended up "fixing" a few other things in the process of fixing that!).

I suspect this may conflict with the int_frac change which i'd like to merge first

I suspect this may conflict with the int_frac change which i'd like to merge first

Undoubtedly. Your PR is much chunkier than this one, so I'm happy to rebase this after #1926 has been merged :+1:

This has now been rebased on the latest develop, now that #1926 has been merged. Surprisingly, there were no conflicts! :partying_face:


Grafana Dashboard CR not working when enabed TLS in grafana

Dashboard not getting created using CR "GrafanaDashboard" when grafana runs on https.
All the other CR's working perfectly when grafana runs on https.
Example: When we try to deploy a sample  service with grafana dashboard CR packaged into the helmchart of the sample service, dashboards of the sample service are not getting created automatically in grafana.
The label used in GrafanaDashboard CR is correct and we have used --scan-all option to read dashboards CR's deployed cluster wide.
We have deployed grafana operator v4.4.1 and grafana v9.0.2.
Steps to reproduce the behavior:

Images used are "grafana/grafana-enterprise:9.0.2" and "quay.io/grafana-operator/grafana-operator:v4.4.1"
Deploy grafana operator,crd's, grafana, grafana datasource and grafana dashboard cr's in single helm deployment.
Added config related to tls as mentiond in pull request "https://github.com/grafana-operator/grafana-operator/pull/772"
Grafana and operator pods came to running state
Able to launch and authenticate to grafana on https but dashboards are not created
I can see below error when described the grafana dashboard CR

and grafana is throwing below error

Expected behavior
Dashboard of a service should be created automatically  in grafana when grafanadashboard CR is deployed when TLS is enabled in grafana and deployed through operator.
Suspect component/Location where the bug might be occuring
This issue is occuring only when tls enabled in grafana
Runtime (please complete the following information):

OS: rhel 7.7
Grafana Operator Version 4.4.1
Environment: kubernetes v1.21
Deployment type: operator

Tested same scenarion with grafana version 8.5.0 . Getting same "tls handshake error"
Could you please prioritize this issue and help us out as this is the major security blocker for our usecase.

Probably related to https://github.com/grafana-operator/grafana-operator/issues/642, which got fixed in: https://github.com/grafana-operator/grafana-operator/pull/772. It's not included in any release yet, so you can either wait for project maintainers to create one or just build an image yourself from the master branch.

Hi,
I have cloned it and tried to build. Getting below error.

Do i need to set any env varaibles here. Anything i am missing?

@pb82 @NissesSenap Should we think about a release soon? ^^

Hi Stefanski
Thanks for the update. I want to let you know that,
We need this feature and it would be good if you could release this feature asap. Please let us know when we can expect the release, so that we can plan our usecases accordingly.

@HubertStefanski @NissesSenap we have a fair number of bugfixes and features since the last release. So we're in a good spot to create a new one.

We will discuss a release during today's meeting. But since this is already solved I will close this issue.

Thanks @HubertStefanski @NissesSenap for quick responses.
I will start using v4.5.0

Hi Team
I want to know which version of grafana can be used with operator v4.5.0
We are using "baseImage" option to provide a custom grafana image(grafana/grafana:).
To be fully compatible with operator v4.5.0 which version of grafana we should use?


Missing monsters from dungeons

Shrieking Terror
Blunderbore

Thx I will look into it, do you know which dungeon this is? Never ran any dungeon myself.

Shrieking terrors are now there, but I can't find blunderbore. Could they appear with another name?

Found it, I was only reading the first 10 monsters for each map since normal maps dont have more monsters anyway, but dungeons have more monsters (blunderbore was at slot 11).
https://github.com/finpingvin/pd2-gamefiles-parsing/commit/e7ae9a7fb253542da4e4f3b57f0a8cfceb559845
Now blunderbore shows up in the dungeons :)

The dungeons look correct to you now?


quantized exmaple with CUDA Error: not a f64 F32(1e-5)

root@C.10187155:~/candle$ cargo run --example quantized --features cuda --release -- --prompt "<s> <Document 1> Invoice 234 Tomato 3 kg 400$ Nuts 4 kg 1600$ Total: 2000$ </Document 1> <Document 2> Medical card 769 Client name: John Smith History of illness: Bla Bla Bla Last visit hospital date: 17 march 1979 Personal doctor name: Anna Zuzuko </Document 2> Compare document 1 and document 2. Do these documents relate to the same area or topic? Tell me the percentage of similarity. Similarity percentage:" --which mixtral
    Finished release [optimized] target(s) in 0.40s
     Running `target/release/examples/quantized --prompt '<s> <Document 1> Invoice 234 Tomato 3 kg 400$ Nuts 4 kg 1600$ Total: 2000$ </Document 1> <Document 2> Medical card 769 Client name: John Smith History of illness: Bla Bla Bla Last visit hospital date: 17 march 1979 Personal doctor name: Anna Zuzuko </Document 2> Compare document 1 and document 2. Do these documents relate to the same area or topic? Tell me the percentage of similarity. Similarity percentage:' --which mixtral`
avx: true, neon: false, simd128: false, f16c: true
temp: 0.80 repeat-penalty: 1.10 repeat-last-n: 64
loaded 995 tensors (26.44GB) in 0.35s
Error: not a f64 F32(1e-5)

Thanks for reporting this, that's a bug I introduced yesterday, it should be fixed in #1913 .

Thank you for fix! It is work now!!!


Update Pending Intent Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE

Update Pending Intent Android 12 SDK 31 above

Arghhh, this pull request was not built by CI and introduced a build issue


Expandable lists

Hi,
I'm not sure if this qualifies a bug report, a feature request or just a request for extra documentation.
Here is my problem:
I have to represent a book's table of content as a list. I found the layout I need here: https://www.google.com/design/spec/components/lists-controls.html#lists-controls-usage, under expand/collapse.
I found nothing about how to apply it for the web. The documentation is silent here: https://www.getmdl.io/components/index.html#lists-section.
This is the code to my 1st level:

Lorem Ipsum

Eum hinc argumentum te

If I add a
 as mdl-list after any of the  , it simply disappears. I tried adding it as secondary content, but then the list appears inline with the .
Please advise.

This would be a feature request :wink:
MDL doesn’t cover 100% of the MD spec (far from it, actually), so certain parts have not been implemented (yet). Expanding lists are one of these features. To be honest, I don’t think this will happen anytime soon as we are working on v2, so I suggest you either implement something yourself or choose another way of representing your ToC.

FYI, there is a prototype of expandable lists in a drawer linked in #221 here.

Great! I will use it as inspiration.
On Wed, Feb 17, 2016 at 4:02 AM, David Z. Chen<EMAIL_ADDRESS>wrote:

FYI, there is a prototype of expandable lists in a drawer linked in #221
https://github.com/google/material-design-lite/issues/221 here
https://github.com/google/material-design-lite/issues/221#issuecomment-122143874
.
—
Reply to this email directly or view it on GitHub
https://github.com/google/material-design-lite/issues/4092#issuecomment-185104280
.

--
France Baril
Architecte documentaire / Documentation architect
<EMAIL_ADDRESS>


Handling native fullscreen, hidden applications, minimized applications

I often find myself going into native fullscreen with a certain app (video, game, whatever), and swapping back and forth between it and other open (non-fullscreen) windows.
At the moment, when an app is in native fullscreen, (or hidden, or minimized,) it leaves a hole in the layout.
This behavior feels less than ideal for a tiling window manager, I would expect there to never be a blank space in the layout.
You could argue for not using native fullscreen at all, but then there's no way to fully maximize videos for example (hiding the title bar etc). I could live without minimizing/hiding though.
I do see the value in preserving the window position in the layout. Perhaps windows in native fullscreen can be automatically made floating (and then toggled back when un-fullscreened), or moved to a hidden workspace (like the i3 scratchpad) and then moved back?

My response can be found here: https://github.com/nikitabobko/AeroSpace/issues/11#issuecomment-1809236399
Right now, this issue is not a priority for me

Answer to @ullasholla #36
Right now, I don't expect users to use "minimize" and "hide application" because these operations are not presented in i3. I don't use these features, so I didn't take care to support the "properly" (whatever "properly" is supposed to mean in this context). They work as they work in AeroSpace.
I don't understand how such windows should be handled from the UX point of view. When users unhide/unminimize windows, shall I re-attach the windows to where they were in the tree? Or shall I rather attach them to the currently active workspace?

First of all, thanks for your time @nikitabobko.

I don't understand how such windows should be handled from the UX point of view. When users unhide/unminimize windows, shall I re-attach the windows to where they were in the tree? Or shall I rather attach them to the currently active workspace?

If you describe your use cases, it will help to make the right decision

I've previously used Amethyst, and in Amethyst, handling this scenario is akin to closing a window. Unhiding the application is treated as adding a new node. That's what I'm used to. I also use i3, and if someone were to inquire about the 'right' approach, I'd be at a loss :)
Honestly, I'm not overly concerned about where the window gets added. I just find the gaps left behind a bit jarring.

Disclaimer: I haven’t played around with Aerospace yet. Planning on setting it up soon though.
The fullscreen issue is something that annoys me on every window management solution on MacOS.
My ideal solution would be:

I have a browser on space 2, I fullscreen a video in this browser and a MacOS fullscreen space pops up
I switch to another space
If I switch back to space 2, it instead takes me to the fullscreen MacOS space. When I close the fullscreen window I am back on the actual space 2.

This would emulate the behavior from Linux WMs. The only drawback is that you have to resort to the MacOS default workspace switching in this specific scenario.

@nikitabobko I've never used i3, so yabai's behavior made sense for me--if I'm hiding an application, its space is used by the remaining applications, if I unhide it it's added back (I think that either trying to restore its place in the tree or adding it like a newly opened application would be okay).
What are you doing in i3 if you want to show a window, then hide it (i.e., not take it up space in the current view anymore) but want to be able to bring it back at any time in the same status? Are you moving it to the scratchpad workspace and bringing it back.
Would that be what you recommend for users of AeroSpace, i.e., use one workspace as a scratchpad and summon windows? If so, how would one set this up?

@januz

Would that be what you recommend for users of AeroSpace, i.e., use one workspace as a scratchpad and summon windows?

That's exactly what I do if I want to hide the window temporarily. In my workflow, I dedicate one of the workspaces for "hidden" windows. Hiding windows is clear - you just move the window to the dedicated workspace.
If I want to unhide the window:

I switch to the dedicated workspace
Focus the window
Move the window to whatever workspace I need to OR if it's quick I can quickly do the job in the dedicated workspace

If so, how would one set this up?

I don't understand why a special setup is required. In my case, It's just a matter of workflow

@nikitabobko Sorry, with "setup" I meant whether you have some command set up (or whether it's possible) to summon a specific window from the scratchpad from the original workspace.
With window hiding in yabai, it's really easy (1 step) to get the window one hid back to the workspace it was on when one hid it. With what you describe, it's easy to hide a window but getting it back to the original workspace takes several steps.
I guess one could set up specific commands for specific applications but it seems harder to just get any window back to the workspace. That's where I feel filling up the space taken up an application if it gets hidden and adding it back to the workspace if it is selected again, would make things easier.

I think to keep the existing mental model it'd be ok to consider hidden windows "closed" and then if they're unhidden to treat them the same way as other windows that open.

I also have the habit to Cmd+H or Cmd+M windows to quickly get rid of them. I would consider these windows to be virtually closed when using Aerospace and have the remaining split app to take up the old space of the hidden app.

I’m kind of surprised Aerospace puts windows in the corner instead of hiding them.

0.9.0 fixes the issue

Hidden apps and minimized windows are treated as closed windows (they don't belong to the workspace tree). Motivation: #77
Fullscreen windows are treated almost like floating windows (they belong to the workspace tree, but it's impossible to focus fullscreen windows with focus command). Motivation: https://github.com/nikitabobko/AeroSpace/issues/18#issuecomment-1850550532

The project now accepts funding https://github.com/sponsors/nikitabobko

Hidden apps and minimized windows are treated as closed windows (they don't belong to the workspace).

I tend to think that this was a wrong decision for hidden apps and I plan to change it in the next version. Windows of hidden apps should retain their attachment to workspaces when hidden.
It's irritating to accidentially hit cmd-h and loose workspace assignment of several windows #425
I don't plan to change the behavior for minimized windows yet (so you still be able to use minimize and unminize to "summon" windows)
If you think otherwise and like the current behavior please speak up


Fix request duration logging

When first introduced there was an error in assumption of how histogram telemetry worked. This fixes this by correctly reporting a unique histogram even per lsp method name rather than the first one that comes in (which, as it turns out, was always initialize)
Also cleaned up the wording so it was a little easier to understand.

I'm wondering if we can remove this complexity altogether. I don't currently see a need to separate out the pools. @ToddGrun @dibarbet is there something I'm missing here? It looks like each https://github.com/ToddGrun/roslyn/blob/2cd8f0b6930a69f973454ecb8daf474c2d68d083/src/VisualStudio/Core/Def/Telemetry/Shared/AggregatingTelemetryLog.cs#L20 contains a set of telemetry events to be reported by the same name but with different metrics. Is there a logical reason to separate that so there's multiple pools?

I'm wondering if we can remove this complexity altogether. I don't currently see a need to separate out the pools. @ToddGrun @dibarbet is there something I'm missing here? It looks like each https://github.com/ToddGrun/roslyn/blob/2cd8f0b6930a69f973454ecb8daf474c2d68d083/src/VisualStudio/Core/Def/Telemetry/Shared/AggregatingTelemetryLog.cs#L20 contains a set of telemetry events to be reported by the same name but with different metrics. Is there a logical reason to separate that so there's multiple pools?

Not sure if you saw, but david did some cleanup about a month ago including the file you are referencing in this PR


Small documentation touchup for literate module

There was much more to add to the literate module's readme so I've pushed them in ff21dfe with credit. Thanks for bringing it to my attention!

Sorry, I think I could have done a much better job of that, forgive me!


Module not found: Error: Can't resolve 'crypto'

Hello,
on using generateKey i get the following error:
`ERROR in ./node_modules/time2fa/dist/index.mjs 1:0-28
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sheimann\source\repos\SecVault\secvaultweb\node_modules\time2fa\dist'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "crypto": require.resolve("crypto-browserify") }'
- install 'crypto-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "crypto": false }
webpack compiled with 1 error and 1 warning`
Is there any dependency missing..??
Regards
Sascha

Can you refer to this closed issue?
https://github.com/PlanetHoster/time2fa/issues/33
Thanks


(PUP-7890) Add discovery to the Puppet Loader system

This commit adds a #discover method to all pcore loaders. This new
method can be used to discover all entities that the loader has access
to. The type of entity to search for must be provided. A filter can
also be provided in the form of a block.
Current limitations:

All entities that are discovered will be loaded. This has pros and
cons. The pro is that once loaded, the type will be cached in memory.
The con is that loading and keeping all entities in memory might be
resource demanding.
Resource types are currently not loaded.

A solution for both limitations would be to provide a utility program
that would execute separate from the puppet runtime to maintain an
index of everything that can be loaded.

CLA signed by all contributors.

I suspect that this visit modules more than once - for example if there are modules a,b,c and they all depend on stdlib, then stdlib will be visited multiple times. I think it is enough if the env visits all it depends on, but modules does not have to do that since what they depend on are already in the list of dependencies for the environment,


Add RenderElement plugin to support appleseed's AOV-s

Hi @dictoon
This is render element plugin that allows users to render appleseed AOVs.
Plugin basically used to store AOV type and output filename.
I could not find a way to copy AOV image from appliseed image to 3ds max render element bitmap, and for that reason at some stage render elements are turned off and files are saved with appleseed's function project->get_frame()->write_main_and_aov_images();
Thanks for review,
Sergo.

Hi @dictoon ,
I fixed your comments and also added a commit to fix the crash during the interactive rendering. Turned out during the interactive rendering RenderElementManager is not available, so I added a nullptr check. Note that this crash is not the same as the described in the issue #156.


CachedNonceTxMiddleware should reset nonce on 'Tx already exists in cache' error

When the 'Tx already exists in cache' error is returned by the node after sending a tx the CacheNonceMiddleware should reset the cached nonce just like it does when it receives a sequence error (
https://github.com/loomnetwork/loom-js/blob/1c5103b5b68bbd51b50e89e76fd981eef9491575/src/middleware/cached-nonce-tx-middleware.ts#L51).
Basically need to catch the Tx already exists in cache error and handle it like a nonce mismatch error, should probably add a new HandleError method to middleware and forward the error thrown here https://github.com/loomnetwork/loom-js/blob/1c5103b5b68bbd51b50e89e76fd981eef9491575/src/client.ts#L362 to all the middleware, if none of the middleware indicate they handled it then throw it.

Resolved in https://github.com/loomnetwork/loom-js/pull/228


I added dropzone for image support as input

Will Close #67

@PrinceBaghel258025 waiting for your final review / go ahead - in order to merge this PR