categorical accuracy doesn't account for mask (w/ proposed solution)

Hi all,
currently, accuracy is
def categorical_accuracy(y_true, y_pred):
    return K.mean(K.equal(K.argmax(y_true, axis=-1),
                          K.argmax(y_pred, axis=-1)))

I am running an RNN with variable length sentences and I want to get the accuracy of predictions at every time step.  So basically, for a 3dim tensor, I have a binary matrix.   I want each timestep of each batch to only be counted in the accuracy mean if it has a 1 entry in the binary matrix.
Proposed solution mwe (though, this is in theano, not using the abstracted keras backend.. but the change is trivial):
import numpy as np
import theano.tensor as T

### (batch size=2, seq len=3, output classes=5)
pred = np.arange(30, dtype=np.float32).reshape(2,3,5)
pred /= pred.sum(axis=-1, keepdims=True)

### target matrix to match pred
target1 = np.ones_like(pred)
target1[:,:,:-1] = 0

### target matrix to match mask
target2 = np.ones_like(pred)
target2[:,:,:-1] = 0
target2[0,-1,-1] = 0

### mask;
# [   [1, 1, 0]
#     [1, 1, 1]  ]
mask = np.ones(pred.shape[:-1])
mask[0,-1] = 0

# preserve last dimension
flat_shape = lambda mat: (reduce(lambda x,y: x*y, mat.shape[:-1]), mat.shape[-1])
F_flat = lambda mat: T.reshape(mat, flat_shape(mat))

# compare two matrices
F_comp = lambda mat1, mat2: T.eq(T.argmax(mat1,axis=-1), T.argmax(mat2,axis=-1))

# mask the matrix
F_mask = lambda mat, mask: mat[mask.flatten().nonzero()]

# get the mean
F_mean = lambda mat: T.mean(mat)

## current method for categorical accuracy
F_score1 = lambda mat1, mat2: F_mean(F_comp(mat1, mat2))

## masked method
F_score2 = lambda mat1, mat2, mask: F_mean(F_mask(F_comp(F_flat(mat1), F_flat(mat2)), mask))

F_score1(pred, target1).eval() ## returns 1.0
F_score1(pred, target2).eval() ## returns 0.83
F_score2(pred, target1, mask).eval() ## returns 1.0
F_score2(pred, target2, mask).eval() ## returns 1.0

edit: currently using this
def categorical_accuracy(y_true, y_pred, mask=None):
    if mask is not None:
        eval_shape = (reduce(mul, y_true.shape[:-1]), y_true.shape[-1])
        y_true_ = K.reshape(y_true, eval_shape)
        y_pred_ = K.reshape(y_pred, eval_shape)
        flat_mask = K.flatten(mask)
        comped = K.equal(K.argmax(y_true_, axis=-1),
                          K.argmax(y_pred_, axis=-1))
        ## not sure how to do this in tensor flow
        good_entries = flat_mask.nonzero()[0]
        return K.mean(K.gather(comped, good_entries))

    else:
        return K.mean(K.equal(K.argmax(y_true, axis=-1),
                              K.argmax(y_pred, axis=-1)))

and i've shot from loss: 3.9160 - acc: 0.1424 to loss: 3.9165 - acc: 0.2614

if anyone knows the equivalent of vector.nonzero() in tensorflow, I could write a pull request to update the backend and metrics.  I also have a perplexity implementation related to categorical entropy I could put in as well:
def perplexity(y_true, y_pred, mask=None):
    if mask is not None:
        y_pred /= K.sum(y_pred, axis=-1, keepdims=True)
        mask = K.permute_dimensions(K.reshape(mask, y_true.shape[:-1]), (0, 1, 'x'))
        truth_mask = K.flatten(y_true*mask).nonzero()[0]  ### How do you do this on tensorflow?
        predictions = K.gather(y_pred.flatten(), truth_mask)
        return K.pow(2, K.mean(-K.log2(predictions)))
    else:
        return K.pow(2, K.mean(-K.log2(y_pred)))

I have the same trouble too and had to create a custom accuracy metrics. Here's mine:
def masked_accuracy(y_true, y_pred):
    print "Don't forget to create train_mask variable"
    assert train_mask is not None

    sames = K.equal(K.argmax(y_true, axis=-1), K.argmax(y_pred, axis=-1)) # is Array
    filtered = sames * train_mask
    return K.sum(filtered)/K.sum(train_mask)

ya that's what I did:
https://github.com/braingineer/keras/blob/master/keras/metrics.py#L10
Though, it's better if you use the mask that's passed with the network.   It requires a commitment inside the main part of Keras too to push the mask through.  But, it requires some some operations that I don't know how to implement inside Tensorflow, so I haven't pushed them upstream.

@braingineer Are you still having that problem? You'll want to look at this #3013

No, I solved it in theano ages ago (as per my first answer). I just didn't solve it for tensorflow, hence why this is still open.
The passing of the mask to the accuracy calculations should be happening anyway (imo).

I have posted a workaround for this in StackOverflow http://stackoverflow.com/a/40173437/1782792
I also think that masking should be used in metrics; moreover, I think it should be taken into account when averaging metrics between batches. The solution I currently have works mostly fine for me though (with a few caveats).

I used the implementation provided by @braingineer

def categorical_accuracy(y_true, y_pred, mask=None)

but the problem is that mask is never passed into the function. Do I have to change something else somewhere to make that happen?

Hi @braingineer,
Thank you for sharing your code.
I have the same problem as @tbsflk where the mask is not passed to the function. Any thoughts on that?


IndexError: store out of bounds

This issue describes the problem I mentioned in #3384. Various operations that rely on reduce operations don't work on my machine for tensors with dimensions that are multiple of 16. For example:
t = Tensor.arange(16).realize()

and running it via
PYTHON=1 python3 example.py

This throws the error, which looks like:
Traceback (most recent call last):
  File "test/wth.py", line 3, in <module>
    t = Tensor.arange(16).realize()
  File "/home/mw/Documents/tinygrad/tinygrad/tensor.py", line 116, in realize
    run_schedule(self.lazydata.schedule())
  File "/home/mw/Documents/tinygrad/tinygrad/realize.py", line 68, in run_schedule
    if prg: prg.exec(cast(List[Buffer], real_buffers), si.var_vals)
  File "/home/mw/Documents/tinygrad/tinygrad/device.py", line 47, in exec
    et = self(rawbufs, var_vals)
  File "/home/mw/Documents/tinygrad/tinygrad/device.py", line 308, in __call__
    et = self.clprg(*[x._buf for x in rawbufs], **lra, vals=tuple(var_vals[k] for k in self.vars), wait=wait or DEBUG>=2)
  File "/home/mw/Documents/tinygrad/tinygrad/runtime/ops_python.py", line 78, in __call__
    for m,o,v in zip(*inp): _store(m, o, v)
  File "/home/mw/Documents/tinygrad/tinygrad/runtime/ops_python.py", line 44, in _store
    if i<0 or i>=len(m): raise IndexError(f"store out of bounds, size is {len(m)}, access is {i}, value is {v}")
IndexError: store out of bounds, size is 4, access is 4, value is 0

Now, this issue disappears when omitting the PYTHON=1 flag. The issue also doesn't exist in Colab, so I figure that this problem is platform-dependent. This can only be fixed by changing the logic inside kernel.py. For example, by changing the 16 in the following line makes the problem disappear for all tensors with a shape multiple of 16, but of course, the problem will re-appear for the new value you'll enter as a replacement.
for sz in (([256, 16]) if prod(self.sts[0].shape[:self.first_reduce]) <= 32 else [16]):

Some information about my local setup

Fedora Linux 39 (Workstation)
12th Gen Intel(R) Core(TM) i5-1240P
Anaconda env. with Python 3.8.18

I don't understand tinygrad well enough so far to be able to solve this here, hence the issue.

Thanks, this was the issue ^^ Didn't sync my fork with master...


Edit hdinsight-use-oozie-coordinator-time.md

