Expected dtype thunder.dtypes.bfloat16 but found thunder.dtypes.float32 for Dynamo+Thunder and Mixtral-8x7B-v0.1

🐛 Bug
When running the benchmarking we get:

RuntimeError: Expected dtype thunder.dtypes.bfloat16 but found thunder.dtypes.float32!

To Reproduce
Please use:
8 nodes, each with 8 GPUs.
Image "INTERNAL_IMAGE:pjnl-20240830"
Training script:
python /opt/pytorch/lightning-thunder/thunder/benchmarks/benchmark_litgpt.py
--model_name Mixtral-8x7B-v0.1
--distributed_mode fsdp
--shard_mode zero3
--compile dynamo_thunder
--checkpoint_activations True
--low_precision_mode fp8-delayed-te
--micro_batch_size 1
Expected behavior
We should not get this error :)
Environment
system.device_product_name                      DGXH100
system.gpu_driver_version                    535.129.03
libraries.cuda                               <IP_ADDRESS>
libraries.pip.lightning               2.4.0.dev20240728
libraries.pip.lightning-thunder              0.2.0.dev0
libraries.pip.lightning-utilities                0.11.6
libraries.pip.litgpt                             0.4.11
libraries.pip.nvfuser                 0.2.10+git58dfdc1
libraries.pip.pytorch-lightning                   2.4.0
libraries.pip.torch                  2.5.0a0+git578b8d7
libraries.pip.torchmetrics                        1.4.1
libraries.pip.torchvision              0.19.0a0+d23a6e1

Applying the patch from https://github.com/Lightning-AI/lightning-thunder/pull/1075 allows this to run
cc: @IvanYashchuk

What are the unsupported operations that are executed with a fallback in the splitter?

These are the reasons for split -

 Subgraph and Split Reason
Dynamo Graph 1
class GraphModule(torch.nn.Module):
    def forward(self, L_x_: "bf16[1, 32768, 4096]", L_self_weight: "bf16[4096]"):
        l_x_ = L_x_
        l_self_weight = L_self_weight

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:429 in forward, code: x = x.float()
        x: "f32[1, 32768, 4096]" = l_x_.float();  l_x_ = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:431 in forward, code: norm_x = torch.mean(x * x, dim=self.dim, keepdim=True)
        mul: "f32[1, 32768, 4096]" = x * x
        norm_x: "f32[1, 32768, 1]" = torch.mean(mul, dim = -1, keepdim = True);  mul = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:432 in forward, code: x_normed = x * torch.rsqrt(norm_x + self.eps)
        add: "f32[1, 32768, 1]" = norm_x + 1e-05;  norm_x = None
        rsqrt: "f32[1, 32768, 1]" = torch.rsqrt(add);  add = None
        x_normed: "f32[1, 32768, 4096]" = x * rsqrt;  x = rsqrt = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:433 in forward, code: x_normed = x_normed.to(dtype=dtype)
        x_normed_1: "bf16[1, 32768, 4096]" = x_normed.to(dtype = torch.bfloat16);  x_normed = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:438 in forward, code: return x_normed * self.weight
        mul_2: "bf16[1, 32768, 4096]" = x_normed_1 * l_self_weight;  x_normed_1 = l_self_weight = None
        return (mul_2,)

Split Reason
[SplitReason(type=<SplitReasonType.MISSING_OP_SUPPORT: 2>,
             info="node with name: x and target: float didn't have any mapping "
                  'in thunder.',
             exception=None)]

