Plot trees in R

The python package has plotting functions to visualize the trees grown. Is there a plan to add the same functionalities to the R package? Something like xgboost's xgb.plot.tree and xgb.plot.multi.trees using DiagrammeR.

These go above and beyond what's current in xgb.plot.tree; would be great to have them in R for LightGBM http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8017582

A function similar to xgb.plot.multi.trees method would be especially useful for biological applications like setting gates for cell sorting, where model interpretation is pivotal.

@Laurae2 if no one is working this, I can help with the feature request.

@randxie In addition to my link above, another possible starting point is to extend SHAP (which is already implemented in python-lightgbm): https://github.com/slundberg/shap/blob/master/notebooks/Census income classification with LightGBM.ipynb

Closed in favor of being in #2302. We decided to keep all feature requests in one place.
Welcome to contribute this feature! Please re-open this issue (or post a comment if you are not a topic starter) if you are actively working on implementing this feature.

Adding this comment to this discussion: https://github.com/microsoft/LightGBM/pull/3188#issuecomment-677278222
hey @randxie are you still interested in trying this :stuck_out_tongue:

I wrote an R function called lgb.plot.tree to graph a single tree from a LightGBM model, along similar lines to XGBoost's xgb.plot.multi.trees (but my function at the moment only plots a single LightGBM tree).
The function uses the DiagrammeR package (like XGBoost) to draw the tree graph.
Three examples in the code at the bottom of this message and I have also attached the agaricus mushroom dataset in .csv format which is used by the code to graph an example tree based on a LightGBM using categorical features.
I think there is already a tree diagram function for the Python LightGBM package - if there are already some tests for that function then it would probably make sense to use similar tests for this function - happy to do the work to set up these tests.
mushroom.csv
# libraries
library(lightgbm)
library(DiagrammeR)
library(data.table)
library(titanic)

# function to plot a single LightGBM tree using DiagrammeR
lgb.plot.tree <- function(model = NULL, tree = NULL, rules = NULL){
  # check model is lgb.Booster
  if (!inherits(model, "lgb.Booster")) {
    stop("model: Has to be an object of class lgb.Booster")
  }
  # check DiagrammeR is available
  if (!requireNamespace("DiagrammeR", quietly = TRUE)) {
    stop("DiagrammeR package is required for lgb.plot.tree",
         call. = FALSE)
  }
  # tree must be numeric
  if(!inherits(tree, 'numeric')){
    stop("tree: Has to be an integer numeric")
  }
  # tree must be integer
  if(tree%%1!=0){
    stop("tree: Has to be an integer numeric")
  }
  # extract data.table model structure
  dt <- lgb.model.dt.tree(model)
  # check that tree is less than or equal to the maximum tree index in the model
  if(tree>max(dt$tree_index)){
    stop("tree: has to be less than the number of trees in the model")
  }
  # filter dt to just the rows for the selected tree
  dt <- dt[tree_index==tree,]
  # change the column names to shorter more diagram friendly versions
  data.table::setnames(dt, old = c('tree_index','split_feature','threshold','split_gain'), new = c('Tree','Feature','Split','Gain'))
  dt[, Value:=0.0]
  dt[, Value:= leaf_value]
  dt[is.na(Value), Value := internal_value]
  dt[is.na(Gain), Gain := leaf_value]
  dt[is.na(Feature), Feature := 'Leaf']
  dt[, Cover := internal_count][Feature=='Leaf', Cover := leaf_count]
  dt[, c('leaf_count', 'internal_count','leaf_value','internal_value'):= NULL]
  dt[, Node := split_index]
  max_node <- max(dt[['Node']], na.rm = TRUE)
  dt[is.na(Node), Node := max_node + leaf_index +1]
  dt[, ID := paste(Tree, Node, sep = '-')]
  dt[, c('depth','leaf_index') := NULL]
  dt[, parent := node_parent][is.na(parent), parent := leaf_parent]
  dt[, c('node_parent', 'leaf_parent','split_index') := NULL]
  dt[, Yes := dt$ID[match(dt$Node, dt$parent)]]
  dt <- dt[nrow(dt):1,]
  dt[, No := dt$ID[match(dt$Node, dt$parent)]]
  # which way do the NA's go (this path will get a thicker arrow)
  # for categorical features, NA gets put into the zero group
  dt[default_left==TRUE, Missing := Yes]
  dt[default_left==FALSE, Missing := No]
  zero_present <- function(x){sapply(strsplit(as.character(x),'||',fixed = TRUE), function(el){any(el=='0')})}
  dt[zero_present(Split), Missing := Yes]
  #dt[, c('parent', 'default_left') := NULL]
  #data.table::setcolorder(dt, c('Tree','Node','ID','Feature','decision_type','Split','Yes','No','Missing','Gain','Cover','Value'))
  # create the label text
  dt[, label:= paste0(Feature,
                      "\nCover: ", Cover,
                      ifelse(Feature == "Leaf", "", "\nGain: "), ifelse(Feature == "Leaf", "", round(Gain, 4)),
                      "\nValue: ", round(Value, 4)
  )]
  # style the nodes - same format as xgboost
  dt[Node == 0, label := paste0("Tree ", Tree, "\n", label)]
  dt[, shape:= "rectangle"][Feature == "Leaf", shape:= "oval"]
  dt[, filledcolor:= "Beige"][Feature == "Leaf", filledcolor:= "Khaki"]
  # in order to draw the first tree on top:
  dt <- dt[order(-Tree)]
  nodes <- DiagrammeR::create_node_df(
    n         = nrow(dt),
    ID        = dt$ID,
    label     = dt$label,
    fillcolor = dt$filledcolor,
    shape     = dt$shape,
    data      = dt$Feature,
    fontcolor = "black")
  # round the edge labels to 4 s.f. if they are numeric
  # as otherwise get too many decimal places and the diagram looks bad
  # would rather not use suppressWarnings
  numeric_idx <- suppressWarnings(!is.na(as.numeric(dt[['Split']])))
  dt[numeric_idx, Split := round(as.numeric(Split),4)]
  # replace indices with feature levels if rules supplied
  levels.to.names <- function(x, feature_name, rules){
    lvls <- sort(rules[[feature_name]])
    result <- strsplit(x,'||', fixed = TRUE)
    result <- lapply(result, as.numeric)
    levels_to_names <- function(x){names(lvls)[as.numeric(x)]}
    result <- lapply(result, levels_to_names)
    result <- lapply(result, paste, collapse = '\n')
    result <- as.character(result)
  }
  if(!is.null(rules)){
    for (f in names(rules)){
      dt[Feature==f & decision_type == '==', Split := levels.to.names(Split, f, rules)]
    }
  }
  # replace long split names with a message
  dt[nchar(Split)>500, Split := 'Split too long to render']
  # create the edge labels
  edges <- DiagrammeR::create_edge_df(
    from  = match(dt[Feature != "Leaf", c(ID)] %>% rep(2), dt$ID),
    to    = match(dt[Feature != "Leaf", c(Yes, No)], dt$ID),
    label = dt[Feature != "Leaf", paste(decision_type, Split)] %>%
      c(rep("", nrow(dt[Feature != "Leaf"]))),
    style = dt[Feature != "Leaf", ifelse(Missing == Yes, "bold", "solid")] %>%
      c(dt[Feature != "Leaf", ifelse(Missing == No, "bold", "solid")]),
    rel   = "leading_to")
  # create the graph
  graph <- DiagrammeR::create_graph(
    nodes_df = nodes,
    edges_df = edges,
    attr_theme = NULL
  ) %>%
    DiagrammeR::add_global_graph_attrs(
      attr_type = "graph",
      attr  = c("layout", "rankdir"),
      value = c("dot", "LR")
    ) %>%
    DiagrammeR::add_global_graph_attrs(
      attr_type = "node",
      attr  = c("color", "style", "fontname"),
      value = c("DimGray", "filled", "Helvetica")
    ) %>%
    DiagrammeR::add_global_graph_attrs(
      attr_type = "edge",
      attr  = c("color", "arrowsize", "arrowhead", "fontname"),
      value = c("DimGray", "1.5", "vee", "Helvetica"))
  # render the graph
  DiagrammeR::render_graph(graph)
}

# EXAMPLE 1: use the LightGBM example dataset to build a model with a single tree
data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
data(agaricus.test, package = "lightgbm")
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label = test$label)
# define model parameters and build a single tree
params <- list(
  objective = "regression"
  , metric = "l2"
  , min_data = 1L
  , learning_rate = 1.0
)
valids <- list(test = dtest)
model <- lgb.train(
  params = params
  , data = dtrain
  , nrounds = 1L
  , valids = valids
  , early_stopping_rounds = 1L
)
# plot the tree and compare to the tree table
# trees start from 0 in lgb.model.dt.tree
tree_table <- lgb.model.dt.tree(model)
lgb.plot.tree(model, 0)

# EXAMPLE 2: same mushroom dataset, but model using categorical features
# change class to a 0/1 numeric
# deliberately set odor level a to NA to test thicker arrows for NA path
mushroom <- fread('mushroom.csv', stringsAsFactors = TRUE)
mushroom[odor=='a', odor := NA]
mushroom[, class := ifelse(class=='p',1,0)]
cat_cols <- setdiff(names(mushroom), 'class')
# split into train and test, label and data
set.seed(42)
train_rows <- sample(1:nrow(mushroom), 4062, replace = FALSE)
test_rows <- setdiff(1:nrow(mushroom), train_rows)
train_response <- mushroom[['class']][train_rows]
test_response <- mushroom[['class']][test_rows]
d_converted <- lgb.convert_with_rules(data = mushroom[, ..cat_cols])
d_train <- d_converted$data[train_rows]
d_test <- d_converted$data[test_rows]
# create train and test datasets for LGBM
l_train <- lgb.Dataset(as.matrix(d_train), label=train_response, categorical_feature = cat_cols)
l_test <- lgb.Dataset.create.valid(l_train, as.matrix(d_test), label = test_response)
# build the model
model_2 <- lgb.train(params = params
                     , nrounds = 1L
                     , data = l_train
                     , valids = list('test'=l_test)
                     , categorical_feature = cat_cols
                     , early_stopping_rounds = 1L
                     )