Edit complete. In addition to suggestions in the text, I asked Jonathan to check these out:
Line 208: “for Sqoop Export export-dir” isn’t clear. I suggested “for the Sqoop export (export-dir)”
Lines 595 and 626. Tell them why they are appending this script (what is the action)
Broken link:
Install and configure Azure PowerShell
(maybe you want this: http://azure.microsoft.com/en-us/documentation/articles/powershell-install-configure/)

Hi @ClarityQueen, I'm your friendly neighborhood Azure Pull Request Bot (You can call me AZPRBOT). Thanks for your contribution!

It looks like you're working at Microsoft (v-diree). If you're full-time, we DON'T require a contribution license agreement.

If you are a vendor, or work for Microsoft Open Technologies, DO please sign the electronic contribution license agreement. It will take 2 minutes and there's no faxing! https://cla.azure.com.

TTYL, AZPRBOT;


fix comment describing the required cache interface

cache must respond to #del, not #keys

Where do you see that del is required? (I agree that keys is not.)

here

Ah, very good. Thanks!!


Is it possible to create multiple usernames and passwords for publish?

Describe the feature
Is it possible to create multiple usernames and passwords for publish?
For example:
publishUser: aaa, bbb, ccc, ddd
publishPass: 111, 222, 333, 444

I am also interested in this new feature as for the moment I publish the new stream with another data for different user/pass access and this "hack" I think it increase server memory consumption.

Hello, if you need a more complex authentication mechanism, you can use externalAuthenticationURL and provide an HTTP URL that performs the authentication, as described here:
https://github.com/aler9/rtsp-simple-server/blob/main/rtsp-simple-server.yml#L20


unable to clone git repo from github saas to gitbash

Error:
fatal: unable to access 'https://github.com/XXXX/': Empty reply from server

It is hard to guess what @sudeeshn had on mind but maybe this will help.
Try:
git clone https://github.com/gitblit/gitblit
instead of, what naturally comes to mid
git clone https://github.com/gitblit
yea, it took me a bit to figure it out.

I still have no idea what the request was about. As there was no further communication, I am closing this as Invalid.


New topic occasionally gets stuck on "no access to messages"

Describe the bug
Occasionally, when creating a new topic group, the messages screen will be stuck on "no access to messages". This happens very occasionally on PC (<5% of the time for me) and goes away after a couple seconds. However, this seems to happen more often on mobile, and the screen never goes away on mobile (gets stuck permanently).
To Reproduce
Steps to reproduce the behavior:

Go to sandbox.tinode.co
Create a new group
You should get stuck on a "no access to messages" screen. If you don't, try repeating these steps again. At this point, the loading spinner should've disappeared, but the "no access to messages" screen is still there.
When the component is refreshed (e.g. swapping to another chat and back, refreshing the page), the screen always disappears.

Expected behavior
After creating a new group, it should not get stuck on the "no access to messages" screen. Rather than having to refresh, it should update automatically.
Screenshots
Here's what the console looks like when this bug happens on PC:

Here's what the console looks like when the bug doesn't happen:

Example video:
https://github.com/tinode/webapp/assets/84942946/bae1c63b-ddec-425f-9b64-323395c1f576

The logs are not very useful in this case. It's probably a data race.

Also, when inviting someone else into a group, they sometimes appear as "unnamed" until the screen is refreshed. I think it's for a similar reason as this issue.


attributes publisher

also can we make sure we match L1 payload attribute SSE stream as closely as possible? https://github.com/ethereum/beacon-APIs/issues/244


Support adding sensors to the TOP and BOTTOM of the robot

This will require adding new enum values to SensorMountingFace. By defaults, TOP and/or BOTTOM mounted sensors should be centered on the appropriate face and use the X/Y translations to shift them around if necessary. Also, by default, TOP sensors point up (positive Y value) and BOTTOM sensors point down (negative Y value)
Part of #104

fixed in #113


ERF  is smaller after changing the input  image size

i changed the input size to 224×224，and compare RepLKNet with resnet101, it seems that resnet101 is larger than RepLKNet-13,
left is RepLKNet-13, right is resnet101

Hi,thanks for reply. i followed the instruction in README.md, loaded the weights of RepLKNet-13 provided by this link. Resnet101 model is downloaded from torchvision.
Then i modify the code line
https://github.com/DingXiaoH/RepLKNet-pytorch/blob/2b8b6c67a3455dd5ae951ea682269fbca8aff9f2/erf/visualize_erf.py#L46
to transforms.Resize((224,224),interpolation=Image.BICUBIC)
here is the input image used (if it is needed)
code：qrgb

Hi, thanks for sharing the results. We would appreciate it if you could provide more details. For example, which weights have you loaded?

Hi,thanks for reply. i followed the instruction in README.md, loaded the weights of RepLKNet-13 provided by this link. Resnet101 model is downloaded from torchvision.
Then i modify the code line
https://github.com/DingXiaoH/RepLKNet-pytorch/blob/2b8b6c67a3455dd5ae951ea682269fbca8aff9f2/erf/visualize_erf.py#L46
to transforms.Resize((224,224),interpolation=Image.BICUBIC) here is the input image used (if it is needed) code：qrgb

Hi, I meet the similar problem, the only differencve is that i use RepLKNet-31B rather than RepLKNet-13. It also seems that resnet101 is larger than RepLKNet-31B when input size is set to be 224, above is RepLKNet-31B, below is resnet101.

Except for the problem, i observe the other phenomenon. When we use the model which is initialized by default rather than by pretrained on ImageNet-1K, its ERF is visualized as below(input size is set to 1024):

The visual result which use the pretrained model on ImageNet can bee seen below:

We can see that ERF is very small when the model is initialized by default, and if it is a kind of unreasonable initial bias? More over，if the initialization will bring difficulties durging learning?
(All code follows the instruction in README.md)

Hi, I think the image size is too small (but downstream tasks usually use much higher resolutions) so that every model's ERF can cover the whole image. In this case, the definition of ERF intuitively changes from "which part can the model see" to "in the region the model can see, which part does it mostly attend to". And in this case, the contribution scores have low variance and the normalization will make the ERF map look unnatural.

Hi, I think the image size is too small (but downstream tasks usually use much higher resolutions) so that every model's ERF can cover the whole image. In this case, the definition of ERF intuitively changes from "which part can the model see" to "in the region the model can see, which part does it mostly attend to". And in this case, the contribution scores have low variance and the normalization will make the ERF map look unnatural.

Thanks so much! It really helps me understand it.

I tried to view the effective receptive field, but when I used this !python erf/visualize_erf.py --model resnet101 --data_path /path/to/imagenet-1k --save_path resnet101_erf_matrix.npy
I got this error
Traceback (most recent call last):
File "/content/RepLKNet-pytorch/erf/visualize_erf.py", line 15, in
from erf.resnet_for_erf import resnet101, resnet152
ModuleNotFoundError: No module named 'erf'
Moreover, this code is very complex. If I want to visualize the erf for my custom model, how can I use this? My model combines CNN and transformer, but this code is very complex to understand and use by early learners like me. Maybe this code is suitable for experts. It could be great if you shared your knowledge and great work that can be understandable by basic learners like me.


Usage

This looks mighty useful.
I have a project with lots of CSV incoming that I need to convert to golang struts.
Are you thinking of making some examples ?
Or maybe you know of other github projects that used this ?
Oh and can it run as a lib ?

Oh and can it run as a lib ?

Yes.

I have a project with lots of CSV incoming that I need to convert to golang struts.

Create a NewCSVInput and if you want you can call ReadRecord on it until it is exhausted. That'll get you a lot of rows represented as []string. But if you want golang structs, instead create a  NewSQLite3StorageWithDefaults and then load in the rows with LoadInput.
Then call ExecuteSQLString with a "*" and scan into your struct.
Something like this:
package main

import (
	"fmt"

	"github.com/dinedal/textql/inputs"
	"github.com/dinedal/textql/storage"
	"github.com/dinedal/textql/util"
)

type SomeData struct {
	Id   int
	Name string
}

// ./data.csv contents
/*
id,name
1,John
2,Jacob
3,Jingleheimer
4,schmidt
*/

func main() {
	opts := &inputs.CSVInputOptions{true, ',', util.OpenFileOrStdDev("./data.csv", false)}
	csvInput, _ := inputs.NewCSVInput(opts)
	storage := storage.NewSQLite3StorageWithDefaults()
	storage.LoadInput(csvInput)
	rows := storage.ExecuteSQLString("*")

	resultStructs := []SomeData{}

	for rows.Next() {
		var r SomeData
		rows.Scan(&r.Id, &r.Name)
		resultStructs = append(resultStructs, r)
	}
	// resultStructs is now an array of structs
	fmt.Println(resultStructs)
    //output: [{1 John} {2 Jacob} {3 Jingleheimer} {4 schmidt}]
}

Thanks !!

Dude, please add some examples, for God sake! I have know idea how to use this package and yet I'm desperate to use it.
By far this code snippet was the only thing I could find in terms of its usage inside code. :/


A couple of questions about playlists.

Just making sure I'm not missing anything but is there a way of sending multiple items/scenes to the playlist? Right now I have to go to the each individual scene's page before I can add it. Is there no way to select multiple scenes and add them to the playlist?
Second, after I send the list to an external player (PotPlayer in my case) the file names are blank, only each scene's playtime shows up. That means I have to remember what order I added however many scenes or play through each one until I find the one I want. I'm wondering if this is true with all the supported media players or just a quirk of PotPlayer in particular.
Thanks

Sorry, I was very late to this.
I will check the play list again and see.

The playlist had the scene title like "scene: xxxxx.mp4" before. The new Stash had some change and now the "title" property is empty for most scenes. I will make the change that if title is empty, it will use basename instead.
Currently the pop-up menu will only allow you to add one scene at a time. I will see if I can add "all the current scenes" to the list.
Actually, if you use "Ctrl-Alt-A", you can add all the scenes currently filtered.


[tool_crash] FileSystemException: Deletion failed, OS Error: The directory is not empty., errno = 145

Command
flutter run

Steps to Reproduce

...
...
...

Logs
FileSystemException: Deletion failed, OS Error: The directory is not empty.
, errno = 145
#0      _Directory._deleteSync (dart:io/directory_impl.dart:201:7)
#1      FileSystemEntity.deleteSync (dart:io/file_system_entity.dart:408:7)
#2      ForwardingFileSystemEntity.deleteSync (package:file/src/forwarding/forwarding_file_system_entity.dart:70:16)
#3      ErrorHandlingDirectory.deleteSync.<anonymous closure> (package:flutter_tools/src/base/error_handling_io.dart:469:22)
#4      _runSync (package:flutter_tools/src/base/error_handling_io.dart:573:14)
#5      ErrorHandlingDirectory.deleteSync (package:flutter_tools/src/base/error_handling_io.dart:468:12)
#6      FlutterWebSdk.updateInner (package:flutter_tools/src/flutter_cache.dart:187:16)
#7      CachedArtifact.update (package:flutter_tools/src/cache.dart:677:11)
#8      Cache.updateAll (package:flutter_tools/src/cache.dart:546:24)
<asynchronous suspension>
#9      FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:1144:7)
<asynchronous suspension>
#10     FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1043:27)
<asynchronous suspension>
#11     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#12     CommandRunner.runCommand (package:args/command_runner.dart:196:13)
<asynchronous suspension>
#13     FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:284:9)
<asynchronous suspension>
#14     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#15     FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:232:5)
<asynchronous suspension>
#16     run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:62:9)

[✓] Flutter (Channel stable, 2.2.3, on Microsoft Windows [Version
    10.0.19043.1110], locale en-KE)
    • Flutter version 2.2.3 at
      C:\Users\goody\Downloads\Compressed\flutter
    • Framework revision f4abaa0735 (3 weeks ago), 2021-07-01 12:46:11
      -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4

[!] Android toolchain - develop for Android devices (Android SDK
    version 30.0.3)
    • Android SDK at C:\Users\goody\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: C:\Program Files\Java\jdk-13.0.1\bin\java.exe
    • Java version Java(TM) SE Runtime Environment (build 13.0.1+9)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK
      licenses.
      See
      https://flutter.dev/docs/get-started/install/windows#android-setu
      p for more details.

[✓] Chrome - develop for the web
    • Chrome at C:\Program Files
      (x86)\Google\Chrome\Application\chrome.exe

[!] Android Studio (not installed)
    • Android Studio not found; download from
      https://developer.android.com/studio/index.html
      (or visit
      https://flutter.dev/docs/get-started/install/windows#android-setu
      p for detailed instructions).

[✓] VS Code (version 1.58.2)
    • VS Code at C:\Users\goody\AppData\Local\Programs\Microsoft VS
      Code
    • Flutter extension version 3.24.0

[✓] Connected device (3 available)
    • SM A107F (mobile) • R9WN415L45J • android-arm    • Android 10
      (API 29)
    • Chrome (web)      • chrome      • web-javascript • Google Chrome
      91.0.4472.164
    • Edge (web)        • edge        • web-javascript • Microsoft Edge
      91.0.864.64

! Doctor found issues in 2 categories.

Flutter Application Metadata
Type: app
Version: 1.0.0+1
Material: true
Android X: false
Module: false
Plugin: false
Android package: null
iOS bundle identifier: null
Creation channel: stable
Creation framework version: d79295af24c3ed621c33713ecda14ad196fd9c31
Plugins
firebase_auth-0.14.0+9
firebase_core-0.4.5
firebase_core_web-0.1.1+2

Closing this as duplicate of https://github.com/flutter/flutter/issues/64410


Initial Rails 6 migration

Summary
Created a new Rails 6 app with rails new rails-graphql-bootstrap --api --database=postgresql in order to check the differences between this bootstrap and the default Rails 6 app creation.

#3


Bump manif version to 0.0.4

Even if the new version was released the CMake version didn't changed
https://github.com/artivis/manif/blob/0d42c2de1a34628ca9044b1f2e4dd17bbfead904/CMakeLists.txt#L4

Associated issue: https://github.com/artivis/manif/issues/232

Can we drop the version check 0.0.4 for now so we can actually work with the 0.0.4 version that advertise itself still has 0.0.3 ?


Revised a wrong word. Made duoshuo style unified.

I found a wrong word that cause "hexo-autoprefixer" breakdown.

Thanks! :+1:


Parametrize unit tests

WIP

Ok - should be ready to merge now
The PR:

Gets rid of repeated code in unit tests
Parametrizes unit tests to make them easier to iterate upon and read, and hopefully increase coverage
Gets rid of config files / config comparison since they're no longer necessary


2.1 app changes

DO NOT MERGE without first deleting
app.json
config.js
/locales/en.json
/locales/manifest.js

CONFIG CHANGES

Fixes #144

Closes #137

Closes #48
(and does images as well)

Closes #127

Don't merge this yet, still want to rename config keys

Closes #146


feat(dockerfile): Added  cache option when building image

Please @patrickdevivo  @amenowanna   test this on your local env :)