Dynamo Graph 2
class GraphModule(torch.nn.Module):
    def forward(self, L_stack0_: "bf16[1, 32768, 6144]", L_cos_: "bf16[32768, 128]", L_sin_: "bf16[32768, 128]"):
        l_stack0_ = L_stack0_
        l_cos_ = L_cos_
        l_sin_ = L_sin_

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:220 in torch_dynamo_resume_in_forward_at_215, code: qkv = qkv.view(B, T, self.config.n_query_groups, total_qkv, self.config.head_size)
        qkv: "bf16[1, 32768, 8, 6, 128]" = l_stack0_.view(1, 32768, 8, 6, 128);  l_stack0_ = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:221 in torch_dynamo_resume_in_forward_at_215, code: qkv = qkv.permute(0, 2, 3, 1, 4)  # (B, n_query_groups, total_qkv, T, hs)
        qkv_1: "bf16[1, 8, 6, 32768, 128]" = qkv.permute(0, 2, 3, 1, 4);  qkv = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:224 in torch_dynamo_resume_in_forward_at_215, code: q, k, v = qkv.split((q_per_kv, 1, 1), dim=2)
        split = qkv_1.split((4, 1, 1), dim = 2);  qkv_1 = None
        q: "bf16[1, 8, 4, 32768, 128]" = split[0]
        k: "bf16[1, 8, 1, 32768, 128]" = split[1]
        v: "bf16[1, 8, 1, 32768, 128]" = split[2];  split = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:230 in torch_dynamo_resume_in_forward_at_215, code: k = k.expand(B, self.config.n_query_groups, q_per_kv, T, self.config.head_size)
        k_1: "bf16[1, 8, 4, 32768, 128]" = k.expand(1, 8, 4, 32768, 128);  k = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:231 in torch_dynamo_resume_in_forward_at_215, code: v = v.expand(B, self.config.n_query_groups, q_per_kv, T, self.config.head_size)
        v_1: "bf16[1, 8, 4, 32768, 128]" = v.expand(1, 8, 4, 32768, 128);  v = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:233 in torch_dynamo_resume_in_forward_at_215, code: q = q.reshape(B, -1, T, self.config.head_size)  # (B, nh_q, T, hs)
        q_1: "bf16[1, 32, 32768, 128]" = q.reshape(1, -1, 32768, 128);  q = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:234 in torch_dynamo_resume_in_forward_at_215, code: k = k.reshape(B, -1, T, self.config.head_size)  # (B, nh_k, T, hs)
        k_2: "bf16[1, 32, 32768, 128]" = k_1.reshape(1, -1, 32768, 128);  k_1 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:235 in torch_dynamo_resume_in_forward_at_215, code: v = v.reshape(B, -1, T, self.config.head_size)  # (B, nh_v, T, hs)
        v_2: "bf16[1, 32, 32768, 128]" = v_1.reshape(1, -1, 32768, 128);  v_1 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:237 in torch_dynamo_resume_in_forward_at_215, code: q_roped = apply_rope(q[..., : self.config.rope_n_elem], cos, sin)
        getitem_3: "bf16[1, 32, 32768, 128]" = q_1[(Ellipsis, slice(None, 128, None))]

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:375 in apply_rope, code: x1 = x[..., : head_size // 2]  # (B, nh, T, hs/2)
        x1: "bf16[1, 32, 32768, 64]" = getitem_3[(Ellipsis, slice(None, 64, None))]

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:376 in apply_rope, code: x2 = x[..., head_size // 2 :]  # (B, nh, T, hs/2)
        x2: "bf16[1, 32, 32768, 64]" = getitem_3[(Ellipsis, slice(64, None, None))]

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:377 in apply_rope, code: rotated = torch.cat((-x2, x1), dim=-1)  # (B, nh, T, hs)
        neg: "bf16[1, 32, 32768, 64]" = -x2;  x2 = None
        rotated: "bf16[1, 32, 32768, 128]" = torch.cat((neg, x1), dim = -1);  neg = x1 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:378 in apply_rope, code: roped = (x * cos) + (rotated * sin)
        mul: "bf16[1, 32, 32768, 128]" = getitem_3 * l_cos_;  getitem_3 = None
        mul_1: "bf16[1, 32, 32768, 128]" = rotated * l_sin_;  rotated = None
        roped: "bf16[1, 32, 32768, 128]" = mul + mul_1;  mul = mul_1 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:379 in apply_rope, code: return roped.to(dtype=x.dtype)
        q_roped: "bf16[1, 32, 32768, 128]" = roped.to(dtype = torch.bfloat16);  roped = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:238 in torch_dynamo_resume_in_forward_at_215, code: k_roped = apply_rope(k[..., : self.config.rope_n_elem], cos, sin)
        getitem_6: "bf16[1, 32, 32768, 128]" = k_2[(Ellipsis, slice(None, 128, None))]

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:375 in apply_rope, code: x1 = x[..., : head_size // 2]  # (B, nh, T, hs/2)
        x1_1: "bf16[1, 32, 32768, 64]" = getitem_6[(Ellipsis, slice(None, 64, None))]

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:376 in apply_rope, code: x2 = x[..., head_size // 2 :]  # (B, nh, T, hs/2)
        x2_1: "bf16[1, 32, 32768, 64]" = getitem_6[(Ellipsis, slice(64, None, None))]

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:377 in apply_rope, code: rotated = torch.cat((-x2, x1), dim=-1)  # (B, nh, T, hs)
        neg_1: "bf16[1, 32, 32768, 64]" = -x2_1;  x2_1 = None
        rotated_1: "bf16[1, 32, 32768, 128]" = torch.cat((neg_1, x1_1), dim = -1);  neg_1 = x1_1 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:378 in apply_rope, code: roped = (x * cos) + (rotated * sin)
        mul_2: "bf16[1, 32, 32768, 128]" = getitem_6 * l_cos_;  getitem_6 = l_cos_ = None
        mul_3: "bf16[1, 32, 32768, 128]" = rotated_1 * l_sin_;  rotated_1 = l_sin_ = None
        roped_1: "bf16[1, 32, 32768, 128]" = mul_2 + mul_3;  mul_2 = mul_3 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:379 in apply_rope, code: return roped.to(dtype=x.dtype)
        k_roped: "bf16[1, 32, 32768, 128]" = roped_1.to(dtype = torch.bfloat16);  roped_1 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:239 in torch_dynamo_resume_in_forward_at_215, code: q = torch.cat((q_roped, q[..., self.config.rope_n_elem :]), dim=-1)
        getitem_9: "bf16[1, 32, 32768, 0]" = q_1[(Ellipsis, slice(128, None, None))];  q_1 = None
        q_2: "bf16[1, 32, 32768, 128]" = torch.cat((q_roped, getitem_9), dim = -1);  q_roped = getitem_9 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:240 in torch_dynamo_resume_in_forward_at_215, code: k = torch.cat((k_roped, k[..., self.config.rope_n_elem :]), dim=-1)
        getitem_10: "bf16[1, 32, 32768, 0]" = k_2[(Ellipsis, slice(128, None, None))];  k_2 = None
        k_3: "bf16[1, 32, 32768, 128]" = torch.cat((k_roped, getitem_10), dim = -1);  k_roped = getitem_10 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:258 in scaled_dot_product_attention, code: y = torch.nn.functional.scaled_dot_product_attention(
        y: "bf16[1, 32, 32768, 128]" = torch._C._nn.scaled_dot_product_attention(q_2, k_3, v_2, attn_mask = None, dropout_p = 0.0, scale = 0.08838834764831843, is_causal = True);  q_2 = k_3 = v_2 = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:261 in scaled_dot_product_attention, code: return y.transpose(1, 2)
        y_1: "bf16[1, 32768, 32, 128]" = y.transpose(1, 2);  y = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:249 in torch_dynamo_resume_in_forward_at_215, code: y = y.reshape(B, T, self.config.head_size * self.config.n_head)  # re-assemble all head outputs side by side
        y_2: "bf16[1, 32768, 4096]" = y_1.reshape(1, 32768, 4096);  y_1 = None
        return (y_2,)

Split Reasons
[SplitReason(type=<SplitReasonType.EXCEPTION_META_THUNDER_OP: 4>,
             info='Failed while running meta for node with name: rotated and '
                  'target: <built-in method cat of type object at '
                  '0x7ac124ce2ea0>, see exception field',
             exception=ValueError("neg had an unexpected type <class 'torch.fx.node.Node'>. Supported types are (<class 'thunder.core.proxies.TensorProxy'>, <class 'numbers.Number'>, <class 'thunder.core.proxies.NumberProxy'>)")),
 SplitReason(type=<SplitReasonType.EXCEPTION_META_THUNDER_OP: 4>,
             info='Failed while running meta for node with name: rotated_1 and '
                  'target: <built-in method cat of type object at '
                  '0x7ac124ce2ea0>, see exception field',
             exception=ValueError("neg_1 had an unexpected type <class 'torch.fx.node.Node'>. Supported types are (<class 'thunder.core.proxies.TensorProxy'>, <class 'numbers.Number'>, <class 'thunder.core.proxies.NumberProxy'>)")),
 SplitReason(type=<SplitReasonType.EXCEPTION_META_THUNDER_OP: 4>,
             info='Failed while running meta for node with name: q_2 and '
                  'target: <built-in method cat of type object at '
                  '0x7ac124ce2ea0>, see exception field',
             exception=ValueError("q_roped had an unexpected type <class 'torch.fx.node.Node'>. Supported types are (<class 'thunder.core.proxies.TensorProxy'>, <class 'numbers.Number'>, <class 'thunder.core.proxies.NumberProxy'>)")),
 SplitReason(type=<SplitReasonType.EXCEPTION_META_THUNDER_OP: 4>,
             info='Failed while running meta for node with name: k_3 and '
                  'target: <built-in method cat of type object at '
                  '0x7ac124ce2ea0>, see exception field',
             exception=ValueError("k_roped had an unexpected type <class 'torch.fx.node.Node'>. Supported types are (<class 'thunder.core.proxies.TensorProxy'>, <class 'numbers.Number'>, <class 'thunder.core.proxies.NumberProxy'>)"))]

Dynamo Graph 3
class GraphModule(torch.nn.Module):
    def forward(self, L_stack0_: "bf16[32768, 8]", L_x_: "bf16[32768, 4096]"):
        l_stack0_ = L_stack0_
        l_x_ = L_x_

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:341 in torch_dynamo_resume_in_forward_at_340, code: probs, indices = torch.topk(router, self.config.n_expert_per_token)  # (B*T, n_expert_per_token)
        topk = torch.topk(l_stack0_, 2);  l_stack0_ = None
        probs: "bf16[32768, 2]" = topk[0]
        indices: "i64[32768, 2]" = topk[1];  topk = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:342 in torch_dynamo_resume_in_forward_at_340, code: probs = probs.softmax(dim=1, dtype=torch.float).to(dtype=x.dtype)
        softmax: "f32[32768, 2]" = probs.softmax(dim = 1, dtype = torch.float32);  probs = None
        probs_1: "bf16[32768, 2]" = softmax.to(dtype = torch.bfloat16);  softmax = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:343 in torch_dynamo_resume_in_forward_at_340, code: masks = indices.unsqueeze(-1) == torch.arange(self.config.n_expert, device=x.device)
        unsqueeze: "i64[32768, 2, 1]" = indices.unsqueeze(-1);  indices = None
        arange: "i64[8]" = torch.arange(8, device = device(type='cuda', index=1))
        masks: "b8[32768, 2, 8]" = unsqueeze == arange;  unsqueeze = arange = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:344 in torch_dynamo_resume_in_forward_at_340, code: masks = masks.permute(2, 0, 1)  # (n_expert, B*T, n_expert_per_token)
        masks_1: "b8[8, 32768, 2]" = masks.permute(2, 0, 1);  masks = None

         # File: /home/kkalambarkar/miniconda3/envs/pytorch-dev/lib/python3.10/site-packages/litgpt/model.py:345 in torch_dynamo_resume_in_forward_at_340, code: y = torch.zeros_like(x)  # (B*T, C)
        y: "bf16[32768, 4096]" = torch.zeros_like(l_x_);  l_x_ = None
        return (masks_1, probs_1, y)

Split Reason
[SplitReason(type=<SplitReasonType.MISSING_OP_SUPPORT: 2>,
             info="node with name: softmax and target: softmax didn't have any "
                  'mapping in thunder.',
             exception=None)]

Honestly, I think the splits are due to a bug in is_node_supported and that allows for a failing graph to work because of splitting😅
On digging a bit more, I found the culprit subgraph and here is the minimal repro.
import torch
import thunder
from torch import device

def forward(L_stack0_: "bf16[32768, 8]", L_x_: "bf16[32768, 4096]"):
    l_stack0_ = L_stack0_
    l_x_ = L_x_

    topk = torch.topk(l_stack0_, 2);  l_stack0_ = None
    probs: "bf16[32768, 2]" = topk[0]
    indices: "i64[32768, 2]" = topk[1];  topk = None
    softmax: "f32[32768, 2]" = probs.softmax(dim = 1, dtype = torch.float32);  probs = None
    return softmax

jforward = thunder.jit(forward)

L_stack0_ = torch.randn([32768, 8], dtype=torch.bfloat16, device='cuda', requires_grad=True)
L_x_ = torch.randn([32768, 4096], dtype=torch.bfloat16, device='cuda', requires_grad=True)

jforward(L_stack0_, L_x_)

@IvanYashchuk
While investigating this, I think I have stumbled upon a rematerialization issue. Is my understanding correct that for rematerialization, there is an implicit expectation that the forward and backward trace shouldn't have tensor proxy name collision except for the proxies passed as saved_for_backward?
Context -
For the script below, after applying patch from https://github.com/Lightning-AI/lightning-thunder/pull/1067 (without this I see another remat error)
import torch
import thunder
from torch import device

def forward(L_stack0_: "bf16[32768, 8]", L_x_: "bf16[32768, 4096]"):
    l_stack0_ = L_stack0_

    probs = l_stack0_
    softmax: "f32[32768, 2]" = probs.softmax(dim = 1, dtype=torch.float);  probs = None
    return softmax

jforward = thunder.jit(forward)

L_stack0_ = torch.randn([32768, 8], dtype=torch.bfloat16, device='cuda', requires_grad=True)
L_x_ = torch.randn([32768, 4096], dtype=torch.bfloat16, device='cuda', requires_grad=True)

jforward(L_stack0_, L_x_)

This is the joint trace generated (before remat)
def joint_fn(args, kwargs, cotangents):
  # L_stack0_: "cuda:0 bf16[32768, 8]"
  [t9] = nvFusion0(L_stack0_)
    # t0 = prims.convert_element_type(L_stack0_, dtypes.float32)  # t0: "cuda:0 f32[32768, 8]"
    # t1 = prims.amax(t0, (1,))  # t1: "cuda:0 f32[32768]"
    # t2 = prims.broadcast_in_dim(t1, [32768, 1], [0])  # t2: "cuda:0 f32[32768, 1]"
    # t3 = prims.broadcast_in_dim(t2, (32768, 8), (0, 1))  # t3: "cuda:0 f32[32768, 8]"
    # t4 = prims.sub(t0, t3)  # t4: "cuda:0 f32[32768, 8]"
    # t5 = prims.exp(t4)  # t5: "cuda:0 f32[32768, 8]"
    # t6 = prims.sum(t5, (1,))  # t6: "cuda:0 f32[32768]"
    # t7 = prims.broadcast_in_dim(t6, [32768, 1], [0])  # t7: "cuda:0 f32[32768, 1]"
    # t8 = prims.broadcast_in_dim(t7, (32768, 8), (0, 1))  # t8: "cuda:0 f32[32768, 8]"
    # t9 = prims.div(t5, t8)  # t9: "cuda:0 f32[32768, 8]"
  # saved_for_backward: "Collection"
  # cotangents: "Collection"
  C0, _, = saved_for_backward
  t10, = cotangents
  t9, = C0
  [t7] = nvFusion0(t9, t10)
    # t2 = prims.mul(t9, t10)  # t2: "cuda:0 f32[32768, 8]"
    # t3 = prims.sum(t2, (1,))  # t3: "cuda:0 f32[32768]"
    # t4 = prims.broadcast_in_dim(t3, [32768, 1], [0])  # t4: "cuda:0 f32[32768, 1]"
    # t5 = prims.broadcast_in_dim(t4, (32768, 8), (0, 1))  # t5: "cuda:0 f32[32768, 8]"
    # t6 = prims.sub(t10, t5)  # t6: "cuda:0 f32[32768, 8]"
    # t7 = prims.mul(t9, t6)  # t7: "cuda:0 f32[32768, 8]"
  return {'output': t9, 'flat_args': [L_stack0_], 'flat_output': (t9,)}, ((t7,),)

Remat finds a cut at t4 , we can see that we have t4 in both forward and backward section but both are derived from different computations.
It errors with
And it errors with
  File "/home/kkalambarkar/lightning-thunder/thunder/core/rematerialization.py", line 610, in rematerialize_forward_and_backward
    joint_extrace = rematerialize(joint_extrace)
  File "/home/kkalambarkar/lightning-thunder/thunder/core/rematerialization.py", line 559, in rematerialize
    updated_consumer = apply_rematerialization_for_consumer(current_producer, current_consumer, cut)
  File "/home/kkalambarkar/lightning-thunder/thunder/core/rematerialization.py", line 193, in apply_rematerialization_for_consumer
    new_consumer_args = tuple(sorted(new_consumer_args, key=lambda x: proxy_order[x.name]))
  File "/home/kkalambarkar/lightning-thunder/thunder/core/rematerialization.py", line 193, in <lambda>
    new_consumer_args = tuple(sorted(new_consumer_args, key=lambda x: proxy_order[x.name]))
KeyError: 't4'

To verify if name collision is the issue - I added a patch which disabled the names from forward_trace to appear in backward_trace.
diff --git a/thunder/common.py b/thunder/common.py
index 7683f60c..b93987c0 100644
--- a/thunder/common.py
+++ b/thunder/common.py
@@ -1,5 +1,5 @@
 import dis
-from typing import Any
+from typing import Any, Set
 from collections.abc import Callable, Generator, Hashable, Sequence
 from collections import deque, defaultdict
 import time
@@ -511,6 +511,7 @@ def trace(
     include_return_statement: bool = True,
     use_dce: bool = True,
     insert_ddp_syncs: bool = False,
+    used_names: Set[str] | None = None
 ) -> Callable:
     @make_opaque
     def _trace(
@@ -533,6 +534,9 @@ def trace(
                 return fn(*args, **kwargs)

             trace = TraceCtx(fn)
+            if used_names is not None:
+                for name in used_names:
+                    trace.add_name(name)
             tracectx_tok = set_tracectx(trace)

             proxyargs, proxykwargs = args, kwargs
diff --git a/thunder/core/transforms.py b/thunder/core/transforms.py
index 5b056da8..f9b3679c 100644
--- a/thunder/core/transforms.py
+++ b/thunder/core/transforms.py
@@ -2178,13 +2178,13 @@ def softmax_aug_fwd(a: Proxy, dim: int, dtype: dtypes.dtype | None = None) -> VJ
     from thunder.torch import softmax

     primal = softmax(a, dim, dtype=dtype)
-    residuals = (primal, dim)
+    residuals = (primal, dim, a.dtype)
     return VJPDual(primal, residuals)

 @register_backward("torch.softmax")
-def softmax_backward(primal, dim, g):
-    return primal * (g - (primal * g).sum(dim, keepdim=True))
+def softmax_backward(primal, dim, original_dtype, g):
+    return (primal * (g - (primal * g).sum(dim, keepdim=True))).to(original_dtype)

 def iter_bound_symbols(bound_symbols):
@@ -2998,7 +2998,7 @@ def forward_and_backward_from_trace(trace: Trace, torch_autograd=False) -> Forwa
             out = tree_flatten(out)[0]
         return out

-    backward_trace = construct_trace(rename_proxies=False)(backward_fn, saved_for_backward, cotangents)
+    backward_trace = construct_trace(rename_proxies=False, used_names=forward_trace.names)(backward_fn, saved_for_backward, cotangents)

     # We are done with constructing the forward and backward passes at this
     # stage. The following is not strictly necessary, but it's good to filter

With this everything works, even the patch from https://github.com/Lightning-AI/lightning-thunder/pull/1067 is not required (and also fixes the issue that 1067 tries to solve).

@riccardofelluga do you think https://github.com/Lightning-AI/lightning-thunder/pull/1067 could be related to the above comment

It might be related, however if this is the real issue, it still does not make #1067 obsolete because in any case if that check is valid then we can return early and therefore save some cycles. I find it interesting that you discovered that it's about naming, I couldn't have guessed. My question now would be, what caused the duplicate name in the fist place?
Could you also test the following with your patch and without #1067?
pytest thunder/benchmarks/targets.py -k test_nanogpt_cross_entropy[forward-thunder]

Is my understanding correct that for rematerialization, there is an implicit expectation that the forward and backward trace shouldn't have tensor proxy name collision except for the proxies passed as saved_for_backward

When the pass was developed we probably had a global name counter. I think your patch to generate the backward trace without a name clash with the forward trace is a good one! Please submit a pull request.


Disable Fomantic's CSS tooltips

CSS-only tooltips suffer various issues with positioning and there was only one single instance of them in the templates. Replace that instance with a regular popup and exclude these data-tooltip styles from the Fomantic build.

@delvh included the rename poping to popping here in the second commit, I ran:
perl -p -i -e 's#poping#popping#g' templates/**/* web_src/js/index.js

If we are already at it: Is there a reason why these two are two separate classes?
Because as far as I can see, they could be combined into one style class pop-up.
Then everyone knows without a doubt what they are meant to do.
Doing this makes everything more readable, smaller, and less error-prone in my opinion.
Unless of course that style class is already used somewhere else…
Even though doing this might help reduce bugs in the end as those things are also already intended to popup and we then have a more unified code base…

I think that class can probably be removed entirely. I'll probably move the renaming commit to another PR as it's not directly related.

I am fine with both.
I prefer removing it entirely if possible because less code means fewer bugs…

Backed out of the renaming change here, will follow up with a separate PR later.


App crashed after I removed my wallet from the device

step 1: go to wallet setting
step 2: tap Remove wallet from device
step 3: input password
=> show message "Wallet removed" then crash app
version: 1.5.1

This issue can't be replicated since v1.6


work on user research

formulate ideas on the research plan
work with the team on the empathy map
work on the user research

Thanks for the email.
On Wed, Aug 3, 2022 at 1:43 AM Jeremiah Lateef @.***>
wrote:

Assigned #10
https://github.com/zuri-training/Team-118-Col-Films/issues/10 to
@Nthatha https://github.com/Nthatha.
—
Reply to this email directly, view it on GitHub
https://github.com/zuri-training/Team-118-Col-Films/issues/10#event-7116589047,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZCWAKDXF4LTSEK4PJSDBFDVXIWLLANCNFSM55GBNEJA
.
You are receiving this because you were assigned.Message ID:
@.***
com>

Mission and Vision statement -Team 118.docx
COL_FILMS_TEAM_118.docx

@Nthatha Send a pull request referencing this issue so that your changes can be merged into the main branch.

I am happy that things are going well in my team.

https://www.figma.com/file/NKpScehtlydM0GZAsP5Cp4/COL_FILMS_TEAM_118?node-id=0%3A1#236294941
htthttps://github.com/zuri-training/Team-118-Col-Films/files/9252459/Mission.and.Vision.statement.-Team.118.docxps://docs.google.com/document/d/1Lo-UUOSaGXlb0J6zPpISd9cXv3GwyMCsTP0ji-BCO-c/edit

https://www.figma.com/file/NKpScehtlydM0GZAsP5Cp4/COL_FILMS_TEAM_118?node-id=0%3A1#236281676
https://github.com/zuri-training/Team-118-Col-Films/files/9252459/Mission.and.Vision.statement.-Team.118.docx
https://github.com/zuri-training/Team-118-Col-Films/files/9252462/COL_FILMS_TEAM_118.docx


test: add new test cases for pkg/protocol/multipart.go

What type of PR is this?
test
Check the PR title.

[x] This PR title match the format: <type>(optional scope): <description>
[x] The description of this PR title is user-oriented and clear enough for others to understand.

(Optional) Translate the PR title into Chinese.
测试：为pkg/protocol/multipart.go文件新增测试用例。
(Optional) More detail description for this PR(en: English/zh: Chinese).

en: add test cases for the following features for pkg/protocol/multipart.go and the test coverage rate of pkg/protocol/response.go is improved to 82.6%.
1.TestParseMultipartForm: test parse multiform from request, including some error tests and set new request with func SetMultipartFormWithBoundary, two requests are eager to be same.
2.TestWriteMultipartFormFile: test func TestWriteMultipartFormFile and func AddFile.
zh(optional):
Which issue(s) this PR fixes:
https://github.com/cloudwego/hertz/issues/257

The test coverage rate of multipart.go is 82.6% in my local test tool.However, it is 68% in codecov. I will optimize it.

The test coverage rate of multipart.go is 82.6% in my local test tool.However, it is 68% in codecov. I will optimize it.

❤

LGTM


remove GenericAntag completely

About the PR
depends on:

#28216 so it isnt needed
#28039 so ninja doesnt use it
#28217 so dragon doesnt use it

Why / Balance
its no longer needed
Technical details
:candle: :candle: :candle: :candle: :candle: rest in piss
Media

[X] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes
GenericAntagRuleComponent and GenericAntagComponent have been deleted in favour of AntagObjectivesComponent and having the rule spawn the antag rather than the other way around. to have a rule easily show up in roundend summary just set agentName on AntagSelectionComponent like before.
Changelog
no genericantag no fun

he cookin


Update version headers

Bettere late than never, eh? Also, this will clear up some confusion regarding which branch to use.

Rebased.

can't see this PR causing the problem, but the error is:
1) TestAuth_Controller::testLogout
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'An Error Has Occurred'
+''

Yes. Totally unrelated error.  I've fixed it locally and will send in a PR soon.


Freezing With py2app: IOError: could not get source code

I'm attempting to "freeze" an application into a distributable OS X .app using py2app. I have slimmed my code down to the bare minimum which triggers this issue, but I don't understand enough of the magic to determine if the problem is truly with sounddevice, CFFI, py2app, or my configuration. Apologies if this is the wrong channel to start looking for a fix!
Once frozen, a simple import sounddevice causes the blowup. The exception is thrown when a C header is fed to CFFI as a giant string literal:
Traceback (most recent call last):
  File "sdtest/dist/sdtest.app/Contents/Resources/__boot__.py", line 77, in <module>
    _run()
  File "sdtest/dist/sdtest.app/Contents/Resources/__boot__.py", line 62, in _run
    exec(compile(source, path, 'exec'), globals(), globals())
  File "sdtest/dist/sdtest.app/Contents/Resources/sdtest.py", line 1, in <module>
    import sounddevice
  File "sounddevice.pyc", line 313, in <module>
  File "cffi/api.pyc", line 105, in cdef
  File "cffi/api.pyc", line 119, in _cdef
  File "cffi/cparser.pyc", line 299, in parse
  File "cffi/cparser.pyc", line 304, in _internal_parse
  File "cffi/cparser.pyc", line 260, in _parse
  File "cffi/cparser.pyc", line 40, in _get_parser
  File "pycparser/c_parser.pyc", line 116, in __init__
  File "pycparser/ply/yacc.pyc", line 3293, in yacc
  File "pycparser/ply/yacc.pyc", line 2938, in validate_all
  File "pycparser/ply/yacc.pyc", line 2982, in validate_modules
  File "inspect.pyc", line 690, in getsourcelines
  File "inspect.pyc", line 538, in findsource
IOError: could not get source code

My setup.py with py2app configuration is as follows; I've explicitly included the path to my compiled PortAudio lib (which magically installed with sounddevice) to ensure it is included within the the .app:
from setuptools import setup

PY2APP_OPTIONS = {
    'argv_emulation': False,
    'includes': ['sounddevice'],
    'frameworks': ['/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/_sounddevice_data/libportaudio.dylib'],
}

setup(
    app=['sdtest.py'],
    options={'py2app': PY2APP_OPTIONS},
    setup_requires=['py2app'],
)

And the sdtest.py file itself need only be as simple as this to trigger this problem:
import sounddevice

Can you provide any suggestions as to how better to track down the problem here? I don't really understand what CFFI is doing under the hood, nor understand "who" is unable to find source code nor what source it's looking for.

Contents of the built sdtest.app, in the hopes that you may spot something important which is missing. Note that site-packages get rolled up into a .zip file, which can make clever imports fail:
.
./sdtest.app
./sdtest.app/Contents
./sdtest.app/Contents/Frameworks
./sdtest.app/Contents/Frameworks/libportaudio.dylib
./sdtest.app/Contents/Frameworks/Python.framework
./sdtest.app/Contents/Frameworks/Python.framework/Python
./sdtest.app/Contents/Frameworks/Python.framework/Resources
./sdtest.app/Contents/Frameworks/Python.framework/Versions
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/include
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/include/python2.7
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/include/python2.7/pyconfig.h
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/lib
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/lib/python2.7
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/Python
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/Resources
./sdtest.app/Contents/Frameworks/Python.framework/Versions/2.7/Resources/Info.plist
./sdtest.app/Contents/Frameworks/Python.framework/Versions/Current
./sdtest.app/Contents/Info.plist
./sdtest.app/Contents/MacOS
./sdtest.app/Contents/MacOS/python
./sdtest.app/Contents/MacOS/sdtest
./sdtest.app/Contents/PkgInfo
./sdtest.app/Contents/Resources
./sdtest.app/Contents/Resources/__boot__.py
./sdtest.app/Contents/Resources/__error__.sh
./sdtest.app/Contents/Resources/include
./sdtest.app/Contents/Resources/include/python2.7
./sdtest.app/Contents/Resources/include/python2.7/pyconfig.h
./sdtest.app/Contents/Resources/lib
./sdtest.app/Contents/Resources/lib/python2.7
./sdtest.app/Contents/Resources/lib/python2.7/config
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_bisect.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_cffi_backend.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_ctypes.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/array.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/math.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/select.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/time.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so
./sdtest.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so
./sdtest.app/Contents/Resources/lib/python2.7/site-packages.zip
./sdtest.app/Contents/Resources/lib/python2.7/site.pyc
./sdtest.app/Contents/Resources/PythonApplet.icns
./sdtest.app/Contents/Resources/sdtest.py
./sdtest.app/Contents/Resources/site.pyc

Sorry, I have no clue. You should probably ask on the CFFI mailing list: https://groups.google.com/forum/#!forum/python-cffi.
Once you found a solution, please report it back. It might be interesting for other users!

According to the traceback, the problem is in pycparser or its submodule ply.  Maybe something like lextab.py/yacctab.py have not been pregenerated, or the check for if they have been is broken when there are only .pyc files around and no .py files.  You should try asking on the pycparser mailing list.
(Note that this error would not occur if you use the API mode, but only in the ABI mode of CFFI.)

Update: The bug is in an old version of PLY (version 3.8) which has been bundled into pycparser source tree. Upstream PLY (version 3.10) is already fixed. I have filed an issue with pycparser requesting that they update their copied dependency.
See: https://github.com/eliben/pycparser/issues/160

Update: This still affects python-sounddevice because it calls CFFI in such a way that pycparser is invoked, and pycparser has not yet released an updated version with the fixed ply module (though pycparser's repository HEAD is fixed).

@riggsd Thanks for the update! I'll leave this open for now.

I've been running into this problem for the PsychoPy package too (also distributing a mac version using py2app) and for that I was able to get around it by adding 'pycparser', to the packages list in my py2app setup dict (I actually added 'cffi' too but I think that wasn't strictly necessary).
This means that the py files get copied as well as the pyc files and the source can be found avoiding the source of the bug in pycparser.


calculate LPC coefficient from cepstrum in Python

I have an issue when translating the C code in celt_lpc.c to Python. The Python LPC coefficients is very small compared to  C LPC coefficients. I attached my notebook with all steps here.
cep2lpc.ipynb.zip.
Any helps would be very appreciated.
Thanks for spending your time on the problem.

Hi, have you solved the problem?

I solved your problem by modifying this code
def _celt_lpc(ac, p):
    error = ac[0]
    lpc = np.zeros(p)
    rc = np.zeros(p).astype(float)
    if ac[0] != 0:
        for i in range(p):
            rr = 0
            for j in range(i):
                rr += lpc[j] * ac[i - j]
            rr += (ac[i + 1])
            r = -rr / error
            rc[i] = r
            lpc[i] = (r)
            for j in range(int((i+1) / 2)):
                tmp1 = lpc[j]
                tmp2 = lpc[i-1-j]
                lpc[j]     = tmp1 + (r * tmp2)
                lpc[i-1-j] = tmp2 + (r * tmp1)
            error -= ((r * r) * error)
            if error < (ac[0]  / (2**10)):
                break
            if (error < 0.001 * ac[0]):
                break
    return error, lpc, rc

@auzxb awesome. I think with the script we can modify the test_lpcnet.py to synthesize speech from cepstrum like what's in test_lpcnet.c. But I'm not sure if it's necessary. In my case, the results from test_lpcnet.c are noisier than those from test_lpcnet.py.

Yes! Just for convenience, I'm also trying to convert the code to python version, and compare the  results.
In the original arch.h file of this project, the Macro maybe a bug.
#define PSHR(a,shift)   (a) #define SHR(a,shift)    (a) #define SHL(a,shift)    (a) #define SATURATE(x,a)   (x) #define SATURATE16(x)   (x)

In the original arch.h file of this project, the Macro maybe a bug.
#define PSHR(a,shift) (a) #define SHR(a,shift) (a) #define SHL(a,shift) (a) #define SATURATE(x,a) (x) #define SATURATE16(x) (x)

If I have read the code correctly, it is not a bug. You need to have these functions properly defined only if the program is to be run on a fixed-point CPU.

@auzxb awesome. I think with the script we can modify the test_lpcnet.py to synthesize speech from cepstrum like what's in test_lpcnet.c. But I'm not sure if it's necessary. In my case, the results from test_lpcnet.c are noisier than those from test_lpcnet.py.

Interesting, are there any confirmed cases you can share? Thanks!

@HanzhengLi: I incorporated the centrum to lpc into test_lpc.py and the synthesized speech is good. I haven't looked carefully so it makes me a little bit worried about it too good to be true :D :D . Here is the script if you want to take a look.
test_lpcnet2.py.zip

@tuanad121 Great work! Though I think synthesis in C should do almost exactly the same, except for approximation of nonlinear functions and the randomness in sampling. Still, good to have it work in python.

@auzxb awesome. I think with the script we can modify the test_lpcnet.py to synthesize speech from cepstrum like what's in test_lpcnet.c. But I'm not sure if it's necessary. In my case, the results from test_lpcnet.c are noisier than those from test_lpcnet.py.

We had got the opposite result. We are traing the front-end with Tacotron-2 with the project of  https://github.com/MlWoo/LPCNet.  The vocode from test_lpcnet.c is better then test_lpcnet.py; pcm from test_lpcnet.py is noisy!


y-partykit: export getYDoc

Directly get the Y.Doc instance
import {getYDoc} from 'y-partykit';

// ...

const doc = await getYDoc(room, options)

This looks very helpful. I'm assuming this means onRequest will be able to access the same ydoc in memory as any connections?

Yup

@wordware-ai this is now landed as unstable_getYDoc. See release notes for important caveats:
https://github.com/partykit/partykit/releases/tag/y-partykit%400.0.7
We will likely be revisiting this API in the future, but in either case we will continue to support equivalent functionality.


Restore RDS from snapshot

Currently I can't see any option to do this. Is this in the pipeline or future releases ?

@varunchandak Excuse the delay, we took some time off.
This is indeed a nice functionality that we should integrate. Maybe into the awless create database with something like awless create database snapshot=...  size=... type=... , like we do when creating a read replica.
Not sure when it will be done. This week we will release the 1.10. Might do it for the next one.


Promote AEG and Retail to testing

This is an automated message:
You can preview this docs PR at http://399.docs-pr.validatedpatterns.io
Note that they get generated every five minutes, so please wait a bit.

@day0hero @danmacpherson

/lgtm


be able to set a maximum Zig version for a package

on second thought, does this make sense?

if a newer tag/release introduces a breaking chance, a maximum would prevent someone from trying to build with a broken version.

but why would they commit a max rather than make the fix and commit a new minimum?

well i mean take river for example, it's built on a specific tag each release, if you're trying to build say a older tag of it, then it'll break with a newer version, but that's just an example i guess.

https://github.com/nektro/zigmod/assets/5464072/f11c88d8-26a1-497b-95d2-6ac6feaf6187
https://github.com/nektro/zigmod/assets/5464072/d29a9dc7-5168-4627-a521-ccc36413cab2


Sensor location

Hi, everyone.
Hope all are doing well.
In the Analysis parameter section, we need to enter Mod wanted and Row wanted.
I used 4L7 structure in the design. If I enter Mod wanted = 5 and Row wanted=4 then the yellow highlighted module will be the selected module. (refer to the attached 4L7 structurer image).

I entered no. of sensors =7. Then all sensors are located in a particular location. How this location is selected?

With the same number of sensors, same design I changed the Mod wanted = 6 and Row wanted=3 then the bifacial ratio value got changed. How the sensor location will impact the bifacial ratio?

Whether we can select the sensor location where we want?

Hi Venkat, here are some responses.

The sensorsy variable selects the number of sensors to be deployed uniformly across the middle of your chosen module.
the bifacial ratio will change slightly depending on whether the module is in the interior of your array, or along an array edge.  Moving closer to the edge of the array row will increase the amount of back-side irradiance collected by that module.
You can manually select the sensor location.  This is a new feature in the current development branch, by manually specifying modscanfront and modscanback in the AnalysisObj.moduleAnalysis() function


Fix markdown

@yoichinak : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Format correction confirmed. Thanks.


Wrong date format in s3 headers

What is the problem you are having with rclone?
If I serve via s3 rclone seems to use an invalid format for at least the Last-Modified header.
To test I created a directory test and file file in it. I set the file to a specific last-accessed and last-modified date using touch -amt<PHONE_NUMBER>22 file:
ls -la
drwxr-xr-x cubic cubic 60 B Sat Dec 21 23:07:20 2024  .
drwxr-xr-x cubic cubic 60 B Sat Dec 21 23:07:13 2024  ..
.rw-r--r-- cubic cubic  0 B Mon Dec  9 22:22:00 2024  file

If I now serve the file via http from the directory test using rclone serve http test I get:
curl --head localhost:8080/file

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 0
Last-Modified: Mon, 09 Dec 2024 21:22:00 GMT
Server: rclone/v1.68.2
Date: Sat, 21 Dec 2024 22:11:46 GMT

Now if I serve the directory test as a bucket with the file file in it using rclone serve s3 . I get:
curl --head localhost:8080/test/file

HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Headers: Accept, Accept-Encoding, Authorization, Content-Disposition, Content-Length, Content-Type, X-Amz-Date, X-Amz-User-Agent, X-CSRF-Token, x-amz-acl, x-amz-content-sha256, x-amz-meta-filename, x-amz-meta-from, x-amz-meta-private, x-amz-meta-to, x-amz-security-token
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, HEAD
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag
Content-Length: 0
Content-Type: application/octet-stream
Etag: "d41d8cd98f00b204e9800998ecf8427e"
Last-Modified: Mon, 9 Dec 2024 22:22:00 GMT
Server: AmazonS3
X-Amz-Id-2: RUNEMjk5NzlFQ0MyQkM2OEVDRDI5OTc5RUNDMkJDNjhFQ0QyOTk3OUVDQzJCQzY4RUNEMjk5NzlFQ0MyQkM2OA==
X-Amz-Request-Id: ECD29979ECC2BC68
Date: Sat, 21 Dec 2024 22:08:03 GMT

There are two things to note: The Last-Modified header from the s3 server has the value Mon, 9 Dec 2024 22:22:00 GMT. This is invalid, as the date, as far as I understand the corresponding RFC and Mozilla, must be in a two-digit representation (same as the http server sends). It also differs from the http response by one hour. My time zone is GMT+1, it seems to use the local time and GMT inconsistently.
I came across this bug by using pgBackRest to backup my postgres cluster against s3 provided by rclone and it failed with ERROR: [029]: invalid month 'ec ' during the debug. After looking through the debug log for the string I discovered that it refers to the cut off Dec month. It probably reads the date header in fixed offsets which always expect the date to be 2 digits long.
What is your rclone version (output from rclone version)
1.68.2
Which OS you are using and how many bits (e.g. Windows 7, 64 bit)
Linux 64 bit
Which cloud storage system are you using? (e.g. Google Drive)
Tested with local and SFTP backends
The command you were trying to run (e.g. rclone copy /tmp remote:tmp)
rclone serve s3 .
A log from the command with the -vv flag (e.g. output from rclone -vv copy /tmp remote:tmp)
Does not apply

How to use GitHub

Please use the 👍 reaction to show that you are affected by the same issue.
Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
Subscribe to receive notifications on status change and new comments.

I've moved this issue here from the rclone repo
The culprit is here
https://github.com/rclone/gofakes3/blob/5af388db693f099d6889be05a2b5dffc91e6c275/gofakes3.go#L1137-L1144
That linked issue makes interesting reading.
First the format...
All the documentation for s3 - for Example Head Object has the time format in the form
Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT

So we'd have to say that is the de-facto standard for AWS S3.
And if I query an actual s3 server I receive the same format
Last-Modified: Fri, 13 Sep 2024 18:00:13 GMT

So I think the format obeys the defacto S3 standard. This may not be RFC compliant, but it is the s3 standard.
In the s3 backend in rclone we use the http time parser to parse this time which copes just fine - that uses http.ParseTime
https://pkg.go.dev/net/http#ParseTime

ParseTime parses a time header (such as the Date: header), trying each of the three formats allowed by HTTP/1.1: TimeFormat, time.RFC850, and time.ANSIC.

And it looks like AWS S3 is using the TimeFormat type

It is like time.RFC1123 but hard-codes GMT as the time zone. The time being formatted must be in UTC for Format to generate the correct format.

So I think the actual format is correct.
Looking at the code, it makes an effort to change the time to UTC so the timezone looks correct too, however it doesn't test correct
mkdir /tmp/s3/bucket
mkdir -p /tmp/s3/bucket
echo hello > /tmp/s3/bucket/file.txt
TZ=GMT rclone serve s3 /tmp/s3
TZ=MST rclone serve s3 /tmp/s3

And comparing the last modified with the two timezones
GMT
$ curl --head http://<IP_ADDRESS>:8080/bucket/file.txt
...
Last-Modified: Sun, 22 Dec 2024 15:52:22 GMT

MST
$ curl --head http://<IP_ADDRESS>:8080/bucket/file.txt
...
Last-Modified: Sun, 22 Dec 2024 08:52:22 GMT

So something is clearly wrong here.
So in conclusion

Disagree with you about the time format - it is correct
Agree with you about the time being wrong

Maybe this is an rclone problem after all!

Thank you for moving it to the right place and spending time to dig trough it :)
I'm still very confused. Just to clarify: My main issue here is the missing padding 0 in 1 Jan 2006 vs. 01 Jan 2006. You pointed to https://github.com/rclone/gofakes3/blob/5af388db693f099d6889be05a2b5dffc91e6c275/gofakes3.go#L1137-L1144 which explicitly defines the padding by the Go time layout string (the layout string is Mon, 02 Jan 2006 15:04:05 and not Mon, 2 Jan 2006 15:04:05), but looses it if it serves the headers.
I also tried to query real Amazon S3 resources as well as Minio, Hetzner (Ceph based), B2 and R2:
Some examples
curl --head https://s3.amazonaws.com/arena-attachments/2015119/282dc4fc748b58803e1aed76e9e8a952.pdf

HTTP/1.1 200 OK
x-amz-id-2: cm+Ma3QJYlS4Im1NTYI/5QuWu7T3oAynXFgNUw2qArVz9RZacuvv5Qgg3nxCCIB2xntTRnEoFzk=
x-amz-request-id: 7D7XF0K267ZT0XD4
Date: Mon, 23 Dec 2024 11:14:22 GMT
Last-Modified: Sun, 08 Apr 2018 22:49:22 GMT
ETag: "4a8714103017c379f725dbedb35fa0b4"
x-amz-version-id: nYd1ZmLqMpWIxPkGoqB4OavsqzFSTtEF
Accept-Ranges: bytes
Content-Type: application/pdf
Content-Length: 478540
Server: AmazonS3

curl 'https://[redacted].eu.r2.cloudflarestorage.com/[redacted]' -v

[snip]
* Request completely sent off
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 200 OK
< Date: Mon, 23 Dec 2024 11:50:57 GMT
< Content-Length: 1313
< Connection: keep-alive
< Accept-Ranges: bytes
< ETag: "aa4dac536bb4642f24d76faa0455b5d0"
< Last-Modified: Fri, 06 Dec 2024 00:00:04 GMT
< Server: cloudflare
< CF-RAY: 8f68230e8d81dcb5-FRA
<
[snip]

All of them use the same and padded date format and never replied with a single digit. According to the linked issues on the s3 SDK the format was widened to RFC1123 at least in the v1 to allow other time zones than GMT. In the issue for v2 it's still claimed:

In the case of the RFC1123 format, GMT time zone is the value expected.

So it's still GMT only but the SDK seems to parse RFC1123 anyway. The RFC1123 defines the date as date = 1*2DIGIT month 2*4DIGIT which allows for a single digit, but also for 2-digit years. I think this has been overlooked, as the intention was to allow other time zones and not HTTP/1.1 incompatible timestamps.
I think using the padded date format (as it should already be used according to the layout string in this module) would align with S3 and all other S3 compatible servers and be compatible with RFC1123, RFC822 and the fixed length requirements of HTTP's RFC2616:

HTTP applications have historically allowed three different formats for the representation of date/time stamps:

 Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
 Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

The first format is preferred as an Internet standard and represents a fixed-length subset of that defined by RFC 1123 [8] (an update to RFC 822 [9]).

Agree on the varying offset: That should not change as the files unix timestamp is in UTC. TZ=GMT ls -la file and TZ=MST ls -la file are different as expected since we change our interpretation. Using TZ=MST rclone serve http . and same with GMT, I can verify that the time in the header does not change and represents the actual time modified in UTC. So something with the time zone in this module lib must be wrong.

OK on further investigation, this is actually an rclone problem not a gofakes3 problem! I'm going to move this issue back to the rclone repo now, then post something for you to try.


[Nominate Restore] Pass Package References with no version as Project References

As part of work to support Transitive references #199, Nominate restore should to pass PackageRefs with paths as ProjectReferences to NuGet so that it can write them (and their closures) to the lock file.
See https://github.com/dotnet/roslyn-project-system/issues/199#issuecomment-261368911 for more details.
The PR also changes the computation of ProjectFileFullPath to use the CPS method (UnconfiguredProject/PathHelper).MakeRooted
/cc @dotnet/project-system

Is this relevant now that we've decided to make transitive Project References instead of reusing package references?

This change is no longer needed. I'll repurpose to just contain the changes to the computation of ProjectFileFullPath to use the CPS method (UnconfiguredProject/PathHelper).MakeRooted

I've limited the scope of this PR to using CPS MakeRooted APIs, and changed the title accordingly


docs: days에 대한 설명이 date에 들어가있던 문제 수정

Overview
days에 들어갔어야하는 설명이 date에 있어서 위치를 변경했습니다.
PR Checklist

[x] I read and included theses actions below

I have read the Contributing Guide
I have written documents and tests, if needed.

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

Project coverage is 99.83%. Comparing base (90c9cd8) to head (cb2a2a9).

Additional details and impacted files

@@           Coverage Diff           @@
##             main     #234   +/-   ##
=======================================
  Coverage   99.83%   99.83%
=======================================
  Files          31       31
  Lines         600      600
  Branches      145      145
=======================================
  Hits          599      599
  Misses          1        1


Select region (option-drag on OSX)

In OSX TextEdit & TextMate, one can select a region of text using option + mouse drag.
Once in multi-line select mode, it works with normal cursor and selection range changes (e.g. move to start of line, select next word, etc), and selects by line offset (so e.g. if there are soft-wrapped lines and you select the first section of them, the wrapped portion is not selected). Typing, including deleting, also works as normal, but operating on every place the (multi-)cursor is.
In OSX Atom, option-drag does not work. However, it seems to have some way to get into this mode — if you do a regex find all on ^, you get a multicursor that sorta kinda works.
a) How can I have option-drag (both on OSX and other Atom platforms)?
b) How exactly does the multicursor mode work? What ways can it be invoked?
Here's a screencap comparison, since this is a bit hard to describe in text: https://youtu.be/uChevnNPY4k

You can find some answers to your questions on Discuss, the official Atom message board, in this topic. The easiest way to create multiple cursors is to Cmd+Click in multiple places.
Because we treat our issues list as the Atom team's backlog, we close issues that are questions since they don't represent a task needing to be completed. For most questions about Atom there are a lot of options, check out:

The Atom Flight Manual
The Atom FAQ on Discuss
Discuss, the official Atom and Electron message board
Join the Atom Slack team

On Discuss and in the Atom Slack team, there are a bunch of helpful community members that should be willing to point you in the right direction.

Creating multiple cursors is not the same thing as box select.

There are other topics there about box select as well.


Play button not displayed properly.

ℹ Computer information

Spotify version: <IP_ADDRESS>8.gda8cb5ac-a
Spicetify version: 2.5.0-itsmeow-patch4

📝 Provide detailed reproduction steps (if any)
just install theme in powershell as normal
✔ Expected result
The play button should be displayed normally
❌ Actual result
The play button is displayed as a round rectangle
📷 Screenshots

Why was this closed? It's clearly an issue that should be fixed. Not having a working pause button in non-English languages is a problem.

By the way, I can confirm this issue persists when using the Russian locale in Spotify. It seems to be a problem only with non-Latin alphabet languages, because changing the language to German doesn't reproduce the problem, while in Russian, Greek and Korean I experience the same issue.

This is a known issue, it's because styling for the play/pause buttons is reliant on the English aria-label
Salaron provided a fix but it doesn't seem to work for me, I'll try working a fix tonight


chore(deps): upgrade dependencies

Upgrades project dependencies. See details in workflow run.

Automatically created by projen via the "upgrade-main" workflow

Codecov Report

Merging #195 (33a145c) into main (2974dfe) will increase coverage by 9.55%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #195      +/-   ##
==========================================
+ Coverage   83.33%   92.88%   +9.55%
==========================================
  Files           2        2
  Lines         126      478     +352
  Branches       31       39       +8
==========================================
+ Hits          105      444     +339
- Misses         21       34      +13

Impacted Files
Coverage Δ

example/src/main.ts
95.65% <100.00%> (+7.19%)
:arrow_up:

src/index.ts
91.76% <100.00%> (+9.76%)
:arrow_up:

Continue to review full report at Codecov.

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


Need join function

Suggestion

⭐ Suggestion

I would like to use join function like other library lodash#join
💻 Use Cases

_.join(['a', 'b', 'c'], '~');
// => 'a~b~c'

simply use join after toArray
toArray(range(5)).join('-')
// 0-1-2-3-4

In this case, you can create join in one traversal
const join = (iter,sep =',') => _.reduce((acc, str)=> `${acc}${sep}${str}`, iter)])

it is merged ref https://github.com/marpple/FxTS/pull/15


Example Typescript + LC 39 - Hello World

[ ] There's no package.json and package-lock.json in the repo
[ ] Dockerfile is missing a step for typescript transpile
[ ] tsconfig should output transpiled app in dist directory
[ ] rename transpile script from typescript to build
[ ] name in package.json should be interpolated
[ ] repository field in package.json should be deleted
[ ] dockerfile should copy only dist from build-dir
[ ] index.ts should use CustomService type and avoid the usage of arrow functions
[ ] Let's check if it's a common practice to have tests in javascript in typescript repositories

[x]  name in package.json should be interpolated
Is this name "mia_template_service_name_placeholder" correct?

[ ]  Let's check if it's a common practice to have tests in javascript in typescript repositories
Tap doesn't seem to be portable to Typescript

[ ]  the repo is identified as JavaScript by GitHub in the repository list
Github assigns the language based on the max percentage of code in a certain language, should I force it to Typescript?

[ ]  dependabot should be configured to run CI and automerge of minor/patch updates
Dependabot only checks for updates on master, pull request needs to be merged

As for Typescript in tests we could use jest please check if it's feasible to convert current test suites to jest.
For Github displayed language, let's wait whether after tests updates it will recognise it as Typescript otherwise it's better to force it (it'd be bad to have a "Typescript Example" that's flagged as Javascript 😅
As for dependabot I've just configured to allow it to automerge its PRs so it should be alright, we have to wait until tomorrow for it to open new PRs


Link to the Elixir/Erlang compatibility page

Currently when a user encounters an incompatibility between the requested elixir and erlang versions it isn't clear how to figure out what the compatible versions are. This is the current error as shown to users:

Error: Requested Elixir / Erlang/OTP version (1.11.3 / 24.2) not found in version list (did you check Compatibility between Elixir and Erlang/OTP?)

Example failure: https://github.com/ScenicFramework/scenic/pull/318/checks
This PR adds a link to
https://hexdocs.pm/elixir/compatibility-and-deprecations.html so user's can easily see what versions are compatible.

Merged. Thanks, @axelson.

Released in v1.16.0 / v1.16. Tag v1 moved up...


Data Structure

On the roadmap for LCAx this year is updating the data structure.
Currently LCAx’s data structure is published in a beta version.
We did that with the intention to get it over the counter and into the wild, gathering feedback and comments.
We want to implement the changes that we have gotten to improve it according the community's feedback.

[ ] #36


Add tests for "Array macros".

Description
Add tests for "Array macros" at dbt-labs/dbt-spark#454.

Thanks! merging.


QA Suite - API Deployment

User Story - Business Need
The business need for this ticket is to enhance deployment stability and quality assurance by automatically triggering a comprehensive test suite (notification-api-qa repo regression.yml) whenever there is a deployment to the perf or staging environments in the notification-api repo. This ensures that any issues are immediately caught and rectified, maintaining the integrity and reliability of the deployed software.

[x] ticket is understood and discussed with QA

User Story(ies)
As a developer
I want the notification-api repo workflow deployment.yml to automatically trigger the notification-api-qa repo regression.yml suite whenever there is a deployment to perf or staging environments
So that every deployment is thoroughly tested, and any issues are caught and reported immediately.
Additional Info and Resources
This requirement excludes pre-release and DOES NOT include when tag creation triggers a deployment to perf. However, no additional configuration is likely necessary in this situation since the tag_trigger.yml already states:
  run-deployment:
    needs: [setup-env, run-build]
    uses: ./.github/workflows/deployment.yml
    with:
      environment: "perf"
      ref: "${{ needs.setup-env.outputs.git-tag }}"
    secrets: inherit

Still, it should include a branch option for input, but default to master. The trigger is notification-api will instruct the QA suite to run its action.
Engineering Checklist

[x] Confirm that all QA suite actions are running smoothly before setting up repo-to-repo action communication
[x] Determine the best way for setting up repo-to-repo action communication.
~- [ ] (Personally I prefer dispatch with a Github Token in the notification-api repo should work, setting up the GITHUB_TOKEN to a specific value in a step)~
~- [ ] Github Deploy Keys are another option~
[ ] Configure notification-api to trigger notification-api-qa regression.yml suite on deployment to perf or staging
~- [ ] Make deploy to perf and staging mandatory on master branch~
[ ] QA has confirmed the above configuration meets team needs

Acceptance Criteria

When the deployment is pushed to perf or staging, the notification-api-qa regression suite should automatically be triggered and be able to run successfully.

QA Considerations
QA will need to verify that the QA suite runs successfully whenever there is a deployment to perf or staging.
Potential Dependencies

This depends on all QA suite actions running smoothly before attempting to call these actions from the notification-api repo.

Out of Scope

The deployment to dev environment should not be impacted by these changes and does not have to be on the master branch.
Any changes in the Workflow process upon test failure.
Do no work to trigger the regression on a tag push to perf or on a pre-release.

Hey team! Please add your planning poker estimate with Zenhub @cris-oddball @EvanParish @justaskdavidb2 @k-macmillan @kalbfled @ldraney @nikolai-efimov

Discussed a few things with Lucas.

deploy keys may not work, it will be ugly, it's not designed for this
setting access to the repo as described here and here is not possible, since the QA repo is internal and the API repo is public

Lucas will investigate cloning the QA repo into a GitHub runner and running the tests against the public endpoints (private are covered in the nighly regressions) with --platform local.  If the output ends up being truncated, will look into the self-hosted runner (the QA ec2) and back to testing the private endpoints)

Added public key to deploy keys and private key to repository secrets in notification-api repo .
Lucas to figure it out from here.

deploy keys are not intended to be used how we need.  Rather, it should be  with the intended path for sharing actions and worfklows within an organization, but we don't have that option because our public notification-api repo can't use the workflow in the notification-api-qa.  another relevant doc
Cris suggested a better naming convention, and then essentially copying regression.yml to the notificaiton-api repo and just pull down the latest version of master.  I think that's the cleanest option we have at this point.  Ticket is still in a three I'd say if I can create a solution by EOD Friday.

new tagging strategy works
Private Zenhub Image

Within the qa repository, on the 1326qa branch, we've implemented an update to our CI/CD pipeline. Now, whenever a commit is made to the master branch, our build system will automatically generate a Docker image and tag it as master. This approach ensures that any Docker image with the master tag will always represent the most recent commit from the master branch. As a result, we can guarantee that the master tag consistently points to the latest stable version of our software.

next step should simply be to pull and run the image in the new workflow I'm writing for notification-api.
It will only run against the public endpoints, which is sufficient since we now have a nightly regression test of the private endpoints.

I need to determine our strategy for getting the .env file onto the runner.
This command is not secure running :
          aws ssm get-parameter --name /notification-api-qa/env --with-decryption | jq '.Parameter.Value' -r > .env

I propose

wantd to add one more picture of how the tagging is working so we can feel good about it:  If you have questions then please message me for a hangout!
Private Zenhub Image

Increased points to 5. @ldraney to add more complexity details.

Summary of increased complexity:

The deploy-keys are not meant for our use case
Docker tagging is a better option, but the two complexities are 1: the tagging itself and 2: running the suit via the action runner.

The tagging is working as expected.
The runner is almost there, seems that it will run with a few tweaks to the script.
Then test the whole thing together.

Both API and QA PRs were merged to master, but the QA repo is failing on the Build & Push action on that merge.
API master has been tagged for this code change but not pushed to Perf yet because of the above build failure.

Moving back to DEV lane.
@ldraney please walk me through your new hotfix as soon as possible. The nightly failed last night because of the build issue.
Also, please check off your checklist in the description.

Significant refactor of both the work in notification-api and notification-api-qa repos.
Code approved and merged.
Tagged and deployed to Perf.
This was tested by running the workflow from the branch against master and in perf against the public endpoints.
Something to note is that because we made the decision to run the regression container in the GitHub runner VM that the first set of tests failed due to a timeout to our public API endpoints from the GitHub network. This may become an issue for us and needs to be revisited when I return from vacation on the 28th.
If instead we used the self-hosted runner to load the container onto the EC2 then the regression would run against the private endpoints and be less likely to timeout due to whatever network latency exists between GitHub and our ALB.
Lucas will discuss this with Kyle when he gets back/while I'm away.
Closing ticket.


App Detail UI - Logs

As titled, check on latest figma
Add the handling of endpoint pause/resume logs

Missing the handling of endpoint pause/resume logs
Missing a <hr on top and on bottom that intesect the client and start to follow the bottom of the logs


Cannot reduce select with form-control-sm

Prerequisites

[X] I have searched for duplicate or closed issues
[X] I have validated any HTML to avoid common problems
[X] I have read the contributing guidelines

Describe the issue
A select tag cannot be made smaller with the form-control-sm class, when used in conjunction with form-select.
The reason is form-select overrides the rules in form-control-sm.
Reduced test cases
From docs, but with addition of form-control-sm:

  Test

    <select id="test" class="form-select form-control-sm">
      <option></option>
      <option>Foo</option>
      <option>Bar</option>
      <option>Baz</option>
    </select>

What operating system(s) are you seeing the problem on?
Linux
What browser(s) are you seeing the problem on?
Firefox
What version of Bootstrap are you using?
5.1.3
Workaround
Manually apply rules (from form-control-sm) to the select:
padding: .25rem .5rem;
font-size: .875rem;
border-radius: .2rem;

https://getbootstrap.com/docs/5.2/forms/select/#sizing

Awesome... new version! Thank you! :smile:


Is it possible to increase a README character limit?

Crate name
tabled
Build failure link
https://docs.rs/crate/tabled/latest
Requested RAM limit
No response
Requested timeout
No response
Requested number of targets
No response
Why your crate needs the resource increases
Hi there,
Yes....
I guess someone need to redo the README but is it possible to increase the limit?
Take care.

I think we should consider just removing the limit; I don't know why it was added in the first place, but we don't limit the size of the pages rustdoc generates, so I don't know why we'd limit readmes either.

There is a limit on rustdoc pages too, it's just (at least by default) a lot more lenient
https://github.com/rust-lang/docs.rs/blob/b5451e0f4df0491b50d24932c585b0771a595a1f/src/config.rs#L133-L134
I think the problem is the readme is stored in the database instead of being sourced from S3. I remember some discussion on storing the source archive even when the build fails but can't find the issue (related to https://github.com/rust-lang/docs.rs/issues/1011 though), once we have that then I think we can change to rendering from the source file instead of the database column which will implicitly remove the length restriction.

(We could change to going to S3 when the source archive is available now, though that wouldn't help in this case because the build also failed).

We upload the source archive even when the build fails, that shouldn't impact anything. I agree that's a good solution and would let us use the same limit for the readme as everything else (and as a bonus make the database a lot smaller).

Ah yeah, that explains why I couldn't find the issue, it was already closed https://github.com/rust-lang/docs.rs/issues/607. We'll still need to read the database as a backup for crates that built before that was fixed until the mass rebuild.


Substitution-like strings in keys are parsed incorrectly

According to the HOCON spec:

Substitutions are not parsed inside quoted strings.

Expected behavior
iex> :hocon.binary(~s|"${.x}" = 1|)
{:ok, %{"${.x}" => 1}}

Actual behavior
iex> :hocon.binary(~s|"${.x}" = 1|)
{:ok, %{"${" => %{"x}" => 1}}}

Substitutions are only allowed in field values and array elements (value concatenations), they are not allowed in keys or nested inside other substitutions (path expressions).

Substitutions are only allowed in field values and array elements (value concatenations), they are not allowed in keys or nested inside other substitutions (path expressions).

Sure, that's another reason why it should have parsed the key as a single string.  I'm not trying to do substitution here in this example.


No option to disable download options

I went through the docs but I did not find a way through which I can disable the download option for every type of file. Right now anyone has to look for the CSS class and add display: none. But it has to be done for every type of file.
This CSS method does not work with Word and PowerPoint documents. So as of now, I have not found any workaround for these types of files.

I don't think that this lib has control over it...
 react_1.default.createElement(IFrame, { id: "msdoc-iframe", title: "msdoc-iframe", src: "https://view.officeapps.live.com/op/embed.aspx?src=".concat(encodeURIComponent(currentDocument.uri)),

@ashishsah1000 No. This lib hasn't control over it.


Make the sigv4 signer thread safe

This includes making it thread safe for clients and operation objects. Also removed the locking for signing in operation objects since it is not needed anymore.
To do this, I removed the shared utcnow() state and added a context attribute to AWSRequest where a timestamp can be assigned when doing the signing. The timestamp attached to the request is set every time at the beginning of add_auth and other sigv4 signing helper functions then rely on the request's timestamp, that was set at the very beginning of the signing process.
I ran the integration tests for botocore and the CLI to make sure nothing is affected. I also uploaded/downloaded a couple of gigabytes to my eu-central-1 s3 bucket using the s3 commands to further ensure nothing was affected.
Fixes https://github.com/boto/botocore/issues/468
cc @jamesls @danielgtaylor

Coverage increased (+0.04%) to 94.54% when pulling df23064cffea1a20ccf948493ed1e3cd4730eb11 on kyleknap:sigv4-clients into 65e0bce2532ceaf5c41f0157c72269f1b33f329c on boto:develop.

@jamesls I re-added the lock as you pointed out. Is ready to get looked at once Travis is available  to test again.

:shipit: Thanks.

:shipit:

@danielgtaylor I made changes based on your feedback.

LGTM, thanks! :ship:-it!


[Bug Report]: Update Microsoft.Web/sites API version

Describe the bug
Microsoft.Web/sites is failing on static validation due to outdated API versions for several child resources.
To reproduce
Rerun Microsoft.Web/sites pipeline and verify the static validation logs
Code snippet
No response
Relevant log output
No response

@krbar / @AlexanderSehr - Should this issue now be closed with the completion of #2526


Generate excelsheet from ontology.

Issue to respond to query from Georg Schmitz++.
They ask for a cleaned excel-sheet whitout the errors when using create_from_excel.
I am not sure we really want this, should be discussed.

I think that we should not have such an excel-sheet creation at the present moment and close this issue for now. #PR396 provides output that gives this possibilty quite easily for the user and it seems that Georg ++ are happy with that solution. We can make a new issue or reopen it if the need materialises again.


Add Drupal-with-Solr 5 example.

As discussed in https://github.com/drud/ddev/pull/2785.

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

Thanks, @rfay. I think this is ready for review.

Please add an entry in the top-level README, thanks.

Link added.

Thanks again @rfay and @mikemiles86.

Thank to you!


bugfix-change resetToHandle to resetToItemHandle for issues#65

change resetToHandle to resetToItemHandle in file FixedSizeArray.h

Hi @zzerroo!
Thank you for your pull request and welcome to our community.
Action Required
In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.
Process
In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.
Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.
If you have received this in error or have any questions, please contact us at<EMAIL_ADDRESS>Thanks!


Use SetHandler fixing mod_rewrite and DirectoryIndex issues

Adding the PR for travis as well as further review and discussion.

[x] Both dashboard index.html and php_info.php work.
[x] Default Drupal installation works
Status reports only complaint is that trusted hosts settings is disabled.
[x] Ensure index.html files are used as DirectoryIndex #617
Added Zen and http://drupalvm.dev/themes/contrib/zen/STARTERKIT/styleguide/ displays index.html
[x] Fix: Drupal core redirects fail on fresh installation #1055

curl -I http://drupalvm.dev/install.php
HTTP/1.1 301 Moved Permanently

[x] Drupal 8 not recognizing clean url support #945
Adding install_site: false and running the installation through /install.php adds the rewrite=ok GET parameter.

Bedtime, I'll test it more thoroughly tomorrow.

@geerlingguy any other scenarios that should be tested? All those issues are now fixed with this PR.

P.S. We're running out of bug/feature issues 👍

Haha, nice!

@oxyc - Does this fix the index.html index for Nginx as well?

Probably not, I thought that nginx worked. I'll provision an nginx box and test it.

Nginx:

[ ] /install.php redirects to core/install.php
Does not work. You have to visit core/install.php yourself
[ ] rewrite=ok parameter wasn't added during the install step, but the installation didn't complain about URL rewriting either?
[x] no complaints from Status report
[ ] Both dashboard index.html and php_info.php work.
Erm, the php file didn't work. It was just downloaded. We've forgotten to add the is_php attribute on the nginx vhost. If we add it, index.html is not shown though.
[ ] http://drupalvm.dev/themes/contrib/zen/STARTERKIT/styleguide/ displays index.html
Nope

@geerlingguy should we add https://github.com/drupal/drupal/blob/8.3.x/.htaccess#L126 to nginx as well?
One key difference here is that on Apache, you cannot access random php files outside of core/. On nginx you can due to this redirect not existing.

@oxyc - I would... just because I have had a few people ask my why "install.php" doesn't work (a lot of old scripts/assumptions still use it there and 'just work' in D8 because of that silly redirect :P

This is how I would translate the apache rewrite to nginx.
Apache:
  RewriteCond %{REQUEST_URI} ^(.*)?/(install.php) [OR]
  RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild.php)
  RewriteCond %{REQUEST_URI} !core
  RewriteRule ^ %1/core/%2 [L,QSA,R=301]

nginx:
    # Redirect common PHP files to their new locations.
    location ~ ^((?!.*(?:core)).*)/(install.php|rebuild.php) {
         return 301 $scheme://$host$2/core/$1;
    }

# drupalvm.dev/install.php -> drupalvm.dev/core/install.php
# drupalvm.dev/foo/install.php -> drupalvm.dev/foo/core/install.php

The problem is we only need this for the drupal vhost, and we need it before passing the file on to fastcgi. extra_parameters doesn't work as it's after the fastcgi rule.

This still doesn't add the security measurements the htaccess does. https://github.com/drupal/drupal/blob/8.3.x/.htaccess#L141:L155

@oxyc - Yeah... and I don't think we can solve that problem (Drupal community applying security through regex in htaccess files) easily in this PR :)
So I'm okay if a few edge cases aren't working.

Otherwise... this looks awesome, and is a great improvement. For some users on really old Ubuntu 12 configurations or still using CentOS 6, this might be the straw that breaks the camel's back—but they can still use the old ProxyPassMatch method (if they desire) by overriding the new var.
Also, existing configs overriding the Vhosts should still work correctly after this merge, so no reason to do a major version bump. It's something that people can take their time to upgrade to (if they need to).

So... how many issues did this fix?

https://github.com/geerlingguy/drupal-vm/issues/617
https://github.com/geerlingguy/drupal-vm/issues/876
https://github.com/geerlingguy/drupal-vm/issues/1055


README: Update Compatibility matrix (Line 302)

Change 'Bird' to 'Bird2'. Bird version < 2 does not support connecting to ROA
cert publishers. (E.g. gortr, routinator, etc.)

Thank you!


Cannot use "attach" in an afterEach hook

Current behavior
I am trying to attach screenshots and logs for the Cucumber report, but it fails in the afterEach hook:

  cypress-cucumber-preprocessor testStepStartedHandler() +48ms
  cypress-cucumber-preprocessor afterScreenshotHandler() +2s
    1) An admin can open up the new program form
  cypress-cucumber-preprocessor testStepFinishedHandler() +10ms
  cypress-cucumber-preprocessor testCaseFinishedHandler() +2ms
  cypress-cucumber-preprocessor createStringAttachmentHandler() +57ms
  cypress-cucumber-preprocessor afterScreenshotHandler() +130ms
    2) "after each" hook for "An admin can open up the new program form"
cypress-terminal-report: Wrote custom logs to logs. (2ms)

  0 passing (5s)
  2 failing

  1) Admin index page
       An admin can open up the new program form:
     AssertionError: Timed out retrying after 2000ms: Expected to find content: 'Program Names' but never did.
      at Context.eval (../../e2e/step_definitions/page_steps/common.page.steps.js:193:22)
      at Registry.runStepDefininition (../../../node_modules/@badeball/cypress-cucumber-preprocessor/dist/registry.js:136:0)
      at Object.fn (../../../node_modules/@badeball/cypress-cucumber-preprocessor/dist/browser-runtime.js:348:0)
      at runStepWithLogGroup (../../../node_modules/@badeball/cypress-cucumber-preprocessor/dist/helpers/cypress.js:51:0)
      at Context.eval (../../../node_modules/@badeball/cypress-cucumber-preprocessor/dist/browser-runtime.js:344:0)

  2) Admin index page
       "after each" hook for "An admin can open up the new program form":
     CypressError: `cy.task('cypress-cucumber-preprocessor:create-string-attachment')` failed with the following error:

> Unexpected state in createStringAttachmentHandler: test-finished (this might be a bug, please report at https://github.com/badeball/cypress-cucumber-preprocessor)

https://on.cypress.io/api/task

Because this error occurred during a `after each` hook we are skipping all of the remaining tests.
      at <unknown> (https:/<removed>.comm/__cypress/runner/cypress_runner.js:150983:78)
      at tryCatcher (https:/<removed>.comm/__cypress/runner/cypress_runner.js:18744:23)
      at Promise._settlePromiseFromHandler (https:/<removed>.comm/__cypress/runner/cypress_runner.js:16679:31)
      at Promise._settlePromise (https:/<removed>.comm/__cypress/runner/cypress_runner.js:16736:18)
      at Promise._settlePromise0 (https:/<removed>.comm/__cypress/runner/cypress_runner.js:16781:10)
      at Promise._settlePromises (https:/<removed>.comm/__cypress/runner/cypress_runner.js:16857:18)
      at _drainQueueStep (https:/<removed>.comm/__cypress/runner/cypress_runner.js:13451:12)
      at _drainQueue (https:/<removed>.comm/__cypress/runner/cypress_runner.js:13444:9)
      at ../../node_modules/bluebird/js/release/async.js.Async._drainQueues (https:/<removed>.comm/__cypress/runner/cypress_runner.js:13460:5)
      at Async.drainQueues (https:/<removed>.comm/__cypress/runner/cypress_runner.js:13330:14)
  From Your Spec Code:
      at createStringAttachment (../../../node_modules/@badeball/cypress-cucumber-preprocessor/dist/entrypoint-browser.js:92:0)
      at attach (../../../node_modules/@badeball/cypress-cucumber-preprocessor/dist/entrypoint-browser.js:101:0)
      at Context.eval (../../e2e/step_definitions/_setup/hooks.js:39:8)

  From Node.js Internals:
    Error: Unexpected state in createStringAttachmentHandler: test-finished (this might be a bug, please report at https://github.com/badeball/cypress-cucumber-preprocessor)
        at createError (~/<cypress_project>/node_modules/@badeball/cypress-cucumber-preprocessor/dist/helpers/error.js:9:12)
        at createStringAttachmentHandler (~/<cypress_project>/node_modules/@badeball/cypress-cucumber-preprocessor/dist/plugin-event-handlers.js:434:43)
        at processTicksAndRejections (node:internal/process/task_queues:95:5)

  cypress-cucumber-preprocessor afterSpecHandler() +81ms
  Hook failures can't be represented in messages / JSON reports, thus none is created for cypress/e2e/common/admin/index.page.feature.

Desired behavior
Attachments using attach should be allowed to occur in the afterEach hook, even if the test has completed.
Test code to reproduce
//hooks.js
const {attach} = require("@badeball/cypress-cucumber-preprocessor");

afterEach(function () {
  attach({message: 'hello there'}, `application/json`);
});

//You can also try this, which attaches on test failure
afterEach(function () {
  if (this.currentTest?.state === "failed") {
    attach({message: 'error'}, `application/json`);
  }
});

Versions

Cypress version: 12.12.0
Preprocessor version: 18.0.1
Node version: 18.16.0

Checklist

[X] I've read the FAQ.
[X] I've read instructions for logging issues.
[X] I'm not using<EMAIL_ADDRESS>(package name has changed and it is no longer the most recent version, see #689).

As per now, this is unfortunately intended behavior. Attachments is a Cucumber-term that must be associated with a step and afterEach hooks aren't part of any steps. What is your use-case here, spesifically?

For the way our tests run through Jenkins CI/CD, we can only have one instance of a workspace available for the newest job run. In this workspace, I can see any screenshots collected by Cypress for failed tests, but as soon as a new job begins, those are wiped out.
By attaching these screenshots and additional log files to the scenario in Cucumber report, I'll have a constant history of what failed since those reports could be retained in Jenkins for a longer time. I've used other reporting tools for non-Cypress projects and we're able to add attachments post-scenario. I know this isn't the case for Cypress, but it feels like there is a discrepancy.
Cucumber messages are appended linearly. While the scenario may have ended, the afterEach hook allows me to attach a screenshot which will appear for the last step in that scenario; when the next scenario begins, it's ok that I don't have access to the previous scenario since it finished and a new one began. But using the afterEach hook comes directly after the testCaseFinished message completes, so I know I will still have access to attachments in the scenario. I did test this by editing the preprocessor to skip that error, and I saw an attachment added to the last step in the scenario.

Screenshots of failed tests are automatically added to reports, as well as the error causing the test to fail. What else is there to add?

@MDG-JHowley, does calling attach in the fail-handler actually work and generate correct result? Generally speaking, you can't invoke any commands in such handlers, which attach does under the hood.

It seems like this is related similarly to #824, for which I reported the behavior of how Cucumber-js handles it. The same behavior exists for attachments in an After hook where it is possible to add them to a scenario as soon as it finishes. In this case, I'm using a Mocha hook rather than the Cucumber hook due to the above limitation.
I understand this limitation, but this isn't the XY problem since the behavior of the preprocessor differs from the official Cucumber implementation; however, due to the issue with running After hooks on failures described in issue 824, this can be closed out as it seems that neither attempt will be accessible.

@MDG-JHowley, does calling attach in the fail-handler actually work and generate correct result? Generally speaking, you can't invoke any commands in such handlers, which attach does under the hood.

Seems to work fine.  I mean I'm actively using it to embed links to screenshots, videos and logs to cucumber reports.
Incidentally I had some issues with the screenshots because you are embedding the image inline and in my workflow I need to upload the cucumber JSON file to a 3rd party service so this makes the filesize a bit large (the screenshots/videos are upload to hosted storage separately anyway).  If it were possible to use attach in a node context if would be much simpler but your plugin doesn't support that.  Instead I am using omitAfterScreenshotHandler in the plugin options and just working out the local file path.


How to trigger an upgrade

Hi, it would be good for the doco to show how to trigger an upgrade as it's not mentioned from what I can tell. Personally I go find the latest client and run that installer, but this isn't clear if that's the right way or if there's a PowerShell command to trigger it.

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

ID: cf9169c8-ec81-9342-c93e-963647d70c6c
Version Independent ID: 0ea93b27-477a-84e5-3d93-6707f5b9cb88
Content: Azure AD Connect: Upgrade from a previous version
Content Source: articles/active-directory/hybrid/how-to-upgrade-previous-version.md
Service: active-directory
GitHub Login: @billmath
Microsoft Alias: billmath

@adamfowlerit
Thanks for your feedback! We will investigate and update as appropriate.

You can use Set-ADSyncAutoUpgrade
https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-install-automatic-upgrade
That article is linked in the table and the different strategies are listed there.  CC: @billmath

We will now proceed to close this thread. If you have further questions please feel free to tag me in the comments and I will gladly continue the conversation.

@MarileeTurscak-MSFT What about triggering the upgrade when auto-upgrade is not an option? I'm preparing to upgrade to <IP_ADDRESS>, which says Not available for auto-upgrade on Version Release History page. So I have to do an in-place upgrade, and to @adamfowlerit 's point this article doesn't instruct on doing so.


Cow: Watch +18296400890

Cow requests the watch of the watch_number +18296400890. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

Approved by Jeff Schaller in Charcoal HQ