polysemy-plugin in polysemy

This is a WIP to allow using polysemy-plugin when writing polysemy proper.

Everything works, except that the inlineRecursiveCalls todo doesn't produce code amenable for optimizing away for interpretInStateT. I'm not sure why --- it's getting called:
[12 of 23] Compiling Polysemy.Internal.Combinators ( src/Polysemy/Internal/Combinators.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-<IP_ADDRESS>/build/Polysemy/Internal/Combinators.o )
FORCED OPTIMIZE
  [Core plugin:  Inline Recursive Calls, Simplifier, Specialise,
   Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False}),
   Simplifier, Simplifier, Simplifier, Float inwards,
   Called arity analysis, Simplifier, Demand analysis,
   Worker Wrapper binds, Simplifier, Exitification transformation,
   Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = True}),
   Common sub-expression, Float inwards, Simplifier, Demand analysis]
loop breaker for
  interpretInStateT
  interpretInStateT_JsUs
loop breaker for
  interpretInLazyStateT
  interpretInLazyStateT_JsUt
loop breaker for
  interpretH
  interpretH_JsUu
loop breaker for
  reinterpretH
  reinterpretH_JsUv
loop breaker for
  reinterpret2H
  reinterpret2H_JsUw
loop breaker for
  reinterpret3H
  reinterpret3H_JsUx