Man...I tried this before and it didn't seem to work. But this seems to be working! Made a change in main.go and the build time was 8.9 seconds!

Will do  a rebase after https://github.com/mergestat/fuse/pull/266 is merge

The build cache correctly accounts for changes to Go source files, compilers, compiler options, and so on: cleaning the cache explicitly should not be necessary in typical use. However, the build cache does not detect changes to C libraries imported with cgo. If you have made changes to the C libraries on your system, you will need to clean the cache explicitly or else use the -a build flag (see 'go help build') to force rebuilding of packages that depend on the updated C libraries.

this may be something to be aware of generally, in case we bump a libgit2 or sqlite version


Change path for layouts, components and etc.

Is your feature request related to a problem? Please describe.
I would like to be able to change the path where slidev looks for layouts, components and etc.
I want to create a project with multiple presentations. Each presentation to be its own directory and I want to reuse common layouts and components.
Describe the solution you'd like
I want to configure somewhere slidev to search for layouts and components in different path.
config.file ->
layouts_alternative_paths:

'../layouts/'

Describe alternatives you've considered
There some alternative like symbolic link and git submodule. However, they have some issue are not the best option.

I found the proper way to this. You can use the themes to deliver shared components and layouts - https://sli.dev/themes/write-a-theme
The theme can be referenced locally with relative path - theme: ../slidev-theme-xxxx
Then the custom layouts (e.g. mylayout.vue) from the theme are accessible with - layout: xxxx
I suppose it will be nice to have this in the documentation.


[Gas] Remove checks for inaccessible states

GovernorUpgradeableV2.sol has a simplified state() function that can not reach every possible ProposalState.
Here is the enum with the list of possible states:
enum ProposalState {
    Pending,
    Active,
    Canceled,
    Defeated,
    Succeeded,
    Queued,
    Expired,
    Executed
}

Here is the function, which assigns the state:
function state(uint256 proposalId) public view virtual override returns (ProposalState) {
    ProposalCore storage proposal = _proposals[proposalId];

    if (proposal.executed) {
        return ProposalState.Executed;
    }

    if (proposal.canceled) {
        return ProposalState.Canceled;
    }

    uint256 snapshot = proposalSnapshot(proposalId);

    if (snapshot == 0) {
        revert("Governor: unknown proposal id");
    }

    if (snapshot >= block.number) {
        return ProposalState.Pending;
    }

    uint256 deadline = proposalDeadline(proposalId);

    if (deadline >= block.number) {
        return ProposalState.Active;
    }

    if (_quorumReached(proposalId) && _voteSucceeded(proposalId)) {
        return ProposalState.Succeeded;
    } else {
        return ProposalState.Defeated;
    }
}

As we can see, Pending, Active, Canceled, Defeated, Succeeded, and Executed states are possible to be reached. However, Queued and Expired are not.
Because much of our function logic is borrowed from versions of the contract where these states were reachable, these values are still checked. We can save some gas by removing the checks for these unreachable states from our functions.
Recommendation
In OptimismGovernorV5.sol#executeWithModule(), we can remove the check for Queued:
require(
    status == ProposalState.Succeeded || status == ProposalState.Queued, "Governor: proposal not successful"
);

In OptimismGovernorV5.sol#cancelWithModule(), we can remove the check for Expired:
require(
    status != ProposalState.Canceled && status != ProposalState.Expired && status != ProposalState.Executed,
    "Governor: proposal not active"
);

In GovernorUpgradeableV2.sol#execute(), we can remove the check for Queued:
require(
            status == ProposalState.Succeeded || status == ProposalState.Queued, "Governor: proposal not successful"
        );