# plot some trees with and without using the rules
# and compare to tree table
tree_table_2 <- lgb.model.dt.tree(model_2)
lgb.plot.tree(model_2, 0, rules = NULL) # this will use the integer encodings
lgb.plot.tree(model_2, 0, rules = d_converted$rules) # this replaces the encodings with level description

# EXAMPLE 3: titanic
# only titanic_train contains the Survived column, so split that into train and test
train_rows <- 1:700
test_rows <- 700:nrow(titanic_train)
train_response <- titanic_train[['Survived']][train_rows]
test_response <- titanic_train[['Survived']][test_rows]
cols <- c('Pclass','Sex','Age','SibSp','Parch','Fare','Embarked')
d_converted <- lgb.convert_with_rules(data = titanic_train[cols])
d_train <- d_converted$data[train_rows,]
d_test <- d_converted$data[test_rows,]
# create train and test datasets for LGBM
l_train <- lgb.Dataset(as.matrix(d_train), label=train_response, categorical_feature = c('Sex','Embarked'))
l_test <- lgb.Dataset.create.valid(l_train, as.matrix(d_test), label = test_response)
# build the model
params_titanic <- list(
  objective = "binary"
  , metric = "binary_logloss"
  , min_data = 1L
  , learning_rate = 0.3
  , num_leaves = 10
)

model_3 <- lgb.train(params = params_titanic
                     , nrounds = 100L
                     , data = l_train
                     , valids = list('test'=l_test)
                     , early_stopping_rounds = 10L
)
# plot some trees with and without using the rules
# and compare to tree table
tree_table_3 <- lgb.model.dt.tree(model_3)
lgb.plot.tree(model_3, 0, rules = d_converted$rules)
lgb.plot.tree(model_3, 1, rules = d_converted$rules)
lgb.plot.tree(model_3, 3, rules = d_converted$rules)
lgb.plot.tree(model_3, 4, rules = d_converted$rules)
# lgb.plot.tree(model_3, 999, rules = d_converted$rules) # deliberately greater than number of trees - will throw an error

Thanks very much for your hard work @SpeckledJim2 ! As long as we can make {DiagrammeR} an optional dependency (as you've done with the use of requireNamespace()), I'm open to including functionality like this in the R package.
Please open a pull request which adds this function in a new file R-package/R/lgb.plot.tree.R. At a minimum, please:

add {DiagrammeR} as a Suggests-level dependency in R-package/DESCRIPTION
add lgb.plot.tree() to R-package/pkgdown/_pkgdown.yml
add {roxygen2} documentation and regenerate the package docs by runnings the following

  sh build-cran-package.sh --no-build-vignettes
  R CMD INSTALL --with-keep.source ./lightgbm_<IP_ADDRESS>.tar.gz
  cd R-package
  Rscript -e "roxygen2::roxygenize(load = 'installed')"

add a new file R-package/tests/testthat/test_lgb.plot.tree.R with at least one unit test on this functionality.

We can use the pull request for further feedback and suggestions.

This was locked accidentally. I just unlocked it. We'd still welcome contributions related to this feature!

I wrote an R function called lgb.plot.tree to graph a single tree from a LightGBM model, along similar lines to XGBoost's xgb.plot.multi.trees (but my function at the moment only plots a single LightGBM tree).
The function uses the DiagrammeR package (like XGBoost) to draw the tree graph.
Three examples in the code at the bottom of this message and I have also attached the agaricus mushroom dataset in .csv format which is used by the code to graph an example tree based on a LightGBM using categorical features.
I think there is already a tree diagram function for the Python LightGBM package - if there are already some tests for that function then it would probably make sense to use similar tests for this function - happy to do the work to set up these tests.
mushroom.csv
# libraries
library(lightgbm)
library(DiagrammeR)
library(data.table)
library(titanic)

# function to plot a single LightGBM tree using DiagrammeR
lgb.plot.tree <- function(model = NULL, tree = NULL, rules = NULL){
  # check model is lgb.Booster
  if (!inherits(model, "lgb.Booster")) {
    stop("model: Has to be an object of class lgb.Booster")
  }
  # check DiagrammeR is available
  if (!requireNamespace("DiagrammeR", quietly = TRUE)) {
    stop("DiagrammeR package is required for lgb.plot.tree",
         call. = FALSE)
  }
  # tree must be numeric
  if(!inherits(tree, 'numeric')){
    stop("tree: Has to be an integer numeric")
  }
  # tree must be integer
  if(tree%%1!=0){
    stop("tree: Has to be an integer numeric")
  }
  # extract data.table model structure
  dt <- lgb.model.dt.tree(model)
  # check that tree is less than or equal to the maximum tree index in the model
  if(tree>max(dt$tree_index)){
    stop("tree: has to be less than the number of trees in the model")
  }
  # filter dt to just the rows for the selected tree
  dt <- dt[tree_index==tree,]
  # change the column names to shorter more diagram friendly versions
  data.table::setnames(dt, old = c('tree_index','split_feature','threshold','split_gain'), new = c('Tree','Feature','Split','Gain'))
  dt[, Value:=0.0]
  dt[, Value:= leaf_value]
  dt[is.na(Value), Value := internal_value]
  dt[is.na(Gain), Gain := leaf_value]
  dt[is.na(Feature), Feature := 'Leaf']
  dt[, Cover := internal_count][Feature=='Leaf', Cover := leaf_count]
  dt[, c('leaf_count', 'internal_count','leaf_value','internal_value'):= NULL]
  dt[, Node := split_index]
  max_node <- max(dt[['Node']], na.rm = TRUE)
  dt[is.na(Node), Node := max_node + leaf_index +1]
  dt[, ID := paste(Tree, Node, sep = '-')]
  dt[, c('depth','leaf_index') := NULL]
  dt[, parent := node_parent][is.na(parent), parent := leaf_parent]
  dt[, c('node_parent', 'leaf_parent','split_index') := NULL]
  dt[, Yes := dt$ID[match(dt$Node, dt$parent)]]
  dt <- dt[nrow(dt):1,]
  dt[, No := dt$ID[match(dt$Node, dt$parent)]]
  # which way do the NA's go (this path will get a thicker arrow)
  # for categorical features, NA gets put into the zero group
  dt[default_left==TRUE, Missing := Yes]
  dt[default_left==FALSE, Missing := No]
  zero_present <- function(x){sapply(strsplit(as.character(x),'||',fixed = TRUE), function(el){any(el=='0')})}
  dt[zero_present(Split), Missing := Yes]
  #dt[, c('parent', 'default_left') := NULL]
  #data.table::setcolorder(dt, c('Tree','Node','ID','Feature','decision_type','Split','Yes','No','Missing','Gain','Cover','Value'))
  # create the label text
  dt[, label:= paste0(Feature,
                      "\nCover: ", Cover,
                      ifelse(Feature == "Leaf", "", "\nGain: "), ifelse(Feature == "Leaf", "", round(Gain, 4)),
                      "\nValue: ", round(Value, 4)
  )]
  # style the nodes - same format as xgboost
  dt[Node == 0, label := paste0("Tree ", Tree, "\n", label)]
  dt[, shape:= "rectangle"][Feature == "Leaf", shape:= "oval"]
  dt[, filledcolor:= "Beige"][Feature == "Leaf", filledcolor:= "Khaki"]
  # in order to draw the first tree on top:
  dt <- dt[order(-Tree)]
  nodes <- DiagrammeR::create_node_df(
    n         = nrow(dt),
    ID        = dt$ID,
    label     = dt$label,
    fillcolor = dt$filledcolor,
    shape     = dt$shape,
    data      = dt$Feature,
    fontcolor = "black")
  # round the edge labels to 4 s.f. if they are numeric
  # as otherwise get too many decimal places and the diagram looks bad
  # would rather not use suppressWarnings
  numeric_idx <- suppressWarnings(!is.na(as.numeric(dt[['Split']])))
  dt[numeric_idx, Split := round(as.numeric(Split),4)]
  # replace indices with feature levels if rules supplied
  levels.to.names <- function(x, feature_name, rules){
    lvls <- sort(rules[[feature_name]])
    result <- strsplit(x,'||', fixed = TRUE)
    result <- lapply(result, as.numeric)
    levels_to_names <- function(x){names(lvls)[as.numeric(x)]}
    result <- lapply(result, levels_to_names)
    result <- lapply(result, paste, collapse = '\n')
    result <- as.character(result)
  }
  if(!is.null(rules)){
    for (f in names(rules)){
      dt[Feature==f & decision_type == '==', Split := levels.to.names(Split, f, rules)]
    }
  }
  # replace long split names with a message
  dt[nchar(Split)>500, Split := 'Split too long to render']
  # create the edge labels
  edges <- DiagrammeR::create_edge_df(
    from  = match(dt[Feature != "Leaf", c(ID)] %>% rep(2), dt$ID),
    to    = match(dt[Feature != "Leaf", c(Yes, No)], dt$ID),
    label = dt[Feature != "Leaf", paste(decision_type, Split)] %>%
      c(rep("", nrow(dt[Feature != "Leaf"]))),
    style = dt[Feature != "Leaf", ifelse(Missing == Yes, "bold", "solid")] %>%
      c(dt[Feature != "Leaf", ifelse(Missing == No, "bold", "solid")]),
    rel   = "leading_to")
  # create the graph
  graph <- DiagrammeR::create_graph(
    nodes_df = nodes,
    edges_df = edges,
    attr_theme = NULL
  ) %>%
    DiagrammeR::add_global_graph_attrs(
      attr_type = "graph",
      attr  = c("layout", "rankdir"),
      value = c("dot", "LR")
    ) %>%
    DiagrammeR::add_global_graph_attrs(
      attr_type = "node",
      attr  = c("color", "style", "fontname"),
      value = c("DimGray", "filled", "Helvetica")
    ) %>%
    DiagrammeR::add_global_graph_attrs(
      attr_type = "edge",
      attr  = c("color", "arrowsize", "arrowhead", "fontname"),
      value = c("DimGray", "1.5", "vee", "Helvetica"))
  # render the graph
  DiagrammeR::render_graph(graph)
}

# EXAMPLE 1: use the LightGBM example dataset to build a model with a single tree
data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
data(agaricus.test, package = "lightgbm")
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label = test$label)
# define model parameters and build a single tree
params <- list(
  objective = "regression"
  , metric = "l2"
  , min_data = 1L
  , learning_rate = 1.0
)
valids <- list(test = dtest)
model <- lgb.train(
  params = params
  , data = dtrain
  , nrounds = 1L
  , valids = valids
  , early_stopping_rounds = 1L
)
# plot the tree and compare to the tree table
# trees start from 0 in lgb.model.dt.tree
tree_table <- lgb.model.dt.tree(model)
lgb.plot.tree(model, 0)