Printing out the binding group is more informative:
loop breaker for
  interpretInStateT [InlPrag=INLINE, Occ=LoopBreaker]
    :: forall (e :: (* -> *) -> * -> *) s (r :: [(* -> *)
                                                 -> * -> *]) a.
       (forall x (m :: * -> *). e m x -> StateT s (Sem r) x)
       -> s -> Sem (e : r) a -> Sem r (s, a)
  [LclId,
   Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True,
           WorkFree=True, Expandable=True,
           Guidance=ALWAYS_IF(arity=3,unsat_ok=False,boring_ok=False)
           Tmpl= \ (@ (e_ac11 :: (* -> *) -> * -> *))
                   (@ s_ac12)
                   (@ (r_ac13 :: [(* -> *) -> * -> *]))
                   (@ a_ac14)
                   (f_abuH [Occ=OnceL*]
                      :: forall x (m :: * -> *).
                         e_ac11 m x -> StateT s_ac12 (Sem r_ac13) x)
                   (s_abuI [Occ=OnceL] :: s_ac12)
                   (ds_dclc [Occ=OnceL] :: Sem (e_ac11 : r_ac13) a_ac14) ->
                   $ @ 'LiftedRep
                     @ (forall (m :: * -> *).
                        Monad m =>
                        (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                        -> m (s_ac12, a_ac14))
                     @ (Sem r_ac13 (s_ac12, a_ac14))
                     (\ (v_B1 [Occ=Once, OS=OneShot]
                           :: forall (m :: * -> *).
                              Monad m =>
                              (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                              -> m (s_ac12, a_ac14)) ->
                        v_B1
                        `cast` (Sym (N:Sem[0] <r_ac13>_N <(s_ac12, a_ac14)>_N)
                                :: (forall (m :: * -> *).
                                    Monad m =>
                                    (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                                    -> m (s_ac12, a_ac14))
                                   ~R# Sem r_ac13 (s_ac12, a_ac14)))
                     (\ (@ (m_ac1b :: * -> *)) ($dMonad_ac1c :: Monad m_ac1b) ->
                        let {
                          $dMonad_ac1E [Occ=OnceL] :: Monad (StateT s_ac12 m_ac1b)
                          [LclId]
                          $dMonad_ac1E = $fMonadStateT @ m_ac1b @ s_ac12 $dMonad_ac1c } in
                        let {
                          $dApplicative_acal [Occ=OnceL] :: Applicative m_ac1b
                          [LclId]
                          $dApplicative_acal = $p1Monad @ m_ac1b $dMonad_ac1c } in
                        let {
                          $dFunctor_acam :: Functor m_ac1b
                          [LclId]
                          $dFunctor_acam = $p1Applicative @ m_ac1b $dApplicative_acal } in
                        \ (k_abuK [Occ=OnceL*]
                             :: forall x.
                                     Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x
                                     -> StateT s_ac12 m_ac1b x)
                                  @ (StateT s_ac12 m_ac1b a_ac14)
                                  ((ds_dclc
                                    `cast` (N:Sem[0] <e_ac11 : r_ac13>_N <a_ac14>_N
                                            :: Sem (e_ac11 : r_ac13) a_ac14
                                               ~R# (forall (m :: * -> *).
                                                    Monad m =>
                                                    (forall x.
                                                     Union
                                                       (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x
                                                     -> m x)
                                                    -> m a_ac14)))
                                     @ (StateT s_ac12 m_ac1b) $dMonad_ac1E)
                                  (\ (@ x_ac1G)
                                     (u_abuL [Occ=Once]
                                        :: Union
                                             (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x_ac1G) ->
                                     case decomp
                                            @ e_ac11
                                            @ r_ac13
                                            @ (Sem (e_ac11 : r_ac13))
                                            @ x_ac1G
                                            u_abuL
                                     of {
                                       Left x_abuM [Occ=OnceL] ->
                                         $ @ 'LiftedRep
                                           @ (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                           @ (StateT s_ac12 m_ac1b x_ac1G)
                                           (\ (v_B1 [Occ=Once, OS=OneShot]
                                                 :: s_ac12 -> m_ac1b (x_ac1G, s_ac12)) ->
                                              v_B1
                                              `cast` (Sym (N:StateT[0]
                                                               <s_ac12>_N <m_ac1b>_R <x_ac1G>_N)
                                                      :: (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                                         ~R# StateT s_ac12 m_ac1b x_ac1G))
                                           (\ (s'_abuN [Occ=Once] :: s_ac12) ->
                                              $ @ 'LiftedRep
                                                @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                                @ (m_ac1b (x_ac1G, s_ac12))
                                                (. @ (Union r_ac13 (Sem r_ac13) (x_ac1G, s_ac12))
                                                   @ (m_ac1b (x_ac1G, s_ac12))
                                                   @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                                   (k_abuK @ (x_ac1G, s_ac12))
                                                   (.
             Monad m =>
             (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
             -> m (s_ac12, a_ac14))
          @ (Sem r_ac13 (s_ac12, a_ac14))
          (\ (v_B1
                :: forall (m :: * -> *).
                   Monad m =>
                   (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                   -> m (s_ac12, a_ac14)) ->
             v_B1
             `cast` (Sym (N:Sem[0] <r_ac13>_N <(s_ac12, a_ac14)>_N)
                     :: (forall (m :: * -> *).
                         Monad m =>
                         (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                         -> m (s_ac12, a_ac14))
                        ~R# Sem r_ac13 (s_ac12, a_ac14)))
          (\ (@ (m_ac1b :: * -> *)) ($dMonad_ac1c :: Monad m_ac1b) ->
             let {
               $dMonad_ac1E :: Monad (StateT s_ac12 m_ac1b)
               [LclId]
               $dMonad_ac1E = $fMonadStateT @ m_ac1b @ s_ac12 $dMonad_ac1c } in
             let {
               $dApplicative_acal :: Applicative m_ac1b
               [LclId]
               $dApplicative_acal = $p1Monad @ m_ac1b $dMonad_ac1c } in
             let {
               $dFunctor_acam :: Functor m_ac1b
               [LclId]
               $dFunctor_acam = $p1Applicative @ m_ac1b $dApplicative_acal } in
             \ (k_abuK :: forall x.
                          Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x
                          -> StateT s_ac12 m_ac1b x)
                       @ (StateT s_ac12 m_ac1b a_ac14)
                       ((ds_dclc
                         `cast` (N:Sem[0] <e_ac11 : r_ac13>_N <a_ac14>_N
                                 :: Sem (e_ac11 : r_ac13) a_ac14
                                    ~R# (forall (m :: * -> *).
                                         Monad m =>
                                         (forall x.
                                          Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x -> m x)
                                         -> m a_ac14)))
                          @ (StateT s_ac12 m_ac1b) $dMonad_ac1E)
                       (\ (@ x_ac1G)
                          (u_abuL
                             :: Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x_ac1G) ->
                          case decomp
                                 @ e_ac11 @ r_ac13 @ (Sem (e_ac11 : r_ac13)) @ x_ac1G u_abuL
                          of {
                            Left x_abuM ->
                              $ @ 'LiftedRep
                                @ (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                @ (StateT s_ac12 m_ac1b x_ac1G)
                                (\ (v_B1 :: s_ac12 -> m_ac1b (x_ac1G, s_ac12)) ->
                                   v_B1
                                   `cast` (Sym (N:StateT[0] <s_ac12>_N <m_ac1b>_R <x_ac1G>_N)
                                           :: (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                              ~R# StateT s_ac12 m_ac1b x_ac1G))
                                (\ (s'_abuN :: s_ac12) ->
                                   $ @ 'LiftedRep
                                     @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                     @ (m_ac1b (x_ac1G, s_ac12))
                                     (. @ (Union r_ac13 (Sem r_ac13) (x_ac1G, s_ac12))
                                        @ (m_ac1b (x_ac1G, s_ac12))
                                        @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                        (k_abuK @ (x_ac1G, s_ac12))
                                        (.

Here is the core for the manually loop-broken interpretInStateT:

Rec {
-- RHS size: {terms: 1, types: 0, coercions: 62, joins: 0/0}
interpretInStateT [InlPrag=INLINE (sat-args=3)]
  :: forall (e :: (* -> *) -> * -> *) s (r :: [(* -> *)
                                               -> * -> *]) a.
     (forall x (m :: * -> *). e m x -> S.StateT s (Sem r) x)
     -> s -> Sem (e : r) a -> Sem r (s, a)
[GblId,
 Arity=5,
 Caf=NoCafRefs,
 Str=<L,C(C(C1(C1(U))))><L,U><L,1*C1(C1(U))><S(S(S(C(C(S))L)LLLLL)LLLL),U(U(U(U,U),U,U,U,U,U),U,U,U,U)><L,U>,
 Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True,
         WorkFree=True, Expandable=True,
         Guidance=ALWAYS_IF(arity=3,unsat_ok=False,boring_ok=False)

interpretInStateT
  = interpretInStateT1_rtRO
    `cast` (forall (e :: <(* -> *)
                          -> * -> *>_N) (s :: <*>_N) (r :: <[(* -> *)
                                                             -> * -> *]>_N) (a :: <*>_N).
            <forall x (m :: * -> *). e m x -> S.StateT s (Sem r) x>_R
            ->_R <s>_R
            ->_R <Sem (e : r) a>_R
            ->_R Sym (Polysemy.Internal.N:Sem[0] <r>_N <(s, a)>_N)
            :: (forall (e :: (* -> *) -> * -> *) s (r :: [(* -> *)
                                                          -> * -> *]) a.
                (forall x (m :: * -> *). e m x -> S.StateT s (Sem r) x)
                -> s
                -> Sem (e : r) a
                -> forall (m :: * -> *).
                   Monad m =>
                   (forall x. Union r (Sem r) x -> m x) -> m (s, a))
               ~R# (forall (e :: (* -> *) -> * -> *) s (r :: [(* -> *)
                                                              -> * -> *]) a.
                    (forall x (m :: * -> *). e m x -> S.StateT s (Sem r) x)
                    -> s -> Sem (e : r) a -> Sem r (s, a)))

-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
interpretInStateT_b [InlPrag=NOINLINE, Occ=LoopBreaker]
  :: forall (e :: (* -> *) -> * -> *) s (r :: [(* -> *)
                                               -> * -> *]) a.
     (forall x (m :: * -> *). e m x -> S.StateT s (Sem r) x)
     -> s -> Sem (e : r) a -> Sem r (s, a)
[GblId,
 Arity=5,
 Caf=NoCafRefs,
 Str=<L,C(C(C1(C1(U))))><L,U><L,1*C1(C1(U))><S(S(S(C(C(S))L)LLLLL)LLLL),U(U(U(U,U),U,U,U,U,U),U,U,U,U)><L,U>,
 Unf=OtherCon []]
interpretInStateT_b = interpretInStateT

Okay, so I think interpretInStateT gets marked as a loop breaker because of one of:

[ ] We are marking its loopbreaker with NOUSERINLINE, which should instead be NOINLINE. This is because neverInlinePragma doesn't set NOINLINE for some bizarre reason.
[ ] We are not clearing the occ info on interpretInStateT
[ ] The unfolding template for interpretInStateT is still recursive.

Clearing the occ info and explicit setting IsLoopBreaker on the loop breaker ALSO doesn't work:
  interpretInStateT [InlPrag=INLINE]
    :: forall (e :: (* -> *) -> * -> *) s (r :: [(* -> *)
                                                 -> * -> *]) a.
       (forall x (m :: * -> *). e m x -> StateT s (Sem r) x)
       -> s -> Sem (e : r) a -> Sem r (s, a)
  [LclId,
   Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True,
           WorkFree=True, Expandable=True,
           Guidance=ALWAYS_IF(arity=3,unsat_ok=False,boring_ok=False)
           Tmpl= \ (@ (e_ac11 :: (* -> *) -> * -> *))
                   (@ s_ac12)
                   (@ (r_ac13 :: [(* -> *) -> * -> *]))
                   (@ a_ac14)
                   (f_abuH [Occ=OnceL*]
                      :: forall x (m :: * -> *).
                         e_ac11 m x -> StateT s_ac12 (Sem r_ac13) x)
                   (s_abuI [Occ=OnceL] :: s_ac12)
                   (ds_dclc [Occ=OnceL] :: Sem (e_ac11 : r_ac13) a_ac14) ->
                   $ @ 'LiftedRep
                     @ (forall (m :: * -> *).
                        Monad m =>
                        (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                        -> m (s_ac12, a_ac14))
                     @ (Sem r_ac13 (s_ac12, a_ac14))
                     (\ (v_B1 [Occ=Once, OS=OneShot]
                           :: forall (m :: * -> *).
                              Monad m =>
                              (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                              -> m (s_ac12, a_ac14)) ->
                        v_B1
                        `cast` (Sym (N:Sem[0] <r_ac13>_N <(s_ac12, a_ac14)>_N)
                                :: (forall (m :: * -> *).
                                    Monad m =>
                                    (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                                    -> m (s_ac12, a_ac14))
                                   ~R# Sem r_ac13 (s_ac12, a_ac14)))
                     (\ (@ (m_ac1b :: * -> *)) ($dMonad_ac1c :: Monad m_ac1b) ->
                        let {
                          $dMonad_ac1E [Occ=OnceL] :: Monad (StateT s_ac12 m_ac1b)
                          [LclId]
                          $dMonad_ac1E = $fMonadStateT @ m_ac1b @ s_ac12 $dMonad_ac1c } in
                        let {
                          $dApplicative_acal [Occ=OnceL] :: Applicative m_ac1b
                          [LclId]
                          $dApplicative_acal = $p1Monad @ m_ac1b $dMonad_ac1c } in
                        let {
                          $dFunctor_acam :: Functor m_ac1b
                          [LclId]
                          $dFunctor_acam = $p1Applicative @ m_ac1b $dApplicative_acal } in
                        \ (k_abuK [Occ=OnceL*]
                             :: forall x.
                                     Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x
                                     -> StateT s_ac12 m_ac1b x)
                                  @ (StateT s_ac12 m_ac1b a_ac14)
                                  ((ds_dclc
                                    `cast` (N:Sem[0] <e_ac11 : r_ac13>_N <a_ac14>_N
                                            :: Sem (e_ac11 : r_ac13) a_ac14
                                               ~R# (forall (m :: * -> *).
                                                    Monad m =>
                                                    (forall x.
                                                     Union
                                                       (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x
                                                     -> m x)
                                                    -> m a_ac14)))
                                     @ (StateT s_ac12 m_ac1b) $dMonad_ac1E)
                                  (\ (@ x_ac1G)
                                     (u_abuL [Occ=Once]
                                        :: Union
                                             (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x_ac1G) ->
                                     case decomp
                                            @ e_ac11
                                            @ r_ac13
                                            @ (Sem (e_ac11 : r_ac13))
                                            @ x_ac1G
                                            u_abuL
                                     of {
                                       Left x_abuM [Occ=OnceL] ->
                                         $ @ 'LiftedRep
                                           @ (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                           @ (StateT s_ac12 m_ac1b x_ac1G)
                                           (\ (v_B1 [Occ=Once, OS=OneShot]
                                                 :: s_ac12 -> m_ac1b (x_ac1G, s_ac12)) ->
                                              v_B1
                                              `cast` (Sym (N:StateT[0]
                                                               <s_ac12>_N <m_ac1b>_R <x_ac1G>_N)
                                                      :: (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                                         ~R# StateT s_ac12 m_ac1b x_ac1G))
                                           (\ (s'_abuN [Occ=Once] :: s_ac12) ->
                                              $ @ 'LiftedRep
                                                @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                                @ (m_ac1b (x_ac1G, s_ac12))
                                                (. @ (Union r_ac13 (Sem r_ac13) (x_ac1G, s_ac12))
                                                   @ (m_ac1b (x_ac1G, s_ac12))
                                                   @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                                   (k_abuK @ (x_ac1G, s_ac12))
                                                   (.
             Monad m =>
             (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
             -> m (s_ac12, a_ac14))
          @ (Sem r_ac13 (s_ac12, a_ac14))
          (\ (v_B1
                :: forall (m :: * -> *).
                   Monad m =>
                   (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                   -> m (s_ac12, a_ac14)) ->
             v_B1
             `cast` (Sym (N:Sem[0] <r_ac13>_N <(s_ac12, a_ac14)>_N)
                     :: (forall (m :: * -> *).
                         Monad m =>
                         (forall x. Union r_ac13 (Sem r_ac13) x -> m x)
                         -> m (s_ac12, a_ac14))
                        ~R# Sem r_ac13 (s_ac12, a_ac14)))
          (\ (@ (m_ac1b :: * -> *)) ($dMonad_ac1c :: Monad m_ac1b) ->
             let {
               $dMonad_ac1E :: Monad (StateT s_ac12 m_ac1b)
               [LclId]
               $dMonad_ac1E = $fMonadStateT @ m_ac1b @ s_ac12 $dMonad_ac1c } in
             let {
               $dApplicative_acal :: Applicative m_ac1b
               [LclId]
               $dApplicative_acal = $p1Monad @ m_ac1b $dMonad_ac1c } in
             let {
               $dFunctor_acam :: Functor m_ac1b
               [LclId]
               $dFunctor_acam = $p1Applicative @ m_ac1b $dApplicative_acal } in
             \ (k_abuK :: forall x.
                          Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x
                          -> StateT s_ac12 m_ac1b x)
                       @ (StateT s_ac12 m_ac1b a_ac14)
                       ((ds_dclc
                         `cast` (N:Sem[0] <e_ac11 : r_ac13>_N <a_ac14>_N
                                 :: Sem (e_ac11 : r_ac13) a_ac14
                                    ~R# (forall (m :: * -> *).
                                         Monad m =>
                                         (forall x.
                                          Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x -> m x)
                                         -> m a_ac14)))
                          @ (StateT s_ac12 m_ac1b) $dMonad_ac1E)
                       (\ (@ x_ac1G)
                          (u_abuL
                             :: Union (e_ac11 : r_ac13) (Sem (e_ac11 : r_ac13)) x_ac1G) ->
                          case decomp
                                 @ e_ac11 @ r_ac13 @ (Sem (e_ac11 : r_ac13)) @ x_ac1G u_abuL
                          of {
                            Left x_abuM ->
                              $ @ 'LiftedRep
                                @ (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                @ (StateT s_ac12 m_ac1b x_ac1G)
                                (\ (v_B1 :: s_ac12 -> m_ac1b (x_ac1G, s_ac12)) ->
                                   v_B1
                                   `cast` (Sym (N:StateT[0] <s_ac12>_N <m_ac1b>_R <x_ac1G>_N)
                                           :: (s_ac12 -> m_ac1b (x_ac1G, s_ac12))
                                              ~R# StateT s_ac12 m_ac1b x_ac1G))
                                (\ (s'_abuN :: s_ac12) ->
                                   $ @ 'LiftedRep
                                     @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                     @ (m_ac1b (x_ac1G, s_ac12))
                                     (. @ (Union r_ac13 (Sem r_ac13) (x_ac1G, s_ac12))
                                        @ (m_ac1b (x_ac1G, s_ac12))
                                        @ (Union r_ac13 (Sem (e_ac11 : r_ac13)) x_ac1G)
                                        (k_abuK @ (x_ac1G, s_ac12))
                                        (.

So it's none of those things. Next thought; maybe a core plugin is too late a pass -- it seems like a bunch of analysis has already run by this point. Maybe we can do this as a source plugin instead?


Documentation updates

The first two commits are trivial changes.
The third commit could spark World War Vi.

I'm in favour of https://github.com/neuropoly/axondeepseg/pull/433/commits/fff01dc248006ae0a8054eeea916e6c3d1c76e1b, but I would like that everyone in the lab agrees to it (for harmonizing practices in the lab), and if so, we should update the internal cross-project documentation. @mathieuboudreau @joshuacwnewton @kousu do you have an opinion on this?

I'm in favour of fff01dc, but I would like that everyone in the lab agrees to it (for harmonizing practices in the lab), and if so, we should update the internal cross-project documentation. @mathieuboudreau @joshuacwnewton @kousu do you have an opinion on this?

I like the changes @nekohayo has made. And, funny enough, I have already been writing this way when doing the SCT Course documentation pages! When writing pure plaintext/markup (.txt, .rst, .md, .html, etc.), I prefer to let my editor do the wrapping instead of adding breaks to restrict line lengths.
But, this is also a matter of taste, and there are lots of different opinions. So, I'm happy to hear other thoughts as well.

The third commit could spark World War Vi.

@mathieuboudreau @joshuacwnewton @kousu do you have an opinion on this?

But, this is also a matter of taste, and there are lots of different opinions. So, I'm happy to hear other thoughts as well.

The third commit could spark World War Vi.

@mathieuboudreau @joshuacwnewton @kousu do you have an opinion on this?

But, this is also a matter of taste, and there are lots of different opinions. So, I'm happy to hear other thoughts as well.

I also let my editor wrap for me. I am happy to do that too.

I also let my editor wrap for me. I am happy to do that too.

Hrm... the Travis CI - Branch CI check that's pending forever seems to be because this PR was created from a fork.

“Branch check” runs on your fork. Because you don’t have Travis CI activated on your fork, the check never runs, and the check never arrives.

Options:

@nekohayo creates this PR from a neuropoly branch.
@nekohayo enables Travis for the fork.
We turn off "Travis CI - Branch" as a required check, and stick just with "Travis CI - Pull Request"

Thoughts? I'm leaning towards 3), as that's what we did with SCT.

Hrm... the Travis CI - Branch CI check that's pending forever seems to be because this PR was created from a fork.

“Branch check” runs on your fork. Because you don’t have Travis CI activated on your fork, the check never runs, and the check never arrives.

Options:

@nekohayo creates this PR from a neuropoly branch.
@nekohayo enables Travis for the fork.
We turn off "Travis CI - Branch" as a required check, and stick just with "Travis CI - Pull Request"

Thoughts? I'm leaning towards 3), as that's what we did with SCT.

Hrm... the Travis CI - Branch CI check that's pending forever seems to be because this PR was created from a fork.

“Branch check” runs on your fork. Because you don’t have Travis CI activated on your fork, the check never runs, and the check never arrives.

Options:

@nekohayo creates this PR from a neuropoly branch.
@nekohayo enables Travis for the fork.
We turn off "Travis CI - Branch" as a required check, and stick just with "Travis CI - Pull Request"

Thoughts? I'm leaning towards 3), as that's what we did with SCT.

I can use admin privileges to override this and merge if you'd like, since the PR test passed. We don't often get fork PR's, and when we do we merge them to another branch first and not master to solve this, but we could remove that check as well if someone points me to where to remove the branch check.

Hrm... the Travis CI - Branch CI check that's pending forever seems to be because this PR was created from a fork.

“Branch check” runs on your fork. Because you don’t have Travis CI activated on your fork, the check never runs, and the check never arrives.

Options:

@nekohayo creates this PR from a neuropoly branch.
@nekohayo enables Travis for the fork.
We turn off "Travis CI - Branch" as a required check, and stick just with "Travis CI - Pull Request"

Thoughts? I'm leaning towards 3), as that's what we did with SCT.

I can use admin privileges to override this and merge if you'd like, since the PR test passed. We don't often get fork PR's, and when we do we merge them to another branch first and not master to solve this, but we could remove that check as well if someone points me to where to remove the branch check.


minecraft-server: add declarative setting for ops.json

Motivation for this change
ops.json is used to manage server operators in Minecraft. Why don't we manage it declaratively!
Things done
Manage ops.json declaratively; apply nixfmt (I think the formatting is generally fine here).

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

Any update here?

Hm is this backwards compatible? Because before this PR people would use /op commands to imperatively write ops.json, even if declarative = true. But with this PR it would not use the previous ops.json anymore.

Current .declarative design seems to block backward compatibility as any future components being "declarativized" is gonna to forcefully override it. Moreover, it will yields file permission error because of the existence of .devlarative will not chmod +w the newly added file.
Also, if any part of the declarative files which need write permission got accidentally deleted, it would not work even after rebuild, since chmod will not be executed. This means there is a flaw in current design itself as well.
I think we should come up with a better mechanism for declarative file components management to both address backward compatibility and robustness.

Yeah that would be nice. One thought I've had for a while is to be able to toggle options between being static and dynamic. The static implementation of it would be declarative using the NixOS config (which is declarative, but also slow to change), and the dynamic implementation would allow runtime configuration. Changing an option between static and dynamic is still a bit hard though.

Yeah that would be nice. One thought I've had for a while is to be able to toggle options between being static and dynamic. The static implementation of it would be declarative using the NixOS config (which is declarative, but also slow to change), and the dynamic implementation would allow runtime configuration. Changing an option between static and dynamic is still a bit hard though.

Wouldn't that be the same as having a declarative option?
Painless converting seems to be hard, but I think user themselves should be responsible for their data.

Wouldn't that be the same as having a declarative option?

It would be a declarative option for every option separately. So you could e.g. do something like
{
  services.minecraft = {
    whitelist.declarative = true;
    whitelist.value = [ ... ];
    ops.declarative = false;
    # ops is taken from /var/lib/minecraft/ops.json
  };
}

A competing PR has been opened a few months ago: #107308

A competing PR has been opened a few months ago: #107308

Okay how about this: Only when declarative == true and ops != {}, the ops.json file is overridden. This should be backwards compatible.

Okay how about this: Only when declarative == true and ops != {}, the ops.json file is overridden. This should be backwards compatible.

That sounds good to me @Infinisil. I would like the same to be true for other options. Personally I would use immutable ops and properties, but a mutable whitelist managed in-game by the ops.

That sounds good to me @Infinisil. I would like the same to be true for other options. Personally I would use immutable ops and properties, but a mutable whitelist managed in-game by the ops.


Sometimes associated project is not saved

Dear all,
I am using the latest Toggl Desktop on Ubuntu 16.04.
Occasionally the associated project of an entry is not saved after hitting "Done".
If I repeat this one more time, then the project is correctly stored.
Can anyone reproduce that?
Thankfully,
~Robert

Will be fixed with next release that has new autocomplete component.


Error when fetch's init argument isn't set

The second argument of fetch() is optional: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#syntax
This addon's mocked Request object tries to access the options.method property without checking that options is set, and so throws an error if options is undefined.
export function Request(input, options) {
    if (typeof input === 'object') {
        this.method = options.method || input.method || 'GET'; // fails if `options` isn't set
        this.url = input.url;
    } else {
        this.method = options.method || 'GET'; // also fails
        this.url = input;
    }
}

I'm having this same issue, causing react-refresh to to get stuck because of missing options parameter.
The pull request fixes it though, thanks!

@mchill thanks for raising this issue and fix it in a short time. I am making few other changes and there will be a new version bump. I'll update you all soon.

@mchill This issue is fixed in version 1.1.0. Closing this issue.


Need option to run only at execution root

See https://github.com/jdcasey/project-sources-maven-plugin/blob/master/src/main/java/org/commonjava/maven/plugins/projectsrc/ProjectSourcesGoal.java#L223 for an example of how this can be done.
We need to be able to generate the properties for the build only in the root project for the current build, rather than generating for each module that gets built.

Is this still and issue?  I.5.1 was just released so just checking.

I think this is resolved now ; closing


DBZ-382 Postgres example image for 0.7 tag

In hindsight I think we shouldn't have started with creating the 0.7 tags yet, and only should have done it once the first 0.7.x release is out. In its current form its rather confusing, e.g. the connect image still uses Debezium 0.6.0. So I'd suggest to do this differently next time (0.8).
But as the MySQL example also is out already in 0.7, I don't see an issue in doing the same for Postgres.
Another thing to consider is whether the example images should even follow the Debezium versioning scheme. I don't see much need for that, as those examples don't change between 0.6 and 0.7 for instance, i.e. they could have their own lifecycle.

Merged; thanks, @jpechane!


iRODs - Add File to Resource Fails

When creating a new resource I'm able to add files from my iRODs userspace. However when adding files from iRODs to an existing resource, I get the following error:

@Castronova @dtarb The fix to this issue has been merged into develop and @sblack-usu is in the process to update beta for further testing. I did manually update beta to verify this fix, but it'd be nice if you can verify also on beta since you have a test resource handy to test.

Beta deploy is finished.

@Castronova @dtarb The fix has been deployed to www as part of 1.18 release. I have just tested it out on www and it works now. Please test it out as well on www and close this issue if it works for you as well.

Closing as partly fixed on www - but see #3069


squid:S1118,squid:S1854 - Utility classes should not have public cons…

This pull request is focused on resolving occurrences of Sonar rules squid:S1118 - Utility classes should not have public constructors
squid:S1854 - Dead stores should be removed
You can find more information about the issue here:
https://dev.eclipse.org/sonar/coding_rules#q=squid:S1118
https://dev.eclipse.org/sonar/coding_rules#q=squid:S1854
Please let me know if you have any questions.
M-Ezzat

I am not sure whether you do not agree with these changes or not. Please close this PR if not.


Which "activations" are assumed in this work?

Hello, thanks for your work.

We hypothesize that the input features with larger magnitudes are generally more important.

Do you mean "activations" = "input features" = encircled matrices in this picture (from blogpost http://jalammar.github.io/illustrated-transformer/)?

And, if so, why did you decide to use input features, but not calculated Q, K, V (and maybe Z as it's referred in the picture) values as measure of saliency of weights?

Hi, activations in the paper refer to input activations. Given some input activations, we think it is natural to protect some features by analyzing the input channels of linear layers. Analyzing the output channel may or may not work, which we have not tried. Let me know if it answers your question.

I will close the issue due to inactivity. Feel free to reopen.


Unknown layer: Merge

HI, i have a problem while loading the model, this is exactly what python says:
ValueError: Unknown layer: Merge
Please, help to fix that, seems like something is not defined.
This is the error:
File "python3.6/site-packages/keras/engine/saving.py", line 261, in load_model
model = model_from_config(model_config, custom_objects=custom_objects)
File "python3.6/site-packages/keras/engine/saving.py", line 335, in model_from_config
return deserialize(config, custom_objects=custom_objects)
File "python3.6/site-packages/keras/layers/init.py", line 55, in deserialize
printable_module_name='layer')
File "python3.6/site-packages/keras/utils/generic_utils.py", line 145, in deserialize_keras_object
list(custom_objects.items())))
File "python3.6/site-packages/keras/engine/network.py", line 1036, in from_config
process_layer(layer_data)
File "python3.6/site-packages/keras/engine/network.py", line 1022, in process_layer
custom_objects=custom_objects)
File "python3.6/site-packages/keras/layers/init.py", line 55, in deserialize
printable_module_name='layer')
FIle "python3.6/site-packages/keras/utils/generic_utils.py", line 138, in deserialize_keras_object
': ' + class_name)
ValueError: Unknown layer: Merge
Script:
if name == 'main':
parser = argparse.ArgumentParser()
parser.add_argument('model', help='Path to model')
parser.add_argument('input_path', help='Path to image or directory')
parser.add_argument('-o', '--output_path', help='Output directory')
parser.add_argument('-b', '--batch_size', help='Batch size for running the network')
parser.add_argument('-c', '--crop', dest='crop', default=False, action='store_true',
help='Crop out black borders after rotating')
args = parser.parse_args()
print('Loading model...')
model_location = load_model(args.model, custom_objects={'angle_error': angle_error}) #here is the problem, when loading the model. That is not a path problem, is a problem with keras with Merge layout.

output_path = args.output_path if args.output_path else args.input_path

print('Processsing input image(s)...')
process_images(model_location, args.input_path, output_path, args.batch_size, args.crop)

Remove legacy Merge layers and associated functionality (remnant of Keras 0), which were deprecated in May 2016, with full removal initially scheduled for August 2017. Models from the Keras 0 API using these layers cannot be loaded with Keras 2.2.0 and above.
https://github.com/keras-team/keras/releases

Update your model.
Closing.


Enhance ztunnel heap instrumentation

Right now ztunnel exposes gperftools endpoints for both profiles and heaps, as well as a standard pprof profile.
ATM the gperftools endpoints don't work very well, or at all.
We should probably consolidate on 1 profiler and one heap dumper, and make sure they both work - whether that's gperftools or something else (jemalloc was mentioned).
Whatever we DO pick needs to work equally well on arm64 and amd64, and needs to support remote analysis, ideally.

[x] Fix or replace gperftools to enable heap dumps: https://github.com/istio/ztunnel/pull/865
[ ] Investigate building with/enabling jemalloc by default, at least for non-release builds, possibly for release builds if it is not a perf hit (e.g. at one time Facebook left jemalloc on permanently in prod due to nonexistent perf hit: https://www.magiroux.com/rust-jemalloc-profiling/)

https://github.com/polarsignals/rust-jemalloc-pprof or https://github.com/mkmik/heappy/ seem viable.
Prototype with heappy: https://github.com/howardjohn/ztunnel/pull/new/exp/heappy

Yep, using https://github.com/polarsignals/rust-jemalloc-pprof, seems to work well enough.

@ilrudie In https://github.com/istio/ztunnel/pull/865 we discussed using jemalloc as an always-on thing, or at least enabled by default for non-release builds.
I added that as another ticket item here, so we can keep this open for that.

seems the second task has be completed, maybe we can close it.


Add Feature to Copy StateMechineBehavior

if I just copy and Paste the State in the animator the scripts in the State are somehow linked when i change a value the pervious state script value also Changed.

I didn't get it.
You are copying and pasting the state, which is Unity's built-in feature not the purpose of this repo.
This repo is only used to copy the transition of states.

by the way I have created this function
 void ShowAnimatorStateDublicator()
    {
        GUILayout.BeginHorizontal();
        var selectedStates = Selection.GetFiltered<AnimatorState>(SelectionMode.Editable);
        if (selectedStates != null && selectedStates.Length > 0)
        {
            if (GUILayout.Button("CopyBehaviors"))
            {
                Debug.Log(Selection.activeObject);
                stateBehaviors = selectedStates[0].behaviours;
            }
            if (stateBehaviors != null && stateBehaviors.Length > 0)
            {
                if (GUILayout.Button("PasteBehaviors"))
                {
                    foreach (var selectedState in selectedStates)
                    {
                        Undo.RecordObject(selectedState, "Paste Behaviors");
                        EditorUtility.SetDirty(selectedState);
                        foreach (var smb in stateBehaviors)
                        {
                            Debug.Log("Adding: " + smb.GetType());
                            var newSmb = selectedState.AddStateMachineBehaviour(smb.GetType());
                            EditorUtility.CopySerialized(smb, newSmb);
                        }
                        EditorUtility.SetDirty(selectedState);
                    }
                }
            }
        }
        GUILayout.EndHorizontal();
    }


build: use the just-built clang for runtime unittests

The runtime is meant to be built with the just built clang (as this
absolutely requires clang) as the runtime is a target library.  The host
tools can be built with the host compiler.  Swap out the compiler for
the unittests as we do for the runtime itself.

Replace this paragraph with a description of your changes and rationale. Provide links to external references/discussions if appropriate.

Resolves SR-NNNN.

CC: @gwynne @davezarzycki @gottesmm @Rostepher

@swift-ci please test

@swift-ci please test

@swift-ci please test

@swift-ci please test

@swift-ci please test

@swift-ci please test

@swift-ci please test

@swift-ci please test


Service check interval doesn't change

Default interval below was "10m0s", changed to 5m.  Seems as if the message in discord from the service check is checking the service every 5 minutes but only updating the discord post every 10m.
[services]
disabled = false   # Setting this to true disables all service checking routines.
parallel = 1       # How many services to check concurrently. 1 should be enough.
interval = "5m0s" # How often to send service states to Notifiarr.com. Minimum = 5m.


final edits v0.1

lane clearence
pin header clearence
better label positioning and JUMPER 3V3-REF better
GND as lane instead of layer

GND is fine a a plane, sorry, just talked to a colleague and he said it's the best solution


Search doesn't work

This is probably related to Code blocks and how Obsidian creates the index but this means that the Search, Page links, and Tags don't work inside admonition.

this is an unfortunate side effect of the plugin being a code block processor. Links and tags are not added to Obsidian’s cache, so Obsidian won’t update or track them.
https://forum.obsidian.md/t/admonition-plugin/176/63

This is probably related to Code blocks and how Obsidian creates the index

Correct. It is unlikely that I'll be able to improve this behavior until Obsidian creates an alternative code block syntax that it will process (similar to how they added an alternative comment syntax).


Make dice faces change for two-hand trait directly from weapon

This will allow rule elements that hinge on dice faces count to properly function

I'll assume that the weapon sheet uses source value instead of prepared, but if not that's easy to fix separately.


Adding LanguageAlias to LocaleInformation data

It might be useful for some people to use a language alias in some cases. I have added LanguageAlias to the data returned by LocaleInformation so a user can easily use it in a custom template.

Please fix the unit tests to include the new parameter.
I don't thin LanguageAlias is quite correct, since it's not an alias, and we already have an alias.
I think Language by itself is probably fine. What do you think?

Language sounds good to me. I'll try to fix up those things up when I get a chance.

Ta; I'll wait for the tests and I'll merge. :D

I have changed the variable to Language and added tests to check these values. Does that look OK?

I'll restart the tests and let you know. ;D

Gr, test install timing out due to error. Will retry later.


net/haproxy: Update OCSP data fails (WARNING: no nonce in response)

[+] I have read the contributing guide lines at https://github.com/opnsense/plugins/blob/master/CONTRIBUTING.md
[+] I have searched the existing issues and I'm convinced that mine is new.
[+] The title contains the plugin to which this issue belongs
Describe the bug
Since the latest version of HAProxy now supports OCSP stapling I thought it would be a good idea to switch from the workaround-script to the official option.
But it turned out that at least for me it is not working quite right.
To Reproduce

Enable "Store OCSP responses" in HAProxy. (HAProxy --> Settings --> Service)
Configure the cron job to run every day.
Cron Job fails, see log below.

Expected behavior
Automatic update of the OCSP data in HAProxy.
Workaround
I created another cron job that runs 10 minutes later and simply restarts the haproxy service, which works just fine.
Screenshots
https://imgur.com/a/XM9tpZt
Relevant log files
2021-04-06T03:42:01	configd.py[18127]	[b2eb554c-4009-4e75-9e58-3f8a1a64e656] Script action stderr returned "b'WARNING: no nonce in response\nResponse verify OK\nWARNING: no nonce in response\nResponse verify OK'"
2021-04-06T03:42:00	configd.py[18127]	[b2eb554c-4009-4e75-9e58-3f8a1a64e656] update haproxy ocsp data

Environment
OPNsense 21.1.3_3-amd64 --- FreeBSD 12.1-RELEASE-p14-HBSD --- OpenSSL 1.1.1j 16 Feb 2021
os-haproxy 3.0 --- haproxy 2.2.10

@browne-net So, you're maintaining a workaround for the OCSP update... so I was wondering: do you have any idea why this occurs or what this error refers to? What kind of certificate are you using, which CA is being used?

I have no idea why this occurs (occured).
The certificate doesn't have anything special.

automatically aquired using the ACME plugin
Common Name: subdomain.domain.com
Alt Names: service1.domain.com service2.domain.com .... (total of 6)
Challenge Type: HTTP-01
Auto Renewal: yes
Renewal Interval: 60
Key Length: ec-384
OCSP Must Staple: yes
Automation: Restart HAProxy
DNS Alias Mode: no

Special things in my config:

2x WAN IPs
2x HTTP-01 validation methods, one for each IP
2x ec-384 certificates, one of them with some alt names
2x frontends in HAProxy, one for each IP with the corresponding certificate

That's about it.
A pretty normal setup I think.
Also I just checked the logs!
I had the default "Update OCSP Data" cron job (added by HAPRoxy) still activated all the time in combination with my workaround.
The default job is running 15 min ahead of my workaround.
--> It seems the error is no longer present.
--> There are no errors anymore at the time these cron jobs are running.
I now disabled my workaround and will leave it like this to check the logs in a bit.
How long does it take until the OCSP data is marked / recognized as outdated?

How long does it take until the OCSP data is marked / recognized as outdated?

AFAIK it depends on the implementation, but 1-2 weeks seems to be common.
However, the OCSP update script in the HAProxy plugin does not check the validity. To keep things simple it just updates everything on every run.

It seems the error is no longer present.
There are no errors anymore at the time these cron jobs are running.

Since the error is gone, I'll close this issue for now. Please report back if it occurs again and provide as much (debug) log data as possible. (I have no idea where to look at, so everything is useful, I guess.)


Added method to accept a organization invite on behalf of a user

Closes #831

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

1 of 23 (4.35%)  changed or added relevant lines in 5 files are covered.
55 unchanged lines in 3 files lost coverage.
Overall coverage increased (+0.1%) to 27.556%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

scm/helper.go
0
1
0.0%

web/courses.go
0
4
0.0%

web/scm_helpers.go
0
5
0.0%

scm/github_invite.go
0
12
0.0%

Files with Coverage Reduction
New Missed Lines
%

scm/github_invite.go
1
0%

internal/env/save.go
17
76.06%

web/hooks/push.go
37
0%

Totals

Change from base Build<PHONE_NUMBER>:
0.1%

Covered Lines:
2992

Relevant Lines:
10858

💛  - Coveralls


FLOE-491: Added static snapshots of the print layout version.

@jobara - can you do a quick check of this?

See the version in gh-pages here:
https://jhung.github.io/guide.inclusivedesign.ca/

merged at 3fe8e3d7d6e86a0a8e6a35a0947bef48010ea905


Fix off-by-one when copying text from buffer

As reported in #528.

Coverage increased (+0.2%) to 33.844% when pulling d77178835eb2f89e2fe6a07635420c325ae6b148 on buffer-copy into 2426a12d11d4aedc2490c1f76664c2342d99c094 on master.


Please add latest iPhones to the list.

Hi team,
Please add these devices also to the list iPhone 15, 15 pro, 15 pro max, 15 plus.
Using GBDevice info in many places in my project. need support

All solved with #147! (Just got write permissions to the repo :)

For my learning, Shubhashree: What are you building with this library and using it for? How do you bring it and other deps into your project, if not cocoapods?


fix: add _use/_force_indexes into copy with shallow copy

By #334, #470 , pypika got force_index、use_index feature, but forgot to add "_force_indexes", "_use_indexes" into QueryBuilder.__copy__() with shallow copy, thus they both become mutable. For examples
from pypika import Query

query = Query.from_('customers').select('id', 'fname')
q1 = query.use_index('idx1')
q2 = query
q3 = query.use_index('idx2')

if __name__ == "__main__":
    print(q1.get_sql())
    # SELECT "id","fname" FROM "customers" USE INDEX ("idx1","idx2")
    print(q2.get_sql())
    # SELECT "id","fname" FROM "customers" USE INDEX ("idx1","idx2")
    print(q3.get_sql())
    # SELECT "id","fname" FROM "customers" USE INDEX ("idx1","idx2")

@elisong that looks good, but can you please add tests to ImmutabilityTests, so that this can be tested. So far we only have join tests there (i.e. test_queries_after_join). If you could add test cases for other things that are being copied as well (see copy), such as selects, groupbys, and so on, that would be great (e.g. test_queries_after_groupby, test_queries_after_select).

Coverage increased (+0.0004%) to 98.408% when pulling 03fee2ec69d46b627a96b50ebffd9d1a70ed29c5 on elisong:add-use/force-indexes-shallow-copy into 46c90d1638e2090cc0e8e5adb87d9b9cbd66ec01 on kayak:master.

@x8lucas8x Fine, I added some tests.

@elisong thank you. It looks great now.


Feature/python scipy debian

This is to solve #33053
Not sure if we also need to update the arm build; I don't have that hardware accessible.

Thanks for the PR! Please add a new key python3-scipy instead of modifying this one.
https://github.com/ros/rosdistro/blob/master/CONTRIBUTING.md#python-3

Fix (I think). I don't see how to test this, and according to documentation, I need to add the ubuntu key, but I'm not sure how to go about testing it all; I don't have environment for every version of ubuntu.
When adding a new key, Ubuntu and Debian are required, Fedora, Gentoo, and openSUSE are encouraged if the package also exists on those Linux distributions.

Thanks for the PR! Please add a new key python3-scipy instead of modifying this one.
https://github.com/ros/rosdistro/blob/master/CONTRIBUTING.md#python-3

Fix (I think). I don't see how to test this, and according to documentation, I need to add the ubuntu key, but I'm not sure how to go about testing it all; I don't have environment for every version of ubuntu.
When adding a new key, Ubuntu and Debian are required, Fedora, Gentoo, and openSUSE are encouraged if the package also exists on those Linux distributions.

You don't need to test it on all platforms if you can link to it, like you have to the ubuntu platform for all supported versions. Note that with the key rename it will need to be realphabetized.

It's actually already in there as python3-scipy; just another 4000 lines down. My bad, totally missed it.
Any reason there isn't a pre-commit hook set up to do the following?
Keep everything in alphabetical order for better merging.
No trailing whitespace.
No blank lines.

Pre commit hooks have to be configured by the user. We can't automatically deploy them on a checkout. We just have the CI run them and document how to run the unit tests too which is also recommended for the user.


Improve updater.go code

Currently there is function not related to updater itself, we can move them to another folder.

See comment in https://github.com/grammyjs/create-grammy/pull/28


Support for 0 quantity in rediscloud_subscription.creation_plan.quantity

Terraform Version
I don't think this is a Terraform version problem - but: Terraform v1.3.9 on darwin_arm64
Affected Resource(s)
Please list the resources as a list, for example:

rediscloud_subscription

Terraform Configuration Files
resource "rediscloud_subscription" "subscription" {
  name = var.subscription_name

  cloud_provider {
    provider = "GCP"
    region {
      region                       = var.region
      multiple_availability_zones  = var.multiple_availability_zones
      networking_deployment_cidr   = var.networking_deployment_cidr
      preferred_availability_zones = var.preferred_availability_zones
    }
  }

  creation_plan {
    average_item_size_in_bytes   = var.average_item_size_in_bytes
    memory_limit_in_gb           = var.memory_limit_in_gb
    quantity                     = 0
    replication                  = var.replication
    support_oss_cluster_api      = var.support_oss_cluster_api
    throughput_measurement_by    = var.throughput_measurement_by
    throughput_measurement_value = var.throughput_measurement_value
    modules                      = var.modules
  }
}

Debug Output
Both 0 and 1 quantity JSON sent to Rediscloud is posted here:
https://gist.github.com/darron/f243f9dcb33f229651a60bc4b7a1c2f3
Expected Behavior
I want to create a rediscloud_subscription for an entire product vertical without ANY databases.
Inside that product vertical there will be multiple environments: dev, staging and production.
I don't NEED or WANT all of the Redis instances to be the same size.
I want to setup all my Redis databases individually using the rediscloud_subscription_database resource.
I also want to define the rediscloud_subscription in my common environment and then use the same subscription in my other Terraform environments - which are all separate Terraform states.
Is there a reason why we must pick at least 1 for rediscloud_subscription.creation_plan.quantity?
I updated the provider locally - and y'all send back a 400 when I do that:
https://gist.github.com/darron/808996e48e6c6b9b9a2c4db6eb858f97
I looked through the web interface - and it looks like I can't just create a Subscription there either.

We can't upgrade from 0.2.9 because of these - there's no real workaround that I can see:

I can't setup TLS properly this way.
I can't set the password like we have been doing.

Am I missing something? I might totally be wrong - would love to find out a different way to do this.
Actual Behavior
I am forced to create a Redis instance with the settings that are specified in creation_plan.
Steps to Reproduce
Create a rediscloud_subscription with 0 in creation_plan.quantity.
Can't do that.
Important Factoids
We're on GCP.
References
I couldn't find any.

Also - thank you for making it easy to test a new provider - that little bit of GNUmakefile and associated script was a nice sweetener when I went to test it out.

Hi Darron, thank you for the feedback.
The terraform provider uses the Cloud API in the background, which necessitates DB metadata (tight coupling between the subscription and its DBs).
What Redis Cloud provider > 1.0.0V does in the “creation_plan” block is it uses the DB parameter to initially create the cluster infrastructure with the “dummy” databases but then deletes them in the background once done. Therefore, no databases will be created in reality, they are used to help provision optimized infrastructure.
Then, you can use the rediscloud_subscription_database resource to create ‘actual’ databases. The goal is to configure the creation_plan as close as possible to the databases that will live as part of the subscription. Having said that, Redis will create and provision sufficient infrastructure for your databases, even if they aren’t the same as the ones specified in the creation_plan.
I hope that helps answer your question.

Hey @NoamSternRedis - thanks for the response - the email for this went to a different account so I didn't see it.
Appreciate the explanation. I do understand why you guys have done it - I guess it would work optimally for us if we grouped our similar sized databases together - and we might need to do that.
With the previous provider, because of the way it was constructed, we had ended up putting a single instance per / subscription - which we found out from your team is a tremendously expensive way to organize them.
When I tested with a single quantity in creation_plan - I saw an instance created when the subscription was created:

Which then disappeared:

How we wanted to use the new provider was by grouping our Redis clusters together in a vertical having:

dev
staging
production

in a single subscription. That means one product's Redis can't interfere with another product's Redis - and so on. Then we could figure out each product's Redis costs very simply as well.
Unfortunately those instances have very different performance characteristics - which y'all are saying may be a problem due to creation_plan being used to help provision optimized infrastructure.
That's not optimal for us - but it is the way it currently is.
I'd like to humbly ask if y'all would re-consider that - or add the ability to change that - but totally understand if it's not possible.
At this point - I'll close the issue - we've found a workaround and I guess we'll end up seeing if the performance of our databases is affected enough by creation_plan to be a problem.
We have loved Redis Enterprise's product - it's great - we don't have to worry about it and have had minimal problems - thanks again for your response.

Hi Darron - thank you again for elaborating on your use case.
I understand your concern, as you can't create DBs with the exact specification using the creation_plan as it's limited the users to have a maximum of 1 spec with some quantity.
We decided to have it that way because we wanted to simplify the users' experience when creating a subscription. We wanted to eliminate as many attributes as possible from the creation_plan block as it represents 'dummy' databases.
As you mentioned, your use case is not exactly compatible with this.
Having said that, any of your databases' performance will not be harmed by the difference between the creation_plan block and the actual databases you will create afterward. Redis will ALWAYS create at least the infrastructure that is needed to ensure sufficient resources to support your databases. So if someone "suffers" from this mismatch, it is Redis that will likely create a bit more resources than needed.
Thank you again for your insights and recommendations, be sure they are taken into consideration.


More explicitly warn about distributed index type and 'compute.ops_on_diff_frames'

This PR adds an explicit warning when distributed default index type and 'compute.ops_on_diff_frames' are used together.

Codecov Report

Merging #1470 into master will increase coverage by 0.02%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1470      +/-   ##
==========================================
+ Coverage   93.74%   93.76%   +0.02%
==========================================
  Files          36       36
  Lines        8409     8409
==========================================
+ Hits         7883     7885       +2
+ Misses        526      524       -2

Impacted Files
Coverage Δ

databricks/koalas/frame.py
95.58% <0.00%> (+0.04%)
:arrow_up:

databricks/koalas/generic.py
97.02% <0.00%> (+0.37%)
: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 2e68e03...a6ac6dc. Read the comment docs.

LGTM

Thanks @itholic

My pleasure!


(Re)introduce prison category filtering

... or "revert the revert"...
This PR reintroduces #123 and #156, the prison categories long-lived branch.
We reverted the previous changes because of a number of issues which cropped up which may have been caused by this branch:

https://trello.com/c/K57OrSZm/133-drupal-oom-errors-production
https://trello.com/c/tLZpDeb1/132-frontend-502
https://trello.com/c/80ep6uVp/1889-homepage-content-sort-order
https://trello.com/c/1yFZG7Pq/1890-series-content-sort-order

So we'll want to test and resolve those before merging these changes back in.

Closing this as we are planning to re-implement with jsonapi


OciRestApi - Get methods for configType and configProvider fields would help developers switch between OciObjectStorage vs ObjectStorageClient

We are using Helidon to interact with OCI ObjectStorage components. To achieve this, we are providing all OCI configuration options as part of configuration "oci.default.config and oci.config" - using both Instance Principal and OCI Profile based configuration.
But, as of now, Helidon doesn't have full support for all operations that can be performed using Object Storage SDK - like ListObjects operation on a bucket. In these cases, we want to switch to ObjectStorageClient to make the corresponding request.
We are forced to either duplicate the OCI Profile configuration, or read OCI Profile configuration data ourselves to decide on whether to use InstancePrincipal vs OCI Profile connectivity.
It might be helpful, if Helidon provides get methods for configType and configProvider fields in OciRestApi - as that would ease the process of creating ObjectStorageClient instance, and also avoid redundant reading of configuration data.
Once configType and configProvider get methods are public, we could write method similar to below one to instantiate the ObjectStorageClient properly.

ObjectStorageClient createObjectStorageClient(Config config) {
    OciRestApi ociRestApi = OciRestApi.create(config);
    if (ociRestApi.configType() == OciRestApi.ConfigType.INSTANCE_PRINCIPAL) {
        return new ObjectStorageClient(InstancePrincipalsAuthenticationDetailsProvider.builder()....build());
    } else if (ociRestApi.configType() == OciRestApi.ConfigType.OCI_PROFILE) {
        return new ObjectStorageClient(SimpleAuthenticationDetailsProvider.builder()....build());
    }
}

Environment Details

Helidon Version: 2.4.1
Helidon MP
JDK version: 17.0.2
OS: Windows 10

Hello and thanks for your issue.
As part of our ongoing improvements to OCI integration, we have decided to update our approach and provide a CDI integration for OCI SDK.
Once this change is done, you will be able to use the full set of APIs available through the SDK and get the authentication through injection.
Our own implementation will become deprecated and will be eventually removed from Helidon.
@ljnelson kindly go through the issue to see if we cover this use case in our new implementation.

This is covered in the new implementation; see #3961, particularly the class javadoc in the OciExtension.java class.

@tomas-langer @ljnelson Thanks for the information.
I noticed these changes are still in progress. When can we expect to get a first build (even intermediate) with these changes available? Also, by which version do you guys plan to get rid of about to be deprecated code in Helidon?
Answers to these questions would help us schedule our releases accordingly and ensure we migrate to new suggested approach.

Expectations (these may change):

we want to have the OCI SDK CDI integration in the very next release (2.4.3 or 2.5.0 whichever we chose)
existing custom OCI integration will be deprecated in the same version
existing custom OCI integration would be most likely removed in version 3.0.0 (as it was an experimental feature)

@tomas-langer @ljnelson Awesome. Tried the new OCI Extension with Helidon MR release 2.5.0, did a basic verification. Everything worked smoothly.
Will try to check out and verify more scenarios in the next couple of weeks. Hoping that more documentation and examples will be added to help the developers - For now, I had to dig into the source to get understanding how it works, and what keys need to be provided / added.

Glad to hear it. Did you see the extensive javadoc?

Yes, Javadoc documentation was pretty detailed.
In order to understand the difference in the config keys used between config and config-file approaches, had to look into the source code. Most of the other details were understandable from Javadocs itself.


Add e2e test

Part of #46
Currently only 1 test case:

Create JobSet with DNS hostnames enabled and ensure pods can reach each other via pod hostnames

Reviewer Notes:

For some reason, after the Kind cluster has been created, it takes a long time for the CRD to be installed, JobSet controller manager pods to become ready (~30 seconds), etc. so I had to add a sleep after the jobset_deploy function in ./hack/e2e-test.sh, otherwise the resources required for the e2e test were not ready yet.
The bash script I wrote to wait until it can successfully ping all pods by hostnames seems to take ~30 seconds before pings are successful, so I set the e2e test timeout as 60 seconds. However, I find this strange since all pods are supposedly in a running state, so not sure what is causing the delay before pings work.

/hold
just in case someone lgtms by mistake

@ahg-g Thanks for the review, I addressed your comments and this is ready for another look. Also yes we will need presubmits for this, and I will set those up with a PR to test-infra next.

/label tide/merge-method-squash

/lgtm

/hold cancel


Packaging fv3config

I am trying to prepare a release for pypi, but ran into this issue:
$ pip install twine
$ python setup.py sdist
$ twine check dist/*
Checking dist/fv3config-0.5.0.tar.gz: FAILED
  `long_description` has syntax errors in markup and would not be rendered on PyPI.
    line 38: Severe: Title level inconsistent:

    Breaking changes:
    ~~~~~~~~~~~~~~~~~
  warning: `long_description_content_type` missing. defaulting to `text/x-rst`.

I think there is some incorrect formatting in the rst files.

It works if long_description only contains the history or the readme, but not both. I don't think two  top-level ==== headers are allowed in a single document.

It works if long_description only contains the history or the readme, but not both. I don't think two  top-level ==== headers are allowed in a single document.


Article on reverse words in string

Have you read the Contributing Guidelines on Pull Requests?
Yes
Description
Article on reverse words in string
Checklist

[x] I've read the contribution guidelines.
[x] I've checked the issue list before deciding what to submit.
[x] I've edited the README.md and link to my code.

Related Issues or Pull Requests
Fixes #432

@atarax665 @iamrajiv kindly have a review.
Thanks!

Hey @atarax665 , kindly review this PR.
Thanks!

@ankitaggarwal23 kindly review this PR.
Thanks!


Config contents from string

This patch makes it possible to specify the contents of the aptly configuration file using a string or template.

The CI failure is not related to this branch, I'm getting that in master as well.

Thanks for making this pull request @antonio, sorry it took us a while to review :+1:


Add ability to open links from task description

I like to have useful links in my task descriptions and this works well on the Kanboard web client, but it is not available on this app

Hi! Thank you for using Khanos! I really appreciate it! This sounds like a good feature. I'll add it to the list of new features I'll develop soon.


How to use this system? i have ollama running on WSL in my machine with llama3.

got it.. just change the model.. thanks a lot


ippserver: The "-2" option is ignored in some cases when the  "-C" option is specified

If I run ippserver like so:
./ippserver -vv -2 "foo"
the output will show this, among other things:
[Printer foo] sides-default (keyword) one-sided
[Printer foo] sides-supported (1setOf keyword) one-sided,two-sided-long-edge,two-sided-short-edge
But if I have it load a set of configuration files (system.conf, print/foo.conf) from the local directory, and run ippserver like so:
./ippserver -vv -2 -C .
the output will show this:
[Printer foo] sides-default (keyword) one-sided
[Printer foo] sides-supported (keyword) one-sided
I can override this by specifying "side-default" and "sides-supported" in print/foo.conf but I don't think I should have to if I have provided the "-2" option.
(Similarly, I might have expected the "-2" option to make "two-sided-long-edge" the value for "sides-default"...)

The command-line options are only provided for creating a single print queue; they don't set defaults for the queues defined.
I'll use this bug to track adding an error if both the single-queue and config directory options are specified.

[master 1a94175] Don't allow config dir and printer options at the same time (Issue #14)


fixed #180

Fixed Email validation filed
TEST CASE-

RES-

2)

RES-

3)

RES-

4)Valid one

RES-

@nlok5923  Fixed, IT was due to code semantics i fallow ......vscode removes unwanted space and tab.


Support for ackBundleInstallationWarning

New Issue Checklist

[x] Updated fastlane to the latest version
[x] I read the Contribution Guidelines
[x] I read docs.fastlane.tools
[x] I searched for existing GitHub issues

Issue Description
supply does not support setting of the ackBundleInstallationWarning parameter in google apis.
This appears to be triggered for app bundles over 100mb according to the very vague description at https://developers.google.com/android-publisher/api-ref/edits/bundles/upload resulting in a failure to upload AABs with asset bundles (which can be up to 2GB in size together with the apks)
Command executed
 supply(
      package_name: "_redacted_",
      skip_upload_apk: true,
      aab: "_redacted_",
      track: "internal",
      json_key: "_redacted_",
      skip_upload_metadata: true,
      skip_upload_images: true,
      skip_upload_screenshots: true
    )

Complete output when running fastlane, including the stack trace and command used
[!] Google Api Error: apkNotificationMessageKeyBundleInstallationSizeWarning: The installation of the app bundle may  be too large and trigger user warning on some devices, and this needs to be explicitly acknowledged in the request.

We would be happy to merge a Pull Request adding support for this. Hope the API being used in supply actually supports this.

I'd be happy to add support but am not up to speed on the structure for adding new parameters to fastlane and would need some time that I don't have at the moment.
If anyone else has a chance to look at it, the google api used does support this:
https://github.com/googleapis/google-api-ruby-client/blob/5852c0c7341e90b31d2b2a63d55120b13b2f4525/generated/google/apis/androidpublisher_v3/service.rb#L410
Therefore ack_bundle_installation_warning needs to be added as an option to the below call (and passed through fastlane)
https://github.com/fastlane/fastlane/blob/f37b6186a12e2907641bd1063520a0e859631d2d/supply/lib/supply/client.rb#L346

Hi @janpio, I created a Pull Request to support the parameter, please check it.
I think adding this parameter is quite safe since it's optional.

The issue is not resolved and we have submitted an MR which is waiting for review.


Abstract build image ensuring and building

This is setup work, to enable SDK build images to also take advantage of the same scaffolding we use to only rebuild build images once they have changed.
Functionality is exactly the same!

@Kuqd I think this will come in handy for the SDK build images. Let me know if you think there are further improvements I can do to make things better :+1:


ENH, BUG: Retain Epochs.baseline after cropping; replace baseline=(None, None) with (tmin, tmax)

Partial cropping of an Epochs baseline will now correctly inform the user that baseline correction has been switched off. Previously, this warning would only be issued if the entire baseline period was removed
If a baseline tuple containing one or two None values – e.g. (None, 0), (0, None), or (None, None) – is passed to Epochs or Epochs.apply_baseline, those None value(s) will be replaced with the actual time (i.e., Epochs.tmin and Epochs.tmax, respectively) when populatingEpochs.baseline This makes it possible (or at least easier) to later figure out whether we're cropping away parts of an existing baseline.

This is work that's laying the ground for resolving #8216
Probably should also be backported?

Partial cropping of an Epochs baseline will now correctly inform the user that baseline correction has been switched off.

I don't think this is the right approach. I think we should make it so that there is no longer a requirement that the baseline period be within tmin, tmax instead.

Partial cropping of an Epochs baseline will now correctly inform the user that baseline correction has been switched off.

I don't think this is the right approach. I think we should make it so that there is no longer a requirement that the baseline period be within tmin, tmax instead.

I'm not sure I understand?
What I want to change in a followup PR is if we crop BL-corrected Epochs, we would retain the baseline attribute and the repr would essentially tell you, "these Epochs were BL-corrected for the following BL-period, which doesn't exist anymore"
Is that where you would like to go too?

Just trying to make super small incremental steps to reduce the risk of introducing bugs

No, I want to make it so that we no longer require the two values in epochs.baseline to be in the interval (tmin, tmax). Concretely I would:

Convert None entries in a baseline tuple to float values at some point. I'm thinking right now that this should probably be when the value of None would change effective value. In other words:
epochs = mne.Epochs(..., tmin=-0.2, baseline=(None, 0))
assert epochs.baseline == (None, 0)
epochs.crop(-0.1, None)
assert epochs.baseline == (-0.2, 0)  # because None is wrong, we need to insert the float

An alternative would be to always convert None values in an epochs.baseline tuple to float. This is probably simpler, and might be okay to do as well.
It's not clear to me yet if we need to place restrictions on whether or not data needs to be preloaded for this to work. For example, if data is not preloaded in the case above, in _get_epoch_from_raw or whatever, we actually have to be more careful, because we'll need to load from min(bmin, tmin) to max(bmax, tmax) rather than just loading from tmin to tmax.

Allow epochs.baseline values to be outside the range (tmin, tmax) (necessary for the above to work).

No, I want to make it so that we no longer require the two values in epochs.baseline to be in the interval (tmin, tmax). Concretely I would:

Convert None entries in a baseline tuple to float values at some point. I'm thinking right now that this should probably be when the value of None would change effective value [...]
An alternative would be to always convert None values in an epochs.baseline tuple to float. This is probably simpler, and might be okay to do as well.

This behavior is currently implemented in this PR. I like it because it's explicit, and when you look at the repr of the Epochs, you get explicit baseline values instead of e.g. [None, 0]:
epochs = mne.Epochs(raw, events, baseline=(None, 0), preload=True)
assert epochs.baseline == (epochs.tmin, 0)

epochs.crop(0, None)
assert epochs.baseline is None

This behavior is currently implemented in this PR. I like it because it's explicit, and when you look at the repr of the Epochs, you get explicit baseline values instead of e.g. [None, 0]:

I can live with this behavior. I can see advantages of each.
But I don't like the first part of the PR:

Partial cropping of an Epochs baseline will now correctly inform the user that baseline correction has been switched off. Previously, this warning would only be issued if the entire baseline period was removed

I don't think we need it because in my plan we make it so that the baseline period is not removed and can always be reported properly.

I don't think we need it because in my plan we make it so that the baseline period is not removed and can always be reported properly.

Yes yes yes, if I'm getting you correctly, this is exactly what I had initially planned for a follow-up PR. We're talking about this intended behavior, right?
baseline = (None, 0)
epochs = mne.Epochs(raw, events, baseline=baseline, preload=True)
epochs.crop(0, None)
assert epochs.baseline == baseline

Yes yes yes, if I'm getting you correctly, this is exactly what I had initially planned for a follow-up PR. We're talking about this intended behavior, right?

As long as you really mean for the last line:
assert epochs.baseline == (epochs.times[0], 0)  # not (None, 0)!

Then yes this is the behavior I have in mind.
But why add this other, seemingly unrelated new behavior ("Partial cropping of an Epochs baseline will now correctly inform the user that baseline correction has been switched off.") in this PR if it's immediately going to be removed by the next PR, which will avoid the removal / "switch off" part? I don't think we should do this, i.e., it should be removed from this PR.
We should not backport any of this stuff BTW because we want months to test it out and make sure we're not breaking things.

Had to update my above comment, it shouldn't be (epochs.times[0], 0) but rather whatever the original first time was, i.e., (-0.2, 0)

Had to update my above comment, it shouldn't be (epochs.times[0], 0) but rather whatever the original first time was, i.e., (-0.2, 0)

Yes this is what I had in mind. Sorry, got mixed up going those back-and-forth between our discussion and my code.
I agree we should probably do this all at once in this PR. I won't have time to work on it for a few days I'm afraid, but happy to pick it up again very soon.

I've tried to implement what we discussed, but I'm in need of a break and will have to look at this again later tonight with hopefully fresh(er) eyes. This just to say, still WIP, and needs a little more thinking

Let's see if tests pass now.
I personally feel it's not so easy to intuitively grasp what I've done here just by looking at the altered code & tests. I will try to update one or more examples to demonstrate the new behavior.

(btw no clue how to fix the Circle issue. Doc building chokes on
:attr:`~mne.Epochs.baseline`

in latest.inc. I've tried a number of different things but cannot seem to get it to work. This, however, works just fine:
:attr:`~mne.Epochs.tmin`

maybe because it's a property..?

Yes properties and attributes are documented differently by NumpyDoc and what works for one will not necessarily work for the other

Yes properties and attributes are documented differently by NumpyDoc and what works for one will not necessarily work for the other

@hoechenberger nowadays we don't even need the :role: specification for things within the MNE namespace. So if the property/attribute is linkable (which I think is determined by presence in doc/python_reference.rst), it should be possible as
`~mne.Epochs.baseline`

@drammock
Thanks or the hints! However I've tried using

`~mne.Epochs.baseline`

and it's not woring either. I've also tried adjusting doc/python_reference.rst (although Epochs is already listed there), no luck. For now I'm just going to use
``Epochs.baseline``

without linking :\

Ok it's actually not that complicated after all :) The altered cropping behavior is demonstrated in https://23393-1301584-gh.circle-artifacts.com/0/dev/auto_tutorials/epochs/plot_10_epochs_overview.html#selection-in-the-time-domain
Further changes
# %%
import os
import mne

sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample',
                                    'sample_audvis_raw.fif')
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False).crop(tmax=60)
events = mne.find_events(raw, stim_channel='STI 014')

Nones in baseline are replaced with their respective times (tmin, tmax), and an info message is issued
baseline = (None, None)
epochs = mne.Epochs(raw, events, tmin=-0.3, tmax=0.7,
                    baseline=baseline)

print(f'\nbaseline is: {epochs.baseline}')

Output:
Not setting metadata
Not setting metadata
86 matching events found
Setting baseline interval to [-0.2996928197375818, 0.6992832460543575] sec   <-- NEW
Applying baseline correction (mode: mean)
Created an SSP operator (subspace dimension = 3)
3 projection items activated

baseline is: (-0.2996928197375818, 0.6992832460543575)  <-- NEW: None's were replaced

Instantiating Epochs with a baseline that's out of the data range will now produce an info message and adjust the interval:
baseline = (-1000, 0)  # Would raise on `master`
epochs = mne.Epochs(raw, events, tmin=-0.3, tmax=0.7,
                    baseline=baseline)

print(f'\nbaseline is: {epochs.baseline}')

Output:
Not setting metadata
Not setting metadata
86 matching events found
Baseline interval [-1000.0, 0.0] sec is outside of epoch data [-0.2996928197375818, 0.6992832460543575] sec
Setting baseline interval to [-0.2996928197375818, 0.0] sec
Applying baseline correction (mode: mean)
Created an SSP operator (subspace dimension = 3)
3 projection items activated

baseline is: (-0.2996928197375818, 0.0)

At one point this made it easier for me to load Epochs with cropped ("invalid") baseline periods from disk. If this behavior is undesired, I will have to look into this again (I don't remember the details anymore)

Instantiating Epochs with a baseline that's out of the data range will now produce an info message and adjust the interval:

Please do not do this. It does not reflect what was done to the data and is not part of the plan I keep pushing, see for example point (2) above.

Instantiating Epochs with a baseline that's out of the data range will now produce an info message and adjust the interval:

Please do not do this. It does not reflect what was done to the data and is not part of the plan I keep pushing, see for example point (2) above.

Ok I will rework this part.

... in particular, doing Epochs(tmin=-0.2 tmax=0.7, baseline=(-0.3, 0.7) should raise an error. If you do epochs = Epochs(tmin=-0.2, tmax=0.7, baseline=(-0.2, 0.7) it should be fine and even epochs.crop(0, 0.5); assert epochs.baseline == (-0.2, 0.7) should eventually work, but probably not in this PR (it's separable).

even epochs.crop(0, 0.5); assert epochs.baseline == (-0.2, 0.7) should eventually work, but probably not in this PR

That's actually already implemented here 😅 seems I got priorities wrong. Will rework things.

If it makes sense to do it all as part of this PR it's fine by me. I don't know what's going to be easiest actually, as different parts of the code interact a lot.

different parts of the code interact a lot.

Yep, that's been giving me a headache :) Thanks for taking the time to review and discuss approaches and my attempts, I'm learning as we move along…

@larsoner It passes your proposed tests:
# %%
import os
import mne

sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample',
                                    'sample_audvis_raw.fif')
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False).crop(tmax=60)
events = mne.find_events(raw, stim_channel='STI 014')

# %%
# raises a ValueError
epochs = mne.Epochs(raw, events=events,
                    tmin=-0.2, tmax=0.7,
                    baseline=(-0.3, 0.7))

# %%
# Good
epochs = mne.Epochs(raw, events=events,
                    tmin=-0.2, tmax=0.7,
                    baseline=(-0.2, 0.7))

# %%
# Good
epochs = mne.Epochs(raw, events=events,
                    tmin=-0.2, tmax=0.7,
                    baseline=(-0.2, 0.7))

epochs.load_data().crop(0, 0.5)
assert epochs.baseline == (-0.2, 0.7)

Passes as well:
# %%
import numpy as np

epochs = mne.Epochs(raw, events=events,
                    tmin=-0.2, tmax=0.7,
                    baseline=(-0.2, 0.7))

epochs.load_data().crop(0, 0.5)
epochs.save('/tmp/epo.fif', overwrite=True)
epochs = mne.read_epochs('/tmp/epo.fif')
np.testing.assert_allclose(epochs.baseline, (-0.2, 0.7))

And, lastly, of course:
# %%
# Good
epochs = mne.Epochs(raw, events=events,
                    tmin=-0.2, tmax=0.7,
                    baseline=(None, 0))

assert epochs.baseline == (epochs.tmin, 0)

Should be able to look tomorrow

Another test:
# %%
# Good
import numpy as np

epochs = mne.Epochs(raw, events=events,
                    tmin=-0.2, tmax=0.7,
                    baseline=(-0.2, 0.7))

epochs.load_data().crop(0, 0.5)
epochs.save('/tmp/epo.fif', overwrite=True)
epochs_loaded = mne.read_epochs('/tmp/epo.fif', preload=False)

epochs_loaded.load_data()
np.testing.assert_array_almost_equal(epochs.get_data(),
                                     epochs_loaded.get_data())

Changes look surprisingly readable!

Yes, this actually made me a bit suspicious ;) Will add more tests as you suggested! Thanks for the review!

@hoechenberger it would be great to have this for 0.22 -- any chance you can add the tests quickly so we can have at least a week or two of this code in master before we release it in 0.22?

@larsoner I will work on this tomorrow if it's okay with @agramfort? Hopefully the tests will all pass and not reveal a major screwup ;)

@larsoner I've added some tests as suggested

@cbrnr @drammock @sappelhoff @jasmainak
I you have an existing processing pipeline / scripts at hand, it would be amazing if you could check out this branch and see if it breaks your stuff. I still don't trust it 100%, even though we have good test coverage now.

I don't really have a pipeline for ERP processing because I mostly work with ERD/ERS. However, in one of our current studies we will actually analyze ERPs, but this will probably take too long to serve as a test for this PR. Therefore, I'll have to pass on this one.

Thanks anyway, @cbrnr!

@larsoner your call? merge?

Thanks @hoechenberger !


feat: Amazon EventBridge Extractor

Summary of Changes
Added a new extractor for fetching schema metadata from AWS EventBridge schema registries.
Tests
Added databuilder/tests/unit/extractor/test_eventbridge_extractor.py for testing the new extractor.
Documentation
Updated README.md and databuilder/README.md to reflect the addition of the new extractor.
CheckList
Make sure you have checked all steps below to ensure a timely review.

[X] PR title addresses the issue accurately and concisely. Example: "Updates the version of Flask to v1.0.2"

In case you are adding a dependency, check if the license complies with the ASF 3rd Party License Policy.

[X] PR includes a summary of changes.
[X] PR adds unit tests, updates existing unit tests, OR documents why no test additions or modifications are needed.
[X] In case of new functionality, my PR adds documentation that describes how to use it.

All the public functions and the classes in the PR contain docstrings that explain what it does

thanks @kahrabian for the contribution!


Error when trying to use the search bar

Everytime I try to use the search bar, it sends this error:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='amundsensearch', port=5000): Max retries exceeded with url: /search_table (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f0b409e9f90>: Failed to establish a new connection: [Errno -2] Name or service not known')), 2020-09-15T15:10:59+0000.877 [DEBUG] action_log_callback.on_post_execution:67 (16:MainThread) - Calling callbacks: [<function logging_action_log at 0x7f0b40ec0f80>], 2020-09-15T15:10:59+0000.877 [DEBUG] action_log_callback.logging_action_log:82 (16:MainThread) - logging_action_log: ActionLogParams(command='_search_table', start_epoch_ms=1600182649866, end_epoch_ms=1600182659876<EMAIL_ADDRESS>host_name='aa530585ed3d', pos_args_json='[]', keyword_args_json='{"filters": {"tag": ["low_quality"]}, "search_term": "", "page_index": 0, "search_type": "update_filter"}', output='{"search_term": "", "msg": "Encountered exception: HTTPConnectionPool(host=\'amundsensearch\', port=5000): Max retries exceeded with url: /search_table (Caused by NewConnectionError(\'<urllib3.connection.HTTPConnection object at 0x7f0b409e9f90>: Failed to establish a new connection: [Errno -2] Name or service not known\'))", "tables": {"page_index": 0, "results": [], "total_results": 0}}', error=None) in the Amundsen frontend container.
However, in the neo4j the data used for the test seems to be available:

I am using the current verison in the docker-compose.yml in a linux environment.
I would like to know if someone had a similar problem and would give me some help to solve this problem.
Any ideas?

the search is powered by the elasticsearch which you need to run a 2nd job to index the search.

What it means to run a 2nd job to index the search? I tested using the example/scripts/sample_data_loader.py file. Do I have to add some code in this in order to make the search works?

I also cannot acess the port 5001 and 5002 which is correpondent to Amundsen metadata and search respectively, because the message "Not found" appears. Is that part of the problem maybe?


Vulcanize mangles javascript code containing -->

After running vulcanize on elements.html which imports an element containing:
<script language="JavaScript" type="text/javascript" src="../../bower_components/jsrsasign/jsrsasign-latest-all-min.js"></script>

if (f-- > 0)

is changed to
if (f--\x3e0)

and causing polyclean to choke :
https://github.com/PolymerLabs/polybuild/issues/27

The problem is that any occurrence of  -->0 is rewritten as --\x3e0..

Note that the original file jsbn.js used (f-- > 0) but when it was minified into the jsrsasign components... it was simplified to (f-->0)

+1, thanks for figuring this out @zboralski!!

@azakus Could this be caused by the included uglify change?

Possibly. --inline-script will try to escape </script> https://github.com/Polymer/vulcanize/blob/master/third_party/UglifyJS2/output.js#L55-L57

+1 thanks @zboralski

Thanks for figuring this out.  I encountered this problem with -->  in a js comment (I was using it as an arrow).

I don't know in which cases script tags should be escaped, but turning it off in
https://github.com/Polymer/polymer-bundler/blob/master/src/import-utils.ts#L209
fixes the issue. Is it safe or will it break some other use cases?


[Bug]: 2 errors on login after March 22/24 update, making addon not function at all

Are you using the latest version of the addon?

[X] Yes
[ ] No

Addon Version
Version 1.8.86 - Date: 2024-03-22 @ 23:08 UTC
Did you try having only this addon enabled?

[ ] Yes
[X] No

Current Behavior
Error on login, bars are not displayed for any fight or mode and skin options have been reset.
Reverting to 1.8.85 has no issues.
Expected Behavior
No errors, navigating through options to function.
Lua Error
First error, on login:
12x Skada/Core/Display/Bar.lua:1067: bad argument #3 to 'SetFont' (Usage: self:SetFont(fontFile, height, flags))
[string "=[C]"]: in function `SetFont'
[string "@Skada/Core/Display/Bar.lua"]:1067: in function `ApplySettings'
[string "@Skada/Core/Core.lua"]:2271: in function `ApplySettings'
[string "@Skada/Core/Core.lua"]:1020: in function `CreateWindow'
[string "@Skada/Core/Core.lua"]:2343: in function `ReloadSettings'
[string "@Skada/Core/Core.lua"]:2463: in function <Skada/Core/Core.lua:2431>
[string "=[C]"]: ?
[string "@Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:66: in function <Ace3/AceAddon-3.0/AceAddon-3.0.lua:61>
[string "@Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:523: in function `EnableAddon'
[string "@Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:626: in function <Ace3/AceAddon-3.0/AceAddon-3.0.lua:611>
[string "=[C]"]: ?
[string "=[C]"]: in function `LoadAddOn'
[string "@FrameXML/UIParent.lua"]:572: in function `UIParentLoadAddOn'
[string "@Rarity/Core/Collections.lua"]:63: in function `ScanToys'
[string "@Rarity/Core/Collections.lua"]:282: in function `ScanExistingItems'
[string "@Rarity/Core.lua"]:178: in function `DoEnable'
[string "@Rarity/Core.lua"]:150: in function <Rarity/Core.lua:149>
[string "=[C]"]: ?
[string "@Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:66: in function <Ace3/AceAddon-3.0/AceAddon-3.0.lua:61>
[string "@Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:523: in function `EnableAddon'
[string "@Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:626: in function <Ace3/AceAddon-3.0/AceAddon-3.0.lua:611>

Error when switching between modes and fights:
8x Skada/Modules/Damage.lua:823: attempt to call method 'FormatNumber' (a nil value)
[string "@Skada/Modules/Damage.lua"]:823: in function `GetSetSummary'
[string "@Skada/Core/Core.lua"]:636: in function `UpdateDisplay'
[string "@Skada/Core/Core.lua"]:2056: in function `UpdateDisplay'
[string "@Skada/Core/Core.lua"]:895: in function `DisplayModes'
[string "@Skada/Core/Core.lua"]:953: in function `RightClick'
[string "@Skada/Core/Display/Bar.lua"]:76: in function <Skada/Core/Display/Bar.lua:65>

Reproduction Steps

Log in
Right-click and click the different time segments/modes in Skada.

Last Good Version
Last stable version I believe, which would be 1.8.85
Screenshots
No response

Hi and thanks for reporting the issue @aa-chrismcfadyen .
Please try with only Skada enabled, no other addon. If it works then it's a conflict issue and only by enabling your add-ons one by one you can find out.

I was going to spend a couple hours today figuring out if it was other addons (I have 197 of them, so it would've been a while), but the last couple updates have fixed the error on login and everything seems to work well.  I lost my settings, but I had a backup SavedVariables file that I was able to use.  Thanks for saving me that time!


Write using-helpers with content from Will's guide and my own modificati...

Can you add a section on @contextDump?


Question: How to upload custom logs as part of test execution?

Hello.
During test run our app under test generates some logs, how can we attached these logs to test run automatically  by run test task and be available here

You can use the TestContext and do TestContext.AddResultFile or drop files to the results directory property https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.testcontext.aspx

Thanks a lot


[Snyk] Upgrade firebase from 9.9.3 to 9.9.4

This PR was automatically created by Snyk using the credentials of a real user.Snyk has created this PR to upgrade firebase from 9.9.3 to 9.9.4.

:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.

The recommended version is 8 versions ahead of your current version.
The recommended version was released a month ago, on 2022-09-02.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.
For more information:
🧐 View latest project report
🛠 Adjust upgrade PR settings
🔕 Ignore this dependency or unsubscribe from future upgrade PRs

Codecov Report
Base: 81.64% // Head: 81.64% // No change to project coverage :thumbsup:

Coverage data is based on head (cf2bc13) compared to base (8bfd99e).
Patch has no changes to coverable lines.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #367   +/-   ##
=======================================
  Coverage   81.64%   81.64%
=======================================
  Files          31       31
  Lines         414      414
  Branches       59       59
=======================================
  Hits          338      338
  Misses         70       70
  Partials        6        6

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

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


Update MenuExtension.php

Without spaces, the attributes stick to each other, e.g.
<a href="#" class="nav-link"id="navbarDropdownMenuLink"data-toggle="dropdown" ...

Thank you for the correction.