In GovernorUpgradeableV2.sol#_cancel(), we can remove the check for Expired:
require(
    status != ProposalState.Canceled && status != ProposalState.Expired && status != ProposalState.Executed,
    "Governor: proposal not active"
);

✅


Unified folders crash K9

Expected behavior
Opening the "Spam" / any folder in the unified account shows the (spam) folder merged for all accounts in one place.
Actual behavior
Clicking on "Spam" or any other folder crashes the app, when the unified account is selected.
Steps to reproduce

Switch to the unified account
Open the drawer
Click on "Spam" or any other folder

Environment
K-9 Mail version:
5.700
Android version:
Android 9
11-28 09:45:08.420 10717 10717 D AndroidRuntime: Shutting down VM
11-28 09:45:08.421 10717 10717 E AndroidRuntime: FATAL EXCEPTION: main
11-28 09:45:08.421 10717 10717 E AndroidRuntime: Process: com.fsck.k9, PID: 10717
11-28 09:45:08.421 10717 10717 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.fsck.k9.Account.getUuid()' on a null object reference
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.fsck.k9.activity.MessageList.openFolder(MessageList.java:632)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.fsck.k9.ui.K9Drawer$createItemClickListener$1.onItemClick(K9Drawer.kt:204)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.mikepenz.materialdrawer.DrawerBuilder$6.onClick(DrawerBuilder.java:1786)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.mikepenz.materialdrawer.DrawerBuilder$6.onClick(DrawerBuilder.java:1760)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.mikepenz.fastadapter.FastAdapter$1.onClick(FastAdapter.java:609)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.mikepenz.fastadapter.utils.EventHookUtil$1.onClick(EventHookUtil.java:72)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.view.View.performClick(View.java:6597)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.view.View.performClickInternal(View.java:6574)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.view.View.access$3100(View.java:778)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.view.View$PerformClick.run(View.java:25906)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.os.Handler.handleCallback(Handler.java:873)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:193)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6718)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
11-28 09:45:08.421 10717 10717 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
11-28 09:45:08.130   908   908 I NotificationService: Cannot find enqueued record for key: 0|com.fsck.k9|35|null|10194
11-28 09:45:08.428   908  2195 W ActivityManager:   Force finishing activity com.fsck.k9/.activity.MessageList
11-28 09:45:08.435 10717 10717 I Process : Sending signal. PID: 10717 SIG: 9

Edit: I have now discovered that this issue is not restricted to the spam folder and I have changed the text and headline accordingly.
It is also very inconsistent if the unified folders are shown in the drawer or not.

Folders are not supposed to be displayed when the Unified Inbox is selected. It's working as expected on my test devices.
How are you switching to the Unified Inbox? Can you provide a screenshot of how the Unified Inbox looks like with folders displayed in the drawer?

I'm switching to the unified account by tapping on the account icon in the drawer header.
If they are "not supposed to be displayed", does that mean that the unified spam folder is a discontinued feature?

I can reliably reproduce this on my device:

Switch from a normal account to the combined inbox
-> no folders are displayed
Close the drawer
Do a refresh/mail fetch by pulling down
Open the drawer again
-> the folders (of the main account?) are displayed


Could I train dpo use full mode?

Reminder

[X] I have read the README and searched the existing issues.

Reproduction
--finetuning_type full
Expected behavior
Try to use full to fine-tune, but out of memory. Could I use full to fine-tune? If can't, why?
System Info
No response
Others
No response

You can try deepspeed zero3 + offload


Schedule discovery/field visit with Sea to Sky Natural Resource District

Description
Describe who the meeting is with and the proposed topic of discussion
Tasks

[ ] Communicate with participants
[ ] Send Outlook/MS Teams invite
[ ] Required participants accept the invite

Additional Comments
Add any additional context if required or delete the section.

https://dir.gov.bc.ca/gtds.cgi?show=Branch&organizationCode=FOR&organizationalUnitCode=NROVSQ


Complete Django-Matomo installation

Here are the docs to install Django Matomo: https://django-analytical.readthedocs.io/en/latest/services/matomo.html
Here is the latest attempt at installing Django Matomo: https://tarot-matomo.herokuapp.com/
The previous freelancer attempted to install Matomo using the “JawsDB MySQL” (free tier) Heroku app but we quickly noticed that the installation would reset after a few hours. Matomo apparently requires more data resources than what is available in the free tier of the “JawsDB MySQL” Heroku app. Your task is to complete the installation of matomo but find some way to install it with a low-cost low-scale database solution that is preferably free or nearly free.
When my website is ready to go live, my intention is to share it with a very small number of individuals, one at a time. This is what I will use to track my users. So my expected web traffic should be less than 5 people a day in the beginning at launch. Therefore Matomo will serve my low traffic needs during that beginning period. But afterwards, when I am ready to go public, I expect that Matomo and the db will break under the load and then I will just use Google Analytics at that point.
So the Matomo resource requirements should be miniminial because I will be using it only in the beginning when web traffic is nearly non-existent. This means that a free tier or low cost database solution should work just fine.

This Issue is currently untenable for now. Although I may re-raise this issue at a later date. Closed.


Please enter a good token - Goal : obtaining codes that work

Hello,
I know this issue has been resolve like 10 times already... I have looked at the Php repo and the other resolutions.. They all point me to the same Token and Client
Token : "MzRhMDJjZjhmNDQxNGUyOWIxNTkyMTg3NmRhMzZmOWE6ZGFhZmJjY2M3Mzc3NDUwMzlkZmZlNTNkOTRmYzc2Y2Y="
Client : "ZWM2ODRiOGM2ODdmNDc5ZmFkZWEzY2IyYWQ4M2Y1YzY6ZTFmMzFjMjExZjI4NDEzMTg2MjYyZDM3YTEzZmM4NGQ="

I copied both from a previous issue in this repo and I also copied them from the Php repo
When I run my code :
// require the package
const Fortnite = require("fortnite-api");

let fortniteAPI = new Fortnite(
    [
        "****",
        "****",
        "MzRhMDJjZjhmNDQxNGUyOWIxNTkyMTg3NmRhMzZmOWE6ZGFhZmJjY2M3Mzc3NDUwMzlkZmZlNTNkOTRmYzc2Y2Y=",
        "ZWM2ODRiOGM2ODdmNDc5ZmFkZWEzY2IyYWQ4M2Y1YzY6ZTFmMzFjMjExZjI4NDEzMTg2MjYyZDM3YTEzZmM4NGQ="
    ],
    {
        debug: true
    }
);

fortniteAPI.login().then( function () {
    console.log('Hello');
});

Where **** is replaced with my login information(I have verified it is correct and I have toggle 2 factor Auth on and off).
When running this code I get :
Fortnite-API - Credentials Params OK
(node:7127) UnhandledPromiseRejectionWarning: Please enter good token
(node:7127) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:7127) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I have no idea what next step to take, so I am looking to anyone who sees this for advice.

I captured both tokens through fiddler and am having the same issue reported by @SteeledSlagle13 . Would really appreciate if you can share any resolutions you may find :)

The error isn't with the info being passed.
I tried adding a catch earlier but that didn't change anything other than the unhandled promise rejection.
Code :
fortniteAPI.login().then( function () {
    console.log('Hello');
}).catch(function (err) {
    console.log(err);
});

Generates :
Fortnite-API - Credentials Params OK
Please enter good token

Well it was a theory but
Not the info being passed.
How that info is being passed.
BUT wait. Now it generates just "Please enter good token"?
Is the above code all that you're running? (Just to preface) I admit I am by no standards (especially my own) an expert or even "experienced" with git/apis. I still consider myself new to it all.
Looking back at my (horribly notated) commits, seems that I stopped getting the error when I moved my ajax post code from success, to done. Only non cosmetic change I noticed. Any additional code you are running would be helpful, I tried just running the code above, it does nothing but log you in and it does that successfully
If the above is the case, I think its asking in a not so upfront way, what now? You coded it to login, it did. Now it wants to do something so its asking you to send the "good token" aka the username + system (?)
But idk what else your code is doing after you login. But if you no longer get the other error its because you fixed the promise or async function that was being left undone, so to speak.
Additional code would be useful to truly get to the root of the issue.
If that is all you are running try running this
    fortniteAPI.login().then(function(){
        fortniteAPI.getStatsBR(''wrekan'', ''pc'').then(function(stats){
            console.log(stats);
        }).catch(function(err){
                console.log(err);
                res.end();
            });
    });

This produces the Params OK log as well as outputs the info requested. I just filled it in with my fortnite info for example.
I tried re-producing your error but right now my code is sitting in a node/express app via router so idk which if not all of that is changing my output. But I can't get the "Please enter good token" to log

