text:
ValidationError: 1 validation error for DeepSpeedZeroConfig

when I run ./training_scripts/single_gpu/run_1.3b.sh. it's interrupted with bug like this, could anyone help me?(求大佬救救！):
 /home/guozitao/projects/DeepSpeedExamples-master/DeepSpeedExamples-master/applications/DeepSpeed │
│ -Chat/training/step1_supervised_finetuning/main.py:289 in main                                   │
│                                                                                │
│   286 │   │   num_training_steps=args.num_train_epochs * num_update_steps_per_epoch,             │
│   287 │   )                                                                                │
│   288 │                                                                                │
│ ❱ 289 │   model, optimizer, _, lr_scheduler = deepspeed.initialize(                              │
│   290 │   │   model=model,                                                                       │
│   291 │   │   optimizer=optimizer,                                                               │
│   292 │   │   args=args,                                                                         │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/__init__.py:125 in   │
│ initialize                                                                                │
│                                                                                │
│   122 │   assert model is not None, "deepspeed.initialize requires a model"                      │
│   123 │                                                                                │
│   124 │   if not isinstance(model, PipelineModule):                                              │
│ ❱ 125 │   │   engine = DeepSpeedEngine(args=args,                                                │
│   126 │   │   │   │   │   │   │   │    model=model,                                              │
│   127 │   │   │   │   │   │   │   │    optimizer=optimizer,                                      │
│   128 │   │   │   │   │   │   │   │    model_parameters=model_parameters,                        │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/engine.py:27 │
│ 2 in __init__                                                                                │
│                                                                                │
│    269 │   │   │   │   │   dist.init_process_group(backend=self.dist_backend)                    │
│    270 │   │                                                                                │
│    271 │   │   self._do_args_sanity_check(args)                                                  │
│ ❱  272 │   │   self._configure_with_arguments(args, mpu)                                         │
│    273 │   │   self._do_sanity_check()                                                           │
│    274 │   │   see_memory_usage(f"DeepSpeed Engine: After args sanity test",                     │
│    275 │   │   │   │   │   │    force=self.memory_breakdown())                                   │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/engine.py:10 │
│ 10 in _configure_with_arguments                                                                  │
│                                                                                │
│   1007 │   │   │   self.config = (args.deepspeed_config                                          │
│   1008 │   │   │   │   │   │      if hasattr(args,                                               │
│   1009 │   │   │   │   │   │   │   │   │     "deepspeed_config") else None)                      │
│ ❱ 1010 │   │   self._config = DeepSpeedConfig(self.config, mpu)                                  │
│   1011 │                                                                                │
│   1012 │   # Validate command line arguments                                                     │
│   1013 │   def _do_args_sanity_check(self, args):                                                │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/config.py:81 │
│ 3 in __init__                                                                                │
│                                                                                │
│    810 │   │   │   self._param_dict[GRADIENT_ACCUMULATION_STEPS] = gradient_accu_steps           │
│    811 │   │                                                                                │
│    812 │   │   # Pass a copy so that user json is unmodified, e.g. for logging                   │
│ ❱  813 │   │   self._initialize_params(copy.copy(self._param_dict))                              │
│    814 │   │   self._configure_train_batch_size()                                                │
│    815 │   │   self._do_sanity_check()                                                           │
│    816                                                                                │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/config.py:83 │
│ 2 in _initialize_params                                                                          │
│                                                                                │
│    829 │   │   self.gradient_predivide_factor = get_gradient_predivide_factor(param_dict)        │
│    830 │   │   self.sparse_gradients_enabled = get_sparse_gradients_enabled(param_dict)          │
│    831 │   │                                                                                │
│ ❱  832 │   │   self.zero_config = get_zero_config(param_dict)                                    │
│    833 │   │   self.zero_optimization_stage = self.zero_config.stage                             │
│    834 │   │   self.zero_enabled = self.zero_optimization_stage > 0                              │
│    835                                                                                │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/zero/config. │
│ py:67 in get_zero_config                                                                         │
│                                                                                │
│    64 │   │   │   zero_config_dict = read_zero_config_deprecated(param_dict)                     │
│    65 │   else:                                                                                │
│    66 │   │   zero_config_dict = {}                                                              │
│ ❱  67 │   return DeepSpeedZeroConfig(**zero_config_dict)                                         │
│    68                                                                                │
│    69                                                                                │
│    70 class ZeroStageEnum(int, Enum):                                                            │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/config_utils │
│ .py:62 in __init__                                                                               │
│                                                                                │
│    59 │   │   │   │   for k,                                                                     │
│    60 │   │   │   │   v in data.items() if (v != "auto" or k == "replace_method")                │
│    61 │   │   │   }                                                                              │
│ ❱  62 │   │   super().__init__(**data)                                                           │
│    63 │   │   self._deprecated_fields_check(self)                                                │
│    64 │                                                                                │
│    65 │   def _process_deprecated_field(self, pydantic_config, field):                           │
│                                                                                │
│ in pydantic.main.BaseModel.__init__:341                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
ValidationError: 1 validation error for DeepSpeedZeroConfig
memory_efficient_linear
  extra fields not permitted (type=value_error.extra)

when I run ./training_scripts/single_gpu/run_1.3b.sh. it's interrupted with bug like this, could anyone help me?(求大佬救救！):
 /home/guozitao/projects/DeepSpeedExamples-master/DeepSpeedExamples-master/applications/DeepSpeed │
│ -Chat/training/step1_supervised_finetuning/main.py:289 in main                                   │
│                                                                                │
│   286 │   │   num_training_steps=args.num_train_epochs * num_update_steps_per_epoch,             │
│   287 │   )                                                                                │
│   288 │                                                                                │
│ ❱ 289 │   model, optimizer, _, lr_scheduler = deepspeed.initialize(                              │
│   290 │   │   model=model,                                                                       │
│   291 │   │   optimizer=optimizer,                                                               │
│   292 │   │   args=args,                                                                         │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/__init__.py:125 in   │
│ initialize                                                                                │
│                                                                                │
│   122 │   assert model is not None, "deepspeed.initialize requires a model"                      │
│   123 │                                                                                │
│   124 │   if not isinstance(model, PipelineModule):                                              │
│ ❱ 125 │   │   engine = DeepSpeedEngine(args=args,                                                │
│   126 │   │   │   │   │   │   │   │    model=model,                                              │
│   127 │   │   │   │   │   │   │   │    optimizer=optimizer,                                      │
│   128 │   │   │   │   │   │   │   │    model_parameters=model_parameters,                        │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/engine.py:27 │
│ 2 in __init__                                                                                │
│                                                                                │
│    269 │   │   │   │   │   dist.init_process_group(backend=self.dist_backend)                    │
│    270 │   │                                                                                │
│    271 │   │   self._do_args_sanity_check(args)                                                  │
│ ❱  272 │   │   self._configure_with_arguments(args, mpu)                                         │
│    273 │   │   self._do_sanity_check()                                                           │
│    274 │   │   see_memory_usage(f"DeepSpeed Engine: After args sanity test",                     │
│    275 │   │   │   │   │   │    force=self.memory_breakdown())                                   │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/engine.py:10 │
│ 10 in _configure_with_arguments                                                                  │
│                                                                                │
│   1007 │   │   │   self.config = (args.deepspeed_config                                          │
│   1008 │   │   │   │   │   │      if hasattr(args,                                               │
│   1009 │   │   │   │   │   │   │   │   │     "deepspeed_config") else None)                      │
│ ❱ 1010 │   │   self._config = DeepSpeedConfig(self.config, mpu)                                  │
│   1011 │                                                                                │
│   1012 │   # Validate command line arguments                                                     │
│   1013 │   def _do_args_sanity_check(self, args):                                                │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/config.py:81 │
│ 3 in __init__                                                                                │
│                                                                                │
│    810 │   │   │   self._param_dict[GRADIENT_ACCUMULATION_STEPS] = gradient_accu_steps           │
│    811 │   │                                                                                │
│    812 │   │   # Pass a copy so that user json is unmodified, e.g. for logging                   │
│ ❱  813 │   │   self._initialize_params(copy.copy(self._param_dict))                              │
│    814 │   │   self._configure_train_batch_size()                                                │
│    815 │   │   self._do_sanity_check()                                                           │
│    816                                                                                │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/config.py:83 │
│ 2 in _initialize_params                                                                          │
│                                                                                │
│    829 │   │   self.gradient_predivide_factor = get_gradient_predivide_factor(param_dict)        │
│    830 │   │   self.sparse_gradients_enabled = get_sparse_gradients_enabled(param_dict)          │
│    831 │   │                                                                                │
│ ❱  832 │   │   self.zero_config = get_zero_config(param_dict)                                    │
│    833 │   │   self.zero_optimization_stage = self.zero_config.stage                             │
│    834 │   │   self.zero_enabled = self.zero_optimization_stage > 0                              │
│    835                                                                                │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/zero/config. │
│ py:67 in get_zero_config                                                                         │
│                                                                                │
│    64 │   │   │   zero_config_dict = read_zero_config_deprecated(param_dict)                     │
│    65 │   else:                                                                                │
│    66 │   │   zero_config_dict = {}                                                              │
│ ❱  67 │   return DeepSpeedZeroConfig(**zero_config_dict)                                         │
│    68                                                                                │
│    69                                                                                │
│    70 class ZeroStageEnum(int, Enum):                                                            │
│                                                                                │
│ /home/guozitao/anaconda3/envs/chatglm/lib/python3.9/site-packages/deepspeed/runtime/config_utils │
│ .py:62 in __init__                                                                               │
│                                                                                │
│    59 │   │   │   │   for k,                                                                     │
│    60 │   │   │   │   v in data.items() if (v != "auto" or k == "replace_method")                │
│    61 │   │   │   }                                                                              │
│ ❱  62 │   │   super().__init__(**data)                                                           │
│    63 │   │   self._deprecated_fields_check(self)                                                │
│    64 │                                                                                │
│    65 │   def _process_deprecated_field(self, pydantic_config, field):                           │
│                                                                                │
│ in pydantic.main.BaseModel.__init__:341                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
ValidationError: 1 validation error for DeepSpeedZeroConfig
memory_efficient_linear
  extra fields not permitted (type=value_error.extra)

I download the data and models from the url by myself, not by the code, is that the reason?

好像还不支持chatglm

好像还不支持chatglm

我用的就是opt-1.3b那个模型，只是环境叫chatglm

Try to upgrade your deepspeed to v0.9.0 above. The v0.8.x version can't support memory_efficient_linear feature.

Try to upgrade your deepspeed to v0.9.0 above. The v0.8.x version can't support memory_efficient_linear feature.

thx, guy. It really worked!

repo: microsoft/DeepSpeedExamples


text:
Wsl support c language

Tested with mesa at https://gitlab.freedesktop.org/lygstate/mesa/-/jobs/23386349

We've also got dependencies on this repo from https://github.com/microsoft/tensorflow-directml, let me make sure they're still good after this and then we can go ahead and merge.

Looks like we're all good here.

source: gharchive/pull-request

authors: jenatali lygstate

repo: microsoft/DirectX-Headers

license: MIT

license_type: permissive

license_source: github-api


text:
fix(ci): Increase timeout for odsp and frs perf benchmarks

Description
After the recent introduction of contention locks for the odsp and frs stages of the Performance Benchmarks pipeline (#15294), those stages started timing out / getting canceled if they couldn't obtain the lock within the default 60 min timeout for a stage. This change increases the timeout for those two stages to 360 minutes, to match the e2e tests pipeline.
Confirmed with a run from a test/ branch with these changes that the new timeout is being applied:

It also adds the lockBehavior: sequential configuration so that every run of the pipeline executes those stages as the lock becomes available, instead of the latest run executing them and previous runs skipping them (if there are several runs queued), which is the default behavior when using these locks.

The Performance benchmarks pipeline is not a requirement for PR, it shows up here because of my manual run to test the change, and the failures are for a different reason. I'll proceed with merging this once it is approved as long as all other checks pass.

repo: microsoft/FluidFramework


text:
Fix for GC tree treated as data store when isloated channels is disabled

Fixes #8826.
The bug here is that when disableIsolatedChannels is set to true, the GC tree is written parallel to the data stores. When reading from this summary, the GC tree needs to be excluded when reading the data store trees.
I believe we should remove this option and always write data stores under ".channels" now. However, this is still used in FFX and I am removing that usage. After that, I will remove this option.

Also, note that the GC tree cannot be moved to the root (https://github.com/microsoft/FluidFramework/pull/8734) if there are clients out are writing summary with disableIsolatedChannels: true and don't have this fix.
I am working on ensuring that no one writes summary with disableIsolatedChannels: true. If that does not happen, I will back out the change.


text:
'mutex' in namespace 'std' does not name a type on win10 64

Environment info
Operating System:
windors10 64bit
CPU/GPU model:
C++/Python/R version:
MinGW64
gcc version 8.1.0 (x86_64-win32-seh-rev0, Built by MinGW-W64 project)
LightGBM version or commit hash:
Error message

C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:42:8: error: 'mutex' in namespace 'std' does not name a type
std::mutex lock_;
^~~~~
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:42:3: note: 'std::mutex' is defined in header ''; did you forget to '#include '?
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:15:1:
+#include
#include
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:42:3:
std::mutex lock_;
^~~
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h: In member function 'void ThreadExceptionHelper::CaptureException()':
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:27: error: 'mutex' is not a member of 'std'
std::unique_lockstd::mutex guard(lock_);
^~~~~
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:27: note: 'std::mutex' is defined in header ''; did you forget to '#include '?
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:27: error: 'mutex' is not a member of 'std'
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:27: note: 'std::mutex' is defined in header ''; did you forget to '#include '?
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:32: error: template argument 1 is invalid
std::unique_lockstd::mutex guard(lock_);
^
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:40: error: In file included from '
' was not declared in this scope
std::unique_lockstd::mutex guard(C:/Users/Downloads/LightGBM/include/LightGBM/utils/common.h:9lock_);
,
from ^C:/Users/Downloads/LightGBM/include/LightGBM/config.h:13
,
from C:/Users/Downloads/LightGBM/include/LightGBM/application.h:8,
from C:\Users\Downloads\LightGBM\src\main.cpp:5C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:40::
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:42:8:note:  suggested alternative: 'error: clock''
std::unique_lockstd::mutex guard(mutexlock_' in namespace ');
std^' does not name a type
std::
mutexclock lock_;
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:35:34: warning: ^unused variable '
C:/Users/Downloads/LightGBM/include/LightGBM/utils/openmp_wrapper.h:42:3:guard ' [note: -Wunused-variable']
std::unique_lockstd::mutex guardstd::mutex' is defined in header '(lock_);
^'; did you forget to '
#include '?
Reproducible examples

Steps to reproduce
Does windows not support mutex? How should I fix this?

it seems is the mingw problem: https://stackoverflow.com/questions/14191566/c-mutex-in-namespace-std-does-not-name-a-type
we recommend using vc++ in Windows.

Also refer to https://github.com/microsoft/LightGBM/issues/2593#issuecomment-558749711. Please make sure to use MinGW-w64 with posix threads.

source: gharchive/issue

authors: StrikerRUS guolinke jiliguluss

repo: microsoft/LightGBM

license: mit

license_source: bigquery


text:
Uncertainty and Prediction Intervals in LightGBM

Summary
I have been looking into possible approaches to have a Prediction Interval for a LIghtGBM model. This model is already trained, and it is not a quantile regressor - since its purpose is for binary classification. I would like to get a prediction interval, and know that within it, there is a strong statistical guarantee (for example 95% confidence) that the predicted probability of label=1. For example, p(y_0=1 | x=x_0) = 0.74, and the 95% CI goes from 0.68 to 0.90
To do this, I've ran into a few resources. There's MAPIE, a model-agnostic library to perform parametric and non-parametric approaches to get Prediction Intervals and sets; but also different approaches through Bootstrapping as proposed in this paper and explored in this blog
I have just now ran into this discussion here in the LightGBM repository. I was wondering if anyone knows a bit more about this. I had also thought about something like this, since each tree in the GBM will be a model trained on a bootstrap, and if we only use some models, we are essentially obtaining a model trained on a bootstrap of the sample. So my plan to have a prediction interval for a single instance y0 would look something like this
for _ in range(N):
    pred = gbm.booster_.shuffle_models().predict(y0, num_iterations=alpha * total_iterations)
    preds += [pred]

lower_bound = np.quantile(preds, q=0.025)
upper_bound = np.quantile(preds, q=0.975)

Would this be a good way of using the shuffle_models() method?

In the question, use use both terms "prediction interval" and "confidence interval". These are completely different.

A prediction interval is a statement about the random variable $Y | X = x$. Slightly optimistic prediction intervals can be obtained via quantile regression. As you mentioned, for binary $Y$, it is always $[0, 1]$, that is, completely useless. So: yes, we can get approximate prediction intervals, but they do note make sense for binary responses.
A confidence interval is a statement about a distributional property, in your case $E(Y | X = x)$. You can get an approximate confidence interval for the expected response via Bootstrapping.

Right, in my case I would be trying to replicate a prediction interval despite being in a binary classification context - not a confidence interval in the "traditional" sense (eg. model accuracy is between 0.8 and 0.9 with a 95% confidence).
From what I read, I gather that prediction sets would be pretty much useless (since, like you say, they are almost always [0, 1]). However, it doesn't seem unreasonable to me to create a prediction interval around the predicted probability of y = 1. I imagine some samples are easier to classify than others, and though this may be communicated through a lower/higher probability, having an upper and lower boundary for the prediction is much more informative (not to mention a distribution of predictions).
To reiterate over the idea I proposed: my hypothesis is that if we bootstrap the models being used, we are to some extent getting a confidence interval but only for a single sample, if that makes sense, which we could then interpret as a prediction interval. Since each weak learner in a GBM is trained over a bootstrap of the dataset, when we randomly sample (with replacement) the weak learners used to make a prediction, we should be "close enough" to the real Bootstrapping method.
I also found that when alpha < 1 the upper and lower bounds I generate end up not including the value predicted by the "real" model sometimes. I figure that in those cases all models are required to generate that value.
Boiling down:

Is model sampling a viable way to compute a CI?
Can CIs be computed over a single sample, and if so, are they a good proxy for prediction intervals?

CI and PI are well-defined concepts. It does not make sense to redefine them or calling a CI a PI. Its not.
Maybe you are indeed looking for a CI for the parameter $E(Y | X = x)$. You can get via Bootstrapping the whole modeling process. In probabilistic classification, it equal $P(Y = 1 | X = x)$, and you would read it as:

"We are 95% confident that the true probability of having a "1" for observations with feature values $x$ is between 0.11 and 0.14.

The interval depends on feature values $x$, so it is kind of individual. But it is not individual in the sense that you have a single $Y$ and then say: $Y$ is between 0.11 and 0.14 with a certain probability, because $Y$ is either 0 or 1.

Thank you very much for the comment and clarification. Indeed, I suppose I shouldn't be renaming CIs and PIs - and a CI is all I'm looking for in this case since that is exactly what I am trying to achieve, some interval that reads as you put it:

"We are 95% confident that the true probability of having a "1" for observations with feature values x is between 0.11 and 0.14.

Regarding the second bit: thanks for the explanation as well. It sounds reasonable to me, and as you say, there is nothing about that method that makes it inherently about Boosted Trees. However, if we know we are working with Boosted Trees, would it be valid to modify that method in such a way that we don't have to refit B models, and instead we need only generate those models "on the fly" by performing bootstrap samples B times of the weak learners of a GBM?

Thank you for the discussion and your insights! I don't think I have the time/resources to formally conduct such a study, but will most definitely give the method a try.
It's not very easy to compare actual and nominal coverages in binary classification however if I'm thinking correctly. For example, please consider $P(Y = 1 | X = x_0) = 0.13$ with a $CI_{95}(x) = [0.09, 0.20]$ and $y_0 = 1$. We cannot know if our CI spans the actual probability, because we don't have a probability.
To achieve this, I have an idea where I would also appreciate your input on: We use a toy dataset whose label is a real number between 0 and 1. We set some threshold on this real number to create a binary target and then remove the original real number target. The hypothesis is that the model will have to learn a probability distribution similar to the label we have just removed. The problem is finding one such dataset since regression tasks usually have a much larger domain I think.
Maybe there is some other way through model calibration, that deals with the frequency of each label perhaps? Though that avenue isn't as clear to me

Some quick and dirty results for a 95%CI, comparing the two methods with B = 10000 using a public classification dataset

I'm somewhat happy with this plot. The main issue with the proposed method seems to be that the generated intervals are too broad, especially in the ends of the spectrum (ie when the model is surer of its prediction). I suppose now we would just need some way of performing the sanity check of comparing the nominal with actual coverages within a binary classification context

@tiagoleonmelo Thanks for the additional thoughts.

Ultimately, I suppose we can generate the "official" confidence intervals by training
separate models, and comparing the generated CIs with our experimental CIs

Interesting idea! I think your plot does exactly this, right? Is the model itself using row subsampling? (I guess: yes). Can you do me a favor and add a second plot, now on logit scale?
I will write more, but need a litte bit of time.

Yes, the plot is exactly that and yes, the models are built by sampling the rows, not the columns. Here is the same plot, but now on the logit scale (i.e. using the raw model scores and no their predicted probabilities).

This is a much better visualisation of the differences of the intervals. I'll make sure to keep this in mind in the work ahead, thanks!
In the meantime, I have done quite a bit of reading on this topic (and encountered a few roadblocks in the way 😄). From what I gathered, uncertainty in predictions within a binary classification domain is still somewhat of a blindspot when it comes to confidence quantification. Moreover, it seems that it is impossible to validate confidence intervals in frequentist approaches, for the reasons I said above. For this reason, I will need an analytical approach that can provide these strong guarantees and replace the traditional Monte-Carlo hits/misses that I was planning on computing.
I ran into this paper recently and I am really enjoying reading it. It touches many points that are relevant to this discussion. My main take-aways from their discussion so far are: 1. Venn-Abers can be used to establish probability intervals (yet another term to mix-up 😛) and 2. it only makes sense to discuss intervals after a model has been calibrated.
Keeping these points in mind, my current plan of action after finishing the paper is to study the intervals generated through Venn-Abers without calibrating the model. Then, compare these intervals with the intervals we get from real bootstrapping and weak-learner bootstrapping. Regarding the calibration point, I am not sure how I will factor it into the experiments. I suppose ideally all models should be calibrated, but the ideal solution I am looking for does not require re-training any models, so I will be comparing and establishing intervals for uncalibrated models - even if it risks less sensible intervals.

It's not possible to compare the Inducitve Venn-Abers Predictor intervals with the bootstrap-based ones, since one considers model calibration and the other doesn't. That being said, I'm backtracking and now attempting to further validate the real bootstrap method with 10000 models. Do you know of any resources that showcase validity guarantees for this family of methods?
For instance, in this case it's impossible to compute empirical coverage - how can we know that the bootstrap intervals are indeed correct 95% of the time?

I am not 100% certain. Maybe you could start with a known, deterministic model.

Not sure what you mean.. even with deterministic models we would the same issue right? We could train 1000 Decision Trees that classify each sample as either 0 or 1, but we would still suffer the issue of not knowing whether their corresponding 95% percentile bootstrap includes the true label

I am only talking about confidence intervals as prediction intervals are completely irrelevant in classification. With CIs, you would calculate the proportion of intervals that cover the true conditional probability for different feature values.

What's the true conditional probability in this case?

@tiagoleonmelo Hey, Did you tried something else? I find this topic very interesting and I'm also trying to get a CI for my binary classification model. I have done a calibration plot and my current model is well calibrated, however, I would still like to have these confidence intervals. I tried Venn-Abers predictor and the lower / upper bound probabilities are so close to the predicted one that these CI are almost useless (probably I have done some mistakes)

authors: francescomandruvs mayer79 tiagoleonmelo


text:
[dask] add scikit-learn compatibility tests (fixes #3894)

sklearn integration tests for dask. This fixes #3894

No problem I had a lot of fun!
The above link is not working for me.
I also saw that sklearn's compatability tests deep copy the estimator passed in and that may be causing problems with the client.
https://github.com/scikit-learn/scikit-learn/blob/31b34b560de57a049dd435dccc55112271322370/sklearn/utils/estimator_checks.py#L2308-L2316
https://github.com/scikit-learn/scikit-learn/blob/5403e9fdaee6d4982c887ce2ae9a62ccd3955fbb/sklearn/base.py#L29

The above link is not working for me.

I'm surprised by that, but don't worry about it. I just was showing that we use some automation that automatically adds one changelog entry for each pull request, with the pull request title as the text

I also saw that sklearn's compatability tests deep copy the estimator passed in and that may be causing problems with the client.

Can you please explain specifically what you mean by "causing problems with the client"?

Several of the tests output this error when I run locally
x = <Task pending name='Task-2875' coro=<Client._handle_report() running at /home/jwng/anaconda3/lib/python3.8/site-packages/distributed/client.py:1223> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7f6cc43a72b0>()]>> memo = {140104918447248: <[AttributeError("'Client' object has no attribute '_scheduler_identity'") raised in repr()] Client ...04896: [{}, defaultdict(<function Client.__init__.<locals>.<lambda> at 0x7f6cc43afa60>, {})], 140105126224448: [], ...} _nil = []
    def deepcopy(x, memo=None, _nil=[]):
        """Deep copy operation on arbitrary Python objects.

        See the module's __doc__ string for more info.
        """

        if memo is None:
            memo = {}

        d = id(x)
        y = memo.get(d, _nil)
        if y is not _nil:
            return y

        cls = type(x)

        copier = _deepcopy_dispatch.get(cls)
        if copier is not None:
            y = copier(x, memo)
        else:
            if issubclass(cls, type):
                y = _deepcopy_atomic(x, memo)
            else:
                copier = getattr(x, "__deepcopy__", None)
                if copier is not None:
                    y = copier(memo)
                else:
                    reductor = dispatch_table.get(cls)
                    if reductor:
                        rv = reductor(x)
                    else:
                        reductor = getattr(x, "__reduce_ex__", None)
                        if reductor is not None:
>                           rv = reductor(4)

E                           TypeError: cannot pickle '_asyncio.Task' object

../anaconda3/lib/python3.8/copy.py:161: TypeError

@jameslamb

The above link is not working for me.
I'm surprised by that

Draft Releases can be seen only by maintainers.
Try to open your link in Incognito mode to check that.

@jameslamb

The above link is not working for me.
I'm surprised by that

Draft Releases can be seen only by maintainers.
Try to open your link in Incognito mode to check that.

oh didn't realize! I thought they could only be EDITED by maintainers. Ok, makes sense.

Several of the tests output this error when I run locally

Ok, do you need help debugging?

Several of the tests output this error when I run locally

Ok, do you need help debugging?
@jameslamb
Yes please, I have not been able to fix the errors. Am I doing something wrong with the clients?

Am I doing something wrong with the clients?

I'll try running this myself a bit. I don't know what the internals of those checks imported from sklearn do, so I have to do some research. A Dask distributed.Client object is note pickle-able, so if its returned in any result that those tests then try to pickle, we'll have to work around that.

I also saw that sklearn's compatability tests deep copy the estimator passed in and that may be causing problems with the client.

Can you please explain specifically what you mean by "causing problems with the client"?

My understanding is that one of these functions are run in test_dask.py , and both yield the sklearn tests for different sklearn versions.
https://github.com/microsoft/LightGBM/blob/84c4b7504a49eed63fa819a92db7d0b18292f3f4/tests/python_package_test/test_sklearn.py#L1179
https://github.com/microsoft/LightGBM/blob/84c4b7504a49eed63fa819a92db7d0b18292f3f4/tests/python_package_test/test_sklearn.py#L1165-L1168
I looked at parametrize_with_checks() and the checks on their github here and it seems like most of them have calls to a  clone(). Which copies the passed in estimator and also call a copy.deepcopy() of the original estimator's params before running each test on a cloned estimator.
I think they are using copy.deepcopy() from the python standard lib
And I think that is behind the  TypeError: cannot pickle '_asyncio.Task' object

ok @imjwang I did some investigation. There is a lot here, sorry. Please don't change anything in this PR until @StrikerRUS also gives an opinion on my comments below.

Why so many of the tests in this PR are failing
I think we have to skip any of the tests from https://github.com/scikit-learn/scikit-learn/blob/31b34b560de57a049dd435dccc55112271322370/sklearn/utils/estimator_checks.py that involve calling .fit() or .predict(). Those methods have code in them that passes in numpy arrays, and the Dask estimators can only take in data inputs that are Dask collections.
Many of the tests fail with errors like this

E AttributeError: 'numpy.ndarray' object has no attribute 'to_delayed'

or

E TypeError: Data must be either Dask Array or Dask DataFrame. Got <class 'numpy.ndarray'>.

What I think should be done in this PR
So I think that for now, the best we can do is specifically select the checks that don't have .fit() or .predict() calls in them. I went through sklearn.utils.estimator_checks that module and picked these out:

check_parameters_default_constructible()
check_get_params_invariance()
check_set_params()
check_estimator_get_tags_default_keys()

It's not a lot, but at least it will catch a few things.
One nice side-effect of this is that the code for different versions of scikit-learn can be removed.
import sklearn.utils.estimator_checks as sklearn_checks

_check_names = [
    "check_estimator_get_tags_default_keys",
    "check_get_params_invariance",
    "check_set_params"
]
sklearn_checks_to_run = []
for check_name in _check_names:
    check_func = getattr(sklearn_checks, check_name, None)
    if check_func:
        sklearn_checks_to_run.append(check_func)

 def _tested_estimators():
    for Estimator in [lgb.DaskLGBMClassifier, lgb.DaskLGBMRegressor]:
        yield Estimator()

@pytest.mark.parametrize("estimator", _tested_estimators())
@pytest.mark.parametrize("check", sklearn_checks_to_run)
def test_sklearn_integration(estimator, check, client):
    estimator.set_params(local_listen_port=18000, time_out=5)
    name = type(estimator).__name__
    check(name, estimator)
    client.close(timeout=CLIENT_CLOSE_TIMEOUT)

# this test is separate because it takes a not-yet-constructed estimator
@pytest.mark.parametrize("estimator", list(_tested_estimators()))
def test_parameters_default_constructible(estimator):
    name, Estimator = estimator.__class__.__name__, estimator.__class__
    sklearn_checks.check_parameters_default_constructible(name, Estimator)

I tested this and the tests passed for both scikit-learn 0.23.2 and scikit-learn 0.22.2.
How we can get better coverage of scikit-learn compatibility in the future
I've opened #796 in dask-ml, a feature request describing a Dask equivalent of these checks.

Separate Question
I explicitly omitted check_no_attributes_set_in_init() because it fails for the Dask classifiers. @StrikerRUS how is this not also breaking in the sklearn tests?
import lightgbm as lgb
from sklearn.utils.estimator_checks import check_no_attributes_set_in_init
check_no_attributes_set_in_init("LGBMClassifier", lgb.LGBMClassifier())

AssertionError: Estimator LGBMClassifier should not set any attribute apart from parameters during init. Found attributes ['_Booster', '_best_iteration', '_best_score', '_class_map', '_class_weight', '_classes', '_evals_result', '_n_classes', '_n_features', '_n_features_in', '_objective', '_other_params']

@jameslamb

I explicitly omitted check_no_attributes_set_in_init() because it fails for the Dask classifiers. @StrikerRUS how is this not also breaking in the sklearn tests?

This test is skipped.
https://github.com/microsoft/LightGBM/blob/4ae59494ab9091a8405a61ae7b13bdedbdbed93e/python-package/lightgbm/sklearn.py#L498-L502
https://github.com/scikit-learn/scikit-learn/issues/16241
Ah, I see! The majority of tests passes numpy arrays into fit() which is prohibited by lightgbm.dask API. I should thought about it earlier, sorry!
It's great that you made https://github.com/dask/dask-ml/issues/796 feature request! I love it!
TBH, I don't think that applying a few separate tests from the whole scikit-learn test suite will make a lot of sense... Checking "compatibility" in a such way may be confusing and incorrectly "relaxing" us. I believe it's better to think that Dask estimators are not compatible with scikit-learn API for now.
However, it is not my strong opinion and I'm quite OK with having those few tests at our CI.

This test is skipped.
https://github.com/microsoft/LightGBM/blob/4ae59494ab9091a8405a61ae7b13bdedbdbed93e/python-package/lightgbm/sklearn.py#L498-L502

Ah, missed that! Didn't think to look for testing-specific stuff in the sklearn module itself. Got it.

However, it is not my strong opinion and I'm quite OK with having those few tests at our CI.

I think that we should keep this handful of tests. Some of them capture things that you had to spend time and energy teaching me on #3883. Having those checks in tests might save us similar reviewing effort in the future. If contributors propose a pull request that fails one of those checks, then the tests will tell them what went wrong and what they should fix.
@lmjwang could you please change this PR using my suggestion from https://github.com/microsoft/LightGBM/pull/3947#issuecomment-778988019?

@jameslamb Yes, sure thing

The current code fails the lint test for imports and I'm very confused. The only line I added was import sklearn.utils.estimator_checks as sklearn_checks and I put it in alphabetical order. Is there a guide I can look at?

oh sorry! We very very recently added isort to the linting job.
Run the following to fix it.
pip install isort
isort .

@StrikerRUS Does this look good?

@jameslamb @StrikerRUS Thanks for the opportunity and support! I've learned a good bit about testing and CI and I am happy to contribute to this project.

authors: StrikerRUS imjwang jameslamb


text:
[BUG] midi.exe doesn't recognize USB MIDI 1.0 device which uses two or more cables.

Applies To
midi.exe (or MIDI services?)
Describe the bug
midi.exe doesn't recognize USB MIDI 1.0 device which  uses two or more cables.
(midi.exe can recognize device with one cable.)
To Reproduce
Please find attached which is a binary file for ProtoZOA firmware.
This firmware is using four cables, midi.exe doesn't recognize this ProtoZOA as USB MIDI 1.0 device.
SevenColor4.uf2.zip

Is this with the device set to use the old USB MIDI 1.0 class driver? If so, I know the issue. The device would normally be recognized and configured properly under the new class driver.

The existing logic works like this:
If it's connected to the new class driver, it should be recognized and show up as a bidirectional endpoint regardless of how many cables it has and if it's MIDI 1.0 or MIDI 2.0
If it's a legacy MIDI 1.0 device connected to a third-party MIDI 1.0 driver, or our legacy in-box MIDI 1.0 class driver, the logic looks to see if there are exactly two endpoints and one is in and one is out. If so, it will create a bidirectional endpoint. Otherwise, it creates input and output endpoints, which are no longer exposed via the new API.
Based on discussions we had at the Redmond event, the second part needs to change. #184
But it shouldn't be "two or more cables". If there are two inputs or two outputs, or a combined number of inputs and outputs greater than two, then you'll run into this (current) limitation. If you are running into it with a device that has a single input and a single output, please let me know.

repo: microsoft/MIDI


text:
Status of this repo

Are there plans for this repo to revive it after upstream dropping its OP-TEE bits completely (https://github.com/microsoft/ms-tpm-20-ref/pull/97)?

https://github.com/OP-TEE/optee_ftpm

authors: NickDarvey jan-kiszka

repo: microsoft/MSRSec


text:
Feedback sobre copilot

Olá eu uso o copilot deve fazer +- 5 meses.
Um feedback que eu gostsria fazer é uma crítica as vezes eu sinto que auto complete falha quando eu estou refatorando alguma função.
A maneira que eu refatoro é reescrever q função nova embaixo da original, as vezes eu criou uma função anônima ou if e o copilot para de trazer o autocomplete.

Obrigada por compartilhar - Participe da nossa série GitHub Foundations em Português em Outubro: https://aka.ms/brasil/githubfoundations


text:
cpa buildbundle - debian repo codename error

Our "cpa buildbundle" command is failing since June 10th. We think issue is related to the Debian 12 release. Following is the complete output to reproduce the error.
Similar impact is observed in other project https://github.com/Azure/azure-functions-docker/issues/905 which may give some more idea on the issue.
We "think" fix may be to use specific version tag for debian image for the dockerfile created in .cnab folder.
Let us know if this is not the right forum to post the issue and it should be discussed somewhere else.
C:\Users\rpalejiya>docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v /c/source/repos/myproject/Azure-cnab:/data --entrypoint "/bin/bash" mcr.microsoft.com/container-package-app:latest

root@9976b64824dc:/#
root@9976b64824dc:/# cd data
root@9976b64824dc:/data# az login --service-principal -u  .....
root@9976b64824dc:/data# az acr login ......
Login Succeeded
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
root@9976b64824dc:/data#
root@9976b64824dc:/data# cpa buildbundle
By using the Azure Kubernetes CNAB Packaging Application, you agree to the License contained in the application. You can view the License at ~/LICENSE. We collect telemetry data, if you would like to opt out of data collection please use the --telemetryOptOut flag

Manifest file validated, 0 total failure(s)

Helm chart validated, 0 total failure(s)
an error occurred while trying to execute the PowerShell arm-ttk module exited.
  A newer version of the ARM-TTK is available at: https://github.com/Azure/arm-ttk/releases
  Installed Version: 0.22
  Latest Version: 0.23
  {
    "Items": [
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "JSONFiles Should Be Valid",
        "Name": "JSONFiles Should Be Valid",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Allowed Values Should Actually Be Allowed",
        "Name": "Allowed Values Should Actually Be Allowed",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Controls In Outputs Must Exist",
        "Name": "Controls In Outputs Must Exist",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "CreateUIDefinition Should Have Schema",
        "Name": "CreateUIDefinition Should Have Schema",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Credential Confirmation Should Not Be Hidden",
        "Name": "Credential Confirmation Should Not Be Hidden",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Handler Must Be Correct",
        "Name": "Handler Must Be Correct",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "HideExisting Must Be Correctly Handled",
        "Name": "HideExisting Must Be Correctly Handled",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Outputs Must Be Present In Template Parameters",
        "Name": "Outputs Must Be Present In Template Parameters",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Parameters Without Default Must Exist In CreateUIDefinition",
        "Name": "Parameters Without Default Must Exist In CreateUIDefinition",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Password Textboxes Must Be Used For Password Parameters",
        "Name": "Password Textboxes Must Be Used For Password Parameters",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "PasswordBoxes Must Have Min Length",
        "Name": "PasswordBoxes Must Have Min Length",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [
          "TextBox 'FrontAppReplica' regex does not have a length constraint.",
          "TextBox 'BrokerUrl' regex does not have a length constraint.",
          "TextBox 'SchemaRegistryUrl' regex does not have a length constraint.",
          "TextBox 'RestApiUrl' regex does not have a length constraint.",
          "TextBox 'ConnectApiUrl' regex does not have a length constraint.",
          "TextBox 'KeystorePath' regex does not have a length constraint.",
          "TextBox 'TruststorePath' regex does not have a length constraint."
        ],
        "Output": [],
        "Passed": true,
        "Group": "Textboxes Are Well Formed",
        "Name": "Textboxes Are Well Formed",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Tooltips Should Be Present",
        "Name": "Tooltips Should Be Present",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Usernames Should Not Have A Default",
        "Name": "Usernames Should Not Have A Default",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Validations Must Have Message",
        "Name": "Validations Must Have Message",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "VMSizes Must Match Template",
        "Name": "VMSizes Must Match Template",
        "File": "createUIDefinition.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "adminUsername Should Not Be A Literal",
        "Name": "adminUsername Should Not Be A Literal",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "apiVersions Should Be Recent In Reference Functions",
        "Name": "apiVersions Should Be Recent In Reference Functions",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "apiVersions Should Be Recent",
        "Name": "apiVersions Should Be Recent",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "artifacts parameter",
        "Name": "artifacts parameter",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "CommandToExecute Must Use ProtectedSettings For Secrets",
        "Name": "CommandToExecute Must Use ProtectedSettings For Secrets",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "DependsOn Best Practices",
        "Name": "DependsOn Best Practices",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Deployment Resources Must Not Be Debug",
        "Name": "Deployment Resources Must Not Be Debug",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "DeploymentTemplate Must Not Contain Hardcoded Uri",
        "Name": "DeploymentTemplate Must Not Contain Hardcoded Uri",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "DeploymentTemplate Schema Is Correct",
        "Name": "DeploymentTemplate Schema Is Correct",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Dynamic Variable References Should Not Use Concat",
        "Name": "Dynamic Variable References Should Not Use Concat",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "IDs Should Be Derived From ResourceIDs",
        "Name": "IDs Should Be Derived From ResourceIDs",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Location Should Not Be Hardcoded",
        "Name": "Location Should Not Be Hardcoded",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "ManagedIdentityExtension must not be used",
        "Name": "ManagedIdentityExtension must not be used",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Min And Max Value Are Numbers",
        "Name": "Min And Max Value Are Numbers",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Outputs Must Not Contain Secrets",
        "Name": "Outputs Must Not Contain Secrets",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Parameter Types Should Be Consistent",
        "Name": "Parameter Types Should Be Consistent",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Parameters Must Be Referenced",
        "Name": "Parameters Must Be Referenced",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "providers apiVersions Is Not Permitted",
        "Name": "providers apiVersions Is Not Permitted",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Resources Should Have Location",
        "Name": "Resources Should Have Location",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Resources Should Not Be Ambiguous",
        "Name": "Resources Should Not Be Ambiguous",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Secure Params In Nested Deployments",
        "Name": "Secure Params In Nested Deployments",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Secure String Parameters Cannot Have Default",
        "Name": "Secure String Parameters Cannot Have Default",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "URIs Should Be Properly Constructed",
        "Name": "URIs Should Be Properly Constructed",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Variables Must Be Referenced",
        "Name": "Variables Must Be Referenced",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "Virtual Machines Should Not Be Preview",
        "Name": "Virtual Machines Should Not Be Preview",
        "File": "mainTemplate.json"
      },
      {
        "Errors": [],
        "Warnings": [],
        "Output": [],
        "Passed": true,
        "Group": "VM Images Should Use Latest Version",
        "Name": "VM Images Should Use Latest Version",
        "File": "mainTemplate.json"
      }
    ]
  }

Marketplace package validated, 0 total failures(s)
operation VerifySuccessful
db
map[digest:sha256:603a19e6c5be21ca615de325a2fb758827558de0a8c4a9925256a4329b4e41be image:mssql/server registry:mcr.microsoft.com]
...........
map[digest:sha256:ff129a58a1b8b6722d2370903a103b6f239476598a2094ad5d3986bd528c480b image:auraserver registry:aurainnovations.azurecr.io]
Successfully packaged chart and saved it to: /data/Aura-Helm-Chart-0.0.1.tgz

Copying porter runtime ===>
Copying mixins ===>
Copying mixin exec ===>
Copying mixin helm3 ===>
[+] Building 16.2s (10/21)
 => [internal] load .dockerignore                                                                                0.2s
 => => transferring context: 2B                                                                                0.1s
 => [internal] load build definition from Dockerfile                                                                                0.2s
 => => transferring dockerfile: 1.26kB                                                                                0.1s
 => resolve image config for docker.io/docker/dockerfile-upstream:1.4.0                                                                                2.5s
 => CACHED docker-image://docker.io/docker/dockerfile-upstream:1.4.0@sha256:178c4e4a93795b9365dbf6cf10da8fcf517fcb4a17f1943a775c0f548e9fc2ff                           0.0s
 => [internal] load metadata for docker.io/library/debian:stable-slim                                                                                3.2s
 => [internal] load build context                                                                                7.3s
 => => transferring context: 204.04MB                                                                                7.3s
 => [stage-0  1/15] FROM docker.io/library/debian:stable-slim@sha256:b09f68bffcf9c14f3105f262e92321d05abaf48460d1f43f884325bcd4395b95                                  0.1s
 => => resolve docker.io/library/debian:stable-slim@sha256:b09f68bffcf9c14f3105f262e92321d05abaf48460d1f43f884325bcd4395b95                                            0.1s
 => CACHED [stage-0  2/15] RUN useradd nonroot -m -u 65532 -g 0 -o                                                                                0.0s
 => CACHED [stage-0  3/15] RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache      0.0s
 => ERROR [stage-0  4/15] RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt     apt-get update && apt-get install -y ca-certificate  9.7s
------
 > [stage-0  4/15] RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt     apt-get update && apt-get install -y ca-certificates:
#0 2.094 Get:1 http://deb.debian.org/debian stable InRelease [147 kB]
#0 2.789 Get:2 http://deb.debian.org/debian stable-updates InRelease [52.1 kB]
#0 3.223 Get:3 http://deb.debian.org/debian-security stable-security InRelease [48.0 kB]
#0 3.522 Reading package lists...
#0 8.898 E: Repository 'http://deb.debian.org/debian stable InRelease' changed its 'Codename' value from 'bullseye' to 'bookworm'
#0 8.898 E: Repository 'http://deb.debian.org/debian stable-updates InRelease' changed its 'Codename' value from 'bullseye-updates' to 'bookworm-updates'
#0 8.898 E: Repository 'http://deb.debian.org/debian-security stable-security InRelease' changed its 'Codename' value from 'bullseye-security' to 'bookworm-security'
------
ERR  - Failed to publish bundle, retrying 3 more times

Anyone else having same issue?
I can confirm that issue still persists in latest Debian image published today (July 4th).
Any help is very much appreciated.

repo: microsoft/Mastering-the-Marketplace


text:
Expose H.264 encoder configuration

The configuration can be tweaked to get improved video quality. This is a
mitigation for #153.
Important: using a profile different from (Constrained) Baseline requires
specifying the correct profile-level-id parameter in the corresponding SDP
codec entry for other peers to correctly accept/reject the codec. This change
does not change SDP offer from the default (unspecified, equivalent to
Baseline). If using a higher profile, you must ensure that all peers support
encoding/decoding at that profile, or the behavior will be undefined.
TODO integrate https://github.com/webrtc-uwp/webrtc-windows/pull/77

That review will break master if you don't integrate the upstream change at the same time.

authors: djee-ms fibann

repo: microsoft/MixedReality-WebRTC


text:
Working with multiple Azure Spatial Anchors

Describe the problem
In the "Use Azure Spatial Anchors to anchor objects in the real world" tutorial from the MS documentation, it is explained how to create and manage a single Azure Spatial Anchor. However, there is no information in the tutorial, nor have I found any further information in the MRTK documentation or elsewhere about how to extend that workflow in order to make it work with multiple Azure Spatial Anchors.
I have tried to add the AnchorModuleScript from RTK.HoloLens2.Unity.Tutorials.Assets.AzureSpatialAnchors.XRplugginManagement.2.5.3.unitypackage to each of the objects I want to anchor in my scene thus creating multiple Azure Spatial Anchors. All the anchors share the same Spatial Anchors Account id, key and domain.
The problem with this approach is that for each object I'm anchoring, I need to start an Azure Session, create an anchor and save the anchor ID to disk or to the Azure cloud. First of all, starting multiple Azure Sessions is not ideal, but apparently, it doesn't suppose any problem to do so. The issue arises when I attempt to save multiple anchor IDs to disk or network.
When I attempt to save the anchor IDs to the Azure cloud using the ShareAzureAnchorIdToNetwork function, I get the 404 error as already documented here https://github.com/microsoft/MixedRealityToolkit-Unity/issues/10426. When I attempt to save the multiple azure IDs to disk, all of them try to save their anchor id into a SavedAzureAnchorID.txt file which gets overwritten multiple times, resulting in only one anchor ID being saved.
Describe alternatives you've considered
The problem of the multiples SavedAzureAnchorID.txt files being overwritten is easy to fix by just modifying the original ShareAzureAnchorIdToNetwork function to generate those files with different unique names like:
string filename = "SavedAzureAnchorID_" + publicSharingPin + ".txt";
Describe the solution you'd like
However, my questions are:
Is the  AnchorModuleScript from RTK.HoloLens2.Unity.Tutorials.Assets.AzureSpatialAnchors.XRplugginManagement.2.5.3.unitypackage the "official" way to manage Azure Spatial Anchors or just an example code that shows you how create a simple implementation of it with a single anchor?
Is there any other way or workflow to create multiple Azure Spatial Anchors only starting one Azure Session that I am unaware of?

Hey there! Have you taken a look at https://github.com/microsoft/MixedReality-WorldLockingTools-Unity? WLT is a library for combining multiple spatial anchors to localize a large-scale experience.

I didn't know about the existence of the WLT library. I'll check it out, it looks promising. Thanks!

Bear in mind @Zee2 that WLT hasn't been updated for a while and isn't compatible with MRTK3 as far as I'm aware.
Also incorporating it with MRTK3 will not be easy from the last time I looked in to this, hoping it gets come love soon.

I can confirm that WLT 1.5.9 is working fine with MRTK3. Make sure that you set MRTK XR Rig as Camera Parent in WorldLockingContext (not the Camera Offset that is the real parent).

Thanks for that.  I am struggling to get this working.
I have Unity 2022.3.9LTS and MRTK3 and ARFoundation 5.1.0
What is your exact setup to get this running? Which Anchor Management system are you using? I have tried all of them but Unity keeps complaining that it doesn't have a ARAnchoring subsystem.  I am trying to get this working with Holographic remoting

We appreciate your feedback and thank you for reporting this issue.
Microsoft Mixed Reality Toolkit version 2 (MRTK2) is currently in limited support. This means that Microsoft is only fixing high priority security issues. Unfortunately, this issue does not meet the necessary priority and will be closed. If you strongly feel that this issue deserves more attention, please open a new issue and explain why it is important.
Microsoft recommends that all new HoloLens 2 Unity applications use MRTK3 instead of MRTK2.
Please note that MRTK3 was released in August 2023. It features an all-new architecture for developing rich mixed reality experiences and has a minimum requirement of Unity 2021.3 LTS. For more information about MRTK3, please visit https://www.mixedrealitytoolkit.org.
Thank you for your continued support of the Mixed Reality Toolkit!

authors: IssueSyncBot SimonDarksideJ Zee2 pixelblue snavas

repo: microsoft/MixedRealityToolkit-Unity


text:
Unity 2020.3.8 issue with MRTK 2.8.2 - deployed app show up blank

Describe the issue
I followed the documentation MRTK2-Unity Developer Documentation - MRTK 2 | Microsoft Docs and setup my MRTK 2.8.2 using Unity 2020.3.8. The issue is every time I deployed to device, I see a blank scene with only hand ray on, no profiler, no project scene. I even tried it on a fresh Win 11 machine, followed the documented steps and still failed. So today I tried using my MRTK 2.8.2 project on a different Unity (Unity 2021.3.5f1) and it was successful!
Feature area
What's incorrect? What's missing?
Existing doc link
(https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/mrtk2/?view=mrtkunity-2022-05)
Additional context
My setup was following everything in the doc, from my VS2022 and its components to MRTK Feature Tool.

Hi @kianng, one of the potential reasons could be the Unity version you were using. Could you give it a try with the latest Unity 2020.3 version (2020.3.39)? There have been a few issues Unity has fixed since 2020.3.8. We put that version on the website a while ago but probably should update it.

Hi Max
I loaded the same project with Unity 2021.3.5f1 and has no issue deploying on device. My recommendation here is to update the documentation on the site so no one else will encounter this blocker.
Thanks!
Kian
From: MaxWang-MS @.>
Sent: Thursday, September 15, 2022 6:50 PM
To: microsoft/MixedRealityToolkit-Unity @.>
Cc: Kian Chai Ng @.>; Mention @.>
Subject: Re: [microsoft/MixedRealityToolkit-Unity] Unity 2020.3.8 issue with MRTK 2.8.2 - deployed app show up blank (Issue #11016)
Hi @kiannghttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fkianng&data=05|01|KianChai.Ng%40microsoft.com|fb021e9bf2af4ea3e27e08da9785c1e6|72f988bf86f141af91ab2d7cd011db47|1|0|637988897988305253|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=J6uzAFamB8tnQk106mAYgUNfKrgSrrt0CqbxIPPQCiE%3D&reserved=0, one of the potential reasons could be the Unity version you were using. Could you give it a try with the latest Unity 2020.3 version (2020.3.39)? There have been a few issues Unity has fixed since 2020.3.8. We put that version on the website a while ago but probably should update it.

Reply to this email directly, view it on GitHubhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2FMixedRealityToolkit-Unity%2Fissues%2F11016%23issuecomment-1248822207&data=05|01|KianChai.Ng%40microsoft.com|fb021e9bf2af4ea3e27e08da9785c1e6|72f988bf86f141af91ab2d7cd011db47|1|0|637988897988305253|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=HdpAnglroZJ5FeQg2p9B%2Bxw3IhIChxSNkgeUhXRUBoQ%3D&reserved=0, or unsubscribehttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAHZT4LABXWRIN7TASVWZEHDV6PG4JANCNFSM6AAAAAAQM3MYTA&data=05|01|KianChai.Ng%40microsoft.com|fb021e9bf2af4ea3e27e08da9785c1e6|72f988bf86f141af91ab2d7cd011db47|1|0|637988897988305253|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=GZfo4hYoz6YVKl7mIa%2F%2B4tq5AGJPd1CZLasBtPvZneE%3D&reserved=0.
You are receiving this because you were mentioned.Message ID: @.@.>>

We appreciate your feedback and thank you for reporting this issue.
Microsoft Mixed Reality Toolkit version 2 (MRTK2) is currently in limited support. This means that Microsoft is only fixing high priority security issues. Unfortunately, this issue does not meet the necessary priority and will be closed. If you strongly feel that this issue deserves more attention, please open a new issue and explain why it is important.
Microsoft recommends that all new HoloLens 2 Unity applications use MRTK3 instead of MRTK2.
Please note that MRTK3 was released in August 2023. It features an all new architecture for developing rich mixed reality experiences and has a minimum requirement of Unity 2021.3 LTS. For more information about MRTK3, please visithttps://www.mixedrealitytoolkit.org.
Thank you for your continued support of the Mixed Reality Toolkit!

authors: IssueSyncBot MaxWang-MS kianng


text:
Please provide updated SharingWithUNET example

In MRTK v1 there was an example Scene "SharingWithUNET". Please provide this example for MRTK v2 as well.

Also please separate more the code of networking and anchor sharing, thank you.

UNET is deprecated by Unity. We are actively working on other sharing solutions but will not be building a new UNET based sharing experience for MRTK v2.

authors: benjamincoven chrisfromwork limbusdev


text:
Create ARM64 and AMD64 build tasks

MRTK RC1 (refresh) supports Unity 2019.1 which supports HoloLens 2 ARM64 applications. Our CI systems should validate this as well.
AMD64 appears to be missing as well which I assume we need for OpenVR/WRM support?
https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/results?buildId=1469

@chbecker-ms we're currently looking at ways to improve build times. Each build task we add is another 10-15 minutes for CI and PR validation. We're looking at ways that we can parallelize our build tasks over multiple build agents. Until this is a possibility, adding additional build steps isn't feasible.
I'll keep this GitHub issue up to date with the latest on parallelizing our builds.

I'm currently testing Unity cache server changes made to our build agents. If it significantly reduces build times we should be able to add these build tasks. However, I'm not certain that we'll have time to add Unity 2019.1 to the build agents and make the changes required to support it before Friday as myself and Maciej are focusing more on signing our NuGet packages.

Unfortunately. The cache server changes have not had a significant effect on our build times. I'm still going to check the changes in (#4517), as there was no increase in time taken either. We can monitor this over the next few days to ensure that no significant change is observed.

any update here?

No significant changes have been made to the agent pool to reduce build time. Our CI pipeline runtime has almost doubled since when I first commented on this issue (now at 70mins). However, most of the time, the actual queue time on doesn't last longer than a minute. However, queue times do reach 50-70 minutes often enough.
We could add these builds, and most of the time we wouldn't see any significant backlog. However, especially when we have stabilization builds running, queue times could potentially take a hit.
We could set up a daily build that runs these flavours to catch failures maybe?

No significant changes have been made to the agent pool to reduce build time. Our CI pipeline runtime has almost doubled since when I first commented on this issue (now at 70mins). Most of the time, the actual queue time doesn't last longer than a minute. However, queue times do reach 50-70 minutes often enough.
We could add these builds, and most of the time we wouldn't see any significant backlog. However, especially when we have stabilization builds running, queue times could potentially take a hit.
We could set up a daily build that runs these flavours to catch failures maybe?

I think daily builds to run with these flavours sounds good - I think we'd want to get some coverage, but I agree that having them run on each CI run is going to increase time unnecessarily.

Yeah, I'll start some work on this, but we still need Unity 2019 on the CI machines. @wiwei has requested this.

Looks like we've got the required version now. I'll see if I can get a daily build up and running.

@MenelvagorMilsom what happened on this?

@Troy-Ferrell the work is done for ARM64, but as far as I'm aware, play mode tests are still failing in Unity2019. Here are the results of the build running on my branch:
https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build?definitionId=37
I didn't get a chance to fix these failing tests, so I haven't completed #5736. It will definitely need some touching up one way or another.

I rebased my branch and ran tests again today. Tests were still failing. However it looks like if you run the tests individually, they'll pass. When you run all again though, they fail again.
@keveleigh FYI, as I believe you were starting a conversation about this.

@MenelvagorMilsom Ah, thanks for the heads up! I'll take a look and update my notes

moving out of milestone as this is an build process (CI) change and is not a customer facing feature

This is fixed and will be enabled in the build window when opening a project in 2019.1 or newer. Closing as resolved

enabled in the build window when opening a project in 2019.1 or newer

This issue was for enabling it in CI, though I believe that's completed too via our daily builds https://github.com/microsoft/MixedRealityToolkit-Unity/pull/5736

authors: MenelvagorMilsom Troy-Ferrell Yoyozilla chbecker-ms davidkline-ms keveleigh wiwei


text:
[MRTK Shell Parity] Voice Command Confirmation Label

(Ported to GitHub, reference 20272553)
This came up while I was talking with Lia about SeeItSayIt and nailing down the requirements for the desired behavior.
Command Confirmation is a feature for speech oriented things (where it pops up a small box with the command words you said).
Shell does Command Confirmation for itself, but not for exclusive apps.
MRTK does not currently have any functionality for command confirmation (to my knowledge)
This means individual devs/partners need to reproduce this functionality themselves.
Many devs won’t do this and this will de-prioritize speech as a result.

@Yoyozilla, this actually seems like a feature request, and I'm not sure that this is really necessary for GA. Moreover, I think that this issue (and the original issue in the internal tracker that spawned this) is lacking in details on how we'd validate this feature request, what the ask is, etc.
I'm removing the GA tag/tracking.

Completed with #5868

authors: chbecker-ms cre8ivepark wiwei


text:
[MRTK Shell Parity] [Slate] Touch point affordance

Part of #4200 UX Controls Parity with HoloLens 2 Shell

@cre8ivepark are we done with this? Can we close it?

Merged into 2.0.0.rc2_stabilization
@julenka Yes! we have a separate item for the ring shadow. #4413


text:
GGV Z-depth manipulation does not behave correctly correctly if hand rays disabled

Describe the bug
I would like to use any pointer (head gaze, eye gaze, hand rays) to target a hologram on HoloLens 2 and then when tapping down, I would like to start moving it. Ideally I want to reuse the same ManipulationHandler script, but while the movement behavior seems to be working well when using hand rays, it shows some weird depth movement when having hand rays turned off.
To reproduce
Steps to reproduce the behavior:

If you use the HandInteractionAllExample.unity scene and start it with the DefaultHololens2ConfigurationProfile, holograms can be targeted and moved using hand rays.

In comparison, if you switch the profile to EyeTrackingDemoConfigurationProfile, you can look and air-tap to select a hologram and then while pressing your index finger and thumb together move the hologram. The left/right/up/down movement seems ok, but when I move my hand to and away from my body, the grabbed target moves on an unexpected trajectory.

Expected behavior
I would expect that when I move my hand toward my body that the currently targeted (no matter how I targeted it) is coming toward me.
Your setup (please complete the following information)

Unity Version 2018.4.14f1
MRTK Version  v2.2.0

Target platform (please complete the following information)

HoloLens 2

Any updates on this?

This also reproduces in the new ObjectManipulator script which is going to be the preferred / active object manipulation script for MRTK 2.4 and beyond.

This big is a side effect of #5645, which was built to fix #5640. As a temporary workaround, this can be fixed by changing the code that gets the Rotation of GGVPointer to be:
        public virtual Quaternion Rotation
        {
            get
            {
                Vector3 look = Camera.main.transform.forward;
                return Quaternion.LookRotation(look);
            }
        }

The proper fix involves modifying the MoveLogic that ObjectManipulator uses to use a different algorithm than what is used for hand rays and motion controllers.

It looks like the workaround above causes movement up/down and left/right to regress. As an alternative, I would recommend trying the old movement behavior shipped in MRTK 2.0, before it was refactored to support hand rays better. That behavior could work better for ggv manipulations, as it was tuned specifically for ggv.

We appreciate your feedback and thank you for reporting this issue.
Microsoft Mixed Reality Toolkit version 2 (MRTK2) is currently in limited support. This means that Microsoft is only fixing high priority security issues. Unfortunately, this issue does not meet the necessary priority and will be closed. If you strongly feel that this issue deserves more attention, please open a new issue and explain why it is important.
Microsoft recommends that all new HoloLens 2 Unity applications use MRTK3 instead of MRTK2.
Please note that MRTK3 was released in August 2023. It features an all-new architecture for developing rich mixed reality experiences and has a minimum requirement of Unity 2021.3 LTS. For more information about MRTK3, please visit https://www.mixedrealitytoolkit.org.
Thank you for your continued support of the Mixed Reality Toolkit!

authors: IssueSyncBot julenka sostel


text:
ScrollingObjectCollection doesn't mask Umlaute correctly

Describe the bug
When using the ScrollingObjectCollection with an item that contains an Umlaut (ä, ö, ü) in the text, it isn't completely masked out. If you're showing 5 items, and the 6th contains an Umlaut, the button itself will be invisible, but the Umlaut (and only this one character) is not. If the item is on 7th position, it's (correctly) completely invisible (but the bug will then occur if you scroll up so it's at the 6th position).
To reproduce
Steps to reproduce the behavior:

Create a ScrollingObjectCollection
Add some items, the last one with an Umlaut
Deploy and test it
When scrolling up, only the Umlaut will be visible when the button itself is invisible, but one position before getting inside the viewable area

Expected behavior
All characters should be invisible.
Screenshots

(Inside the visible area, everything is fine)

(One position beneath it, it isn't)
Your setup

Unity Version 2019.4.10f1
MRTK Version 2.4.0

Target platform

HoloLens 2
Same behaviour in the editor play mode

Hi @TheRisenPhoenix. The issue seems to be related to some TMPro font material not really rendering the umlaut properly.
I was able to have working umlauts by using the LiberationSans font material. For using with scroll just remeber to change shader to use Mixed reality Toolkit / TextmeshPro. I'm using MRTK 2.4, Unity 2019.3 and TMPro 1.4.1.

Okay, it indeed seems to work with the other font.
Thanks for your help! =)

authors: TheRisenPhoenix vaoliva


text:
Need samples for snapzones, teleport zones, rotate around axis interactions, and some more

There are no samples for snap zones (at least nowhere to be found from the official documentation/packages)
Please, provide samples for:

[ ]  snap zones + snap zone near events + snap zone events
[ ]  teleport zones + teleport success event/cancelled,
[ ] throw multiplication component (to multiply effect of throwing),
[ ] sample for interaction inside the interaction (take  pliers and clamp them another item, where another item should receive the same near grab event but propagate via the pliars)
[ ] rotation around the axis (door with a handle, the user should hold to the handle and start the rotating interaction  to open release the handle and open the door)
[ ] interactions explicit statements for grab/use events (user can grab an item and then use this item) - with option for hold button to grab/use target item

As an alternative, I'll try to use the VRTK 4 (Zillia/Tillia packages) as they already have all of the interactions in place and they don't even need any additional scripts to implement new SDK, so MRTK can use those interactions with a bit more setup
I've come from VRTK 3.3.0 and VRTK 4 to this solution, as MRTK has some sort of unit tests in place, which means less time wasted for actual QA. We are still using those packages, and as for right now,  our  long term project still grows in size (over 20 people in there already and it is vital to us, that the transition will be seamless, as we have a variety of developers and artists inside)

That'd be awesome to have, I'm also working with snap zones extensively and those in VRTK have the required functionality althought you have to pull some more depedencies that use quite similar concepts as MRTK (interactors / interactables / etc).

I'd love to see those too. Right now, I am implementing door rotation. It feels like, with MRTK, I should be able to create it using their interaction components, but I don't know how to approach that. Any hints would be helpful.

We appreciate your feedback and thank you for reporting this issue.
Microsoft Mixed Reality Toolkit version 2 (MRTK2) is currently in limited support. This means that Microsoft is only fixing high priority security issues. Unfortunately, this issue does not meet the necessary priority and will be closed. If you strongly feel that this issue deserves more attention, please open a new issue and explain why it is important.
Microsoft recommends that all new HoloLens 2 Unity applications use MRTK3 instead of MRTK2.
Please note that MRTK3 was released in August 2023. It features an all-new architecture for developing rich mixed reality experiences and has a minimum requirement of Unity 2021.3 LTS. For more information about MRTK3, please visit https://www.mixedrealitytoolkit.org.
Thank you for your continued support of the Mixed Reality Toolkit!

authors: BarboraAtVResearch IssueSyncBot handzlikchris studentutu


text:
Update Code and Fixed Some Warning ⚠

Overview

Fixed redundant code.
Fixed Possible System.InvalidOperationException warning.
Change some public method to private because it's not being use in the other class and protected as well.
Remove unused variables.
Remove virtual method that hasn't been override.
Fixed Possible System.NullReferenceException warning.

Changes

Fixes: Warning Code
Fix Possible System.NullReferenceException warning.
Fix Possible System.InvalidOperationException warning
Fix redundant code

/azp run

Why do the pipelines make some errors?

@BillyFrcs , neither Unity 2018 nor Unity 2019 support switch pattern matching.
https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/results?buildId=20950&view=logs&j=9a40d849-de61-58a5-b9fb-0035311f3ef5&t=40a1ca36-8c03-582a-2c45-de22c125c2c7&l=11115

Alright understood, Thanks for the correction @timGerken I've already revert it.

/azp run

/azp run

Hey @BillyFrcs, I really appreciate you taking the time to address our feedback. We need all of the public fields that were changed to private/protected be reverted back to public, since they are breaking changes to our api.
We'd also like you to retarget this branch to prerelease/2.8.0 to get this in if you have the time.

Hey @BillyFrcs, I really appreciate you taking the time to address our feedback. We need all of the public fields that were changed to private/protected be reverted back to public, since they are breaking changes to our api.
We'd also like you to retarget this branch to prerelease/2.8.0 to get this in if you have the time.

Okay, I'll try to take it back.

Sorry for the delay on accepting this PR. Left some last comments, after which I think this PR should be good to go!

Sorry for the delay on accepting this PR. Left some last comments, after which I think this PR should be good to go!

Alright, no problem!

/azp run

authors: BillyFrcs RogPodge keveleigh timGerken


text:
Refactor ExtractArchive into a helper class, and a few other changes.

A lot of this work comes from work I had done in #318 that I just wanted to separate out to make that PR easier to review.
This PR includes:

Refactor ExtractArchive from BaseProjectManager into a separate ArchiveHelper static class.
Rename PackageManagerFactory to ProjectManagerFactory, and remove the BaseProjectManager constructors as they were able to be removed thanks to the ExtractArchive change detailed above.
Updated PackageMetadata.User to be a record instead of a class, will help with future json parsing.
Made BaseProjectManager abstract.
Add a Type readonly string to each implementation of BaseProjectManager. Isn't currently being used as of this PR, but #318 uses it, and I anticipate it being useful in other places in the future as well.
Add includePrerelease to BaseProjectManager.EnumerateVersions to filter out pre-release/beta versions if they aren't wanted. Defaults to true, so there are no changes from what is currently in production.
Make BaseProjectManager.GetPackageMetadata return a nullable PackageMetadata object.
Fix any potential issues down the line in IMutator with mutated names including things that aren't HTTP encoded.

I was running into an issue mutating newtonsoft.json as it was creating newtonsoft/json as a mutation because . is close to / and that was causing issues with newtonsoft becoming the namespace, and json becoming the name.

@gfs I removed the public const string Type from the BaseProjectManager as there was never a case where we would be accessing BaseProjectManager.Type, just wanted to let you know based on the comments you left.

The reason you want the type property on the base manager is so that if you had a method that took a generic manager you could redetermine what type it implements.
void SomeMethod(BaseProjectManager bpm)
{
    Switch(bpm.Type)
...
}

Maybe the right approach is a to make an attribute that specifies the Purl type?
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/

The reason you want the type property on the base manager is so that if you had a method that took a generic manager you could redetermine what type it implements.
void SomeMethod(BaseProjectManager bpm)
{
    Switch(bpm.Type)
...
}

This doesn't work if Type is not defined on base project manager.
Maybe the right approach is a to make an attribute that specifies the Purl type?
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/

Ooh I like the idea of an attribute for the Purl type. I will go mess around with that.

void SomeMethod(BaseProjectManager bpm)
{
    Switch(bpm.Type)
...
}

I ended up not going with an attribute and instead what I did was added a:
public abstract string ManagerType { get; } to the BaseProjectManager and each implementation overrides it and returns Type

Seems fine.
We might need to play more with how the type is defined once we start using it but that's nbd.

authors: gfs jpinz

repo: microsoft/OSSGadget