# EXAMPLE 2: same mushroom dataset, but model using categorical features
# change class to a 0/1 numeric
# deliberately set odor level a to NA to test thicker arrows for NA path
mushroom <- fread('mushroom.csv', stringsAsFactors = TRUE)
mushroom[odor=='a', odor := NA]
mushroom[, class := ifelse(class=='p',1,0)]
cat_cols <- setdiff(names(mushroom), 'class')
# split into train and test, label and data
set.seed(42)
train_rows <- sample(1:nrow(mushroom), 4062, replace = FALSE)
test_rows <- setdiff(1:nrow(mushroom), train_rows)
train_response <- mushroom[['class']][train_rows]
test_response <- mushroom[['class']][test_rows]
d_converted <- lgb.convert_with_rules(data = mushroom[, ..cat_cols])
d_train <- d_converted$data[train_rows]
d_test <- d_converted$data[test_rows]
# create train and test datasets for LGBM
l_train <- lgb.Dataset(as.matrix(d_train), label=train_response, categorical_feature = cat_cols)
l_test <- lgb.Dataset.create.valid(l_train, as.matrix(d_test), label = test_response)
# build the model
model_2 <- lgb.train(params = params
                     , nrounds = 1L
                     , data = l_train
                     , valids = list('test'=l_test)
                     , categorical_feature = cat_cols
                     , early_stopping_rounds = 1L
                     )
# plot some trees with and without using the rules
# and compare to tree table
tree_table_2 <- lgb.model.dt.tree(model_2)
lgb.plot.tree(model_2, 0, rules = NULL) # this will use the integer encodings
lgb.plot.tree(model_2, 0, rules = d_converted$rules) # this replaces the encodings with level description

# EXAMPLE 3: titanic
# only titanic_train contains the Survived column, so split that into train and test
train_rows <- 1:700
test_rows <- 700:nrow(titanic_train)
train_response <- titanic_train[['Survived']][train_rows]
test_response <- titanic_train[['Survived']][test_rows]
cols <- c('Pclass','Sex','Age','SibSp','Parch','Fare','Embarked')
d_converted <- lgb.convert_with_rules(data = titanic_train[cols])
d_train <- d_converted$data[train_rows,]
d_test <- d_converted$data[test_rows,]
# create train and test datasets for LGBM
l_train <- lgb.Dataset(as.matrix(d_train), label=train_response, categorical_feature = c('Sex','Embarked'))
l_test <- lgb.Dataset.create.valid(l_train, as.matrix(d_test), label = test_response)
# build the model
params_titanic <- list(
  objective = "binary"
  , metric = "binary_logloss"
  , min_data = 1L
  , learning_rate = 0.3
  , num_leaves = 10
)

model_3 <- lgb.train(params = params_titanic
                     , nrounds = 100L
                     , data = l_train
                     , valids = list('test'=l_test)
                     , early_stopping_rounds = 10L
)
# plot some trees with and without using the rules
# and compare to tree table
tree_table_3 <- lgb.model.dt.tree(model_3)
lgb.plot.tree(model_3, 0, rules = d_converted$rules)
lgb.plot.tree(model_3, 1, rules = d_converted$rules)
lgb.plot.tree(model_3, 3, rules = d_converted$rules)
lgb.plot.tree(model_3, 4, rules = d_converted$rules)
# lgb.plot.tree(model_3, 999, rules = d_converted$rules) # deliberately greater than number of trees - will throw an error

This seems work for me


are there any examples of zotenote setting ?

zotenote.templateFile: The literature note template file, relative to the workspace.
zotenote.destination: The directory in which to save literature notes, relative to the workspace.
use default setting, connot read zotero note.

The default settings (empty) should create literature note(s) in your current working directory using the default template. So that I can figure out what the issue is, please can you check the following things/add them in a comment here:

Is Zotero running when you make the note?
Do you have Better BibTex installed?
What is the exact error (that shows up in the warning box and maybe in the debug console)?
What is the CSLJSON for the literature that you're trying to create a note for? To find this, right click the entry in Zotero > Export > Format: Better CSLJSON and copy the contents of the file to a comment here.


LDAP for user sync only and only OIDC for login

Feature Description
I'm currently using Gitea with LDAP (for user sync) + oidc( for strong auth, 2FA enable in Keycloak). It works well, Gitea is able to consolidate the users on first login via oidc.
However, I'd like to remove the LDAP login (which is not with 2FA) to only leave oidc as a choice to login.
 Is there an elegant solution to this?
Screenshots
No response

While it is probably not elegant and I have not yet tested it: couldn't you set the user filter to something that does not work? For example (null=%s)?

Ah indeed! Is something like this planned for a future version? Maybe my method of LDAP to sync and OIDC isn't the "best practice"?

I'm not aware of such a feature.
What you can also do is update the login_source, login_type and login_name for all users in the user table. Maybe there is also another field that needs to be touched. The SQL structure is not that difficult though. But please test thoroughly ;-)


localStorage does not support Object apis like browsers do