I have no idea what was going on with my code.... It works now.
¯_(ツ)_/¯
I feel like this is one of those instances of a meme I saw on reddit a while back
'It doesn't work... Why?'
12 hours later
'It works... Why?'
I literally just added :
fortniteAPI.getStatsBR('wrekan', 'pc').then(function(stats){
            console.log(stats);
        }).catch(function(err){
                console.log(err);
            });

into the login.
Overall code with out the FortniteApi Object Declaration :
fortniteAPI.login().then(function () {
    fortniteAPI.getStatsBR('wrekan', 'pc').then(function (stats) {
        console.log(stats);
    }).catch(function (err) {
        console.log(err+' Inside function error');
    });
})
.catch(function (err) {
    console.log(err+' Outside function error');
});

I am so happy it is working now :D

Good ! I will close this issue so ;) !


fix table headers: tr elements cannot have a colspan, th elements can

fix for an UI bug found while developing the nginx 1.1 plugin. Due to the really long headings, they would break in the first column because the colspan is set incorrectly.

oO nice catch!


python: Temporary way to install packages

Allow users to install packages from workflow code. This is a workaround until we have a way to create custom Python environments per workflow.
See ENG-1219

@haimzlato This add a way the user can write in the workflow code something like:

packages.install(['numpy', 'pandas'])

And it'll be installed on the worker. Second call to install on the worker will do nothing.
Thoughts?

interesting, but when should it be executed? in global scope?


backport: merge bitcoin#22817, #25443, #26519, #26854, #25880, #26982, #26584, #27577, #28287, #28419 (auxiliary backports: part 16)

Additional Information

When backporting bitcoin#28287, p2p_net_deadlock.py relies on the function, random_bytes(), that is introduced in bitcoin#25625. Backporting bitcoin#25625 would attract changes outside the scope of this PR.
In the interest of brevity, the changes that introduce random_bytes() have been included in bitcoin#28287 instead.

Additionally, changes had to be made to sendmsgtopeer() to work with currently available UniValue and RPC code
A check in rpc_net.py uses MAX_PROTOCOL_MESSAGE_LENGTH + 1 instead of 4000001 as Dash messages have a protocol limit of 3MiB (source) while Bitcoin messages have a protocol limit of 4MB (source). Instead of changing it to 3145729, it would be more appropriate to use the constant.

When backporting bitcoin#25880, changes needed to be made to p2p_ibd_stalling.py to help it pass.

DIP3 activation had to be delayed to a block beyond the range of the test. This is to prevent block rejection arising from a missing DIP3-compliant coinbase (done with -dip3params=2000:2000)
Mock time was disabled to ensure nodes in the test do not resort to direct fetching (with mock time enabled, nodes would be considered close apart in time, which would prevent the primary node from fetching in parallel, which is behavior this test relies on) (done with self.disable_mocktime = True)
The nodes connected do not report compressed headers support (the test relies on sending headers messages and reworking it to use compressed headers has little benefit) (done with services = NODE_NETWORK | NODE_BLOOM)

bitcoin#22817 tightens checks to make sure nodes are properly connected. This has the effect of breaking parallel masternode connections as checks start to fail. This has been mitigated by making it sequential. Below is a failed run without the fix.

Test log
dash@c5995208af26:/src/dash$ ./test/functional/rpc_masternode.py
2024-09-17T10:37:20.947000Z TestFramework (INFO): Initializing test directory /tmp/dash_func_test_iotzq2_b
2024-09-17T10:37:20.948000Z TestFramework (INFO): Creating and starting controller node
2024-09-17T10:37:20.948000Z TestFramework (INFO): Creating and starting 1 simple nodes
2024-09-17T10:37:21.590000Z TestFramework (INFO): Generating 3100 coins
2024-09-17T10:37:22.991000Z TestFramework (INFO): Activating DIP3
2024-09-17T10:37:22.992000Z TestFramework (INFO): Preparing 3 masternodes
2024-09-17T10:37:23.166000Z TestFramework (INFO): Prepared MN 0: collateral_txid=[...], collateral_vout=0, protxHash=[...]
2024-09-17T10:37:23.448000Z TestFramework (INFO): Prepared MN 1: collateral_txid=[...], collateral_vout=1, protxHash=[...]
2024-09-17T10:37:23.697000Z TestFramework (INFO): Prepared MN 2: collateral_txid=[...], collateral_vout=0, protxHash=[...]
2024-09-17T10:37:24.755000Z TestFramework (INFO): Starting 3 masternodes
2024-09-17T10:37:26.279000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/src/dash/test/functional/test_framework/test_framework.py", line 159, in main
    self.setup()
  File "/src/dash/test/functional/test_framework/test_framework.py", line 321, in setup
    self.setup_network()
  File "/src/dash/test/functional/test_framework/test_framework.py", line 1506, in setup_network
    self.start_masternodes()
  File "/src/dash/test/functional/test_framework/test_framework.py", line 1449, in start_masternodes
    job.result()
  File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/concurrent/futures/_base.py", line 444, in result
    return self.__get_result()
  File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result
    raise self._exception
  File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/src/dash/test/functional/test_framework/test_framework.py", line 1429, in do_connect
    self.connect_nodes(self.mninfo[idx].nodeIdx, 0)
  File "/src/dash/test/functional/test_framework/test_framework.py", line 711, in connect_nodes
    wait_until_helper(lambda: all(peer["bytesrecv_per_msg"].pop("pong", 0) >= 32 for peer in to_connection.getpeerinfo()))
  File "/src/dash/test/functional/test_framework/util.py", line 248, in wait_until_helper
    if predicate():
  File "/src/dash/test/functional/test_framework/test_framework.py", line 711, in <lambda>
    wait_until_helper(lambda: all(peer["bytesrecv_per_msg"].pop("pong", 0) >= 32 for peer in to_connection.getpeerinfo()))
  File "/src/dash/test/functional/test_framework/coverage.py", line 49, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
  File "/src/dash/test/functional/test_framework/authproxy.py", line 146, in __call__
    response, status = self._request('POST', self.__url.path, postdata.encode('utf-8'))
  File "/src/dash/test/functional/test_framework/authproxy.py", line 107, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1256, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1267, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1093, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
2024-09-17T10:37:26.782000Z TestFramework (INFO): Stopping nodes
2024-09-17T10:37:27.787000Z TestFramework (WARNING): Not cleaning up dir /tmp/dash_func_test_iotzq2_b
[...]
2024-09-17T10:37:27.788000Z TestFramework (ERROR):

Even stricter checks introduced in bitcoin#25443 seem to break some tests, both Bitcoin and Dash. As reworking tests around these checks are outside the scope of this PR, they have been relaxed instead. Below is a failed run without those relaxations.

Test log
dash@c5995208af26:/src/dash$ ./test/functional/p2p_disconnect_ban.py
2024-09-17T10:40:40.357000Z TestFramework (INFO): Initializing test directory /tmp/dash_func_test_2qv114ww
2024-09-17T10:40:41.169000Z TestFramework (INFO): Connect nodes both way
[...]
2024-09-17T10:40:42.704000Z TestFramework (INFO): disconnectnode: successfully reconnect node
2024-09-17T10:41:42.885000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        self.wait_until(lambda: sum(peer['version'] != 0 for peer in to_connection.getpeerinfo()) == to_num_peers)
'''
2024-09-17T10:41:42.886000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/src/dash/test/functional/test_framework/test_framework.py", line 160, in main
    self.run_test()
  File "./test/functional/p2p_disconnect_ban.py", line 98, in run_test
    self.connect_nodes(0, 1)  # reconnect the node
  File "/src/dash/test/functional/test_framework/test_framework.py", line 707, in connect_nodes
    self.wait_until(lambda: sum(peer['version'] != 0 for peer in to_connection.getpeerinfo()) == to_num_peers)
  File "/src/dash/test/functional/test_framework/test_framework.py", line 851, in wait_until
    return wait_until_helper(test_function, timeout=timeout, lock=lock, timeout_factor=self.options.timeout_factor)
  File "/src/dash/test/functional/test_framework/util.py", line 263, in wait_until_helper
    raise AssertionError("Predicate {} not true after {} seconds".format(predicate_source, timeout))
AssertionError: Predicate ''''
        self.wait_until(lambda: sum(peer['version'] != 0 for peer in to_connection.getpeerinfo()) == to_num_peers)
