penumbra: remove the chain component

This is a draft issue, collecting requirements to remove the penumbra-chain component. In particular, the SCT's timestamp management needs to be fleshed out. Feedback welcome.
Is your feature request related to a problem? Please describe.
The penumbra_chain crate is a catch-all layer of our stack. Though referred to as a "component" it does not actually implement cnidarium_component::Component, nor does it provide functionality that could not be integrated in actual Components of the penumbra application.
Moreover, having a chain crate that is both a leaf (downstream of our application components) and a tie-together crate (abstract access to multiple components) complicates our application architecture.
So, we should try to remove it entirely. A good place to start figuring out requirements, is inspecting the chain crate's state keys, or by peeking at the extension traits:
▾ StateReadExt : interface
    chain_halt_count(&self) -> Result<u64> : method
    chain_params_updated(&self) -> bool : method
    check_chain_id(&self, provided: &str) -> Result<()> : method
    epoch(&self) -> Result<Epoch> : method
    epoch_by_height(&self, height: u64) -> Result<Epoch> : method
    epoch_ending_early(&self) -> bool : method
    get_block_height(&self) -> Result<u64> : method
    get_block_timestamp(&self) -> Result<Time> : method
    get_chain_id(&self) -> Result<String> : method
    get_chain_params(&self) -> Result<ChainParameters> : method
    get_current_epoch(&self) -> Result<Epoch> : method
    get_current_fmd_parameters(&self) -> Result<FmdParameters> : method
    get_epoch_duration(&self) -> Result<u64> : method
    get_epoch_for_height(&self, height: u64) -> Result<Epoch> : method
    get_previous_fmd_parameters(&self) -> Result<FmdParameters> : method
    get_revision_number(&self) -> Result<u64> : method
    is_chain_halted(&self, total_halt_count: u64) -> Result<bool> : method
    is_upgrade_height(&self) -> Result<bool> : method

▾ StateWriteExt : interface
    put_block_height(&mut self, height: u64) : method
    put_block_timestamp(&mut self, timestamp: Time) : method
    put_chain_params(&mut self, params: ChainParameters) : method
    put_current_fmd_parameters(&mut self, params: FmdParameters) : method
    put_epoch_by_height(&mut self, height: u64, epoch: Epoch) : method
    put_previous_fmd_parameters(&mut self, params: FmdParameters) : method
    signal_end_epoch(&mut self) : method
    signal_halt(&mut self) -> Result<()> : method
    signal_upgrade(&mut self, height: u64) -> Result<()> : method

We can roughly classify them as belonging to different components:
/* move to application */
    get_chain_id(&self) -> Result<String> : method
    check_chain_id(&self, provided: &str) -> Result<()> : method
    epoch_ending_early(&self) -> bool : method
    is_chain_halted(&self, total_halt_count: u64) -> Result<bool> : method
    chain_halt_count(&self) -> Result<u64> : method

/* move to the SCT */
    get_epoch_duration(&self) -> Result<u64> : method
    signal_end_epoch(&mut self) : method
    get_block_height(&self) -> Result<u64> : method
    put_block_height(&mut self, height: u64) : method
    get_block_timestamp(&self) -> Result<Time> : method
    put_block_timestamp(&mut self, timestamp: Time) : method
    get_current_epoch(&self) -> Result<Epoch> : method
    get_epoch_for_height(&self, height: u64) -> Result<Epoch> : method
    put_epoch_by_height(&mut self, height: u64, epoch: Epoch) : method

/* move to governance */
    signal_upgrade(&mut self, height: u64) -> Result<()> : method
    signal_halt(&mut self) -> Result<()> : method
    is_upgrade_height(&self) -> Result<bool> : method

/* move to shielded pool */
    get_previous_fmd_parameters(&self) -> Result<FmdParameters> : method
    get_current_fmd_parameters(&self) -> Result<FmdParameters> : method
    put_current_fmd_parameters(&mut self, params: FmdParameters) : method
    put_previous_fmd_parameters(&mut self, params: FmdParameters) : method

We would remove:
    epoch_by_height(&self, height: u64) -> Result<Epoch> : method // dup of `get_epoch_for_height`
    epoch(&self) -> Result<Epoch> : method // dup of `get_current_epoch`
    chain_params_updated(&self) -> bool : method // remove `ChainParameters`
    put_chain_params(&mut self, params: ChainParameters) : method // removed
    get_chain_params(&self) -> Result<ChainParameters> : method // removed
    get_revision_number(&self) -> Result<u64> : method // Moved to host chain interface?

and dissolve ChainParams into:

chain_id -> application
epoch_duration -> SCT

Since we have to decide where to put the block's timestamp, this is a good opportunity to explore making the SCT manage the application wall clock (currently, supplied by BFT Time).

We want to ship this for 65, but some parts are still under specified so my strategy will be to first thin out the component, and make the SCT handle timestamps as a final step.

We promoted chain_id to a top-level AppParameter data, but various component need it to perform chain id checks in their query service, in order to fast-reject requests that target a different instantiation of the penumbra network (e.g. preview vs. testnet). This is a reminder to circle back on this later, for now I'm removing them.


Permission to use your library

Hi,
I would like to use the satellite TLE library in my code.
Also I would like to be able to give the time of the satellite and know the satellite location at that time. Can you please give me some guidance?
Thanks in advance.
..Manas

Manas,
No problem to use the library. I have set the license to Apache 2.0.
Regarding the use case you have, you need the TLE, and then propagate the orbit a number of minutes with respect the date from the TLE to calculate the new Position and Velocity coordinates which are in the TEME reference frame (a special frame used for TLE data).
I would recommend as well looking into the Orekit project for doing your calculations.


[MenuItem] Fix issue when using number and data

When number is added after data, it is shoved below MenuItem because data is display:block

Thanks @Thr1ve


@conda-forge-admin, please add bot automerge

@conda-forge-admin, please add bot automerge

Hi! This is the friendly automated conda-forge-webservice.
I just wanted to let you know that I added bot automerge in conda-forge/buildbot-grid-view-feedstock#9.


Compile Error

I got a compile error on Windows.
First,  there is a long stuck when building witchcraft.

And then, there is an error.
D:\Code\hello>mix deps.compile algae
==> algae
Compiling 71 files (.ex)
warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.State)
  lib/algae/state/monad.ex:3

warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.Writer)
  lib/algae/writer/monad.ex:3

warning: The data type Elixir.Algae.State has been forced to skip property validation for the type class Elixir.Witchcraft.Monad

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.Id)
  lib/algae/id/monad.ex:2

warning: The data type Elixir.Algae.State has been forced to skip property validation for the type class Elixir.Witchcraft.Applicative

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: function default/1 is unused
  lib/algae/state.ex:79

warning: The data type Elixir.Algae.State has been forced to skip property validation for the type class Elixir.Witchcraft.Apply

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: The data type Elixir.Algae.Reader has been forced to skip property validation for the type class Elixir.Witchcraft.Applicative

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: The data type Elixir.Algae.State has been forced to skip property validation for the type class Elixir.Witchcraft.Chain

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.Reader)
  lib/algae/reader/monad.ex:3

warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.Tree.BinarySearch.Empty)
  lib/algae/tree/binary_search/monad.ex:4

warning: The data type Elixir.Algae.Reader has been forced to skip property validation for the type class Elixir.Witchcraft.Monad

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: The data type Elixir.Algae.State has been forced to skip property validation for the type class Elixir.Witchcraft.Functor

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.Tree.Rose)
  lib/algae/tree/rose/monad.ex:3

warning: module Witchcraft.Monad.Proto is not a behaviour (in module Witchcraft.Monad.Proto.Algae.Free.Pure)
  lib/algae/free/monad.ex:3

warning: variable "type" is unused
  lib/algae.ex:161

warning: this clause cannot match because a previous clause at line 34 always matches
  lib/algae/tree/rose.ex:52

warning: The data type Elixir.Algae.Reader has been forced to skip property validation for the type class Elixir.Witchcraft.Chain

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: variable "ask" does not exist and is being expanded to "ask()", please use parentheses to remove the ambiguity or change the variable name
  lib/algae/reader.ex:130

warning: variable "ask" does not exist and is being expanded to "ask()", please use parentheses to remove the ambiguity or change the variable name
  lib/algae/reader.ex:153

warning: The data type Elixir.Algae.Reader has been forced to skip property validation for the type class Elixir.Witchcraft.Apply

This is sometimes valid, since TypeClass's property checker may not be able to accurately validate all data types correctly for all possible cases. Forcing a type instance in this way is like telling the checker "trust me this is correct", and should only be used as a last resort.