This creates various issues connecting with Third party SDKs.
For example:
The Backendless api uses:
if (!('Backendless' in storage)) {  //  storage is window.localStorage

on
https://github.com/Backendless/JS-SDK/blob/master/libs/backendless.js#L659
This creates an unwanted side effect in Tabris.js  with the if statement passing even when there is something in the localStorage under ‘Backendless’.
Changing the line to if (!(storage.getItem('Backendless'))) { fixes the issue.
I can issue a pull request for them, but would it not be better if we had support for 'someKey' in localStorage like the browsers do (I assume Backendless are not the first SDK to do this)?

Update: Backendless have merged my PR so this issue is no longer relevant to the use case of their SDK. However I do think we should do this at some point to because other SDKs are probably also doing this.

We'd need native client support to obtain the list of keys for the storage.

Closed in favor of https://github.com/eclipsesource/tabris-js/issues/313


Use -rg in adb install with API < 23

Description

This pull request addresses the issue described here:

#2527
#2919
#274

These issues have been solved before, but broke again after #2922.

Under API 23, pm install only accept -rg instead of individual -g option.
I also added notice comments because this argument has been changed to -r -g several times in other PRs, these notice may be helpful while editing.
ref: https://github.com/wix/Detox/pull/2922#pullrequestreview-743410234
ref: https://github.com/wix/detox/issues/274#issuecomment-356529351

For features/enhancements:

[x] I have added/updated the relevant references in the documentation files.

For API changes:

[x] I have made the necessary changes in the types index file.

note: This is a bug fix. Not changing API and adding features.

Thanks, I'll review it this week.

@noomorph please leave it to @jonathanmos who is already in the know of it

@d4vidi @jonathanmos @noomorph any updates?


ETIMEEDOUT, ENNOENT RESET, ORG NOT FOUND

Hi Team,
I am continue facing ETIMEDOUT, ENNOENT RESET, org not found errors on continue basis I mean its very irritating to deploy one class or component or even field I have to deploy more than ten times then I get one success.
Please guide me resolve this issue.

/needsMoreInfo
My guess is that you have using VS Code with Salesforce, in which case please close this issue and open one on the Salesforce extension you are using.

Thanks for creating this issue! We figured it's missing some basic information or in some other way doesn't follow our issue reporting guidelines. Please take the time to review these and update the issue.
Happy Coding!

This issue has been closed automatically because it needs more information and has not had recent activity. See also our issue reporting guidelines.
Happy Coding!


Function Resources

Right now Falcon requires you to use classes to define resource handlers, like this:
class MyResource:
    def on_get(self, req, resp):
        resp.body = 'hello!'
api.add_route('/', MyResource())

The community (#1455, #1499) has asked to remove the class requirement and enable direct function support.
def get_resource(req, resp):
    resp.body = 'hello!'

api.add_get_route('/', get_resource)

While it is always tempting to add new cool features, it would be interesting to hear which use cases we address by implementing it (I'm not implying it is necessarily a bad idea).
Alternatively we could start off by creating a recipe (or a Falcon add-on) illustrating how one can shim falcon.API (under consideration to be renamed to falcon.App) in case this functionality is important to have.
I have actually created a proof-of-concept Gist illustrating that: https://gist.github.com/vytas7/91642f4ef2cfe793aa498adf3c97eccc

Assigning this to 3.1 just so we don't forget to make a decision on it.

Adding to what @vytas7 said, we should also consider what patterns this will encourage/discourage and whether those are good things in the long run for the community.

Another reaction off the top of my head: when deciding on this, we might want to compare and contrast the deliverables to what already is available in the Falcon ecosystem. For instance, if the goal is to easily expose a bunch of arbitrary functions on HTTP, one can just plop Hug (https://github.com/hugapi/hug) decorators on them, and so on.


[Proposal] Integrate Kleoverse as a Data Provider

Integrate Kleoverse as a Data Provider will enable to create new Groups from holders of a specific Kleoverse proof of talent NFT.
Specifications
{
  "name": "Kleoverse",
  "iconUrl": "",
  "providerClassName": "KleoverseProvider",
  "functions": [
    {
      "name": "Get holders of proof of talent NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific proof of talent",
      "args": [
        {
          "name": "token",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific token identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider
A Kleoverse Token is a non-transferrable ERC-721 NFT minted on Polygon Chain with this contract address.
The easiest way to extract addresses for each Kleoverse NFT is by using BigQuery.
Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.
Have fun!

It's ERC-1155, I think current BigQuery data provider doesn't support specific tokenId as input arg. I could implement that though.

Because we have now a tokenProvider and other Data Provider that allows to fetch NFT holders, this Data Provider is not necessary anymore.


Error about using a grad transform with in-place operation is inconsistent with and without DDP

Hi,
I was using torch.func in pytorch 2.0 to compute the Hessian-vector product of a neural network.
I first used torch.func.functional_call to define a functional version of the neural network model, and then proceeded to use torch.func.jvp and torch.func.grad to compute the hvp.
The above works when I was using one gpu without parallel processing. However, when I wrapped the model with Distributed Data Parallel (DDP), it gave the following error:
*** RuntimeError: During a grad (vjp, jvp, grad, etc) transform, the function provided attempted to call in-place operation (aten::copy_) that would mutate a captured Tensor. This is not supported; please rewrite the function being transformed to explicitly accept the mutated Tensor(s) as inputs.
I am confused about this error, because if there were indeed such in-place operations (which I couldn't find in my model.forward() code), I'd expect this error to occur regardless of DDP. Given the inconsistent behaviour, can I still trust the hvp result when I wasn't using DDP?
My torch version: is 2.0.0.dev20230119+cu117

@XuchanBao do you have a script that reproduces the problem that we could take a look at?
DistributedDataParallel does some extra things to the model, so it's likely that your hvp result is correct but the DDP extra things are interacting badly with vmap.


[Spike] Ansible Molecule

Molecule project is designed to aid in the development and testing of Ansible roles.
Molecule provides the following components:

Dependency manager. Molecule uses galaxy by default to resolve your role dependencies.
Driver provider. Molecule uses Docker by default. Molecule uses the driver to delegate the task of creating instances.
Lint command. Molecule can call external commands to ensure that best practices are encouraged.
Platforms definitions. Molecule relies on this to know which instances to create, name and to which group each instance belongs. It is possible to test your role against multiple popular distributions (CentOS, Fedora, Debian).
Provisioner. Molecule only provides an Ansible provisioner. Ansible manages the life cycle of the instance based on this configuration.
Scenario definition. Molecule relies on this configuration to control the scenario sequence order.
Verifier framework. Molecule uses Ansible by default to provide a way to write specific state checking tests (such as deployment smoke tests) on the target instance.

Investigate if this could be useful
https://molecule.readthedocs.io/en/latest/

As this is a spike, please consider other tools:

Serverspec [1] [2] [3]
goss
rolespec
other?

As this is a spike, please consider other tools:

Serverspec [1] [2] [3]
goss
rolespec
other?

Our automated tests currently use Serverspec 😉 But it is for testing state of deployed VMs,
At first glance, Goss seems to be similar but the example tests in yaml looks really compact, simple and easy to write. IMO definitely worth to try! :star:
Rolespec seems to have some Ansible related functionalities worth to check.

Our automated tests currently use Serverspec 😉 But it is for testing state of deployed VMs,
At first glance, Goss seems to be similar but the example tests in yaml looks really compact, simple and easy to write. IMO definitely worth to try! :star:
Rolespec seems to have some Ansible related functionalities worth to check.

This might be helpful site: https://github.com/ansible-community/molecule/discussions

We need presentation from @atsikham in this area to make everyone more familiar with the topic.


Accessing fields other than title, body and data from RemoteMessage could be improved.

Hey guys! Looking at the built-in FirebaseReceiver in version 1.1.1, I was wondering why are you stripping everything except the title, body and data from the incoming RemoteMessage in order to return a BasicNotificationMessage?

https://github.com/Azure/azure-notificationhubs-android/blob/e0cff63f34ec943db1bd7d81a5c278c502e491bc/notification-hubs-sdk/src/main/java/com/microsoft/windowsazure/messaging/notificationhubs/FirebaseReceiver.java#L91

What would be the recommended approach to use all the other fields from a RemoteMessage (channelId, imageUrl, icon, sound etc..) ?
To make it much more flexible, it would be useful to be able to override the getNotificationMessage(): BasicNotificationMessage and change it's return type to the interface NotificationMessage in order to be able to extend it.

Currently, the only option I found is to copy the whole FirebaseReceiver in the same package (because many methods are package-private) and redefine this new custom FirebaseReceiver in our manifest to be able to control what is returned when a new message is received.
Another option would be to use a fully custom payload with all those fields in the data map but that's not really practical and won't respect the standard JSON Schema.

Thanks

@eric-labelle Using the getData() method, you can get anything that you want from the message itself that we do not directly expose. For example, if you want to get the badge, you can do the following:
String badge = message.getData().get("badge");

Are there any fields in particular you feel should be at the top level?

Yes but that implies that we need to put everything in the data map in the payload, all the fields defined in there https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/RemoteMessage.Notification
The fields for android notification are in a notification node in the payload, but these are all stripped out by the ANH FirebaseReceiver, except title and body
Using this payload, I would never be able to get the channelId and image except if I redefine a custom FirebaseReceiver and change the method getNotificationMessage to return an implementation of NotificationMessage (from ANH) which would contain all fields from RemoteMessage (from FCM).
{
  "notification": {
    "title": "ANH TITLE",
    "body": "ANH BODY",
    "image": "imageUrlInNotification"
    "channelId": "ANH_TEST_CHANNEL"
  },
  "data": {
    "message": "Notification Hub test notification",
    "imageInData": "myImageUrl"
  }
}

Howdy @eric-labelle,
This is good feedback, and exactly the sort of thing that we want to hear so that we can prioritize work moving forward.
This decision was made in order to keep some healthy separation in our API from Firebase. For example, Amazon Device Messaging (ADM) and Baidu are both Android based and use the Intent system with a different set of properties when delivering notifications. We want to keep our API flexible enough to allow supporting these other push providers in the future, and the way that made most sense for our initial release was to keep the message agnostic with a limited set of properties. There are other options, and we'll make sure to take your voice into consideration as we continue to develop this SDK.
For the moment, I think your work-around of effectively vendoring our FirebaseReceiver implementation and overriding the manifest makes a lot of sense. I know it's a hassle, but I'm glad you found something that works.

Sounds good. Thanks for your time and for explaining the reasoning behind. Looking forward for a more flexible system in the future releases then. Perhaps it will be available when and if we decide to go forward with ANH. I was just looking at the capabilities and functionalities it offers.

Actually, reading through FCM documentation, my option 2 (using the data node for everything) isn't even possible because the data node is not delivered while in background until the app is opened only the notification node is available.
So it makes it impossible for me to prevent the user from receiving a notification in a channel he disabled since the channel_id won't  be there. Not sure how to handle Android channels with ANH, at first I though about registering a tag for every channel but then since this setting is in the Android System preference, if the user disable a channel, the user needs to go back in our app so we can detect the channel has been disabled and then remove this tag subscription from ANH which is pretty error-prone. :(

Howdy @eric-labelle, we've been doing a little more thinking about this issue. One of the things we've discussed is shipping separate .aars for each Push Notification Service (PNS). This will allow us to keep the transitive dependency weight of our library to a minimum for everyone, while supporting push services other than Firebase Cloud Messaging on devices where it isn't available.
Given that we're thinking of having a product flavor and source set per PNS, one option would be to ship different definitions of NotificationListener. Doing this would allow us to pass a Firebase RemoteMessage to listeners directly, instead of wrapping it in our own type. An obvious downside is that this exposes us to breaking changes in the FCM library, but in our circumstances that may not be as dire as it would be in a more general purpose SDK.
As an Android developer, and someone interested in ANH, would you appreciate this approach? Or would you prefer that this SDK continue to abstract over the details of the PNS?

Hi! So basically we'd have 2 dependencies with this approach? The last one being only the custom listener for each implementation (fcm, kindle etc.) Sound decent to me and should provide enough flexibility to anyone while having access to the whole RemoteMessage payload! :)
implementation("com.microsoft.azure:notification-hubs-android-sdk:1.1.2") implementation("com.microsoft.azure:notification-hubs-android-sdk-fcm:1.1.2")
Correct me if I got that wrong but it would be something like
// in MainActivity
NotificationHub.setListener(CustomNotificationListener())

// class CustomNotificationListener
class CustomNotificationListener : FCMNotificationListener {
    override fun onPushNotificationReceived(context: Context, remoteMessage: RemoteMessage) {
          ....
    }
}

Thanks

You're pretty darn close to what we were thinking! What I was talking about would have just one dependency: implementation("com.microsoft.azure:-notification-hubs-android-sdk-fcm:1.1.2"). We think this approach would be simpler for customers - because we don't think there will be devices that simultaneously need to listen for FCM and ADM messages. @zhangeugenia and I threw together a PR over here with an example of what our sample application would look like if we were to adopt this strategy: #150

Hey @eric-labelle, there's a new SKU of the SDK available now that uses RemoteMessage directly.
Just swap out your dependency line from:
implementation 'com.microsoft.azure:notification-hubs-android-sdk:1.1.3'

to
implementation 'com.microsoft.azure:notification-hubs-android-sdk-fcm:1.1.3'

Note: these are two alternate downloads and will not work together.

Doing some house-keeping. This item was fixed by publishing an alternate SKU starting with version 1.1.3. Closing as resolved.


Improvements calibration

<Feature/Chore/Hotfix/Topic/Bug Title>
WHAT DOES THIS PR DO?
-Disables the multi-hop approach
-Adds random forest
WHAT JIRA STORY/TASK IS RELATED TO THIS PR?

NA
ARE THERE ANY RELATED PRs?
NA

Not sure what I could be doing wrong but I am currently experiencing some challenges are mentioned below:

When using flask run, I am getting some runtime error of : ModuleNotFoundError: No module named 'pymongo'
On using Docker, there is no activity, keep on getting: Error: socket hang up
Generally, the downloads/packages associated with the microservice could be taking up a lot of storage space, my PC keeps on complaining about storage whenever I run the requirements installations.

Screenshots:

Hi Martin, did you reinstall the packages from the dev.txt. I removed most of the redundant packages


The summary plugin doesn't work in the first executing

The summary plugin doesn't work in the first executing the gitbook serve command, the secode one it works, the first one uses the summary file generated by the laste time.

For me actually it works right away. May I ask which version are you testing? I'm on 0.1.2, the latest available on NPM.

Tried also 0.2.0, works fine as well.

I'm testing on 0.2.0 version,
execute the gitbook serve command firstly, the SUMMARY file is generated right away, but the html page doesn't work.
Are you testing in the  html page?
My testings step are:
One step, clean up the SUMMARY.md file or delete the SUMMARY.md file,
then execute gitbook serve, the localhost:4000 is not showing as the SUMMARY.md.
last, excute gitbook serve secondly, all works fine as well.

I found some time to replicate the bug and I am finally able to trigger it correctly.
Also I am trying to debug and understand where the issue lives, but it seems that is something inside of Gitbook CLI. I am following the integration pattern as they describe, but it seems that there is a race condition within their Promise handling.
I would suggest to escalate this into their Github repo.


add min height to hotspot settings modals

Hopefully fixes the disappearing hotspots settings modal.
closes #1083

Interesting. Were you ever able to reproduce?

No I wasn't.. hoping this fixes it.

@tyler-whitman did you see my videos on #1083? I can still reproduce this on v3.8.5.

@tyler-whitman did you see my videos on #1083? I can still reproduce this on v3.8.5.

This fix will be out in v3.8.6


Unable to Make Setup

I'm unable to run the make setup. I keep receiving these two errors:
make: go: No such file or directory
make: *** [Makefile:6: install] Error 127
Any suggestions?

Is Go installed in your machine with proper path setting ?
Can you run the command go version to check if go path is set properly ?

FYI same here
make: docker-compose: No such file or directory
make: *** [compose] Error 1

But unfortunately I am not experienced in go and docker in order to provide more feedback.


equal width button in button group doesn't fix when is only one button

If we only have one button we should use just ui two buttons classes in the container or just use fluid class in the buttonbut rather than that, I think is better support ui one buttons so that way some javascript framework (this is my case) have a defined procedure for put the classes because even the fluid class is at the button layer no at the button group layer
Example: http://jsfiddle.net/ws_ubi/z1jo3qzg/6/

If you have one button you should always just use ui button. ui buttons does not add any additional value.
I think any wrapper for ui buttons should just error out if < 2

@jlukic I fully understand about use the correct class, the singular one, is just about who have the responsibility on this.
Let say I have some backend code that send me some arrays of buttons or whatever dynamic way to do it, rather than put a condition for check how much buttons I have (and then will be my responsibility) you just support for one button inside the button group. You just have to add one css class and done.
One use case is: using button group for filtering out, like toggles (that's coming)
All the repos are there: https://github.com/React-UI/, go and take a look any help testing will be great for me, BTW, I am using JSPM.

I think conceptually the React components should be identical to SUI components. Otherwise these barriers will exist when separating button from buttons. In my book they are both instances of the same "thing"

@jlukic even when I pick to use Semantic UI but I am trying to create generic components and I would like to see if you can support me on that. As you can see here: https://github.com/React-UI/button/blob/master/src/stylemap.js all the classes are mapped there because I don't want to have that dependencies to the UI framework that much.
And specs can change and for you button and buttons is the same, for component base are two different things, one, is button and the other is a grouping of button. That's the way I see it.

I just know i don't want anyone ever generating a button group with the class name one buttons as this isn't english.
If someone is using buttons they should know they are using 2 or more, and button one item.
I understand the difficulty in determing allowable class names for the grouping vs singular.
This will be alleviated once I'm able to generate JSON spec files for 'acceptable class names' for each variation from the docs. Conceivably this is already possible (since we use this to highlight the correct classes in code samples in yellow in docs), but a scraper hasnt been written yet.

@jlukic OK, I will removed that support because as you say that isn't english and they can take the responsibility.
If you don't mind join to gitter for future discussions before I actually create some issue in github because I will work almost fulltime on this project and I like to have any support from Semantic UI team


fix bug: Empty or invalid constraint in Rule will break the dialog

fix #2197

Can you include at least one test case, that if constraint is empty, everything works fine

Approved, but let's hold on until @tomlm  or @carlosscastro take a look.


Microsoft.RecoveryServices/vaults/backupPolicies - Type Is Unavailable (backupManagementType)

Resource Type
Microsoft.RecoveryServices/vaults/backupPolicies
Api Version
2022-03-01
Issue Type
Type is unavailable
Other Notes
When creating a Recovery Services Vault Policy for AzureIaaSVM that has a Long-Term Retention Policy, the ARM template that is produced during compilation is shown as not being valid in VSCode even though according to the documentation, it is valid

Bicep Repro
resource vmBackupPolicy 'Microsoft.RecoveryServices/vaults/backupPolicies@2022-03-01' = {
  name: 'vm-backup-policy'
  location: resourceLocation
  parent: recoveryServicesVault
  properties: {
    protectedItemsCount: 0
    backupManagementType: 'AzureIaasVM'
    instantRPDetails: {
      azureBackupRGNamePrefix: 'vmbackup'
    }
    instantRpRetentionRangeInDays: 2
    policyType: 'V2'
    retentionPolicy: {
      retentionPolicyType: 'LongTermRetentionPolicy'
      dailySchedule: {
        retentionDuration: {
          count: 31
          durationType: 'Days'
        }
        retentionTimes: [
          '2022-10-21T02:00:00+00:00'
        ]
      }
      monthlySchedule: {
        retentionDuration: {
          count: 12
          durationType: 'Months'
        }
        retentionScheduleDaily: {
          daysOfTheMonth: [
            {
              date: 1
              isLast: false
            }
          ]
        }
        retentionScheduleFormatType: 'Daily'
        retentionTimes: [
          '2022-10-21T02:00:00+00:00'
        ]
      }
      yearlySchedule: {
        monthsOfYear: [
          'July'
        ]
        retentionDuration: {
          count: 2
          durationType: 'Years'
        }
        retentionScheduleDaily: {
          daysOfTheMonth: [
            {
              date: 1
              isLast: false
            }
          ]
        }
        retentionScheduleFormatType: 'Daily'
        retentionTimes: [
          '2022-10-21T02:00:00+00:00'
        ]
      }
    }
    schedulePolicy: {
      schedulePolicyType: 'SimpleSchedulePolicyV2'
      scheduleRunFrequency: 'Daily'
      dailySchedule: {
        scheduleRunTimes: [
          '2022-10-21T02:00:00+00:00'
        ]
      }
    }
    timeZone: 'UTC'
  }
}

Confirm

[X] I have searched this repository and have not found similar issue reports.

This issue seems to have been resolved now and can be closed


Use nologin for service user

Since the service user shouldn't be logging in with an interactive shell, set the shell to /sbin/nologin.

This should be guarded against if the service user is root. Users probably don't want to change the shell for their root user. Could you add a not_if guard for this?

@Ginja Sure thing. PR amended.

Hm, I probably should have thought a little about this prior to merging, any implications on BSD/Solaris?

Not sure about Solaris. I was unable to get test kitchen to run successfully on FreeBSD (see this gist) but I did verify that FreeBSD supports nologin:
$ /sbin/nologin
This account is currently not available.


Feature proposal: add collision shape RoundRectShape2D

When choosing a CollisionShape for objects in a 2D game, I sometimes find myself trying to decide between a Rectangle and a Capsule, and neither is really what I'm looking for.
The shape I actually need is a rectangle with rounded corners, where you have a property that specifies the size (from 0 to 1/2 of the smallest width or height) that is rounded (probably best to have this as a float: 0.0 would be a Rectangle and 1.0 would make it a Capsule, so that the amount of rounding stays the same when the shape is scaled).
I think this is something that would be widely used, so it would make sense to have it as a standard CollisionShape2D.

Can you elaborate on the use case for this? A physics for a rounded rectangle are way more expensive to evaluate than either a capsule or a rectangle, so you would need a pretty good reason to justify adding/using it.

I was also looking for a rectangle with round corners so i googled to this place. I cold use it for my main character in platformer.
basic enemys can be simple shapes, and 1 caracter wold not slow down game.

Little update. So i made good enough aproximation using convex poligonal shape. And i find out that when both player and wall corners ar rounded, its har d to do precise jumping at last moment, becose move_and_slide dose not detect ground when your are sliding down the corner thus control feels broken.

Feature and improvement proposals for the Godot Engine are now being discussed and reviewed in a dedicated Godot Improvement Proposals (GIP) (godotengine/godot-proposals) issue tracker. The GIP tracker has a detailed issue template designed so that proposals include all the relevant information to start a productive discussion and help the community assess the validity of the proposal for the engine.
The main (godotengine/godot) tracker is now solely dedicated to bug reports and Pull Requests, enabling contributors to have a better focus on bug fixing work. Therefore, we are now closing all older feature proposals on the main issue tracker.
If you are interested in this feature proposal, please open a new proposal on the GIP tracker following the given issue template (after checking that it doesn't exist already). Be sure to reference this closed issue if it includes any relevant discussion (which you are also encouraged to summarize in the new proposal). Thanks in advance!


AesBitValueOps needs to be :Sized to prevent RFC1214 warnings

/home/ariel/.multirust/toolchains/nightly/cargo/registry/src/github.com-0a35038f75765ae4/rust-crypto-0.2.31/src/aessafe.rs:1131:5: 1131:27 warning: the trait `core::marker::Sized` is not implemented for the type `Self` [E0277]
/home/ariel/.multirust/toolchains/nightly/cargo/registry/src/github.com-0a35038f75765ae4/rust-crypto-0.2.31/src/aessafe.rs:1131     fn ror1(self) -> Self;
                                                                                ^~~~~~~~~~~~~~~~~~~~~~
/home/ariel/.multirust/toolchains/nightly/cargo/registry/src/github.com-0a35038f75765ae4/rust-crypto-0.2.31/src/aessafe.rs:1131:5: 1131:27 help: run `rustc --explain E0277` to see a detailed explanation
/home/ariel/.multirust/toolchains/nightly/cargo/registry/src/github.com-0a35038f75765ae4/rust-crypto-0.2.31/src/aessafe.rs:1131:5: 1131:27 note: `Self` does not have a constant size known at compile-time
/home/ariel/.multirust/toolchains/nightly/cargo/registry/src/github.com-0a35038f75765ae4/rust-crypto-0.2.31/src/aessafe.rs:1131:5: 1131:27 note: this warning results from recent bug fixes and clarifications; it will become a HARD ERROR in the next release. See RFC 1214 for details.
/home/ariel/.multirust/toolchains/nightly/cargo/registry/src/github.com-0a35038f75765ae4/rust-crypto-0.2.31/src/aessafe.rs:1131     fn ror1(self) -> Self;
                                                                                ^~~~~~~~~~~~~~~~~~~~~~

Thanks! I think this is fixed by #318.


Exporter Failing to work with Vcentre 7.0.3

Hi
Thanks you for your efforts. I am running vcentre 7.0.3 on hosts running Esxi 6.7
on machine with the exporter I am running python 3.7.3.
The config file that I tried is as follows
default:
vsphere_host: "vcenter1"
vsphere_user: "user"
vsphere_password: "password"
ignore_ssl: True
specs_size: 5000
fetch_custom_attributes: False
fetch_tags: False
fetch_alarms: False
collect_only:
vms: False
vmguests: False
datastores: False
hosts: True
snapshots: False
When I run vmware_exporter -c  config.yml I get the following traceback
2022-11-15 15:21:44,509 INFO:Starting web server on port :9272
2022-11-15 15:21:51,381 INFO:Start collecting metrics from vcenter1.campus.bath.ac.uk
2022-11-15 15:21:51,381 INFO:Starting host metrics collection
2022-11-15 15:21:51,381 INFO:Fetching vim.HostSystem inventory
2022-11-15 15:21:51,382 INFO:Retrieving service instance content
2022-11-15 15:21:51,383 INFO:START: _vmware_get_host_perf_manager_metrics
2022-11-15 15:21:55,670 ERROR:Caught vmodl fault: Cannot complete login due to an incorrect user name or password.
2022-11-15 15:21:55,671 ERROR:Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 1937, in _async_render_GET
yield self.generate_latest_metrics(request)
twisted.internet.defer.FirstError: FirstError[#0, [Failure instance: Traceback: <class 'twisted.internet.defer.FirstError'>: FirstError[#0, [Failure instance: Traceback: <class 'AttributeError'>: 'NoneType' object has no attribute 'RetrieveContent'
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:735:errback
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:798:_startRunCallbacks
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:893:_runCallbacks
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:1792:gotResult
---  ---
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:1694:_inlineCallbacks
/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py:518:throwExceptionIntoGenerator
/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py:709:host_system_inventory
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:1694:_inlineCallbacks
/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py:518:throwExceptionIntoGenerator
/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py:602:batch_fetch_properties
/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py:1697:_inlineCallbacks
/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py:594:content
]]
---  ---
/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py:1642:_vmware_get_hosts
/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/defer.py:100:parallelize
]]
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 893, in _runCallbacks
current.result, *args, **kwargs
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 709, in host_system_inventory
properties,
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 602, in batch_fetch_properties
content = yield self.content
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 893, in _runCallbacks
current.result, *args, **kwargs
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 709, in host_system_inventory
properties,
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 602, in batch_fetch_properties
content = yield self.content
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 893, in _runCallbacks
current.result, *args, **kwargs
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 1038, in host_labels
dcs = yield self.datacenter_inventory
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 970, in datacenter_inventory
content = yield self.content
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 893, in _runCallbacks
current.result, *args, **kwargs
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1694, in _inlineCallbacks
cast(Failure, result).throwExceptionIntoGenerator, gen
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 1138, in counter_ids
content = yield self.content
File "/var/tmp/.venv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.7/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Can you please suggest where I can begin to debug this.

Hello again,
With the same config file but running Python 3.10 on the machine with the exporter I get a similar but different trace files
2022-11-15 15:41:31,282 INFO:Starting web server on port :9272
2022-11-15 15:42:25,620 INFO:Start collecting metrics from vcenter1.campus.bath.ac.uk
2022-11-15 15:42:25,621 INFO:Starting host metrics collection
2022-11-15 15:42:25,621 INFO:Fetching vim.HostSystem inventory
2022-11-15 15:42:25,624 INFO:Retrieving service instance content
2022-11-15 15:42:25,631 INFO:START: _vmware_get_host_perf_manager_metrics
2022-11-15 15:42:28,871 ERROR:Caught vmodl fault: Cannot complete login due to an incorrect user name or password.
2022-11-15 15:42:28,874 ERROR:Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 1937, in _async_render_GET
yield self.generate_latest_metrics(request)
twisted.internet.defer.FirstError: FirstError[#0, [Failure instance: Traceback: <class 'twisted.internet.defer.FirstError'>: FirstError[#0, [Failure instance: Traceback: <class 'AttributeError'>: 'NoneType' object has no attribute 'RetrieveContent'
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:735:errback
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:798:_startRunCallbacks
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:892:_runCallbacks
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:1792:gotResult
---  ---
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:1693:_inlineCallbacks
/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py:518:throwExceptionIntoGenerator
/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py:707:host_system_inventory
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:1693:_inlineCallbacks
/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py:518:throwExceptionIntoGenerator
/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py:602:batch_fetch_properties
/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py:1697:_inlineCallbacks
/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py:594:content
]]
---  ---
/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py:1642:_vmware_get_hosts
/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/defer.py:100:parallelize
]]
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 892, in _runCallbacks
current.result = callback(  # type: ignore[misc]
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 707, in host_system_inventory
host_systems = yield self.batch_fetch_properties(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 602, in batch_fetch_properties
content = yield self.content
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 892, in _runCallbacks
current.result = callback(  # type: ignore[misc]
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 707, in host_system_inventory
host_systems = yield self.batch_fetch_properties(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 602, in batch_fetch_properties
content = yield self.content
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 892, in _runCallbacks
current.result = callback(  # type: ignore[misc]
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 1038, in host_labels
dcs = yield self.datacenter_inventory
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 970, in datacenter_inventory
content = yield self.content
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'
Unhandled error in Deferred:
Traceback (most recent call last):
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 735, in errback
self._startRunCallbacks(fail)
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 798, in _startRunCallbacks
self._runCallbacks()
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 892, in _runCallbacks
current.result = callback(  # type: ignore[misc]
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1792, in gotResult
_inlineCallbacks(r, gen, status, context)
---  ---
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1693, in _inlineCallbacks
result = context.run(
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/python/failure.py", line 518, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 1138, in counter_ids
content = yield self.content
File "/var/tmp/.venv/lib/python3.10/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/var/tmp/.venv/lib/python3.10/site-packages/vmware_exporter/vmware_exporter.py", line 594, in content
connection.RetrieveContent
builtins.AttributeError: 'NoneType' object has no attribute 'RetrieveContent'

2022-11-15 15:42:28,871 ERROR:Caught vmodl fault: Cannot complete login due to an incorrect user name or password.

You've provided invalid credentials. The exporter requires read-only access

I could confirm the credentials are correct; but it still fails with "Caught vmodl fault: Cannot complete login due to an incorrect user name or password."

I could confirm the credentials are correct; but it still fails with "Caught vmodl fault: Cannot complete login due to an incorrect user name or password."

I had the same, I had to include suffix @vsphere.local , so vsphere_user<EMAIL_ADDRESS>


Support PR preview

Feature request:
we used Netlify to provide pr preview link, some one may noticed that we remove this feature, yes , we need to find a  stable and more cost-effective way, proposals Welcome.

https://github.com/apache/apisix-website/actions/runs/1305721808

According to github actions rules, The contributor's PR cannot access the secret settings in the main repop, so relying on the workflow triggered in the PR cannot use these secrets to deploy the site.

Yes, will find out another way 🤔

consider closed because we use Netlify back 😄


pcl_type_adapter: 0.0.2-1 in 'humble/distribution.yaml' [bloom]

Increasing version of package(s) in repository pcl_type_adapter to 0.0.2-1:

upstream repository: https://github.com/OUXT-Polaris/pcl_type_adapter.git
release repository: https://github.com/OUXT-Polaris/pcl_type_adapter-release.git
distro file: humble/distribution.yaml
bloom version: 0.12.0
previous version for package: null

pcl_type_adapter
* fix README
* Merge pull request #2 <https://github.com/OUXT-Polaris/pcl_type_adapter/issues/2> from OUXT-Polaris/feature/zero_copy
  Feature/zero copy
* change supporting pointer passing
* fix compile error
* fix compile error
* update test code
* Contributors: Masaya Kataoka, hakuturu583

Pending resolution of: https://github.com/ros/rosdistro/pull/40592#issuecomment-2057373791

Thanks, I will make my release repository on this organization and re-open pull request.


Invariant violation Native module cannot be null

Configuration
System:
OS: macOS Mojave 10.14.6
CPU: (4) x64 Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
Memory: 28.60 MB / 4.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 13.10.1 - /usr/local/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 6.13.7 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 13.0, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0
IDEs:
Android Studio: 3.5 AI-191.8<IP_ADDRESS>10548
Xcode: 11.0/11A420a - /usr/bin/xcodebuild
npmPackages:
react: 16.9.0 => 16.9.0
react-native: 0.61.5 => 0.61.5
npmGlobalPackages:
react-native-cli: 2.0.1
"react-native-track-player": "^1.2.2"
Issue
NPM Installed
POD Installed
Installed the packages based on the following link:
https://react-native-kit.github.io/react-native-track-player/install/
When I build the Xcode project on simulator, I get the error Invariant violation Native module cannot be null
Code
import React, {Component} from 'react';
import {
SafeAreaView,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
} from 'react-native';
import TrackPlayer from 'react-native-track-player'
class App extends Component {
componentDidMount() {
var track = {
id: 'unique track id',
url: 'http://example.com/avaritia.mp3',
title: 'Avaritia',
artist: 'deadmau5',
album: 'while(1<2)',
genre: 'Progressive House, Electro House',
date: '2014-05-20T07:00:00+00:00',
    artwork: 'http://example.com/avaritia.png',
};

var track2 = {
    id: 'unique track id',
    url: 'http://example.com/avaritia.mp3',
    title: 'Avaritia',
    artist: 'deadmau5',
    album: 'while(1<2)',
    genre: 'Progressive House, Electro House',
    date: '2014-05-20T07:00:00+00:00',

    artwork: 'http://example.com/avaritia.png',
};

TrackPlayer.setupPlayer().then(async () => {
  TrackPlayer.add([track, track2]).then(function() {

  });
 TrackPlayer.play();
});

}
render() {
return(

)
}
}
export default App;

try link manualy, this error is because not linked something

@sreelash did you get this resolved?
https://github.com/react-native-kit/react-native-track-player/issues/503#issuecomment-513427501 may help.

Duplicate. See https://github.com/react-native-kit/react-native-track-player/issues/866


Infinite loop when budget is short

When I set PROGRAM_BUDGET less than the size of three submatrices, it never ends but continues the loop.
This is not proper behavior because failed execution should be informed explicitly and terminated.
So it is necessary to add the functionality to judge if the budget is not enough and if termination is needed.

I added an early termination feature.
This feature ends the process if three times of committed buffer size is larger than the memory budget.


Strong name is required in many situations

Strong name the assembly or it would not be usable in many situations

this is definitely something I will look into.

is there any way i can help with that ?
Do you have some special requirement ?
Like keeping secret the key while keeping everything open source ?

Hi @TrabacchinLuigi, could you try this nuget package: https://www.nuget.org/packages/FontAwesome.WPF.Signed/
I opted in creating a seperate package, so developers can use either the signed or unsigned version.
What do you think?

Sure i will! Monday!

Good seems everything i working fine with the new version.
I think that having two nuget packages is useless, can't see any advantage in using a non-signed version ... i would just go over the current package...

this is something i would merge yes. just didn't want to f-up the "main" and stable version.

Could this be reopened until it's published in the regular package? A strong-named (signed) dll only allows references to other strong-named dlls so this is a pretty big issue. It would be helpful to be notified through this thread when you have this published in the main nuget package. For now, I'm also using the signed package

Yes, would be nice to receive a notification so I'll reopen my solutions and change package

will close once merged.

As of <IP_ADDRESS> (commit 9382c418669df543f70cad61fa8b1a0212d99bd9) dlls will be signed.


update packages sizes

I think minified versions is better for size comparison. Because wouter becomes only 2x smaller after gzip, but react-router - 3x smaller.
And i think minified size matters even more than gzipped, because scripts loads once, then cached. But they parsed and
evaluated on every load. Therefore 65 Kb slow down script execution much more than 4.4 Kb

That's fair enough. I would maybe put it this way though: "Only 1.5KB gzipped (4.5KB minified)".
For comparison, Preact advertises itself as "3KB alternative for React", while their minified version is over 10KB.
We could also solve this by having a more detailed table comparing RR and wouter in all possible forms: original, minified, minified + gzipped.

I just wanted to update info about sizes, because the difference between React-router now is bigger. Feel free to discard this pull request and write whatever you think is more appropriate :wink:

I just wanted to update info about sizes, because the difference between React-router now is bigger. Feel free to discard this pull request and write whatever you think is more appropriate 😉

Gotcha! Thank you for suggesting this, you have a really good point here.


[5.6] Generate documentation content based on the symbol graph module names

Rationale: Fixes a bug where the built documentation would contain a broken looking article when the fallback display name doesn't match the module name in the symbol graph file.
Risk: Low.
Risk Detail: This is an isolated change that touches very little existing DocC code.
Reward: Low/Medium
Reward Details: For non-framework documentation it's not unusual to have spaces in a display name which wouldn't appear in the module name. The reward is somewhat small (avoiding an extra broken looking article) but the issue is somewhat common when building documentation for non-frameworks.
Original PR: Generate documentation content based on the symbol graph module names #52
Issue: rdar://84810134
Code Reviewed By: Ethan Kusters
Testing Details: New tests covering changes have been added. Existing tests continue to pass.

@swift-ci please test

@swift-ci please test


[meson] Set meson buildtype to release

Setting -O optimization manually gives meson warnings.
meson.build:59: WARNING: Consider using the built-in optimization level instead of using "-O2".

Instead update meson buildtype to release
This sets debug to 0 and optimization to level 3.
Note that this patch increases the optimization level of the library from 2 to 3.
Signed-off-by: Parichay Kapoor<EMAIL_ADDRESS>

:memo: TAOS-CI Version: 1.4.20191203. Thank you for submitting PR #942. Please a submit 1commit/1PR (one commit per one PR) policy to get comments quickly from reviewers. Your PR must pass all verificiation processes of cibot before starting a review process from reviewers. If you are new member to join this project, please read manuals in documentation folder and wiki page. In order to monitor a progress status of your PR in more detail, visit http://nnsuite.mooo.com/.

Meson has buildtypes as a builtin options which is defaulted to be debug.
Deleting -O2 seems good, how about we relying on the meson option?

Meson has buildtype as a builtin options which is defaulted to be debug.
Deleting -O2 seems good, and for the flag, how about we relying on the meson option?

Default option of debug for buildtype keeps optimization level to be 0 and debug mode enabled - https://mesonbuild.com/Builtin-options.html, which IMO isn't desirable for release.
If you want more fine-grained control, buildtype can be plain and specify optimization -o2 with meson variables.

Aside from it, could you check nntrainer.spec:279 which is building plain. I think it would override buildtype=release ?


Plans to support Meteor?

Do you plan to make this downloadable as a Meteor package? Happy to help!

There's no official plan for supporting Meteor (or other specific frameworks).
It is not saying that JSforce cannot be used on the environments.


Minor import time output suppression for windows

These outputs are problematic when piping output to other programs.
"where" writes some unhelpful stuff to stderr/stdout "INFO: Could not find files for the given pattern(s). so this quiets that.
Put the "injected compiler path" behind the verbose flag.
The failure to find cl.exe message is now written to stderr to avoid having it unintentionally redirected.

Seems reasonable.


[next-v2.8] Update gke-operator v1.2.1-rc1

Issue: rancher/rancher#43747

@mjura looks like this needs a rebase.

It will be merged in https://github.com/rancher/rancher/pull/44310


AB#4717 Trim whitespace from certain metadata fields

Structured data from Curzon has helped illustrate how loose some of the data expected in metadata field is for JSON purposes
Names and studios don't need spaces / tabs at either end
Probably could do other fields; left as an exercise to the reader
Tests

@sarge Do we even have a structure to validate meta data against, and wouldn't we end up having to do something like this anyway although conceivably on the server side?

@additiverich We only have the structure that is loosely enforced by admin. I think we should add in a json schema validator like the custom fields one added to pages https://github.com/indiereign/shift72-meta/blob/master/ruby/models/page.rb#L45.
Rejecting / cleaning bad inputs is definitely preferable to cleaning up on the outputs.

@additiverich We only have the structure that is loosely enforced by admin. I think we should add in a json schema validator like the custom fields one added to pages https://github.com/indiereign/shift72-meta/blob/master/ruby/models/page.rb#L45.
Rejecting / cleaning bad inputs is definitely preferable to cleaning up on the outputs.


[switcher] default activeVersion and activeVersionName values

In PRs, I find it handy to have the PR indicator as the version name in the switcher.
But then, because there is no entry in the json, the button is missing the dataset attributes activeVersion and activeVersionName. This PR adds a default empty string (and from codes I could see, this seems to be standard).
This would allow to have access to an empty dataset attribute and use it as CSS selector.
Use case in NumPy here: https://github.com/numpy/numpy/pull/21451
And I would do the same for SciPy if this behaviour is confirmed 😃

Thank you Chris 😃


Crash on launch Minecraft 1.20.4 mod 2.0.2

This issue does not happen with mod version 2.0.1
Log: latest.log
Mod list:

Click to expand

Sign Edit Lite [1.0.1+mc1.20.4] by Pintér Gábor<EMAIL_ADDRESS>Reese's Sodium Options [1.7.2+mc1.20.4-build.102] by FlashyReese
Jade [13.3.1] by Snownee
Simple Shulker Preview [2.4.2] by BVengo
Highlighter [1.1.9] by Grend
Inventory Profiles Next [1.10.10] by mirinimi/blackd
Lithium [0.12.1] by JellySquid, 2No2Name
Architectury [11.1.17] by shedaniel
MaLiLib [0.18.3] by masa
kennytv's epic force close loading screen mod for Fabric [2.2.1] by kennytv
ToolStats [19.0.3] by Darkhax
Forge Config API Port [20.4.3] by Fuzs
MiniHUD [0.30.2] by masa
FabricSkyBoxes Interop [1.3.6+mc1.20.2-build.52] by FlashyReese
FabricSkyBoxes [0.7.3+mc1.20.2] by AMereBagatelle
Chest Tracker [2.4.12+1.20.4] by JackFred
Tweakeroo [0.19.2] by masa
LambDynamicLights [2.3.4+1.20.4] by LambdAurora
Noisium [2.0.3+mc1.20.2-1.20.4] by Steveplays28
Xaero's Minimap [24.2.0] by xaero96
Chunk Debug [1.1.0] by Sensei
spark [1.10.58] by Luck
Iceberg [1.1.18] by Grend
Roughly Enough Items [14.1.742] by shedaniel
AmbientSounds [5.3.9] by CreativeMD
Inventory HUD + [3.4.24] by DmitryLovin
Replay Mod [1.20.4-2.6.18] by CrushedPixel, johni0702
3d-Skin-Layers [1.6.6] by tr7zw
Essential Addons [1.3.3] by SuperSanta, Sensei
CICADA [0.8.3+1.20.2-1.20.4] by enjarai
Memory Leak Fix [1.1.5] by FX - PR0CESS
More Culling [1.20.4-0.24.0] by FX - PR0CESS
MixinTrace [1.1.1+1.17] by comp500
ImmediatelyFast [1.2.18+1.20.4] by RK_01
ViaFabricPlus [3.1.1] by FlorianMichael/EnZaXD, RK_01
More Chat History [1.3.0] by JackFred
Debugify [1.20.4+1.1] by isXander
Essential Dependencies [0]
Balm [9.0.9] by BlayTheNinth
Better Ping Display [1.1.1] by Quintinity
ModernFix [5.17.0+mc1.20.4] by embeddedt
Indium [1.0.31+mc1.20.4] by comp500
FastQuit [3.0.0+1.20.4] by KingContaria
Durability Notifier [1.8.0] by Mrbysco
Xaero's World Map [1.38.8] by xaero96
Zoomify [2.14.0+1.20.4] by isXander
CompleteConfig [2.5.3] by Lortseam
Controlling [15.0.5] by Jaredlll08
WorldEdit [7.3.0+6678-55745ad] by EngineHub
Resourcify [1.4.0] by DeDiamondPro
AdvancementInfo [1.20.4-fabric0.91.2-1.4] by Giselbaer
Fabrishot [1.12.1] by ramidzkh
Gamma Utils [1.7.19] by Sjouwer
ModDetectionPreventer [1.2.0] by JustAlittleWolf
Continuity [3.0.0-beta.5+1.20.2] by PepperCode1
Carpet Mod [1.4.128+v231205] by gnembon, ...
uku's Armor HUD [0.4.2+mc1.20.3] by BerdinskiyBear, uku
Essential Client [1.4.2] by Sensei
Vivecraft [1.20.4-1.1.11] by fayer3, Ferri_Arnus, IMS, jrbudda, minecraft player, Techjar
essential-container [1.0.0]
Controlify [2.0.0-beta.14+1.20.4-fabric] by isXander
Skip Transitions [1.3.3+mc1.20] by TrufflezMC
SignCopy [1.1.1] by NotRyken
Status Effect Bars [1.0.4] by Neecko5b84
Show Me Your Skin! [1.11.0+1.20.4] by enjarai
Sodium Extra [0.5.4+mc1.20.4-build.116] by FlashyReese
Model Gap Fix [1.14] by Mehvahdjukaar
FerriteCore [6.0.3] by malte0811
AppleSkin [2.5.1+mc1.20.3] by squeek502
Concurrent Chunk Management Engine [0.2.0+alpha.11.70] by RelativityMC, ishland
e4mc [5.1.0] by skyevg
Entity Texture Features [6.1.3] by Traben
OptiGUI [2.3.0-beta.2] by opekope2
Remove Reloading Screen [4.0.3+mc1.20.4-fabric] by dima_dencep
Very Many Players [0.2.0+beta.7.139] by ishland
Puzzle [1.6.1+1.20.4] by PuzzleMC, Motschen
ClickThrough [1.20.4-fabric0.91.2-0.4.1] by Giselbaer
Mouse Tweaks [2.26] by Ivan Molodetskikh (YaLTeR)
Language Reload [1.6.1+1.20.4] by Jerozgen
Litematica [0.17.3] by masa
Enhanced Block Entities [0.10.1+1.20.4] by FoundationGames
Runtime Resource Pack [0.8.1] by HalfOf2
Polytone [1.20.4-1.18.10] by MehVahdJukaar
libIPN [4.0.2] by mirinimi/blackd
CraftPresence [2.4.3] by CDAGaming
EntityCulling [1.6.6] by tr7zw
Beenfo [1.20.4-fabric0.91.2-1.3.4] by Giselbaer
Sodium [0.5.8+mc1.20.4] by @jellysquid3
DCCH [2.0+1.17] by anar4732, Emmaffle
Better Statistics Screen [3.12.4+fabric-1.20.4] by TheCSDev
Entity Model Features [2.1.3] by Traben
Highlight [2.2.0] by ThatGravyBoat
BadOptimizations [2.1.4] by Thosea
Bookshelf [23.1.9] by Darkhax
No Chat Reports [1.20.4-v2.6.1] by Aizistral
Fabric API [0.97.1+1.20.4] by FabricMC
Fadeless [1.0.1] by UltimateBoomer, DerpDerpling
CreativeCore [2.11.26] by CreativeMD, AriaFreeze
Draggable Lists [1.0.5] by MrMelon54
Plasmo Voice [2.0.10] by Plasmo
Krypton [0.2.6] by tuxed
Animatica [0.6.1+1.20.4] by FoundationGames
CIT Resewn [1.1.4+1.20.4] by SHsuperCM
ToolTip Fix [1.1.1-1.20] by kyrptonaught
Iris [1.7.2+mc1.20.4] by coderbot, IMS212, Justsnoopy30, FoundationGames
BetterF3 [9.0.2] by cominixo, TreyRuffy
Visuality [0.7.4+1.20.4] by PinkGoosik
Bad Packets [0.6.1] by deirn
Dynamic FPS [3.6.3] by juliand665, LostLuma
YetAnotherConfigLib [3.5.0+1.20.4-fabric] by isXander
Cloth Config v13 [13.0.121] by shedaniel
Emoji Type [2.2.3+1.20.4] by CyborgCabbage, Norbiros
Mod Menu [9.2.0] by Prospector, haykam821, TerraformersMC
NotEnoughAnimations [1.7.4] by tr7zw
Better Mount HUD [1.2.2] by Lortseam
technomodel [1.0.3] by thecolonel63
EnchantmentDescriptions [20.1.7] by Darkhax
Chat Heads [0.12.10] by dzwdz, Fourmisain
Fabric Language Kotlin [1.12.0+kotlin.2.0.10] by FabricMC
Carpet TIS Addition [1.62.0] by Fallen_Breath ...
Raised [4.0.0] by yurisuika
Simple Voice Chat [1.20.4-2.5.20] by Max Henkel
TCD Commons API [3.12.3+fabric-1.20.4] by TheCSDev
ukulib [1.1.2+1.20.4] by uku
XaeroPlus [2.21] by rfresh2
CraterLib [2.0.2] by HypherionSA, Misha

Known issue atm. You should be fine staying on 2.0.1 until the next release.
Anyone else coming across this, it affects NeoForge, Forge and Fabric on 1.20.4

Fixed with release 2.0.3


HIVE-23617: Fixing storage-api FindBug issues

Change-Id: I077246ec60b59ba6c65fd86e416040a6fab7d12c

I've made some changes to accept jenkinsfile changes - it should work from now on


SDA-8689 Adjust default replicas on hosted clusters

On hosted clusters, when the user doesn't define the number of replicas, instead having a fixed number, it takes the number of private subnets as default.

/lgtm


Document the Application Settings that are added

Depending on the settings you enable, it looks like the following Application Settings may be added to your Web App. Please add some documentation to indicate these relationships.
Settings I see:
APPINSIGHTS_INSTRUMENTATIONKEY
APPINSIGHTS_PROFILERFEATURE_VERSION
APPINSIGHTS_SNAPSHOTFEATURE_VERSION
ApplicationInsightsAgent_EXTENSION_VERSION
DiagnosticServices_EXTENSION_VERSION
InstrumentationEngine_EXTENSION_VERSION
SnapshotDebugger_EXTENSION_VERSION
XDT_MicrosoftApplicationInsights_BaseExtensions
XDT_MicrosoftApplicationInsights_Mode

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 3de928ad-68c6-d30b-bc63-3354b76c149f
Version Independent ID: cbd03b5d-7f6b-b483-6ddf-4fe4cde5e9ec
Content: What is Azure Application Insights?
Content Source: articles/azure-monitor/app/app-insights-overview.md
Service: application-insights
GitHub Login: @mrbullwinkle
Microsoft Alias: mbullwin

@dcbrown16 Thanks for bringing this to our attention! I have assigned the issue to the content author to evaluate and update as appropriate.

Thanks @dcbrown16. It looks like you opened this GitHub issue against the overview article for Application Insights. We wouldn't go into that level of detail in this article. We do document most of those settings in the automation section of this article: https://docs.microsoft.com/en-us/azure/azure-monitor/app/azure-web-apps#automate-monitoring. Expanding/refactoring this article is one of my top priorities this sprint so I can definitely add in info on the additional settings that don't have coverage.
I am going to close out this GitHub issue, but you are welcome to open an issue against the app service doc in the link above. ETA on the changes is within the next two weeks.
@MicrosoftDocs/azure-cxp-triage #please-close

Thank you Michael.


Honor @click events in carousel items

Any @click events used within carousel items do not trigger. Only anchor tags are clickable.
Would like to see the ability for @click events - or any "@" events within any of the carousel items to be honored.
The work around currently is to wrap an anchor tag around what i need clicked on, however this seems a bit hacky.

This looks to be working fine. User error on my end. Closing


About training object detection model

When using the ibm cloud gpu training model, is the number of training iterations automatically determined? Yesterday, my training model only trained 500 steps, and I feel that the performance is not good. Can I manually set the number of training iterations? thanks!

500 is just the default, you can change the settings by running cacli init I recommend training for about 20 * the number of images

I think it can be manually set.


fix: add a custom function for polling the switch

The original script throws a RuntimeError on a RPi4: GPIO.wait_for_edge(3, GPIO.FALLING)
RuntimeError: Error waiting for edge.
This is due the wait_for_edge function that is not compatible with newer python versions.
This commit will add a function that polls the corresponding GPIO input.

This was tested on a Raspberry Pi 4 running:
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

and Python 3.11.2.


Problem with twitter storage example

Hi!
I'm trying to make the twitter example work, but without success.
Connection to Twitter work's correctly - strace show's that chatterbox is polling data constantly from twitter, but after that it just repeat a message which were sent, so for example:
python3.4 bum.py
Type something to begin...
hello
hello

Maybe I'm doing something wrong.. But I'm stucked, and can't move forward. Code is as the twitter_storage example, without any change.

Hi @vojcio, I'm still debugging this. I can replicate it, but I believe the problem has a few factors contributing to it. For example, if a bot is created with an empty database and no results are found through twitter's api, then the only response that the bot knows to give is the user's previous input. The issue is that something should always be returned by the twitter storage adapter but this is currently not happening. I will keep you posted on a solution.

Thank you @gunthercox, looking forward :)


Add Crossformer, Autoformer, PatchTST, DLinear, ETSformer, FEDformer as imputation models

What does this PR do?

add Crossformer as an imputation method;
add Autoformer as an imputation method;
add PatchTST as an imputation method;
add DLinear as an imputation method;
add ETSformer as an imputation method;
add FEDformer as an imputation method;

Before submitting

[x] This PR is made to fix a typo or improve the docs (you can dismiss the other checks if this is the case).
[x] Was this discussed/approved via a GitHub issue? Please add a link to it if that's the case.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] I have written necessary tests and already run them locally.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

986 of 1345 (73.31%)  changed or added relevant lines in 26 files are covered.
3 unchanged lines in 3 files lost coverage.
Overall coverage decreased (-1.5%) to 80.603%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

pypots/imputation/fedformer/modules/core.py
25
28
89.29%

pypots/imputation/crossformer/model.py
68
72
94.44%

pypots/imputation/dlinear/model.py
62
66
93.94%

pypots/imputation/etsformer/model.py
67
71
94.37%

pypots/imputation/fedformer/model.py
69
73
94.52%

pypots/imputation/etsformer/modules/submodules.py
230
237
97.05%

pypots/imputation/dlinear/modules/core.py
32
44
72.73%

pypots/imputation/crossformer/modules/submodules.py
90
127
70.87%

pypots/imputation/fedformer/modules/submodules.py
225
509
44.2%

Files with Coverage Reduction
New Missed Lines
%

pypots/imputation/csdi/model.py
1
83.72%

pypots/cli/env.py
1
65.31%

pypots/imputation/usgan/model.py
1
88.0%

Totals

Change from base Build<PHONE_NUMBER>:
-1.5%

Covered Lines:
6599

Relevant Lines:
8187

💛  - Coveralls


⚠ RPC server - Harmony Test has degraded performance

In ebb2624, RPC server - Harmony Test ($HARMONY_TEST_RPC_URL) experienced degraded performance:

HTTP code: 0
Response time: 0 ms

Resolved: RPC server - Harmony Test performance has improved in 887cb4e.