''' not true after 60.0 seconds
2024-09-17T10:41:43.387000Z TestFramework (INFO): Stopping nodes
2024-09-17T10:41:43.890000Z TestFramework (WARNING): Not cleaning up dir /tmp/dash_func_test_2qv114ww
2024-09-17T10:41:43.890000Z TestFramework (ERROR): Test failed. Test logging available at /tmp/dash_func_test_2qv114ww/test_framework.log
[...]
2024-09-17T10:41:43.890000Z TestFramework (ERROR):

Breaking Changes
None expected.
Checklist:

[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas (note: N/A)
[x] I have added or updated relevant unit/integration/functional/e2e tests
[x] I have made corresponding changes to the documentation (note: N/A)
[x] I have assigned this pull request to a milestone (for repository code-owners and collaborators only)

There are changes introduced to connect_nodes() after bitcoin#25443 and for ease of review, bitcoin#25443 was retained to keep the diffs intact.
Making a separate "effective revert" commit after connect_nodes() changes have been made, allows for one commit to be reverted when a potential future PR resolves the underlying cause instead of modifying every commit that changes connect_nodes() to account for the absence of bitcoin#25443.

we don't have signet as well:
# Setup the three signets, which are incompatible with each other

allows for one commit to be reverted when a potential future PR
Do 20445 "partial" at least... No one going to remember, that we need to revert here something, add TODO maybe?

let's extract https://github.com/dashpay/dash/pull/6276/commits/fd82bdc09eea333465c495320927e0e963e0bddf and https://github.com/dashpay/dash/pull/6276/commits/927dd6f92e0a2cca56544f5f9bbd64a3244010b1 into their own PR maybe?


Is there any plan to integrate NCCL 2.0 or horovod into CollectiveAllReduceStrategy?

System information

TensorFlow version (you are using): master
Are you willing to contribute it (Yes/No): Yes

Describe the feature and the current behavior/state.
Horovod brings significant performance to distribution execution especially when using NCCL to do all_reduce. Is there any plan to do integration  or simply support NCCL 2.0 in CollectiveAllReduceStrategy? I am willing to contribute for it!
Will this change the current api? How?
No，it will be another cross_device_ops for candidate.
Who will benefit with this feature?
Anyone who wants to use CollectiveAllReduceStrategy to improve performance.
Any Other info.
Currently I am working for distribution optimization and I hope to have a discussion. Thanks.
@yuefengz

Thank Siyu for submitting this issue.
@yuefengz  We are willing to contribute to Distribution Strategy to make it greater and brings more benefits to end-users. Currently, we found Horovod is a nice backend to be used to support CollectiveAllreduceStrategy and we are willing to work on it. Any suggestions or feedback from your side are highly welcome.
Thanks

It has been 14 days with no activity and the awaiting response label was assigned. Is this still an issue?

You can now use tf.distribute.MultiWorkerMirroredStrategy(communication=tf.distribute.experimental.CollectiveCommunication.NCCL)` to try out our nccl implementation. Nccl is faster on some networks than our previous implementation but allocates extra memory buffers.

Horovod's TensorFusion is a dynamic technique: During execution nodes report on the tensor reductions that are ready to go, then a master determines the next reduction set based on an intersection of those reported ready.  I assume there is next a compacting data copy at each node before the collective op begins (which is an opportunity for compaction or precision reduction).  All of this requires some out of band communication to a master which potentially introduces extra latency or high in-cast at large scale, plus there's also extra latency for data copies.  Depending on the computation it may be possible to overlap much of this latency with other useful work.
ScopedAllocator is a static technique: upstream operations compute into adjacent regions of a pre-allocated tensor.  The collective op can begin as soon as the final inbound edge completes, there is no out-of-band communication necessary.  As you point out, it's not clear that static analysis can find the best strategy, or that the best strategy is consistent from step to step.
It seems an empirical question which technique will work best for a particular graph in a particular distribution.  The TF team is interested in ways of improving the application of ScopedAllocator, perhaps by periodically examining runtime performance to modify the merge strategy.

@poxvoculi So is there any plan to do the pre-analysis based on cost model in static tensor fusion technique or other tuning method?

@wangsiyu I've had some casual conversations with colleagues about the feasibility of doing something like that, but there's no concrete plan to do anything yet.  I think it would be interesting to do some detailed performance comparisons of the dynamic Horovod approach with the static ScopedAllocator approach and see where each looks stronger.  That might give some insight into the most worthwhile next project in this area.

@poxvoculi
Thanks for the feedback.
@yuefengz
Internally we have already integrated Horovod(we have gotten rid of MPI to ensure as less extra dependencies to be introduced as possible ) into CollectiveAllReduceStrategy and benchmarked with some of our in-house models. The performance also looks promising. For a Transformer NLP model, the rough number is as following: for 2node 16 GPUs, around 14X speed-up against single GPU version; for 3node 24 GPUs, around 18X speed-up, with only 10Gbps ethernet device. Further performance improvement is expected if better hardware is utilized, such as RDMA or IB, etc.
We are considering whether to make this Horovod integration a separate PR into distribution strategy. Any feedback from your folks are highly welcome.
Thanks.

@yangjunpro We are having this discussion on collective communication and networking API in general within the networking SIG. If you are interested, feel free to send us a design draft to<EMAIL_ADDRESS>We are also having a conference call this Wednesday morning (7am GMT+8), and it is a great place to escalate the discussion.

@byronyi
Sure, we will join the conference this time.
Is there any dial-in number or Hangout invitations?
Thanks

You should be able to see the invitation once you add yourself to https://groups.google.com/a/tensorflow.org/forum/m/?pli=1#!forum/networking

Closing issue; NCCL 2.0 is now integrated into MultiWorkerMirroredStrategy.


WIP: add symbol offset checking script

This script tests whether any unexpected changes occur
between symbol addresses in zephyr_prebuilt.elf and
zephyr.elf.
TODO:

Document more what parts of memory do change
between builds, a diagram or two would help

Lots of stuff in shift-whitelist. Consider defining
new linker symbols indicating regions where
contained symbols may move, and define the whitelist
in terms of that instead.

Run this script for all builds where CONFIG_ASSERT
is enabled.

Signed-off-by: Andrew Boie<EMAIL_ADDRESS>

Codecov Report

Merging #14551 into master will decrease coverage by 0.03%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master   #14551      +/-   ##
==========================================
- Coverage   52.02%   51.99%   -0.04%
==========================================
  Files         309      309
  Lines       45574    45574
  Branches    10555    10555
==========================================
- Hits        23711    23695      -16
- Misses      17057    17069      +12
- Partials     4806     4810       +4

Impacted Files
Coverage Δ

subsys/testsuite/ztest/include/ztest_assert.h
38.88% <0%> (-38.89%)
:arrow_down:

subsys/testsuite/ztest/src/ztest.c
65.28% <0%> (-7.44%)
:arrow_down:

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 ea5d54c...984fc82. Read the comment docs.

@andrewboie any plans to get back to this?


persisterIsStale() should return false if record is missing or policy is unspecified

Issue fixes OOMs internally due to missing records causing double network hits on fresh install. Oops!


PIVOT-6703 Update dependencies

CI Checklist

[ ] Enable Integration Checks

Yes I checked all the bookmarks in the UI 😄
I just saw I forgot to integrate my previous changes, notably disabling the flaky tests (already spotted as flaky by @MehdiEnnaime in the past, with previous intent to fix it), doing it now


Remove // js and php comments

Hello,
Is there a way to allow htmlclean to remove // comments inside  and inline javascript ?
That would be awesome.
Thank you for the plugin

Hi @trompx,
Since htmlclean protects those, you can add minifier for those to your task.
For example, following task minifies INPUT.html that contains inline JavaScript, and writes it to OUTPUT.html.
Install packages if you don't have.
npm install grunt-task-helper htmlclean uglify-js

module.exports = grunt => {
  const htmlclean = require('htmlclean'),
    uglify = require('uglify-js');

  grunt.initConfig({
    taskHelper: {
      minHTML: {
        options: {
          handlerByContent: content => {
            return htmlclean(content.replace(/(<script\b[^>]*>)([\s\S]*?)(<\/script>)/gi,
              (s, open, code, close) => `${open}${code ? uglify.minify(code, {fromString: true}).code : ''}${close}`));
          }
        },
        src: 'INPUT.html',
        dest: 'OUTPUT.html'
      }
    }
  });

  grunt.loadNpmTasks('grunt-task-helper');
  grunt.registerTask('default', ['taskHelper:minHTML']);
};

CSS code also can be minified by this way with CSS minifier (e.g. clean-css).

No reply came, and I close this issue.


Google cloud project giving null when I try to refresh

Hello,
I set up the project as a procedure and it worked for a few weeks. Then, when I needed to refresh the instances in the project, it gives me the following error
System.ArgumentNullException: Value cannot be null. Parameter name: source    at System.Linq.Enumerable.Where[TSource](IEnumerable1 source, Func2 predicate)    at Google.Solutions.CloudIap.Plugin.Integration.ComputeEngineAdapter.IsWindowsInstanceByGuestOsFeature(Instance instance)    at Google.Solutions.CloudIap.Plugin.Gui.PluginEventHandler.<>c.<OnLoadServersClick>b__10_3(Instance i)    at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
at System.Collections.Generic.HashSet1.UnionWith(IEnumerable1 other)
at System.Collections.Generic.HashSet1..ctor(IEnumerable1 collection, IEqualityComparer1 comparer)    at Google.Solutions.CloudIap.Plugin.Gui.PluginEventHandler.<>c__DisplayClass10_0.<OnLoadServersClick>b__2(IEnumerable1 allInstances)
at Google.Solutions.CloudIap.Plugin.Gui.WaitDialog.<>c__DisplayClass13_21.<Run>b__1()
I honestly have no idea what is causing this, so if you could explain it I would appreciate it.

The fix is part of https://github.com/GoogleCloudPlatform/iap-windows-rdc-plugin/releases/tag/1.1.47. Please let me know in case the problem persists.


firestore-bigquery-export Collection path (single depth) regex error

[READ] Step 1: Are you in the right place?
Issues filed here should be about bugs for a specific extension in this repository.
If you have a general question, need help debugging, or fall into some
other category use one of these other channels:

For general technical questions, post a question on StackOverflow
with the firebase tag.
For general Firebase discussion, use the firebase-talk
google group.
To file a bug against the Firebase Extensions platform, or for an issue affecting multiple extensions, please reach out to
Firebase support directly.

[REQUIRED] Step 2: Describe your configuration

Extension name: _ firestore-bigquery-export
Extension version: _ 0.1.7
Configuration values (redact info where appropriate):

[REQUIRED] Step 3: Describe the problem
I am trying to export the entire firestre collection named events to BigQuery, but upon saving the above configuration am faced with the following error:
; RESOURCE_ERROR at /deployments/firebase-ext-firestore-bigquery-export/resources/fsexportbigquery: {"ResourceType":"gcp-types/cloudfunctions-v1:projects.locations.functions","ResourceErrorCode":"400","ResourceErrorMessage":{"code":400,"message":"The request has errors","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.BadRequest","fieldViolations":[{"field":"event_trigger","description":"Expected value /events/{documentId} to match regular expression [^/]+/[^/]+(/[^/]+/[^/]+)*"}]}],"statusMessage":"Bad Request","requestPath":"https://cloudfunctions.googleapis.com/v1/projects/lovecaster-f3c68/locations/us-central1/functions/ext-firestore-bigquery-export-fsexportbigquery","httpMethod":"PATCH"}}

Not sure if I'm doing something wrong or if #418 introduced this problem.

+1
Also seeing this

Hey @nwparker, the regex from your error message [^/]+/[^/]+(/[^/]+/[^/]+)* is looking for an even amount of path segments (i.e. a document). The regex (^[^/]+(/[^/]+/[^/]+)*$) recently merged is looking for an odd amount of path segments (i.e. a collection).
I think this error is coming from somewhere internally. We'll get this looked at either way, thanks for raising the issue!

@laurenzlong and @joehan it seems like CF3 is blocking this deploy, even though the params look ok to me. Any idea what might be going wrong?

Hi I wasn't able to reproduce this error with the same parameters. Did you previously have /events as the collection path? The leading slash can cause issues.

Hi I wasn't able to reproduce this error with the same parameters. Did you previously have /events as the collection path? The leading slash can cause issues.

Thanks @laurenzlong , removing and re-installing seems to have fixed things. However, shouldn't have re-configuring the extension have also worked? If so, should there be a bug opened for that issue?

Yes that is indeed a bug! Thanks for letting us know, I've filed an issue internally (bug ID 166473495) Since it's an issue with the platform not the extension itself, we don't track it in this repo.

Yes that is indeed a bug! Thanks for letting us know, I've filed an issue internally (bug ID 166473495) Since it's an issue with the platform not the extension itself, we don't track it in this repo.

Thanks!


csv output in all commands that produce tables

What problem are you facing?
For reporting purposes, it's useful to take a data extract from the Packet
system and then import it into a spreadsheet for further analysis.
https://github.com/olekukonko/tablewriter/issues/80 describes how to
use the tablewriter package to produce CSV output.
How could the Packet CLI help solve this problem?
Add a --csv or --output csv or similar option to format
tabular output as tables, with a design goal to import into
Excel or Google Sheets.
Alternatively, document how to reformat the JSON or YAML
output into tabular CSV format.

It is possible to get CSV (or near enough to CSV) output by piping the JSON output into jq, though getting exactly what you want might be difficult with that tool.
An example:
packet device get -p $PACKETPROJECT --include created_at,ip_addresses.address -j | jq -c '.[] |[.hostname,.id,.created_at,.ip_addresses[].address]'

with this output
["freebsd-ewr1","116abfa3-b1c7-xxxx-a559-3a48e691a419","2020-08-30T02:04:30Z","<IP_ADDRESS>","2604:1380:0:4300::3","<IP_ADDRESS>"]
["debian10-ewr1","8b6695c5-xxxx-4c28-94a2-922fda96aae7","2020-08-30T02:05:37Z","<IP_ADDRESS>","2604:1380:0:4300::5","<IP_ADDRESS>"]
["qualcomm-01","18cc6bf8-xxxx-4025-9e01-f7cd894ae6d2","2020-05-21T04:52:12Z","<IP_ADDRESS>","2604:1380:4111:9d00::1","<IP_ADDRESS>"]
["bastion-01","6105741f-14ee-xxxx-8fd9-e580af929ba2","2020-05-20T16:44:22Z","<IP_ADDRESS>","2604:1380:0:4300::1","<IP_ADDRESS>"]
["mon1","2f07a39f-xxxx-4619-87f9-432be941c892","2020-06-15T11:37:32Z","<IP_ADDRESS>","2604:1380:1000:e800::1","<IP_ADDRESS>"]

(slightly redacted output)

Similar results, perhaps better, with
packet device get -p $FREEBIES  -j | in2csv -f json | csvcut -c id,hostname,ip_addresses/0/address

using the in2csv and csvcut tools from the csvkit package.

Here's an example of how you can use the JSON format with jq to get custom tables output (thanks @dlotterman):
metal device list -o json | jq -r '.[] | .id + "\t" + (.ip_addresses[]| select ((.address_family==4) and .public==true) | .address|tostring) + "\t" + .state + "\t" + .hostname'


boards: nordic: Add cache alignment for cpusec IPC for nRF54H20DK and nRF9280PDK

Set data cache alignment for nodes defining IPC towards cpusec on nRF54H20 and nRF9280PDK.

Will be part of https://github.com/zephyrproject-rtos/zephyr/pull/79389. Closing this.


Jump to definition of a specific implementation of interface functions

Often I want to debug an interface, but I'm really debugging one of its implementations..
When I look at code that calls funcs on that interface, and I jump to definition, I jump to the type definition.. Would it be possible to inject in the running gocode that I want to dereference jumps to that interface to a specific implementation ?
that'd be so awesome!
thanks

Well, gocode doesn't even provide "jump to definition". If an editor you're using provides such feature it's not implemented via gocode. It's not a hard thing to do, but it's not in gocode and I don't think I'll add that stuff anytime soon.

Whoops! sorry, I think it uses godef.. wrong project !


Clean up index.tsx

Is your feature request related to a problem? Please describe.
There is unnecessary logic in index.tsx. Initial values for operation states should be set in the operation context provider.
Describe the solution you'd like
The logic in the image is only executed once to set initial values from local storage. This logic should be moved into the context provider for the operation state.

can i work on this and can you guide me ?

Feel free to work on a task if nobody has assigned themselves to it. Can you tell me what kind of guidance you need?

can i work on this and can you guide me ?

Feel free to work on a task if nobody has assigned themselves to it. Can you tell me what kind of guidance you need?


Could you provide the saliency map on the SOD test datasets?such as ECSSD/DUT-TE/DUT-OMRON/PASCAL/HKU-IS? Thank you for your contribute to SOD field.

Could you provide the saliency map on the SOD test datasets?such as ECSSD/DUT-TE/DUT-OMRON/PASCAL/HKU-IS? Thank you for your contribute to SOD field.

Please check the corresponding references. We don't have the rights to
re-distribute other datasets. thanks.
On Thu, Jun 23, 2022 at 6:35 AM Twist Fate without A Yellow Card <
@.***> wrote:

Could you provide the saliency map on the SOD test datasets?such as
ECSSD/DUT-TE/DUT-OMRON/PASCAL/HKU-IS? Thank you for your contribute to SOD
field.
—
Reply to this email directly, view it on GitHub
https://github.com/xuebinqin/U-2-Net/issues/314, or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADSGORIJUQFE3S57RDPTXT3VQRRZPANCNFSM5ZUMN3JA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

--
Xuebin Qin
PhD
Department of Computing Science
University of Alberta, Edmonton, AB, Canada
Homepage: https://xuebinqin.github.io/


Rename get_enr -> lookup_enr

What was wrong?
I use grep to navigate our codebases and having two methods called get_enr (ENRDB.get_enr) makes this codebase a little harder for me to navigate.
It feels weird for submit this because the right answer is to use better tools, but I don't think better tools exist for Python.
Cute Animal Picture
A tiny bird for a tiny PR

Added some tests and rebased onto master, I'll merge this tomorrow once you've had one last chance to look at it

Hah, actually, after looking at why the tests are failing after the rebase, I think there might genuinely be a bug here!
Here's lookup_enr:
https://github.com/ethereum/ddht/blob/51882f0447dc3b7c724b0d75ed3fd31291afd6b4/ddht/v5_1/network.py#L174-L187
It first tries to return the enr from the enr_db, and if the enr isn't there it tries to send FindNodes to the peer. However, find_nodes fails if the peer is not in the database!
I'm not entirely sure what should happen here, I think the KeyError should probably be raised, and a request will only be made if you're asking for a higher sequence number than what is already known?

Changed lookup_enr and got all the tests passing, if you choose to accept.


folder search?

Hi Alexander! I use your wonderful gdrive alfred workflow daily! Would you be willing to add support to finding gdrive folders as well as files? Not sure if that's even doable? Basically "d foo" would match foo/ and open the google folder/tag. This sort of parallels alfred's simple folder search workflow ("f foo").
If a small donation$ would help, I'd be honored!

+1 I also would love to see this feature

Hi @azai91,
any update if this is possible or on the roadmap would be great.
I really like your workflow and using it everyday.
I just miss the functionality to open folders from Google Drive in finder.
Thanks,
Christian

yeah that would be great indeed. I feel this is the only thing missing here 👍 	Good job with the plugin, it works very well and it's very useful.

You can get that with a separate Alfred plugin: https://github.com/login?return_to=%2Fazai91%2Falfred-drive-workflow

@johnathanz seems the link redirects to this plugin, can you share the correct link?
Thanks,
Christian

@johnathanz which plugin are you talking about?

I'd love this feature to show folders as well.  Isn't there a way we can configure this ourselves?

Ive tweaked the code to do this and forked the project here:
https://github.com/dabeeeenster/alfred-drive-workflow

@dabeeeenster How can I try it out?

Ive made a release here https://github.com/dabeeeenster/alfred-drive-workflow/releases/tag/v2.2

I confirm it works. The diff is here: https://github.com/dabeeeenster/alfred-drive-workflow/commit/c2526817f045387d1e373179018d7ce72e61d2f9
I would remove comments and would instead add a setting to enable/disable folder search. I'd let plugin author (@azai91) decide wether this should be enabled or disabled by default. But I'd personally enable folders by default.
Here's how users can set a setting with alfred workflows:

If the setting was added with the Don't Export flag, it will already be there and part of the exported workflow.


More E2E fixing

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

Comparison is base (7183b41) 24.63% compared to head (7e8205d) 3.50%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #190       +/-   ##
==========================================
- Coverage   24.63%   3.50%   -21.14%
==========================================
  Files          83      75        -8
  Lines        3239    2085     -1154
  Branches      457     411       -46
==========================================
- Hits          798      73      -725
+ Misses       2441    2012      -429

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Fixed recommendations priority ordering

Fix for recommendations priority ordering in generated Powerpoint for GoLive assessment.
@fafriha please review

Descending sort is required as the PPT template states Services with the highest priority recommendations for this pillar. Previous ascending sort caused that the lowest priority risks were shown.
Previous scoring calculation caused that in some categories with one high risk (e.g. 90) and multiple lower risks (e.g. 30), resulting score was average and therefore high risk was not listed in PPT. This change of scoring calculation now includes  highest risks from all categories for given pillar (sorted descending).


Feature: Implement Basic Convolutional Autoencoder

Problem
Next up from the deep autoencoder is the convolutional ...
References

https://gist.github.com/DiogenesAnalytics/399a96031ac360da5c34a000f3eae4ea#file-convolutional_autoencoder-ipynb

Implemented with: 0746c3a4850da026ebb1831b9c6eade7b8d96d38


Added configuration code that scours file path/tree for .swcrc file

Added configuration code that scours file path/tree for .swcrc file
If it finds one then it loads that file from disk and takes precedence over the code config.
The simplest/clearest reason for this is swc config breaking changes, for instance, I received this error (swc error env and jsc.target cannot be used together), which triggered this idea (and is resolved with this feature)

Hi @jglanz
Thank you for your contribution!
Do you think this change is a breaking change and should hence be released as a major version?


BUG: Hardcoded Name in the comment section and comment is not shown after commenting

Issue  : The name of the commenter is Hardcoded in the comments tab  and the comment of the person is not shown after commenting we need to close the tab and again open it to see the comment .
https://github.com/user-attachments/assets/f8d9b108-87b6-4a04-be70-9c0dd01ebea7
Steps to reproduce :

Go to any blog post
open comment section
check the name of the commenter
make a comment

Expected Behaviour: The name should be of the person commenting or logged in .
And the comment should be shown after clicking on respond

Yes it is nice add on to have , go ahead.


Rename pipeline frontent types

this adjust the packages that parse the yaml-config-file to match Terminology

Codecov Report
Patch coverage: 54.04% and project coverage change: +0.01 :tada:

Comparison is base (f81b447) 38.99% compared to head (05bba3a) 39.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1829      +/-   ##
==========================================
+ Coverage   38.99%   39.00%   +0.01%
==========================================
  Files         168      170       +2
  Lines       10500    10496       -4
==========================================
  Hits         4094     4094
+ Misses       6141     6137       -4
  Partials      265      265

Impacted Files
Coverage Δ

pipeline/frontend/yaml/compiler/cacher.go
0.00% <0.00%> (ø)

pipeline/frontend/yaml/compiler/convert.go
0.00% <0.00%> (ø)

pipeline/frontend/yaml/types/base/bool.go
80.00% <ø> (ø)

pipeline/frontend/yaml/types/secret.go
100.00% <ø> (ø)

pipeline/frontend/yaml/compiler/compiler.go
6.81% <4.54%> (ø)

pipeline/frontend/yaml/types/base/int.go
36.66% <36.66%> (ø)

pipeline/frontend/yaml/types/base/slice.go
48.14% <48.14%> (ø)

pipeline/frontend/yaml/types/container.go
77.77% <77.77%> (ø)

pipeline/frontend/yaml/types/base/map.go
80.55% <80.55%> (ø)

pipeline/frontend/yaml/linter/linter.go
77.38% <88.88%> (ø)

... and 5 more

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


[ZUI][User meu] two horizontal lines between the username and the "Log Out" button.

Describe the bug
See attachment, in case API keys are disabled, there is a double horizontal line in the user menu.
To Reproduce
Steps to reproduce the behavior:
Enable zot with authentication, but with API keys disabled.
Expected behavior
There is a single line between the username and the "Log Out" button.
Screenshots

Desktop (please complete the following information):

OS: Windows
Browser: Chrome

Hi @andaaron , @raulkele, would it be alright if I have a go at this one?


Modify  API for CharMap

Currently:
var x set to initialisedCharMap()
I'm not entirely happy with this because:

Not very consistent with e.g. initialising ArrayLists (see #577)
Can currently, unintentionally, use new CharMap(), which will lead to out of range errors.

New approach

Always start with creating new CharMap()

Make all the put functions test whether the input CharMap is of the correct dimensions, and if not, then create a
new one with the correct dimensions, and then make the changes on it. So after the first put you would always be dealing with an initialised CharMap. The get methods,and also the drawAsGraphics (which should be renamed to just draw) should also ensureInitialised - even though they don't return it.

Add a new method fill to set the background and foreground on all cells and a single char, which in many cases will be "".

Change putAt to take five parameters ( x, y, char, foreground, background) instead of a tuple.

'getColour, getBackground, getForeground, each taking just the x, ycoordinates. Plus the originalgetAt` returning a tuple.

At the end of this, re-record the video on Graphics.

This is now all implemented except one existing test for getAt, currently ignored.
It seems not to be finding the 'hidden' type Tuple in the result - which is surprising because I didn't change the signature for this method. The (also unchanged) entry in std-lib-symbols seems wrong to be, as the return type is:
new ImmutableListType(
  new TupleType([StringType.Instance, IntType.Instance, IntType.Instance]),
)

when I would have thought it should be just:
new TupleType([StringType.Instance, IntType.Instance, IntType.Instance]),
but when I tried changing it to the latter it didn't work, either.


Proper Testing Suite?

Can I create a proper GTEST Suite that can be edited to add tests for each new file/function instead of each file having its own main and its own tests? This way each file will only have the function. Tests will be added to the GTEST file (very simple) and testing can be done that way?

Please pick one or two existing algorithms and create a test harness for those so we can see how it works.  Thanks!


variable attributes being skipped

For some reason attributes in type definition statements are being arbitrarily skipped in some cases as shown below

This bug was not present in earlier versions of Atom and I believe it's a bug in first-mate possibly related to this issue. I'll see what I can do about fixing this but we may have to wait for a newer release of Atom to fix it.

thanks tom ! :)