For more, please see the TypeClass README:
https://github.com/expede/type_class/blob/master/README.md

  (elixir) src/elixir_compiler.erl:85: :elixir_compiler.dispatch/6
  (elixir) src/elixir_lexical.erl:18: :elixir_lexical.run/3
  (elixir) src/elixir_compiler.erl:27: :elixir_compiler.quoted/3
  (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

warning: this clause cannot match because a previous clause at line 99 always matches
  lib/algae/tree/binary_search.ex:108

warning: this clause cannot match because a previous clause at line 100 always matches
  lib/algae/tree/binary_search.ex:109

== Compilation error in file lib/algae/tree/binary_search/ord.ex ==
** (ExUnit.AssertionError)

Assertion with == failed
code:  assert left == right
left:  :equal
right: :lesser

    lib/ex_unit/assertions.ex:330: ExUnit.Assertions.assert/2
    lib/witchcraft/ord.ex:90: Witchcraft.Ord.Property.transitivity/1
    lib/type_class/property.ex:34: anonymous fn/5 in TypeClass.Property.run!/4
    (elixir) lib/stream.ex:1312: Stream.do_repeatedly/3
    (elixir) lib/enum.ex:2423: Enum.take/2
    lib/algae/tree/binary_search/ord.ex:5: anonymous fn/2 in :elixir_compiler_34.__FILE__/1
    (elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/algae/tree/binary_search/ord.ex:5: (file)
could not compile dependency :algae, "mix compile" failed. You can recompile this dependency with "mix deps.compile algae", update it with "mix deps.update algae" or clean it with "mix deps.clean algae"

I have tested on erlang 2.1 and erlang 1.9, and the elixir version is 1.6.5 and 1.6.6.

There are indeed a lot of warnings when compiling it's dependencies and itself (especially those URL-linked warnings, yeesh ton of those!), but I didn't get an error in compiling itself.
My versions:
Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.6.1) - press Ctrl+C to exit (type h() ENTER for help)

/me wonders what this library would look like and how much faster it would be if implemented via my ProtocolEx libraries without structs (proper pattern matching)...

all elements in my environment have a higher version than @OvermindDL1 's, I suggest that it is the reason?

I know the brand-new OTP 21.0 is broken on Windows right now (the just released patch for it fixed it I think though?) but you said you tested 19 as well (assuming 2.1 meant 21 and 1.9 meant 19)?  Do you have a fully reproduceable project that you can upload that examples the issue?

@OvermindDL In fact, for fare that it is a problem caused by other objects in my project, I reopenned a new one which has the only dep of algae, and it also fails.

I reopenned a new one which has the only dep of algae, and it also fails.

Have you updated to the new OTP 21.1 patch yet?  Where is a git repo of the example?

Sorry for not being able to reply at once. I am now updating my OTP with version 21.0.1 provided as binary file on the erlang website. And I will upload a git repo for further tests.

https://github.com/SchrodingerZhu/test

Just now, I even compile elixir from source files(version 1.7.0-dev). And when compiling algae, the output remains the same.

rewrite dependence version type_class for mix.lock
1.2.x -> 1.2.2
"type_class": {:hex, :type_class, "1.2.2", "a84cab53b80e7c3c15f5ba9a550f5c68646c2b965d19f711f37473803d1ec2ff", [:mix], [{:exceptional, "~> 2.1", [hex: :exceptional, repo: "hexpm", optional: false]}], "hexpm"},

I resolved compile by using this method
but  doesn't become a solution to the root of the problem.

Oh did you lock in an old version?  I didn't even check that...  >.>

Sorry for the delay! I only got an email about this thread now 😖 Weird
TL;DR I know where the issue was introduced (in type_class), and will either fix or patch today.
@OvermindDL1 & @SchrodingerZhu

There are indeed a lot of warnings when compiling it's dependencies and itself (especially those URL-linked warnings, yeesh ton of those!), but I didn't get an error in compiling itself.

Yeah, those are override warnings from TypeClass, and are totally normal. We skip compile-time prop checks on some instances, and it intentionally prints that message warning you that the instance has fewer guarantees about lawfulness. I agree that it's a lot of text, but I'm not sure if this is better or worse than potentially having unprincipled behaviour. I've been considering breaking it out into test helpers instead, which would also speed up the first compilation, but having compile-time checks is a nicety.

First, there is a long stuck when building witchcraft.

This is normal the first time you compile Witchcraft.

Assertion with == failed
code:  assert left == right
left:  :equal
right: :lesser

Hmm, I was initially getting this exact error when reviewing this PR, but thought that it was fixed 🤔  I'll do some digging, but may just revert that change in type_class.

I agree that it's a lot of text, but I'm not sure if this is better or worse than potentially having unprincipled behaviour. I've been considering breaking it out into test helpers instead, which would also speed up the first compilation, but having compile-time checks is a nicety.

I've been thinking about how to handle these similar tests in my ProtocolEx library as well, right now they are always enforced on and ran at compile-time in all modes, but I want to make it configurable, but I cannot really come up with a way that I really like, I might just defer it to a tag-style system environment enable/disable thing...  >.>

@OvermindDL1
Thinking out loud here, but a potential solution is to add a flag inside the module for when you're happy with an instance, and include a hash of the AST. Now if a single character changes, essentially your cache gets invalidated, and you're forced to retest at compile time 🤔 It might be overkill, I'm not totally sure yet.

In my ProtocolEx system (an Elixir Protocol-like library that works on matchers instead of structs and such, significantly more powerful with many chances for optimizations so it generates faster code than Elixir's Protocol's) it supports being able to define property tests (any idea where I got that idea from eh?  ;-) ) to ensure the implementations fulfill the requirements of the interface.
I could indeed hash the implementation timestamps and only re-run that when wanted, but it is also designed to be done with actual property testing frameworks like proper or StreamData(sp?) or so, thus it can test different randomized conditions each time, so I'm not sure when it is a good time to stop it.  So many variables!  o.O!

Able to reproduce issue in a new application (not in the libraries themselves for some reason)
Fully diagnosed issue — yep, it's that commit I linked to before in TypeClass
I have a fix that works in my test application, confirming the theory
Typing up a postmortem in the hotfix PR right now

Will be merged shortly. @SchrodingerZhu thank you for the error report! Sorry again for the delay 🙏

@SchrodingerZhu I'm going to close this issue. Running mix deps.update type_class should be sufficient (it is in my local tests). Please ping me if you run into further issues!

Thanks for your work!


pandas.core.config.OptionError: "No such keys(s): 'display.height'"

Hi I'm getting this error pandas.core.config.OptionError: "No such keys(s): 'display.height'"
after run coinbaseUSD.csv 1
i think is something  relative with pandas, what is the vertion you atre using?
`$ python3 data_generator.py /tmp/btc-trading-patterns/ /tmp/coinbaseUSD.csv 1
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
return f(*args, **kwds)
Traceback (most recent call last):
File "data_generator.py", line 15, in
pd.set_option('display.height', 1000)
File "/home/filipe/.local/lib/python3.5/site-packages/pandas/core/config.py", line 227, in call
return self.func(*args, **kwds)
File "/home/filipe/.local/lib/python3.5/site-packages/pandas/core/config.py", line 119, in _set_option
key = _get_single_key(k, silent)
File "/home/filipe/.local/lib/python3.5/site-packages/pandas/core/config.py", line 83, in _get_single_key
raise OptionError('No such keys(s): {pat!r}'.format(pat=pat))
pandas.core.config.OptionError: "No such keys(s): 'display.height'"
`

Thanks for reporting.
Fixed in https://github.com/philipperemy/deep-learning-bitcoin/commit/b04f115743915b74a0f77ee38f5f47bf8c1200c4

thanks

please help me i am having pandas._config.config.OptionError: "No such keys(s): 'io.excel.zip.reader'"


CadenceWorkflow.DequeueAsync() fails after timeout

Subsequent calls to Workflow.Dequeue() fail after a dequeue times out.

Fixed by @johncburns1.


implement custpomized deduplication of start workflow execution API

solves #40

Coverage decreased (-0.09%) to 66.197% when pulling 3e55211db8969dc01065dd5759e1f3ca9dd3bb75 on dedup into 963d13c6acc508120f4d904f1911cdc2fbb25a47 on master.

Coverage decreased (-0.06%) to 66.221% when pulling de909c0cca3d032056f2f36a2bce0063a7ccab90 on dedup into 963d13c6acc508120f4d904f1911cdc2fbb25a47 on master.

Coverage decreased (-0.1%) to 66.155% when pulling 798ba9d05859fa864d190e70ada793a4a1f5f597 on dedup into 963d13c6acc508120f4d904f1911cdc2fbb25a47 on master.

Coverage increased (+0.2%) to 66.839% when pulling 1e87da9a5e1ae90a80ec0b1355d5151ca674a8d2 on dedup into 3c1e5bbab0e580e04ae6e202e746dac127056dc5 on master.

@mfateev could you take a look?

Coverage increased (+0.2%) to 66.79% when pulling 94819c19ce23c2250ab9a1bb2ed51a27162852e0 on dedup into 1fdb54388b6b93f6e1910f639adfebc3bd66a4f7 on master.


Blazor server side

Been trying to use it on a Blazor Server app and it seems to load fine but the component has no height, it shows as a very thin line. Is this something I'm missing or an incompatibility with Blazor Server?.

Duplicate of #24


HADOOP-16852: Report read-ahead error back

Backport for: #1898
Tested by : mvn -T 1C -Dparallel-tests=abfs clean verify
Region: East US, West US
All tests passed :
[INFO] Results:
[INFO]
[INFO] Tests run: 70, Failures: 0, Errors: 0, Skipped: 0

[INFO] Results:
[INFO]
[WARNING] Tests run: 437, Failures: 0, Errors: 0, Skipped: 71

[INFO] Results:
[INFO]
[WARNING] Tests run: 206, Failures: 0, Errors: 0, Skipped: 29

:confetti_ball: +1 overall

Vote
Subsystem
Runtime
Comment

+0 :ok:
reexec
24m 32s
Docker mode activated.

_ Prechecks _

+1 :green_heart:
dupname
0m  0s
No case conflicting files found.

+1 :green_heart:
@author
0m  0s
The patch does not contain any @author tags.

+1 :green_heart:
test4tests
0m  0s
The patch appears to include 2 new or modified test files.

_ branch-3.3 Compile Tests _

+1 :green_heart:
mvninstall
18m 59s
branch-3.3 passed

+1 :green_heart:
compile
0m 32s
branch-3.3 passed

+1 :green_heart:
checkstyle
0m 23s
branch-3.3 passed

+1 :green_heart:
mvnsite
0m 35s
branch-3.3 passed

+1 :green_heart:
shadedclient
15m  7s
branch has no errors when building and testing our client artifacts.

+1 :green_heart:
javadoc
0m 27s
branch-3.3 passed

+0 :ok:
spotbugs
0m 51s
Used deprecated FindBugs config; considering switching to SpotBugs.

+1 :green_heart:
findbugs
0m 50s
branch-3.3 passed

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
0m 29s
the patch passed

+1 :green_heart:
compile
0m 24s
the patch passed

+1 :green_heart:
javac
0m 24s
the patch passed

+1 :green_heart:
checkstyle
0m 16s
the patch passed

+1 :green_heart:
mvnsite
0m 28s
the patch passed

+1 :green_heart:
whitespace
0m  0s
The patch has no whitespace issues.

+1 :green_heart:
shadedclient
14m  6s
patch has no errors when building and testing our client artifacts.

+1 :green_heart:
javadoc
0m 24s
the patch passed

+1 :green_heart:
findbugs
0m 53s
the patch passed

_ Other Tests _

+1 :green_heart:
unit
1m 26s
hadoop-azure in the patch passed.

+1 :green_heart:
asflicense
0m 32s
The patch does not generate ASF License warnings.

81m 58s

Subsystem
Report/Notes

Docker
ClientAPI=1.40 ServerAPI=1.40 base: https://builds.apache.org/job/hadoop-multibranch/job/PR-2147/1/artifact/out/Dockerfile

GITHUB PR
https://github.com/apache/hadoop/pull/2147

Optional Tests
dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient findbugs checkstyle

uname
Linux 72c6309a1509 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Build tool
maven

Personality
personality/hadoop.sh

git revision
branch-3.3 / 9e7266d

Default Java
Private Build-1.8.0_252-8u252-b09-1~16.04-b09

Test Results
https://builds.apache.org/job/hadoop-multibranch/job/PR-2147/1/testReport/

Max. process+thread count
421 (vs. ulimit of 5500)

modules
C: hadoop-tools/hadoop-azure U: hadoop-tools/hadoop-azure

Console output
https://builds.apache.org/job/hadoop-multibranch/job/PR-2147/1/console

versions
git=2.7.4 maven=3.3.9 findbugs=3.1.0-RC1

Powered by
Apache Yetus 0.12.0 https://yetus.apache.org

This message was automatically generated.


Base64 Import and Export from and to Clipboard

This implements the ability to export scales to a compressed Byte Array in base64 and import self same again.
Works by robbed functions from Otter.
I also was so free as to update some deprecated functions from Penumbra.

Also. Yes. Commit history is a mess. Sorry.

Do you think I should clean up my secondary PR for opening and closing the interface with /customize so that can be merged and put out in a mini update sooner? Your call, depends on how long you think your UI changes will take still.

Closed due to #74


Brianamarie/write good

work around IE XHR bug with '' URL Fixes #618

@raidivyansh074 thank you for submitting a pull request to our repo, however, I'm not quite sure what you are hoping to fix with this pull request. The PR you linked (#618) has already been merged. Do you mind opening an issue in the this repository to discuss the change you are trying to make? We can discuss it and the best path forward there!
Thank you :octocat:


Image upload cancellation hangs the tool

The service used to upload any files to a tool on nanoHUB hangs the tool if the process is cancelled (using the cross on the top right corner). The issue is caused because the file upload widget needs to return some value for the tool to unfreeze.

gresq.log
filexfer657.log

nanoHUB updated their default libraries to include a "cancel" button.  Which seems to work.


Clock module (Time & Weather) doesn't respond to settings changes

Describe the bug
The clock module settings isn't responding by any change in the settings.
To Reproduce
I wanted to hide the seconds and use the 24Hr time mode, but whatever I change in the hyprpanel settings in the clock section it doesn't affect at all, even the weather settings

Desktop (please complete the following information):

Distribution: Arch Linux(EOS)
Window Manager/Desktop Environment: Hyprland

Additional context
note that this bug was even before migrating to astal/ags2, I didn't report waited to the migration release.

but the clock seconds and time mode cant switch too

Good point, will have a look since I already invested the code a bit


Feature/migrate toolname nullable

Changes toolname to be nullable instead of setting it to empty string.
For https://github.com/ga4gh/dockstore/issues/1218

Coverage decreased (-52.09%) to 16.126% when pulling b08e3ce3fda21e08ccf4e5b372f63b7c771ba693 on feature/migrate-toolname-nullable into 7013c6d12390b631bf1598656d36508d800c8912 on develop.

@denis-yuen @garyluu  ready for another review


Add a security warning

As simaster.ics uses GET request, and credentials are passed openly, it is definitely a security issue.
It would be helpful if there is some warning in the README.md file telling about the security issue
and what could be done to prevent unwanted things.

I don't think it's possible. Calendar providers including Google Calendar will not be happy (as far as I know, they only send GET requests).
We need a way to save the user credentials without actually saving them. Also, it has to be easy to use.

Oh my bad, you are talking about the api, I was drunk when I made that comment 9 hours ago.
Does the user session expired when we use same  user-agent as their mobile device? If it doesn't, the app can save the  session, and token to encrypt the session (ex: https://simaster-ics.herokuapp.com/ics?period=2022&token=Y2lla2Vwbw). However, I don't think it's feasible nor easy to use since we also need user's user-agent.

Does the user session expire..

I think it expires, so we can't rely on those tokens.
I've been thinking about encrypting their data with a public key from the server (but it's quite impractical). Also, it will also mean that we have their credentials because we have the private key, too.
The safer way, I think, is to let the users refer to their credentials using a URL (e.g. secret paste with a specific format) which the server then sends a GET request to. But, again, it's more effort for the user. I will consider having that feature available in the future.
The safest way, for now, is to deploy our own instance.

Closing this issue as password encryption feature is now available (#20).


Remove jQuery usage

Fixes #591
CC: @alexander-alvarez I left usage of this.$().text().trim in the test blueprint. I'm going to make a seperate PR for updating ember + friends so we can get qunit dom working.
I'm also going to make a PR against ember-scrollable to remove that little bit of jQuery as well.

@donaldwasserman  LGTM! Thanks so much for taking the initiative on this :clap:

Released as<EMAIL_ADDRESS>and ember-light-table@next

Happy to help - I’m working on the ember-scrollable piece right now. Hopefully have that done this week. Maybe you know someone who can get that merged in 😜
Do you know of anything else that uses jQuery in here?

Maybe you know someone who can get that merged in
Yup, I can do that for you when it's ready. I'm trying to get out of your way as much as possible

I don't think there is any, but we should be able to do a jquery-less build and if tests pass then :+1:
maybe rip-off
https://github.com/cibernox/ember-power-select/blob/master/config/ember-try.js
https://github.com/emberjs/ember-optional-features


install failed logs enclosed.

Logger: homeassistant.components.sensor
Source: custom_components/hon/sensor.py:73
Integration: Sensor (documentation, issues)
First occurred: 00:25:49 (2 occurrences)
Last logged: 00:38:21
Error while setting up hon platform for sensor
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 281, in _async_setup_platform
await asyncio.shield(task)
File "/config/custom_components/hon/sensor.py", line 73, in async_setup_entry
if appliance["applianceTypeId"] == 1:
KeyError: 'applianceTypeId'
Logger: homeassistant.components.climate
Source: custom_components/hon/climate.py:92
Integration: Climate (documentation, issues)
First occurred: 00:25:48 (2 occurrences)
Last logged: 00:38:20
Error while setting up hon platform for climate
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 281, in _async_setup_platform
await asyncio.shield(task)
File "/config/custom_components/hon/climate.py", line 92, in async_setup_entry
if appliance['applianceTypeId'] == 11:
KeyError: 'applianceTypeId'
This error originated from a custom integration.
Logger: homeassistant.config_entries
Source: custom_components/hon/init.py:55
Integration: hOn
First occurred: 00:25:48 (3 occurrences)
Last logged: 00:38:20
Error setting up entry<EMAIL_ADDRESS>for hon
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 365, in async_setup
result = await component.async_setup_entry(hass, self)
File "/config/custom_components/hon/init.py", line 55, in async_setup_entry
if appliance['applianceTypeId'] not in [1, 2, 4, 6, 8, 9, 11]:
KeyError: 'applianceTypeId'
This error originated from a custom integration.
Logger: custom_components.hon.hon
Source: custom_components/hon/hon.py:144
Integration: hOn
First occurred: 00:38:18 (1 occurrences)
Last logged: 00:38:18
Framework update from [none] to [tr2UlkrAHzi37ijzEeD2UA]

Should be fixed. Can you please try again?


Luajavalib

I can't find any references or help for the Luajavalib, I only have the things from http://luaj.org/luaj/3.0/api/index.html but that's not helping me a lot..

See the swing example at https://github.com/luaj/luaj/blob/master/examples/lua/swingapp.lua, and the docs for CoerceJavaToLua.coerce().  I'm not seeing anything else.  (Not an expert, me, started looking at LuaJ last week.)

I started looking at it in the same period, I looked at it but it's not worth a wiki or documentation..

In Java, my solution to this problem is override JsePlatform and LuajavaLib
public class JsePlatformFix extends JsePlatform{
/**
 * Create a standard set of globals for JSE including all the libraries.
 *
 * @return Table of globals initialized with the standard JSE libraries
 */
public static Globals standardGlobals() {
    Globals globals = new Globals();
    globals.load(new JseBaseLib());
    globals.load(new PackageLib());
    globals.load(new Bit32Lib());
    globals.load(new TableLib());
    globals.load(new StringLib());
    globals.load(new CoroutineLib());
    globals.load(new JseMathLib());
    globals.load(new JseIoLib());
    globals.load(new JseOsLib());

//        globals.load(new LuajavaLib());
globals.load(new LuajavaLibFix());
LoadState.install(globals);
LuaC.install(globals);
return globals;
}
public class LuajavaLibFix extends LuajavaLib {
public LuajavaLibFix() {
}

// load classes using app loader to allow luaj to be used as an extension
@Override
protected Class classForName(String name) throws ClassNotFoundException {
    return Class.forName(name, true, Thread.currentThread().getContextClassLoader());
}

}
Globals globals = JsePlatformFix.standardGlobals();
LuaValue load = globals.load(config.getLuaScript());
LuaValue call = load.call();


CLOUD-282-doc-404

Updated link and RST format for Kubernetes.rst and conf.py.

Resolved conflicts

Fixed by two other pull requests, https://github.com/percona/percona-xtradb-cluster-operator/pull/235 and https://github.com/percona/percona-xtradb-cluster-operator/pull/233


player.get_player() marginalizes Nene

player.get_player() takes the required arguments: "first_name" and "last_name".  Nene, the unique flower that he is, only has one name, so the string formatting in this function will not work for him.
A fix would be to make the last_name argument optional, and perform string formatting differently for those with both names and those with only a first name.  Hopefully there's no NBA player with 3 names.

Closed with #57


Solid Styled Jsx not working with solid-scripts?

I made a new repo with npm init solid app-ts my-app installed solid-styled-jsx and created a .babelrc file with:
{
  "presets": ["babel-preset-solid"],
  "plugins": ["solid-styled-jsx/babel"]
}

I made a component like so:
function NumberButton({ value, big }) {
  return (
    <>
      <button>{value}</button>
      <style jsx>{`
        button {
          width: ${big ? 2 : 1}rem;
        }
      `}</style>
    </>
  );
}

Rendering the component doesn't transpile the style tag, it just renders it to the dom. as is.
Did I do something wrong? I looked up to the example https://codesandbox.io/s/solid-styled-jsx-xgx6b in the readme and only difference I can tell is they are using parcel instead of solid-scripts in the demo.

Solid's scripts is built off Create React App which gives very little control over the webpack build. It's a great starter but it doesn't give very much flexibility. CRA has this issue too.
It looks like people have come up with creative ways to get around this in CRA (like hacking their own scripts), but I haven't done any work to see if the same would work here. I went this way so I could deliver a familiar dev experience quickly, but it's a very complicated build process. #144 sort of talks about alternative approaches.
I think at this point I have to say create-solid doesn't support solid-styled-jsx. I'm going to convert that CodeSandbox example to TypeScript to explore if I'm missing other TS stuff. I think Parcel 2 might be the easiest way to get started with it. It also might be worth looking at one of the starter templates others have made (some in #144) and go from there for the ability to add solid-styled-jsx.

Ok so I fixed and released the missing types bug in 0.18.5. I took the simple ts webpack template I have and adding styled-jsx to it and it seems to work good. I pushed it up under styled-jsx branch here: https://github.com/ryansolid/solid-ts-webpack/tree/styled-jsx
Give this a try and see if it will work for you.

Thank you for putting up the template, I tried it and works fine, I'm really loving solid.
I'll leave the issue open so you can decide if you want to close it if that's the definitive answer for the question, or want to leave it up to track suggestions etc.

I'm going to close it as I'm more likely to completely replace how I do Solid Scripts before I address this. By that point given the solution this issue is sort of a non-issue. It will support custom Babel configs or it won't.


Reintroduce language key to data files

Context
Reverts a recent change and reintroduces the language keys for the lookup suggestions files. This is because a bug exists in IE11 meaning that data files with an array of strings are not currently supported by the latest version Fuse, see the Trello card for more details.
The lookup files will contain an array of {key:value} objects.
How to Review
Check all the data files have been updated.
Check the script produces files with an array of {key:value} objects

 Introduce key back into suggestions data files (S)


Formatter does not treat destructured imports

Imagine an import like this:
import { IWorkbenchEditorService }  from 'vs/workbench/services/editor/common/editorService';

Format, I would love if it ends up to be
import {IWorkbenchEditorService}  from 'vs/workbench/services/editor/common/editorService';

Or whatever you guys think should be the formatting of destructured imports.

I have seen users have strong opinions on weather this should have spaces or not. so looks like this can be a new option.
//CC: @SaschaNaz

Unmerged #4609 will format the code but with spaces. A new option for this will be good but maybe after #4757.


Amount of parameters

Hi) Thank you for your great work!
Could you show an amount of model parameters? I'm trying to implement SE-DenseNet from the scratch for my diploma work and I am not sure that my SE implementation is correct (it adds more than 3 millions parameters...)

Hi, @AldusLorde , thank you for your issue, I have some experiences in building the light-weight model, I'd like to use this tool when I determine to remove some heavy layers in CNN module.  Please star it if this tool is helpful to you, thanks again.


Switches to a domain-sliced approach to our Redux setup.

This is inspired by @mmazzarolo and others in [https://github.com/infinitered/ignite/issues/158]
It's kinda like https://github.com/erikras/ducks-modular-redux in spirit, but the implementation is slightly more forgiving.
For the most part this has been pretty positive!  There's a few things I'm concerned about, but that's getting nitpicky.    :)
Here's the run down on what's changed.
Redux Domains

introduces “domains” - a way to slice of your app like “Login” or “Temperature”
they live in App/Redux/*Redux.js
each contain the all redux-parts needed:  action types, action creators, selectors, and reducers.
action creators are exported as the Actions object
types are exported as the Types object
selectors are exported as their own function names
the reducer is export as the reducer function
sub-reducer functions are buried, but are optionally exposed as functions
there is no default export

Store

moves to App/Redux/CreateStore.js
is only accessed by App/Redux/index.js
is passed the root reducer & root saga from the outside

Sagas

are now plural (e.g. App/Sagas/LoginSagas.js)
are generator functions that accept an action or (optionally) api and action
watchers are gone
the root saga now only handles takeLatest or takeEvery
the root saga is responsible for gluing Action Types to Sagas
the root saga is now a table-of-contents
*Sagas.js files have no default export

Selectors

not officially a thing previously but some of us had project with them
now live as exported functions inside the relevant *Redux.js
scope the state to that domain if possible
for cross-domain-cutting selectors, add additional parameters for the other domain states or consider moving to a separate domain

Other Functions

it makes sense to place other functions in here too … helpers, validations, business logic… remember to use pure functions!

Redux Persist

App/Config/ReduxPersist is now responsible for the blacklist & whitelist

index.ios.js & index.android.js

gutted these to remove all functionality
these are as pass-through as can be

App.js

called by index.ios.js and index.android.js
sets up Redux for the app by creating the store & making the Provider
nothing visual is done at this level
exists to provide a friendly buffer around React Native hot-reloading

RootContainer.js

the visual root — all components get added in here
holds things like status bar and navigation router (I’d actually like to NavigationRouter rolled in here to be honest)

That's cool man, it seems that we're using an almost identical solution for the naming of the ducks :sunflower:
Any hint on the issues you're facing with this approach?
On my side I had some problem handling BIG reducers, but it seems that most of the time I face this issue is just because I didn't combine the reducers enough (by creating "sub-reducers").
Tomorrow I'll take a closer look at all the changes you've made, I'm intrigued!

Wow. well done!
I am testing this commit and really like this approach. More centered, less folders.

What do you think about putting sagas into Redux folder and grouping all by domain? (component like)
Maybe this kind of structure:
Folders: Redux - Login (Domain Component) contains
LoginRedux.js
LoginSagas.js

What do you think about putting sagas into Redux folder and grouping all by domain? (component like)
Maybe this kind of structure:
Folders: Redux - Login (Domain Component) contains
LoginRedux.js
LoginSagas.js

Just my 2 cents: from my point of view sagas are much more difficult to organize by domain.
For example there are a lot of cases where you will need to emit actions of different domains from a single saga, for example:
export function* getMenuEntries (action) {
  try {
    const user = yield select((state) => state.auth.user)
    const [menuEntries, categories, extras] = yield [
      call(parseServiceMenu.getMenuEntries, user.place),
      call(parseServiceCategory.getCategories, user.place),
      call(parseServiceExtra.getExtras, user.place)
    ]
    yield put({ type: menuActionTypes.GET_MENU_ENTRIES_SUCCESS, menuEntries })
    yield put({ type: categoryActionTypes.GET_CATEGORIES_SUCCESS, categories })
    yield put({ type: extraActionTypes.GET_EXTRAS_SUCCESS, extras })
  } catch (err) {
    const error = err.message || err
    yield put({ type: menuActionTypes.GET_MENU_ENTRIES_FAILURE, error })
    yield put({ type: uiActionTypes.SHOW_SNACKBAR, snackbarMessage: error })
  }
}

What do you think?

Ya, I'd like to keep sagas outside for now.  For the same reason as @mmazzarolo mentioned.  It's quite common to trigger a "snackbar" or "alert" from sagas, whose Types is held in a different domain.
I'm totally open to renaming App and RootContainer.  It's going to be tricky to agree on those names though.  If it helps, the purpose of those two files are to be a "non-visual" starting point and a "visual" starting point.
I'd actually love to roll NavigationRouter into "visual".

First let me say I ❤  this so much!   What a great refactor!   Let's work together to make it F%(#ING FANTASTIC!
Redux Domains

✅  introduces “domains” - a way to slice of your app like “Login” or “Temperature”
✅  they live in App/Redux/*Redux.js
✅  each contain the all redux-parts needed:  action types, action creators, selectors, and reducers.
:x: action creators are exported as the Actions object
The reason I dislike this, is that you never intend for this name to be used.  This causes an overuse of the as to be standard instead of exception.   Take a look at this:

We might as well accept that this cannot be the name, it never will be.  Export each actions as <Domain>Actions or better so, default.
✅  types are exported as the Types object
✅  selectors are exported as their own function names
✅  the reducer is export as the reducer function
✅  sub-reducer functions are buried, but are optionally exposed as functions
:x: there is no default export
📝  - The one thing everyone really wants when coding is the actions.  Everything is available for tests etc, but 90% of the time we want actions, so let's make that the default export.  It makes sense to me that that is exact reason why you'd have a default.

Store

✅  moves to App/Redux/CreateStore.js
✅  is only accessed by App/Redux/index.js
✅  is passed the root reducer & root saga from the outside

Sagas

✅  are now plural (e.g. App/Sagas/LoginSagas.js)
✅  are generator functions that accept an action or (optionally) api and action
✅  watchers are gone
✅  the root saga now only handles takeLatest or takeEvery
✅  the root saga is responsible for gluing Action Types to Sagas
✅  the root saga is now a table-of-contents
✅  *Sagas.js files have no default export
📝  - Good call on that here.  There should be no default by the nature of sagas they are all different.

Selectors

✅  not officially a thing previously but some of us had project with them
✅  now live as exported functions inside the relevant *Redux.js
✅  scope the state to that domain if possible
✅  for cross-domain-cutting selectors, add additional parameters for the other domain states or consider moving to a separate domain

Other Functions

✅  it makes sense to place other functions in here too … helpers, validations, business logic… remember to use pure functions!

Redux Persist

✅  App/Config/ReduxPersist is now responsible for the blacklist & whitelist

index.ios.js & index.android.js

✅  gutted these to remove all functionality
✅  these are as pass-through as can be

App.js

✅  called by index.ios.js and index.android.js
✅  sets up Redux for the app by creating the store & making the Provider
✅  nothing visual is done at this level
✅  exists to provide a friendly buffer around React Native hot-reloading

RootContainer.js

✅  the visual root — all components get added in here
📝  - I would like that said in comments on that file, or perhaps a README.md in the Containers folder.
✅  holds things like status bar and navigation router (I’d actually like to NavigationRouter rolled in here to be honest)
📝  - NavigationRouter is more a routes file than it is visual.  Yes it is both, but I would not want any additional visual aspects.  If you ask me, we went backwards a little when we had to go to RNRF, because we conflated visual with screen properties.  I've had a few people agree on this front, but it's outside of our control.   I have to disagree with you on further moving backwards.  The navigation is very easy to find/modify as for now.   In addition, we're going to have enough trouble generating new screens and adding them to navigation without further hurdles.  If you see a way to move back to just routes, I'd advocate taking that in a heartbeat.

Additional notes

I'd rather see something like if (Config.reduxLogging) middleware.push(logger) for simplicity, but I assume you did this so it can be turned on/off during hot reloading?  Not sure which one is better.  Anyone else want to weigh in?
RE: CreateStore.js

Should we have a transform example?  I think we all agree on transforms, but in here we do a transform inline in TemperatureSagas.js where it might be best to show a transform.  I'm happy to help add this part if we all agree.
Would you like me to add the magic to createTypes in reduxsauce?  I'd like to unveil that idea here.   Which would take the TEMPERATURE trifecta into 1 line.  Very useful in making all createTypes 66% smaller!
I know we dislike magic, but I have another simplification idea.    How about something crazy like this?:
Original:

import { createTypes, createReducer } from 'reduxsauce'

export const Types = createTypes(`
  LOGIN_REQUEST
  LOGIN_SUCCESS
  LOGIN_FAILURE
  LOGOUT
`)

export const Actions = {
  loginRequest: (username, password) => ({ type: Types.LOGIN_REQUEST, username, password }),
  loginSuccess: (username) => ({ type: Types.LOGIN_SUCCESS, username }),
  loginFailure: error => ({ type: Types.LOGIN_FAILURE, error }),
  logout: () => ({ type: Types.LOGOUT })
}

Madscience:
import {simpleCreator, build, createReducer} from 'reduxsauce'

const {Types, Actions} = simpleCreator({
  loginRequest: build('LOGIN_REQUEST', username, password),
  loginSuccess: build('LOGIN_SUCCESS', username),
  loginFailure: build('LOGIN_FAILURE', error),
  logout: build('LOGOUT')
})

export Types
export Actions

Benefits: no longer having a mismatch between types and actions, because no longer considering them 2 separate places.   Am I crazy?  Probably...

@GantMan woo! Thx.

Generic Names:  Actions and Types

...is that you never intend for this name to be used

Kinda.  This is only true for saga or containers which need to access multiple domains.  For simpler consumers, this will work great:
import { Actions } from '../Redux/GantRedux'

The as keyword is used for disambiguation.
I don't dispute your claim though.  In your example... ya... this is one of the downsides of going with domains.
Another alternative might be dropping the Actions "namespace" altogether.  Perhaps we just leave these as normal exported functions?
import { loginRequest, loginSuccess, loginFailure } from '../Redux/LoginRedux'

We might have some name collisions with reducers inside, but nothing we can't figure out?
We also lose the ability to group our actions together & feed them into something like bindActionCreators.   Something I don't really use anyway.

Export Actions as default

90% of the time we want actions

Sagas & smart components will primarily be after action creators yes.
Here's the problem I see with this though.  There's a LOT going on inside these domains.  Potentially 5 or 6 different things.
Rather than pick a "favorite", I made them all equal.  There's no default.
If we were to promote Actions to default, we'd only benefit the import statement.
import Actions from '../Redux/UserRedux'

Which isn't too bad, to be honest.   But now we still have Types inside and we can't export that the same way either.  Maybe that's ok though?

Merging NavigationRouter inside RootComponent
You have a great point.  NavigationRouter is data; disguised as a component.  Blurry lines for sure.
I'm ok leaving it as is.

Logger if statement
Sure, we can change that if you want.  Generally you don't want to create variables you won't use, but this will be completely immeasurable I'd wager.

Transforms Example
Already done.  I moved that out of the saga and into TemperatureRedux.js.   Check it out.
I don't like how we're switching on i18n to make the decision, but it's not harmful.  I did have to add a mock to our Test/Setup.js though to pass the tests again.  :)

createTypes templating
I'd absolutely accept a PR with templating on reduxsauce.
Now that we're moving away from a giant list of actions in 1 file, i see it as less useful though.  You'll end up writing the template to use it once per file.
That's just my opinion though.  The idea is kinda cool.  Just need to find a nice way to reuse it.
Pitch it dude, and you can use @mmazzarolo 's gist to boost your case.  Those types could definitely benefit from a template.
In the app @kevinvangelder, @carlinisaacson, and I are building, we wouldn't have a domain file with multiple request/response/failures.

Types + action creator factory
It would DRY things up sure.  But now we have 2 different ways to make action creators and types.
What happens when you have an action creator that doesn't fit this format?  Lets say it does some business logic to assemble the right action object.  Now you're left attaching things manually to the Types and Actions objects.
Also, if we're considering promoting Actions to standard exported actions, we've got more conversion to write.
One concern I have about reduxsauce in particular is straying too far from Redux.  Not only do people have to learn Redux, but they have to learn our idioms on top of that... which isn't portable.
I'm torn.  I don't have the right answer.

Thank you very much for the feedback.
We can certain cherry pick things out of this commit if they're not right for Ignite.
Even if I disagree about some stuff, I'm open to implementing them.
Don't worry about hurting my feelings!

Export Actions as Default

Rather than pick a "favorite", I made them all equal. There's no default.

I think there is a favorite, though.  Making them equal when one is commonly used is actually the complaint.  Tests are the only ones that care for everything.
Types + action creator factory

What happens when you have an action creator that doesn't fit this format? Lets say it does some business logic to assemble the right action object.

It could look like so:
const {Types, Actions} = simpleCreator({
  somethingSpecial: (x) => (x === 'taco') ? build('TACO') : build('NACHO')
})

Both types are created via build, but the action creator would activate only one of them.
Additionally, simpleCreator could take a second argument, which would be a list of types not defined by build calls.   The types + creators always felt like busywork to me.  This is nice.
As for reduxsauce straying from Redux
I see reduxsauce simplifying redux.  Anyone who knows redux, would quickly pick up reduxsauce and appreciate it.  Anyone coming to redux for the first time would find reduxsauce easier to read.  Redux is too minimalistic, which is why it causes so much boilerplate.  Yes, every time we hide complexity, we make a level of ignorance, but not everyone should be a mechanic to drive their car.  I feel our abstractions have been fair in reduxsauce.

This is another awesome discussione in my opinion, the last two posts are worth a book.  📖

Another alternative might be dropping the Actions "namespace" altogether. Perhaps we just leave these as normal exported functions?
import { loginRequest, loginSuccess, loginFailure } from '../Redux/LoginRedux'
We might have some name collisions with reducers inside, but nothing we can't figure out?
We also lose the ability to group our actions together & feed them into something like bindActionCreators. Something I don't really use anyway.

I tried it and I would stay away from it:

You lose the ability to feed them do mapDispatchToProps
It might result in an infinite and boring list of imported actions, especially in bigger containers
You'll waste a precious variable name just for passing it to mapDispatchToProps
...The variable name is precious (in my opinion) because you won't be able to do something like const { loginRequest } = this.props
In bigger sagas and in the root one you'll end up using a lot of different actions without knowing their context (you'll have to scroll to the import every time).

Ya, that's my preference too is to keep it an object.  Since nothing is currently default, we could also export that same object as default, but I've never seen people do that.
So, from an interface point-of-view, @GantMan you have an issue with:

Actions being a named export and not default
Types & Action Creators not going far enough to reduce boilerplate

Did you want to sit on this PR for another week and give it time to percolate?

I say we fix up the Actions export, I'm happy to do that.
The Types & Action Creators change is somewhat extreme, and we should evaluate if it's realistic or not.  If it is, I say we get active on it, if it's not, then the PR is 1 fix away from gold to me!

Results from the Great Gathering of Ignite Mages
1 - Actions and Types are now <DOMAIN>Actions and <DOMAIN>Types
2 - Transforms move to separate folder
3 - Make Actions the default export from any Redux file
4 - README.md in containers for RootContainer.js
5 - Experiment with simpleCreator madness to find a loveable API

Changes we discussed

Action Creators are now the default thing exported from *Redux.js files.
Types are now exported with a domain prefix.
Added App/Transforms with convertToKelvin and a readme
Updated the readme in Containers

Ninja edits we didn't discuss

Added a readme to Lib
Cleaned up a few container screens to move NavigationActions out of mapDispatchToProps.  These things aren't redux-related and are totally fine to be called directly.

Things I'm avoiding

The simpleCreator thing to wrap Types and Action Creators.

Ok, so here's the thing for about that simpleCreator thing.
Yes, you're right.  There's an opportunity to DRY things up a bit.
But this comes at the expense of blurring the lines between what an action creator is and what our types are with our own custom API.
When I look at this file and i see a line that creates Types and another one that creates Action Creators, it's crystal clear that these two things are different.  And if I'm already familiar with Redux, i'm kind of expecting to see that.

Just had a meeting with @GantMan .   We came up with something we're both happy with.
createActionTypeSet.  It takes an object and creates both your Types and your Action Creators out of it.
Keys will become the names of the functions inside Actions as well as the names of the types (once we convert to SCREAMING_SNAKE_CASE).
Values are 1 of the following options:

null meaning the action has no additional properties (optionally [])
array of strings meaning the action creator will accept those additional inbound parameters
function meaning you'll write the creator yourself

This will cut down the boilerplate significantly (@GantMan's requirement) and doesn't stray too far from Redux's spirit (@skellock's requirement).
const { Types, Actions } = createActionTypeSet({
  loginRequest: ['username', 'password'],
  loginSuccess: ['username'],
  loginFailure: ['error'],
  logout: null, // or []
  custom: function (var1, var2) {
    return { type: 'CUSTOM', crazyVar: var1 + var2 }
  }
})

export const LoginTypes = Types
export default Actions

Building now.

Called it createActions which was @GantMan's original suggestion after I butchered it several times.
https://github.com/skellock/reduxsauce#createactions
Here's the full API in action.  The custom one at the end is just the escape hatch.  We have several projects on the go that wouldn't even use that.
import { createActions } from 'reduxsauce'

const { Types, Creators } = createActions({
  loginRequest: ['username', 'password'],
  loginSuccess: ['username'],
  loginFailure: ['error'],
  logout: null,
  custom: (a, b) => ({ type: 'CUSTOM', total: a + b })
})

❤

I think we're all in agreement this is ready for merge.   A most epic update.  Will merge soon if no objections.


[Bug] there is an obvious flicker when the defaultSizes contains zero on first render

See the gif, the defaultSizes is [0, 10000]. I refresh page three times. The flicker occurs twice.

Ahhh, I notice there is a PR (https://github.com/johnwalley/allotment/pull/526) which can solve this problem.

Hi @percy507. Thanks for submitting this issue. I'll get onto #526 and hopefully that will resolve this.

#526 has been merged and released as v1.18.0. Let me know if it helps 👍

Hi @johnwalley,

See the gif, the defaultSizes is [0, 10000]. I refresh page three times. The flicker occurs twice.

Well, after some test, the #526 can resolve the problem what I found in storybook.
But unfortunately, the same problem happens in my personal project. I made a demo, it can reproduce the flicker.  https://codesandbox.io/s/thirsty-wind-bzqg9h?file=/src/App.tsx
After some test and debug, I found some unwanted behaviors.

After initializing the Allotment component, the onChange method is called which is not triggered manually.
When the visible of Pane is false, the init size of the pane should be 0 before it mounted. But during my debug, I found it's size first init as its minSize, then cause the visible is false, re-layout to the right size. (I guess this is why the flicker occurs)

The related code might be here. https://github.com/johnwalley/allotment/blob/main/src/split-view/split-view.ts#L1022

Thanks for the fast, detailed feedback. I'll try to tackle this soon.

After initializing the Allotment component, the onChange method is called which is not triggered manually.

Now we can use onDragEnd instead of onChange.


Update to accommodate Estimators changes in z-quantum-core

This PR updates to the latest version of z-quantum-core (that will be merged shortly).

Note: CICD checks will fail until zapatacomputing/z-quantum-core#44 gets merged.


fix: Add the missing settings handler

Fixes https://github.com/appium/appium-mac2-driver/issues/29

👍


error when I compile on NodeMCU 1.0

this is the message using the example "writing_single"
InfluxData.h:26:69: error: '_time' was not declared in this scope
String toString() const { return _measurement + _tags + _values + _time; }

Looks like a typo happened in InfluxData.h
In pull request #10 _time was properly replaced with _timestamp.
Either check out this branch, wait for the merge or check out the repository and manually replace _time with _timestamp in InfluxData.h line 26.


Position/visibility of some error messages

Some error messages appear further down the page when attempting functions such as upload/download and are not obvious unless user scrolls down the page

Addressing in #174


Submission: What does "replace" mean?

Describe the issue
A not-so-frequent submitter just submitted a -07 for a draft.
He was confused by the field
Any Internet-Drafts that this document replaces (approval required for replacing an Internet-Draft you are not the author of)
Of course, his new draft replaces -06, but there was no way to enter that.
The legend needs to explain that this is about replacing I-D series, not the single I-Ds that make up a series (which are automatically "replaced" by the next one in the series).
Code of Conduct

[X] I agree to follow the IETF's Code of Conduct

we've gone back and forth on providing form guidance here over time. Do you have exact wording to suggest?

Something like:
“This section is typically intended for an IETF draft transitions from an individual submission to a Working Group (WG) document. It should not be used for subsequent versions of the same WG document. Note: Approval is required to replace an Internet-Draft if you are not the original author.”

Describe the issue
A not-so-frequent submitter just submitted a -07 for a draft.
He was confused by the field
Any Internet-Drafts that this document replaces (approval required for replacing an Internet-Draft you are not the author of)
Of course, his new draft replaces -06, but there was no way to enter that.
The legend needs to explain that this is about replacing I-D series, not the single I-Ds that make up a series (which are automatically "replaced" by the next one in the series).
Code of Conduct

[x]  I agree to follow the IETF's Code of Conduct

It is possible to be clear about what's going on with just a bit more text.
An  I-D submission will be automatically attached to the previous version of the I-D with the same name, or assigned "-00" version if no previous version exists.

If this submission is intended to replace an I-D with a different name (e.g. when an individual I-D is adopted as a Working Group document), please enter that name here. (Approval required to replace an I-D for which you are not an author.)

Help text for input field:
Type name to search for I-D to replace


Upper and Lowers Bounds for Hierarchical Forecast Engine?

Is it intentional that the hierarchical forecast engine does not produce upper and lower bound estimates, whereas the standard forecast engine does?

Yes. Laziness/Priorities sometimes explain a lot of things. Planned.

I am sure you will find where to start ;)
I usually start by prototyping all computation details in a jupyter notebook. create some python test scripts, document all, double check and then start real coding. I can help if you share your findings in each step.
Good luck.

Not sure the development process can match your project requirements though. sorry.


1.16.5 minor bug with the crossbow (QoL improvment)

so a small detail I noted when using the modified crossbow with the new update, the correct animation now plays, but its not properly showing the FULL charge/cocked

modified crossbow when fully charged up

Regular Crossbow when fully charged up

on a further note, the crossbow load animation is not in sync with the custom charge time. To recreate this, create a crossbow made of netherite and then charge it while in third person

This is something that I can't really fix. I would need more compatibility from Epic Fight mod to go any further with the animation stuff. Also this is a bit outside the scope of this mod. This mod is intended to allow NBT tags to define a Epic Fight weapon. Anything outside of that scope is something I don't really want to deal with


Package request: lla

Project description
lla: A Modern Alternative to ls
Metadata

homepage URL: https://github.com/triyanox/lla
source URL: https://github.com/triyanox/lla
license: mit
platforms: unix, linux, darwin

Also see discussion here: https://www.reddit.com/r/rust/comments/1h9vfbh/lla_an_ls_replacement_with_modern_features_rich/

Note for maintainers: Please tag this issue in your PR.

Add a :+1: reaction to issues you find important.

Already exists (I just packaged it!)
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ll/lla/package.nix#L40


Remove automatically scrolling into view functionality

Closes #1545
Description

The div will automatically scroll into view because we added that feature somehow. But I think it's not needed because users can always scroll the screen by themselves, auto-scroll will only destroy some of the layouts and behaviors and cause unexpected results.
@kywalker-rh Could you confirm this?
The context: When you click on Deployed models on project details page, it will expand the models table, and the page will scroll to show the whole table. However, this auto scroll could cause problems. So I removed it, no when clicking on Deployed models, the page will not auto scroll anymore. Is that acceptable?
How Has This Been Tested?

Follow the same instructions in the issues, you will find the issue disappeared.
Test Impact

N/A, layout issue.
Request review criteria:

Self checklist (all need to be checked):

[x] The developer has manually tested the changes and verified that the changes work
[x] Commits have been squashed into descriptive, self-contained units of work (e.g. 'WIP' and 'Implements feedback' style messages have been removed)
[x] Testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
[x] The developer has added tests or explained why testing cannot be added (unit tests & storybook for related changes)

If you have UI changes:

[ ] Included any necessary screenshots or gifs if it was a UI change.
[x] Included tags to the UX team if it was a UI/UX change.

After the PR is posted & before it merges:

[ ] The developer has tested their solution on a cluster by using the image produced by the PR to main

@vconzola - Can you take a look at this? I think you were the one that worked on the design originally.

@vconzola I can make the auto expand happen when you newly deploy a model.
What this PR is trying to fix is actually another issue, which is when you expand the deployed model section, it will scroll to the bottom of the page because we want it to show the whole model table. However, this is problematic because the auto scroll to the bottom can cause layout issues. What I am asking is, do we still need the auto-scroll? Can we remove it?
This is the expected behavior after the fix: When users deploy the model, the Deployed models section will automatically expand, but it will not cause any auto-scroll of the page, you may only be able to see half of the table and you can scroll down to see the whole table. Do you think it's acceptable?

@DaoDaoNoCode The problem I was seeing before is that even with auto-expand when a new model was deployed the expansion area was displayed "below the fold" so the user didn't see it without scrolling and therefore didn't know the model was deployed. Can we do any sort of auto-scrolling to ensure the expansion is visible without the user needing to manually scroll? Or is auto-scrolling in general not an option?

@vconzola Let me give it a try.

@lucferbux Haha I guess it was me who wrote this erroneous functionality... But I cannot recall what I was thinking at that time 🤷♂


Update readme and index page

Remove features from readme and add GradPad intro instead
Add GradPad intro to index page
Update Ui.png since it isn't supposed to have annotations/callouts. The old Ui.png has been renamed and is still used in the UG.

Following the Ui.png guidelines, I populated GradPad and chose to show off our module search page. Let me know what y'all think!

Update CI and codecov badges for index page

View the new index page here: https://silvernitro.github.io/tp/
View the new readme here: https://github.com/Silvernitro/tp/tree/update-readme

Codecov Report

Merging #212 (e7d14b5) into master (d7a0310) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #212   +/-   ##
=========================================
  Coverage     81.68%   81.68%
  Complexity      650      650
=========================================
  Files            96       96
  Lines          1780     1780
  Branches        185      185
=========================================
  Hits           1454     1454
  Misses          255      255
  Partials         71       71

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 d7a0310...e7d14b5. Read the comment docs.


Use floating version for @types/node

Sorry about the (probably) noob question, but what does the title means?

Using a "floating version" means they the dependency on a package isn't tied to a specific release.
Here, as new versions of @types/node are released for version 8, future installs of TypeScript will use those newer versions.

WCGW


Add support for mocking via the OpenAIModelFactory

As of version 2.0.0-beta.7, there is no simple way for users to mock service outputs for testing. Consequently, they currently rely on workarounds such as using ModelReaderWriter.Read<T> to create a mock from JSON as illustrated below:
ChatCompletion completion = ModelReaderWriter.Read<ChatCompletion>(BinaryData.FromObjectAsJson(new {
  id = "1234",
  choices = new object[]
  {
      new {
          finish_reason = "stop",
          index = 0,
          message = new {
              content = "It's a nice day today!",
              role = "assistant"
          }
      }
  },
  created = DateTimeOffset.Now.ToUnixTimeSeconds(),
  model = "model",
  system_fingerprint = "N/A",
  @object = "N/A",
  usage = (object)null
}));

To improve the experience around mocking, we plan to fully implement and expose the OpenAIModelFactory static class

We have added model factories for all the stable (i.e. not experimental) namespaces.


Adding examples to mood nlu.md

Please do let me know if there is a number of examples to add.
Also, any specification of domain, or general mood tweets.
Looking forward to contribution

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Signed CLA, Waiting for review

Thanks for submitting a pull request 🚀 @alwx will take a look at it as soon as possible ✨

Hi @shaz13
Thank you for donating this data, the format is perfect! 😊
In terms of other domains, we are open to pretty much any data that can be categorized by the intent. Please let me know if you have any more questions.


Copying attribute_entries when creating a new block

I'm trying to create a new block in a tree processor. This block should retain the attribute_entries of another block, but when I pass a copy of the original block's attributes to Processor#createBlock, they are not stored. This leads to document variables being replaced with incorrect values for the newly created block.
The first problem appears to be in RubyAttributesMapDecorator#createJavaMap which doesn't handle keys that are Ruby symbols. Adding
 } else if (rubyKey instanceof RubySymbol) {
      key = ((RubySymbol) rubyKey).asJavaString();

puts the attribute_entries into the Java map. But then the second problem kicks in, which is that this key must be converted back to a Ruby symbol when the attributes are stored in the options. In method Processor#createBlock(StructuralNode, String, List<String>, Map<String, Object>, Map<Object, Object>), the attributes get put into the options:
options.put(Options.SOURCE, content);
options.put(Options.ATTRIBUTES, new HashMap<String, Object>(attributes));

They are then passed on to Processor#createBlock(StructuralNode, String, Map<Object, Object>), where the options are converted to a Ruby hash:
RubyHash convertMapToRubyHashWithSymbols = RubyHashUtil.convertMapToRubyHashWithSymbolsIfNecessary(rubyRuntime, options);

But the key attribute_entries in the nested attributes is not treated specially, so it remains a string rather than a symbol. If I convert the attributes map to a Ruby hash myself (converting the keys to symbols) before they are put into the options, it works, but then other keys get lost (e.g. role) since those are converted to symbols when they aren't expected to be.
So, long story short, how to I store things which are expected to be symbols in the attributes map and have them show up correctly in the Ruby AST?

@kduske-n4 Thank you for such a detailed issue report, this is really awesome.
I tried to reproduce the error you mentioned but I couldn't find it.
I added a test case in #514, maybe you can take a look at that and see if I missed sth in in your description.
What I realized though when creating the test was, that there is no way yet to set the style of a node (Or I forgot it due to vacation mode in my brain). Therefore I added that setter.

Hi @robertpanzer, thank you for your reply. I will create a pull request with a test that demonstrates the issue tomorrow.

I want to add a word of warning here. If you are relying on attribute_entries, your code is likely going to break in the future. That's an internal API that's slated to be removed once we fix how we manage attributes internally. I don't yet have a timetable for when we are going to remove it, but I don't recommend interacting with it directly.
What we could do is introduce a method in the AsciidoctorJ API that allows you to clone a block. That would abstract all the internals away so that when core changes, AsciidoctorJ can make the necessary adjustments. The client code would then be safe from breakage.

The way you know that an attribute is internal is that it's a symbol. The public attributes are the ones that have string keys (we're still discussing the integer-based, positional attributes and how to handle those).

In addition / alternative to cloning a block, we can introduce a method to clone a block's attributes. Either way, this internal state needs to be abstracted away from the client.

Hi @mojavelinux, thanks for your input. Cloning a block would be a great addition indeed. I would suggest adding cloning support for all AST nodes, as blocks are not the only types of nodes that may need to get cloned. However, there must still be the possibility to change the clones, for example, I may need to clone a block, but change its content while keeping everything else the same. Since I cannot change the content after the fact, the clone method(s) must take the content as a parameter. This might also apply to other properties of the cloned nodes that cannot be changed otherwise, such as the text of table cells and list items.
@robertpanzer In light of @mojavelinux's feedback, I suppose that a test case for the behavior I described initially is not necessary. I'll just wait for the cloning support and until then, we can make do without document variables.

Thinking about it, I would not need to clone anything at all if it was possible to change all properties of AST nodes. I am only cloning the blocks because I need to change their contents. If I could do that, I could do away with the cloning altogether.

I would suggest adding cloning support for all AST nodes, as blocks are not the only types of nodes that may need to get cloned.

You read my mind.

I would not need to clone anything at all if it was possible to change all properties of AST nodes.

That's what we should continue pushing for in the 1.6.0 branch. Perhaps after a few more fixes @robertpanzer would be willing to do a alpha.4 release (on his return, of course).

Perhaps after a few more fixes @robertpanzer would be willing to do a alpha.4 release (on his return, of course).

Of course. I just need to know what's missing.
Setting the style of a node seemed to be one thing.
Will go through the properties again.

Keep in mind that this is the first I've really thought about which properties are public and which are internal, so it might help if you list the properties you want to set and we can go through them.

@robertpanzer Currently, I have to work around the following problems with hacks / node cloning:

Cannot query the text of a list item or a table cell without having all substitutions applied (I need the raw text).
Cannot change the text of a list item or a table cell.
Cannot change the contents of a block.
Cannot copy the document variables attached to a structured node (see above).
Looking at the interface DescriptionListEntry, it appears that it might require a setter for its description, too, but I haven't had the need for this (yet).
Cannot simply copy the substitutions gotten from a block via getSubstitutions to another block, since I have to prepend them all with ':' (this is really minor).
Cannot simply copy the content model gotten from a block via getContentModel since I have to prepend the value with ':' (this is really minor).

This is what I can think of right now.

Where are we with this issue? It might be best to create separate issues so we can track each improvement independently, though it's okay to use a comment to summarize / brainstorm.


Terraform docker stack for our system

[ ] How is the example put together?
[ ] Translate to our own docker stack

Closed by #226


Weird Plotting Ablation results

I tried to run it on some data from cplex on regions200.
The stdout output looks reasonable -- except the last flip:
INFO:Ablation:Round  0 winner(s): (['lpmethod'], -12.8369)
INFO:Ablation:Round  1 winner(s): (['mip_cuts_mircut'], -13.2227)
INFO:Ablation:Round  2 winner(s): (['mip_limits_cutsfactor'], -6.7214)
INFO:Ablation:Round  3 winner(s): (['barrier_ordering'], -5.7829)
INFO:Ablation:Round  4 winner(s): (['simplex_limits_singularity'], -4.2256)
INFO:Ablation:Round  5 winner(s): (['simplex_pricing'], -4.0615)
INFO:Ablation:Round  6 winner(s): (['preprocessing_relax'], -3.0112)
INFO:Ablation:Round  7 winner(s): (['simplex_tolerances_markowitz'], -3.0432)
INFO:Ablation:Round  8 winner(s): (['mip_cuts_gubcovers'], -1.0924)
INFO:Ablation:Round  9 winner(s): (['mip_limits_aggforcut'], -0.6727)
INFO:Ablation:Round 10 winner(s): (['mip_cuts_zerohalfcut'], -0.6727)
INFO:Ablation:Round 11 winner(s): (['mip_limits_gomorycand'], -0.3744)
INFO:Ablation:Round 12 winner(s): (['mip_strategy_bbinterval'], -0.1675)
INFO:Ablation:Round 13 winner(s): (['preprocessing_dual'], -0.0622)
INFO:Ablation:Round 14 winner(s): (['mip_strategy_dive'], -0.0093)
INFO:Ablation:Round 15 winner(s): (['emphasis_mip'], 0.0021)
INFO:Ablation:Round 16 winner(s): (['mip_strategy_probe'], 0.0026)
INFO:Ablation:Round 17 winner(s): (['mip_cuts_cliques'], 0.0035)
INFO:Ablation:Round 18 winner(s): (['mip_cuts_implied'], 1.2320)
INFO:Ablation:Round 19 winner(s): (['barrier_limits_growth'], 3.9069)
INFO:Ablation:Round 20 winner(s): (['network_pricing'], 13.5587)
INFO:Ablation:Round 21 winner(s): (['mip_limits_submipnodelim'], 137.2505)

It would be strange if the last flip would increase the performance by 137.
Furthermore, the plot does not reflect the decrease in running time after the first flips; see attachment.

You can find my data here:
/home/lindauer/projects/smac3/smac3-output_2016-11-25_13\:12\:17/

I end up with a similar result. Seems like the target is predicted to result in a runtime worse than the source configuration.
My first guess is that I somehow messed up with the EPARX predictions.

Okay I just checked what happens when I use the standard SMAC model and unlog the mean predictions, which confirms my guess from before.
I'll have to rethink the EPARX part.

I used the wrong cutoff/thresholds for the EPARX predictions. Since I unlog everything I have to use the unloged cutoff and PAR values.
Will be fixed soon


Difference threshold

Add image difference threshold option that allows a number of differences between rendering result and expectation image before a test fails.

Cool, thanks.  Merged and released v0.4.0


history attr missing for noise_lut_range

traceback
In [1]: import safe_s1

In [2]: safe_s1.__version__
Out[2]: '2024.5.6'

In [3]: import xsar

In [4]: xsar.__version__
Out[4]: '2024.5.15'

In [5]: import xsar
   ...: L1_path = "/home/datawork-cersat-public/cache/project/mpc-sentinel1/data/esa/sentinel-1a/L1/IW/
   ...: S1A_IW_GRDH_1S/2021/001/S1A_IW_GRDH_1SDH_20210101T102321_20210101T102346_035943_0435C4_D007.SAF
   ...: E"
   ...: %timeit ds = xsar.Sentinel1Dataset(L1_path, resolution='1000m')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[5], line 3
      1 import xsar
      2 L1_path = "/home/datawork-cersat-public/cache/project/mpc-sentinel1/data/esa/sentinel-1a/L1/IW/S1A_IW_GRDH_1S/2021/001/S1A_IW_GRDH_1SDH_20210101T102321_20210101T102346_035943_0435C4_D007.SAFE"
----> 3 get_ipython().run_line_magic('timeit', "ds = xsar.Sentinel1Dataset(L1_path, resolution='1000m')")

File ~/.local/lib/python3.10/site-packages/IPython/core/interactiveshell.py:2454, in InteractiveShell.run_line_magic(self, magic_name, line, _stack_depth)
   2452     kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2453 with self.builtin_trap:
-> 2454     result = fn(*args, **kwargs)
   2456 # The code below prevents the output from being displayed
   2457 # when using magics with decorator @output_can_be_silenced
   2458 # when the last Python token in the expression is a ';'.
   2459 if getattr(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, False):

File ~/.local/lib/python3.10/site-packages/IPython/core/magics/execution.py:1185, in ExecutionMagics.timeit(self, line, cell, local_ns)
   1183 for index in range(0, 10):
   1184     number = 10 ** index
-> 1185     time_number = timer.timeit(number)
   1186     if time_number >= 0.2:
   1187         break

File ~/.local/lib/python3.10/site-packages/IPython/core/magics/execution.py:173, in Timer.timeit(self, number)
    171 gc.disable()
    172 try:
--> 173     timing = self.inner(it, self.timer)
    174 finally:
    175     if gcold:

File <magic-timeit>:1, in inner(_it, _timer)

File /opt/conda-envs/xsar_28nov22_3/lib/python3.10/site-packages/xsar/sentinel1_dataset.py:297, in Sentinel1Dataset.__init__(***failed resolving arguments***)
    293 self.datatree.attrs.update(self.sar_meta.to_dict("all"))
    295 # load land_mask by default for GRD products
--> 297 self.add_high_resolution_variables(
    298     patch_variable=patch_variable, luts=luts, lazy_loading=lazyloading)
    299 if 'GRD' in str(self.datatree.attrs['product']):
    300     if self.apply_recalibration:

File /opt/conda-envs/xsar_28nov22_3/lib/python3.10/site-packages/xsar/sentinel1_dataset.py:475, in Sentinel1Dataset.add_high_resolution_variables(self, luts, patch_variable, skip_variables, load_luts, lazy_loading)
    473 self._patch_variable = patch_variable
    474 if load_luts:
--> 475     self._luts = self._lazy_load_luts(self._map_lut_files.keys())
    477     # noise_lut is noise_lut_range * noise_lut_azi
    478     if 'noise_lut_range' in self._luts.keys() and 'noise_lut_azi' in self._luts.keys():

File /opt/conda-envs/xsar_28nov22_3/lib/python3.10/site-packages/xsar/utils.py:95, in timing.<locals>.wrapper(*args, **kwargs)
     93     startrss = process.memory_info().rss
     94 starttime = time.time()
---> 95 result = f(*args, **kwargs)
     96 endtime = time.time()
     97 if mem_monitor:

File /opt/conda-envs/xsar_28nov22_3/lib/python3.10/site-packages/xsar/sentinel1_dataset.py:1092, in Sentinel1Dataset._lazy_load_luts(self, luts_names)
   1089     lut = lut.assign_coords(pol=pol).expand_dims('pol')
   1091 # set xml file and xpath used as history
-> 1092 histo = raw_lut.attrs['history']
   1093 lut.name = lut_name
   1094 if self._patch_variable:

KeyError: 'history'

this issue has been spot by @vincelhx after the release of version 2024.5.15 that was succesfully buidl on all python versions and all OS + successful doc compilation on my dev environement. So on top of the problem itself I have to investigate why this bug went through this "security" protocol.

fixed by https://github.com/umr-lops/xarray-safe-s1/pull/29

attributes kept with https://github.com/umr-lops/xsar/pull/208