text:
A+C: Add Fabian Wickborn

As requested by @sbinet in https://github.com/gonum/plot/pull/415#issuecomment-747400180.

lc "Add" in commit message, but otherwise LGTM.

lc "Add" in commit message, but otherwise LGTM.

Codecov Report

Merging #1548 (ea3dafb) into master (676e415) will decrease coverage by 0.00%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1548      +/-   ##
==========================================
- Coverage   71.46%   71.46%   -0.01%
==========================================
  Files         474      474
  Lines       54067    54067
==========================================
- Hits        38641    38640       -1
- Misses      13032    13033       +1
  Partials     2394     2394

Impacted Files
Coverage Δ

optimize/listsearch.go
72.22% <0.00%> (-1.86%)
:arrow_down:

Continue to review full report at Codecov.

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

Codecov Report

Merging #1548 (ea3dafb) into master (676e415) will decrease coverage by 0.00%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1548      +/-   ##
==========================================
- Coverage   71.46%   71.46%   -0.01%
==========================================
  Files         474      474
  Lines       54067    54067
==========================================
- Hits        38641    38640       -1
- Misses      13032    13033       +1
  Partials     2394     2394

Impacted Files
Coverage Δ

optimize/listsearch.go
72.22% <0.00%> (-1.86%)
:arrow_down:

Continue to review full report at Codecov.

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

ICYMI I did s/Add/add/

ICYMI I did s/Add/add/

Thank you for your patience and apologies for the extremely long delay.

Thank you for your patience and apologies for the extremely long delay.

authors: codecov-io fawick kortschak

repo: gonum/gonum


text:
Create a gist to an .md file for community based WebAR demos

Create a gist so developers can comment and provide links to the experiments they build using the prototype browsers and three.ar.js. We will need proper documentation both in the repos and in the devsite to explain how the gist works and how to add new links. The devsite should have a link to the experiments .md file.

Created a gist:
https://gist.github.com/jsantell/871d7e709e5007533f3bf07c35434e29

source: gharchive/issue

authors: jsantell judax

license_type: permissive

license_source: bigquery


text:
Require jax<0.4.14 in tests for flax==0.5.3 compatibility

Patch for #568.
Split from #567 for reuse elsewhere.

Resolved by https://github.com/google-deepmind/optax/commit/4c04ca57474b2b08bc1fcd71a624aa82c4d6a14e

source: gharchive/pull-request

repo: google-deepmind/optax

license_source: github-api


text:
Android Basics: classes-and-inheritance

URL of codelab
https://developer.android.com/codelabs/basic-android-kotlin-training-classes-and-inheritance?continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-kotlin-unit-2-pathway-1%3Fauthuser%3D3%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-training-classes-and-inheritance&authuser=3#4
In which task and step of the codelab can this issue be found?
5. Modify classes in the hierarchy > Fit a carpet into a round dwelling
Describe the problem

The formula for fitting a rectangle into a circle is the square root of the diameter squared divided by 2: sqrt (diameter * diameter / 2)
This given formula is incorrect. The correct formula for the area of a  square inscribed in a circle with radius r is 2rr.

Steps to reproduce?

Go to...
Click on...
See error...

Versions
Android Studio version:
API version of the emulator:
Additional information
Include screenshots if they would be useful in clarifying the problem.

This is already discussed in issue #67. I should have searched existing issues before reporting.


text:
Android Basics: change-app-theme

3. Themes
Create an Empty Activity project
After copy-paste .XML code on android studio ide alarm about the error in code because it doesn't have in dependencies "com.google.android.material".  I'm decide this problem with insert on dependencies implementation 'com.google.android.material:material:1.5.0-alpha01
For my mind will be helpful add some hint about this.
Android Studio 4.2.2
Build #AI-202.7660.26.42.7486908, built on June 24, 2021
Runtime version: 11.0.8+0-b944-P17168821 amd64
VM: OpenJDK 64-Bit Server VM by N/A
Linux 5.4.0-77-generic
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 4
Registry: external.system.auto.import.disabled=true

Current Desktop: ubuntu:GNOME
``

@MIklgr500
Thank you for reaching out to us and reporting your concern. With the latest Android Studio Bumblebee version, it's already imported by default so no need to update the codelab content.


text:
Some questions about the reported results

Thanks a lot for your released codes and your excellent work. I have some questions about the reported results in your paper.
(1) Does the reported results are obtained by calculating the mean accuracy value of the latest several (e.g., 20) iterations/batchs/epochs during the training phase or just select the best accuracy of someone iteration/batch/epoch, or any other protocols?
(2) Your paper illustrates that all results are obtained by final EMA model. I re-implemented and re-trained FixMatch and found that some results of student model are similar with yours while the results of final EMA model are better. I want to know why.
(3) About the total training iterations with images/epochs: in your codes, the total training images seems 1<<16 (65536). Does this mean the model is trained with totally 65536 images or 65536 labeled images? If the former, for CIFAR10-x40, is the total epoch 65536/~40000 = ~1.6, or if the latter, it is 65536/40=~1638 epochs?

Many thanks. I will see the codes in detail again.
About (2), it seems about 2 points better on CIFAR-10-x40, but I just only train models with two seeds and maybe the results highly depend on them.

repo: google-research/fixmatch


text:
Questions regarding TF.Keras fine-tuned model and support for TF2.0

Hi there, First of all excellent work.  I am curious if there are any examples available on using it for TF.Keras model which uses transfer learning (fine-tuned) with pre-trained model such as resnet or inceptionv3? and what is the current support for tensorflow 2.0. I saw there it still uses sessions in the example code section.

I am curious if there are any examples available on using it for TF.Keras model which uses transfer learning (fine-tuned) with pre-trained model such as resnet or inceptionv3?

No, we don't. We hope to update with more examples over time.

what is the current support for tensorflow 2.0

No support at the moment. We rely on parsing the graph to regularize the model, so support for TF 2.0 will require a substantial effort.

authors: kshitizrimal pkch

repo: google-research/morph-net


text:
Question about  action_tokens usage in _assemble_input_token_sequence

Hi, thanks for your great job!
I have read all the code and found that in the function transformer_network::_assemble_input_token_sequence,  action_tokens  are used to be a kind of input, but the values all are set to be zero(**action_tokens = tf.zeros_like(action_tokens)  **).
My question is that why not use the data here? Have you done any experiment proving that it works bad?
Thanks for your attention and keep waiting for your kind response!
`
def _assemble_input_token_sequence(self, context_image_tokens, action_tokens,   batch_size):
action_tokens = tf.one_hot(action_tokens, self._vocab_size)

action_tokens = self._action_token_emb(action_tokens)

action_tokens = tf.zeros_like(action_tokens)

action_tokens = tf.expand_dims(action_tokens, axis=-2)

input_token_sequence = tf.concat([context_image_tokens, action_tokens],  axis=2)

input_token_sequence = tf.reshape(  input_token_sequence, [batch_size, -1, self._token_embedding_size])

return input_token_sequence

`

I have the same question.
I was wondering how actions are specifically input into the model since the paper lacks that detail and I was looking into this repository.
And what is b/260260205 and b/254902773 referring to?


text:
ValueError: None values not supported

upon running a seqio mixture on mT5 and ByT5 i get and error stating:  ValueError: None values not supported
I currently am using a seqio mixture that i define in my task.py file and use the default mt5 tokenizer gs://t5-data/vocabs/mc4.250000.100extra/sentencepiece.model with extra_ids=0
This is how my task.py file looks
import functools
import seqio
import tensorflow as tf
import t5.data
from datasets import load_from_disk, load_dataset
from t5.data import postprocessors
from t5.data import preprocessors
from t5.evaluation import metrics
from seqio import FunctionDataSource, utils

TaskRegistry = seqio.TaskRegistry
vocabulary = seqio.SentencePieceVocabulary('gs://t5-data/vocabs/mc4.250000.100extra/sentencepiece.model', extra_ids=0)

DEFAULT_OUTPUT_FEATURES = {
    "inputs": seqio.Feature(
        vocabulary=vocabulary, add_eos=True,
        required=False),
    "targets": seqio.Feature(
        vocabulary=vocabulary, add_eos=True)
}

def gen_dataset(split, shuffle=False, seed=None, column="text", dataset_path=None):
    dataset = load_dataset(dataset_path, streaming=True, use_auth_token=True)
    if shuffle:
        if seed:
            dataset = dataset.shuffle(seed=seed)
        else:
            dataset = dataset.shuffle()
    while True:
        for item in dataset[str(split)]:
            yield item[column]

def dataset_fn(split, shuffle_files, seed=None, dataset_path=None):
    return tf.data.Dataset.from_generator(
        functools.partial(gen_dataset, split, shuffle_files, seed, dataset_path=dataset_path),
        output_signature=tf.TensorSpec(shape=(), dtype=tf.string, name=dataset_path)
    )

@utils.map_over_dataset
def target_to_key(x, key_map, target_key):
    """Assign the value from the dataset to target_key in key_map"""
    return {**key_map, target_key: x}

# link to the mt5 sentencepiece tokenizer vocabulary
vocabulary = seqio.SentencePieceVocabulary('gs://t5-data/vocabs/mc4.250000.100extra/sentencepiece.model', extra_ids=0)

TaskRegistry.add(
    "hindi_span_curruption",
    source=seqio.FunctionDataSource(
        dataset_fn=functools.partial(dataset_fn, dataset_path='StephennFernandes/ciil_mega_corpus_hindi'),
        splits=("train", "validation"),
        caching_permitted=False),
    preprocessors=[
        functools.partial(
            target_to_key, key_map={
                "inputs": None,
                "targets": None,
            }, target_key="targets"),
        seqio.preprocessors.tokenize,
        # seqio.CacheDatasetPlaceholder(),
        preprocessors.span_corruption,
        seqio.preprocessors.append_eos_after_trim,
    ],
    output_features={"targets": DEFAULT_OUTPUT_FEATURES["targets"],"inputs": seqio.Feature(vocabulary=vocabulary,add_eos=True)},
    metric_fns=[]
)
### similar multiple tasks exist for multiple languages. ###

seqio.MixtureRegistry.add(
  "ciil_mix_3",
  ["assamese_span_curruption", "bengali_span_curruption",
  "bhisnupuriya_span_curruption", "bodo_span_curruption",
  "divehi_span_curruption", "dogri_span_curruption",
  "english_span_curruption", "gujarati_span_curruption",
  "hindi_span_curruption", "kannada_span_curruption",
  "kashmiri_span_curruption", "konkani_span_curruption",
  "maithili_span_curruption", "malayalam_span_curruption",
  "manipuri_span_curruption", "marathi_span_curruption",
  "nepali_span_curruption", "odia_span_curruption",
  "panjabi_span_curruption", "sanskrit_span_curruption",
  "tamil_span_curruption", "telugu_span_curruption",
   "urdu_span_curruption" ],
  default_rate=3
)

i use the ciil_mix_3 mixture in my .gin file
this is how my .gin file looks
from __gin__ import dynamic_registration
import t5.data.mixtures
import __main__ as train_script

include 't5x/examples/t5/mt5/base.gin'
include 't5x/configs/runs/pretrain.gin'

import task

MIXTURE_OR_TASK_NAME = "ciil_mix_3"
TASK_FEATURE_LENGTHS = {"inputs": 512, "targets": 114}
TRAIN_STEPS = 100000
DROPOUT_RATE = 0.0
BATCH_SIZE = 32

train_script.train:
  eval_period = 2000

The following is the entire stack track of the same:
Traceback (most recent call last):
  File "/home/stephen/anaconda3/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/home/stephen/anaconda3/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/train.py", line 748, in <module>
    gin_utils.run(main)
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/gin_utils.py", line 107, in run
    app.run(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/absl/app.py", line 308, in run
    _run_main(main, args)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/absl/app.py", line 254, in _run_main
    sys.exit(main(argv))
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/train.py", line 708, in main
    _main(argv)
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/train.py", line 744, in _main
    train_using_gin()
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/gin/config.py", line 1605, in gin_wrapper
    utils.augment_exception_message_and_reraise(e, err_str)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/gin/utils.py", line 41, in augment_exception_message_and_reraise
    raise proxy.with_traceback(exception.__traceback__) from None
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/gin/config.py", line 1582, in gin_wrapper
    return fn(*new_args, **new_kwargs)
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/train.py", line 249, in train
    train_ds = get_dataset_fn(train_dataset_cfg, ds_shard_id, num_ds_shards,
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/utils.py", line 1366, in get_dataset
    return get_dataset_inner(cfg, shard_info, feature_converter_cls, seed,
  File "/home/stephen/Desktop/t5x_final_test/t5x/t5x/utils.py", line 1387, in get_dataset_inner
    ds = seqio.get_dataset(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/dataset_providers.py", line 1671, in get_dataset
    ds = mixture_or_task.get_dataset(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/dataset_providers.py", line 1457, in get_dataset
    datasets = [
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/dataset_providers.py", line 1458, in <listcomp>
    task.get_dataset(  # pylint:disable=g-complex-comprehension
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/dataset_providers.py", line 1209, in get_dataset
    ds = self.preprocess_postcache(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/dataset_providers.py", line 1044, in preprocess_postcache
    dataset = self._preprocess_dataset(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/dataset_providers.py", line 965, in _preprocess_dataset
    dataset = prep_fn(dataset, **kwargs)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/preprocessors.py", line 83, in tokenize
    return utils.map_over_dataset(fn=tokenize_fn)(dataset)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/utils.py", line 778, in wrapped_fn
    return ds.map(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 2050, in map
    return ParallelMapDataset(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 5284, in __init__
    self._map_func = structured_function.StructuredFunctionWrapper(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/data/ops/structured_function.py", line 271, in __init__
    self._function = fn_factory()
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/eager/function.py", line 2567, in get_concrete_function
    graph_function = self._get_concrete_function_garbage_collected(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/eager/function.py", line 2533, in _get_concrete_function_garbage_collected
    graph_function, _ = self._maybe_define_function(args, kwargs)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/eager/function.py", line 2711, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/eager/function.py", line 2627, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/framework/func_graph.py", line 1141, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/data/ops/structured_function.py", line 248, in wrapped_fn
    ret = wrapper_helper(*args)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/data/ops/structured_function.py", line 177, in wrapper_helper
    ret = autograph.tf_convert(self._func, ag_ctx)(*nested_args)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 692, in wrapper
    raise e.ag_error_metadata.to_exception(e)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 689, in wrapper
    return converted_call(f, args, kwargs, options=options)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 439, in converted_call
    result = converted_f(*effective_args, **kwargs)
  File "/tmp/__autograph_generated_fileu9gu1w4n.py", line 8, in <lambda>
    tf__lam = lambda arg: ag__.with_function_scope(lambda lscope: ag__.converted_call(fn, (arg,) + tuple(args), dict(**kargs), lscope), 'lscope', ag__.STD)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/core/function_wrappers.py", line 113, in with_function_scope
    return thunk(scope)
  File "/tmp/__autograph_generated_fileu9gu1w4n.py", line 8, in <lambda>
    tf__lam = lambda arg: ag__.with_function_scope(lambda lscope: ag__.converted_call(fn, (arg,) + tuple(args), dict(**kargs), lscope), 'lscope', ag__.STD)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 352, in converted_call
    return converted_call(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 439, in converted_call
    result = converted_f(*effective_args, **kwargs)
  File "/tmp/__autograph_generated_filezbhafqmt.py", line 113, in tf__tokenize_impl
    ag__.for_stmt(ag__.converted_call(ag__.ld(features).items, (), None, fscope), None, loop_body, get_state_4, set_state_4, (), {'iterate_names': '(k, v)'})
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/operators/control_flow.py", line 449, in for_stmt
    _py_for_stmt(iter_, extra_test, body, None, None)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/operators/control_flow.py", line 498, in _py_for_stmt
    body(target)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/operators/control_flow.py", line 464, in protected_body
    original_body(protected_iter)
  File "/tmp/__autograph_generated_filezbhafqmt.py", line 105, in loop_body
    ag__.if_stmt(ag__.ld(k) in ag__.ld(output_features), if_body_3, else_body_3, get_state_3, set_state_3, ('v',), 1)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/operators/control_flow.py", line 1341, in if_stmt
    _py_if_stmt(cond, body, orelse)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/operators/control_flow.py", line 1394, in _py_if_stmt
    return body() if cond else orelse()
  File "/tmp/__autograph_generated_filezbhafqmt.py", line 63, in if_body_3
    v = ag__.converted_call(ag__.ld(vocab).encode_tf, (ag__.ld(v),), None, fscope)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 441, in converted_call
    result = converted_f(*effective_args)
  File "/tmp/__autograph_generated_filef9jwq2ra.py", line 13, in tf__encode_tf
    retval_ = ag__.converted_call(ag__.ld(self)._encode_tf, (ag__.ld(s),), None, fscope)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 441, in converted_call
    result = converted_f(*effective_args)
  File "/tmp/__autograph_generated_filezpl5g8b_.py", line 21, in tf___encode_tf
    retval_ = ag__.converted_call(ag__.ld(self).tf_tokenizer.tokenize, (ag__.ld(s),), None, fscope)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 441, in converted_call
    result = converted_f(*effective_args)
  File "/tmp/__autograph_generated_filet9vre1mq.py", line 22, in tf__tokenize
    input_tensor = ag__.converted_call(ag__.ld(ragged_tensor).convert_to_tensor_or_ragged_tensor, (ag__.ld(input),), None, fscope)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 377, in converted_call
    return _call_unconverted(f, args, kwargs, options)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py", line 459, in _call_unconverted
    return f(*args)
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/ops/ragged/ragged_tensor.py", line 2683, in convert_to_tensor_or_ragged_tensor
    return ops.convert_to_tensor_v2_with_dispatch(
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/util/traceback_utils.py", line 153, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow/python/framework/tensor_util.py", line 441, in make_tensor_proto
    raise ValueError("None values not supported.")
ValueError: in user code:

    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/utils.py", line 779, in None  *
        lambda arg: fn(arg, *args, **kargs)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/preprocessors.py", line 116, in tokenize_impl  *
        v = vocab.encode_tf(v)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/vocabularies.py", line 114, in encode_tf  *
        return self._encode_tf(s)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/vocabularies.py", line 413, in _encode_tf  *
        return self.tf_tokenizer.tokenize(s)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/tensorflow_text/python/ops/sentencepiece_tokenizer.py", line 133, in tokenize  *
        input_tensor = ragged_tensor.convert_to_tensor_or_ragged_tensor(input)

    ValueError: None values not supported.

  In call to configurable 'train' (<function train at 0x7f79d8db2280>)

I even further tried to work the same with byT5 and the same error occurs:
the following is the error occured using byT5
ValueError: in user code:

    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/utils.py", line 779, in None  *
        lambda arg: fn(arg, *args, **kargs)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/preprocessors.py", line 116, in tokenize_impl  *
        v = vocab.encode_tf(v)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/vocabularies.py", line 114, in encode_tf  *
        return self._encode_tf(s)
    File "/home/stephen/anaconda3/lib/python3.9/site-packages/seqio/vocabularies.py", line 555, in _encode_tf  *
        tf_ids = tf.io.decode_raw(s, tf.uint8) + self._num_special_tokens

    ValueError: Tried to convert 'bytes' to a tensor and failed. Error: None values not supported.

@hwchung27 could you please help me out here

@hwchung27 do you think this is occurring because maybe some of my samples are very short so the span corruption is masking the entire sentence ?
or is it a case where my samples have a blank line in them ?

@craffel @adarob hey guys, sorry to bother you on your busy schedule. but please could you tell me what could be the cause for this error ?
I inititally thought this error could be because my dataset has blank line samples or perhaps have samples that have only 5-6 words that the span curruption task couldn't cover. But even after filtering my dataset for keeping sentences only above 10 words. i still face the same error.
could you please help me out on this.

I don't have time to go through your code but this appears to be saying the value of 'input' is None. I would suggest running the steps of the pipeline before tokenize in a notebook (e.g., Colab) and see if your features look as you expect.
Closing this since it's not an actual T5X bug. Feel free to reopen a Discussion topic to solicit help in debugging your issue.

raised a discussion here @adarob @hwchung27 would really mean a lot if you could help me out on it

authors: StephennFernandes adarob


text:
Run on custom data

Hi,
I am curious if you can guide or confirm how I can use TAPAS framework on my custom data. I couldn't find any resources which talks about this.
Thank you.

Hello @PunitShah1988, this is the current data preparation pipeline:

Each dataset is converted into a TSV file format for the questions and answers, and each table on it's own TSV as well. This is the format that SQA is obtained from the original authors. You can check tapas/utils/task_utils.py for reference.
We read the TSVs and convert into an intermediate format we call Interactions, which contains the questions, answers and table information. From there we convert into tf_examples, which are the numeric features (after text is tokenized and mapped to indexes) that are fed into the model and used for training. This happens in the module tapas/utils/tf_example_utils.py

The colab we added to the repo shows how to create an Interaction, and save it directly as a tf_record. If you do that for all of your data then you can run the train job directly.
Alternatively you can try to get your data into the same format as SQA TSVs or add your own conversion code to task_utils. You may also want to think about which of the three datasets your problem is more similar to, is it conversational (SQA), does it require aggregations (WTQ, WikiSQL), do you have supervision for which cells to aggregate (WIkiSQL), etc...
Hope this helps, good luck!

repo: google-research/tapas


text:
Build layout for queries lists based on v0.5 mockup.

create layout for bullet list based on mockup using sample data

@Jelena0921 so sorry I messed up something in this branch, so I made a new PR and added you as a reviewer there! Thanks so much again :)


text:
Add ray disaggregated serving support

This PR add ray disaggregated serving support in JetStream, the underline engine implementation will be pytorch and maxtext side.
This PR doesn't not impact any current interleave or Pathway disaggregated behavior.

LGTM! May need some unit tests.

Let's explore how to add disaggregated serving unit test and add disaggregated tests before enable disaggregated serving.

LGTM! May need some unit tests.

Let's explore how to add disaggregated serving unit test and add disaggregated tests before enable disaggregated serving.

We could add a simple unit test in test_orchestrator.py and test_server.py just to cover the flag if else logic. The e2e functional test could be added later I guess?

repo: google/JetStream


text:
Fixes #2310 - all reference to material-branch -> master

This will cause a regeneration of every file when we deploy it to production

Staging service also updated as changes to master we getting by-passed (auto-deploy.sh)
All WFGithubBranches are now mater
View Source points to master
Big Rig is also changed

R: @gauntface @petele

LGTM if you are cool with master-dot-web-central.appspot.com over web-central.appspot.con for master

:+1:

authors: PaulKinlan blainesch gauntface

repo: google/WebFundamentals


text:
Add "Media Updates in Chrome 61" /updates article

Hello @mounirlamouri @dalecurtis,
Let me know what you think of this draft.
Live preview at https://pr-4857-dot-web-central.appspot.com/web/updates/2017/07/chrome-61-media-updates

@mounirlamouri Your feedback has been addressed at https://github.com/google/WebFundamentals/pull/4857/commits/ee832e1fe0878ddd50929772b35d6dd97f674b6e. Thanks!

lgtm :+1:

LGTM

Thank you @dalecurtis! I've addressed your feedback.
I'm still using "Automatic video fullscreen when device is rotated" though as "rotate-for-fullscreen" seems cryptic at first glance in my opinion. If you feel strongly, we may want to revisit my decision.

@jpmedley You may review this article now. Thanks!

(gentle ping) @jpmedley

@jpmedley Thank you! I've addressed your feedback and merged back your changes.


text:
Workbox v3.2.0 docs

R: @philipwalton
These are mostly-autogenerated for Workbox v3.2.0, with a few manual tweaks to some of the TOCs to account for the new workbox.streams docs.
CC: @petele

Whoops!
There were 1 warnings that will prevent this PR from being merged. Please take a look, and either fix, or provide a justification for why they can't be fixed.
WARNINGS
src/content/en/tools/workbox/reference-docs/v3.2.0/workbox-build_src_index.js.html#L87 - Common typo found: 'homescreen' Should it be 'home screen'? See: https://developers.google.com/style/word-list#home-screen

:tada: This has been pushed live to https://developers.google.com/web/

authors: WebFundBot jeffposnick


text:
Rename system ui -> application ui

What's changed, or what was fixed?

rename System UI -> Application UI

Target Live Date: ASAP

[ ] This has been reviewed and approved by (NAME)
[X] I have run npm test locally and all tests pass.
[X] I have added the appropriate type-something label.
[X] I've staged the site and manually verified that my content displays correctly.

CC: @petele

:+1:

Digital Marketing! | Work From Home!
Make money online without any expenses!
Our Journey Since 24.12.2012
Subscribe & help us to build a blog !
http://www.mizansurovi1.blogspot.com

:tada: This has been pushed live to https://developers.google.com/web/

authors: WebFundBot mizansurovi petele


text:
While extracting data resource mapper map question item to incorrect question response item if one of them is not enabled.

Describe the bug
Consider Questionnaire has 1, 2, 3, 4 question items, and item 1, 2 are not enabled.
Now, while extracting data, resource mapper maps 1, 2 question item to 3, 4 response item as 1, and 2 response items are disabled.
Expected behavior
Question item should be mapped to relevant response item.
Component
SDC library
To Reproduce
Screenshots
If applicable, add screenshots to help explain your problem.
Smartphone (please complete the following information):

Device: [e.g. Pixel4a emulator]
Android version: [e.g. Settings -> About phone -> Android version]
Build number: [e.g. Settings -> About phone -> Build number]
Version [e.g. 22]

Additional context
Add any other context about the problem here.
Would you like to work on the issue?
Please state if this issue should be assigned to you or who you think could help to solve this issue.

Will work on it.

repo: google/android-fhir


text:
Add index to DateTimeIndexEntity table index_from column

IMPORTANT: All PRs must be linked to an issue (except for extremely trivial and straightforward changes).
Fixes #1944
Description
Index the column that contains _lastUpdatedAt date to improve performance on search/sorting
Alternative(s) considered
Have you considered any alternatives? And if so, why have you chosen the approach in this PR?
No alternative considered
Type
Choose one: (Bug fix | Feature | Documentation | Testing | Code health | Builds | Releases | Other)
Screenshots (if applicable)
Checklist

[x] I have read and acknowledged the Code of conduct.
[x] I have read the Contributing page.
[x] I have signed the Google Individual CLA, or I am covered by my company's Corporate CLA.
[x] I have discussed my proposed solution with code owners in the linked issue(s) and we have agreed upon the general approach.
[x] I have run ./gradlew spotlessApply and ./gradlew spotlessCheck to check my code follows the style guide of this project.
[x] I have run ./gradlew check and ./gradlew connectedCheck to test my changes locally.
[x] I have built and run the demo app(s) to verify my change fixes the issue and/or does not break the demo app(s).

During the testing on my end, I found that the query plan seems to skip this index (_lastUpdatedAt) when used to sort data. But it looks like even though the query plan seems to skip it, having this index makes the query faster See  _lastUpdatedAt Performance Tests discussion.

During the testing on my end, I found that the query plan seems to skip this index (_lastUpdatedAt) when used to sort data. But it looks like even though the query plan seems to skip it, having this index makes the query faster See _lastUpdatedAt Performance Tests discussion.

Got the following response from this query that searches & sort Groups resources to confirm @aditya-07's observation.
EXPLAIN QUERY PLAN SELECT a.serializedResource
FROM ResourceEntity a
         LEFT JOIN DateIndexEntity b
                   ON a.resourceType = b.resourceType AND a.resourceUuid = b.resourceUuid AND b.index_name = '_lastUpdated'
         LEFT JOIN DateTimeIndexEntity c
                   ON a.resourceType = c.resourceType AND a.resourceUuid = c.resourceUuid AND c.index_name = '_lastUpdated'
WHERE a.resourceType = 'Group'
  AND a.resourceUuid IN (SELECT resourceUuid
                         FROM TokenIndexEntity
                         WHERE resourceType = 'Group'
                           AND index_name = 'type'
                           AND (index_value = 'person' AND IFNULL(index_system, '') = 'http://hl7.org/fhir/group-type'))
  AND a.resourceUuid IN (SELECT resourceUuid
                         FROM TokenIndexEntity
                         WHERE resourceType = 'Group'
                           AND index_name = 'code'
                           AND (index_value = '35359004' AND IFNULL(index_system, '') = 'https://www.snomed.org'))
ORDER BY b.index_from DESC, c.index_from DESC
LIMIT 10 OFFSET 0;

12	0	0	SEARCH a USING INDEX index_ResourceEntity_resourceType_resourceId (resourceType=?)
20	0	0	LIST SUBQUERY 1
23	20	0	SEARCH TokenIndexEntity USING INDEX index_TokenIndexEntity_resourceType_index_name_index_system_index_value (resourceType=? AND index_name=?)
46	0	0	LIST SUBQUERY 2
49	46	0	SEARCH TokenIndexEntity USING INDEX index_TokenIndexEntity_resourceType_index_name_index_system_index_value (resourceType=? AND index_name=?)
69	0	0	SEARCH b USING INDEX index_DateIndexEntity_resourceType_index_name_index_from_index_to (resourceType=? AND index_name=?) LEFT-JOIN
80	0	0	SEARCH c USING INDEX index_DateTimeIndexEntity_resourceType_index_name_index_from_index_to (resourceType=? AND index_name=?) LEFT-JOIN
112	0	0	USE TEMP B-TREE FOR ORDER BY


text:
Allow breaking out strings into two translations

Add an icon button in the UI for this function. (Couldn't make the icon-button in the same line with the checkbox and the node id though...).
Action is not saved... Will look into it in a following pr.
Towards #1469

What's the best way to "Undo" this action, or to combine similar text nodes to the same string resource label?

Yes. To undo it, rename the resource label to the one it would like to merge with.

repo: google/automotive-design-compose


text:
closure_js_binary is unable to find goog.async.Deferred

I'm not sure what's up with this, but goog.async.Deferred isn't getting found from the closure library at all for me.
bazel 'query deps(@closure_library/closure_library)' shows the deferred.js being listed, however I'm still getting compiler errors when I try and goog.require('goog.async.Deferred').
I'm fairly certine it's not a ARG_MAX problem.
I'm on OS X Yosemite.
If you need any further information,  just ask. :)

+Kamil Jiwa kjiwa@google.com
On Thu, Jul 2, 2015 at 6:48 PM Amanda Cameron notifications@github.com
wrote:

I'm not sure what's up with this, but goog.async.Deferred isn't getting
found from the closure library at all for me.
bazel 'query deps(@closure_library/closure_library)' shows the
deferred.js being listed, however I'm still getting compiler errors when I
try and goog.require('goog.async.Deferred').
I'm fairly certine it's not a ARG_MAX problem.
I'm on OS X Yosemite.
If you need any further information, just ask. :)
—
Reply to this email directly or view it on GitHub
https://github.com/google/bazel/issues/275.

I can repro this.
When I query that target, I see all of the JS listed under $CLOSURE_LIBRARY_ROOT/closure/goog, but goog.async.Deferred is actually defined in $CLOSURE_LIBRARY_ROOT/third_party/closure/goog/mochikit/async/deferred.js.
The rules should be including the third_party files in the build. In the closure_library JS rule I define srcs to include that directory.
closure_js_library(
    name = "closure_library",
    srcs = glob(
        [
            "closure/goog/**/*.js",
            "third_party/closure/goog/**/*.js",
        ],
        exclude = [
            "closure/goog/**/*_test.js",
            "closure/goog/demos/**/*.js",
        ],
    ),
    visibility = ["//visibility:public"],
)

When I examine the command line being sent to JsCompiler I notice that no third_party files are listed either. This indicates to me that ctx.files.srcs isn't populated with those files either.
Did I misuse glob() or somehow define srcs incorrectly?

It looks ok from my side. I can test and have a look tomorrow morning.

This is the output on my side from bazel query "deps(@closure_library//:closure_library)": http://pastebin.com/yLv35cTx.

This is the output on my side, for reference. a quick grep does show the deferred.js in there, however I'm not sure how to check if it's getting sent to the JsCompile action.
https://gist.github.com/c602db4ec2f77fee13c8

You can check if it's being sent to JsCompiler if you run your build with --verbose_failures. When it fails, the command line should be part of the output.

It's not showing up in bazel build :target --verbose_failures 2>&1 | grep deferred.js

Adding Lukacs to the discussion
On Thu, Jul 2, 2015 at 8:06 PM Amanda Cameron notifications@github.com
wrote:

It's not showing up in bazel build :target --verbose_failures 2>&1 | grep
deferred.js
—
Reply to this email directly or view it on GitHub
https://github.com/google/bazel/issues/275#issuecomment-118112408.

Ugh, I didn't have much time for this and I couldn't reproduce it in what
little time I had today.
On Fri, Jul 3, 2015 at 12:11 PM, Damien Martin-Guillerez <
notifications@github.com> wrote:

Adding Lukacs to the discussion
On Thu, Jul 2, 2015 at 8:06 PM Amanda Cameron notifications@github.com
wrote:

It's not showing up in bazel build :target --verbose_failures 2>&1 | grep
deferred.js
—
Reply to this email directly or view it on GitHub
https://github.com/google/bazel/issues/275#issuecomment-118112408.

—
Reply to this email directly or view it on GitHub
https://github.com/google/bazel/issues/275#issuecomment-118305249.

--
Lukács T. Berki | Software Engineer | lberki@google.com |
Google Germany GmbH | Dienerstrasse 12 | 80331 München | Germany |
Geschäftsführer:
Graham Law, Christine Elizabeth Flores | Registergericht und -nummer:
Hamburg, HRB 86891

I tested this on Fedora 21 and Ubuntu 14.04.2. The behaviour is the same on each platform. I tried setting srcs to only reference the code in $CLOSURE_LIBRARY_ROOT/third_party and found that it was still being filtered out (srcs = glob(["third_party/closure/goog/**/*.js"])).
On a hunch I renamed the third_party directory to 3p and updated the closure_library build target. After the change I started to see the files listed in my bazel query. I was also able to compile JS code relying on goog.async.Deferred. @AmandaCameron does a rename make your build work?

bazel query with third_party: https://gist.github.com/kjiwa/214d8a6ced4472f54513
bazel query with 3p: https://gist.github.com/kjiwa/157f34014a815ca695a3

With a couple of additions to the excludes = glob bit (to excluse 3p's tests and demos) yes. It makes the namespace available to my code.

Thanks. I'll make an update to the BUILD file to exclude the third_party tests. I think this is a bug in Bazel that is preventing files in directories named "third_party" from being referenced.
A simple repro:

Create a dummy repository (e.g. src/my_repo)
Add the repository to your Bazel workspace
bazel query

When creating the repository, also create a directory structure beneath it with some files:
mkdir -p src/my_repo/{src,third_party}
touch src/my_repo/src/{t,u,v}.txt
touch src/my_repo/third_party/{a,b,c}.txt

In your Bazel workspace, add this to your WORKSPACE:
new_local_repository(
    name = "repo_with_third_party_dir",
    build_file = "tools/build_rules/repo_with_third_party_dir.BUILD",
    path = "/home/kjiwa/src/my_repo",
)

Finally, add tools/build_rules/repo_with_third_party_dir.BUILD to your workspace:
filegroup(
    name = "repo_with_third_party_dir",
    srcs = glob(["**/*.txt"]),
)

Running ```bazel query "deps(@repo_with_third_party_dir//:repo_with_third_party_dir)" yields the following:
$ bazel query "deps(@repo_with_third_party_dir//:repo_with_third_party_dir)"
@repo_with_third_party_dir//:repo_with_third_party_dir
@repo_with_third_party_dir//:src/v.txt
@repo_with_third_party_dir//:src/u.txt
@repo_with_third_party_dir//:src/t.txt

Note that the files in third_party are not listed.
$ find $HOME/src/my_repo -type f
/home/kjiwa/src/my_repo/third_party/a.txt
/home/kjiwa/src/my_repo/third_party/b.txt
/home/kjiwa/src/my_repo/third_party/c.txt
/home/kjiwa/src/my_repo/src/t.txt
/home/kjiwa/src/my_repo/src/u.txt
/home/kjiwa/src/my_repo/src/v.txt

Now that I put my brain into gear, it's clear what's wrong (the issue was
that glob was looking for BUILD files in the main repository even though
the glob was run in the new_local_repository). I have a change out to fix
it. It's not a theoretically pure fix, though, so I may have to do some
convincing in the code review.
On Fri, Jul 3, 2015 at 9:22 PM, Kamil Jiwa notifications@github.com wrote:

Thanks. I'll make an update to the BUILD file to exclude the third_party
tests. I think this is a bug in Bazel that is preventing files in
directories named "third_party" from being referenced.
A simple repro:

Create a dummy repository (e.g. src/my_repo)
Add the repository to your Bazel workspace
bazel query

When creating the repository, also create a directory structure beneath it
with some files:
mkdir -p src/my_repo/{src,third_party}
touch src/my_repo/src/{t,u,v}.txt
touch src/my_repo/third_party/{a,b,c}.txt
In your Bazel workspace, add this to your WORKSPACE:
new_local_repository(
name = "repo_with_third_party_dir",
build_file = "tools/build_rules/repo_with_third_party_dir.BUILD",
path = "/home/kjiwa/src/my_repo",
)
Finally, add tools/build_rules/repo_with_third_party_dir.BUILD to your
workspace:
filegroup(
name = "repo_with_third_party_dir",
srcs = glob(["**/*.txt"]),
)
Running ```bazel query
"deps(@repo_with_third_party_dir//:repo_with_third_party_dir)" yields the
following:
$ bazel query "deps(@repo_with_third_party_dir//:repo_with_third_party_dir)"
@repo_with_third_party_dir//:repo_with_third_party_dir
@repo_with_third_party_dir//:src/v.txt
@repo_with_third_party_dir//:src/u.txt
@repo_with_third_party_dir//:src/t.txt
Note that the files in third_party are not listed.
$ find $HOME/src/my_repo -type f
/home/kjiwa/src/my_repo/third_party/a.txt
/home/kjiwa/src/my_repo/third_party/b.txt
/home/kjiwa/src/my_repo/third_party/c.txt
/home/kjiwa/src/my_repo/src/t.txt
/home/kjiwa/src/my_repo/src/u.txt
/home/kjiwa/src/my_repo/src/v.txt
—
Reply to this email directly or view it on GitHub
https://github.com/google/bazel/issues/275#issuecomment-118410855.

--
Lukács T. Berki | Software Engineer | lberki@google.com |
Google Germany GmbH | Dienerstrasse 12 | 80331 München | Germany |
Geschäftsführer:
Graham Law, Christine Elizabeth Flores | Registergericht und -nummer:
Hamburg, HRB 86891

Thanks. I can confirm that https://github.com/google/bazel/commit/33aa1e1afd9f0c35f8ccadcf8bf8f29357ca2878 fixes the issue.
I've also submitted a CL to add third_party/closure/goog/**/*_test.js to the list of exclusions. It should get committed in the next day or two, pending approval.

Resolved in https://github.com/google/bazel/commit/c7d2c54d7a78d4515d4788e31c5474b8089ec37c.

authors: AmandaCameron damienmg kjiwa lberki

repo: google/bazel


text:
GPU mipmap generation broken when running with SwiftShader

Step 1: enable swiftshader
https://github.com/google/bigwheels/blob/main/docs/software_rendering.md
Step 2: run a sample
for example: 05_cube_textured
or to see more clearly: run vk_27_mipmap_demo, select a different mip level (> 0) to be generated using GPU

Background:
Mipmap creation code in https://github.com/google/bigwheels/blob/main/src/ppx/graphics_util.cpp#L273

My two cents on this issue.
Mipmap generation, predates Swiftsahder inclusion on BW. So, it was never tested.
In the mipmap demo, the image on the right is produced by our own code on GPU, while the one on the left is produce by doing the Mips in CPU using a thirdparty library.
The mips are computed in GPU using a Compute Shader, In order here are some things that can go wrong here:

Swift shader support for Compute Shaders.
1.1 The compute shader, is precompiled and the binary code (SPIRV) is stored in the two headers:
a) include/ppx/generate_mip_shader_DX.h
b) include/ppx/generate_mip_shader_VK.h
My first guess will be that non of thats SPIRV is valid for SwiftShader
The shader setup: Maybe the shader setup code (src/ppx/graphics_util.cpp, in CreateImageFromBitmapGpu), makes some assumption that is not valid for SwiftShader, about the image loading (padding, stride or something similar). If this is the case maybe the 22_image_filter demo program does not work as well?
SwitfShader, does a bad work interpolating the Mips? Does the 05_cube_textured demo program works as expected?, if you move the other slider, does the image on the left works as expected?

authors: apazylbe jorgeag-google

repo: google/bigwheels


text:
Error thrown using debug world with vector_math > 1.4.3

Hello there.
I have this error being thrown using any version of vector_math superior to 1.4.3. Seems that is related to box2d and it works perfectly using vector_math 1.4.3.

Uncaught Unhandled exception:
'package:box2d/src/common/transform.dart': Failed assertion: line 91 pos 12: 'v != out' is not true.
0      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:27)
1      Transform.mulToOutUnsafeVec2 (package:box2d/src/common/transform.dart:91:12)
2      World.drawShape (package:box2d/src/dynamics/world.dart:1501:23)
3      World.drawDebugData (package:box2d/src/dynamics/world.dart:662:13)

Thanks in advance for looking at it, and thank you for the good work done :)

This is fixed in Git. Will publish box2d 0.3.0 later today.

authors: benoitletondor johnmccutchan


text:
go/x509: Add DisableTimeChecks option to verifier

DisableTimeChecks option to be used in fix-chain code.

Could you add a simple test or two for this in go/x509/verify_test.go too?

authors: AlCutter katjoyce

repo: google/certificate-transparency


text:
Quickstart instructions

Added Quickstart instructions that work.  I think it's very important that anyone getting our code has an easy experience getting their first build and tests to succeed.
Can we please try to keep these up to date as new dependencies are added?

Could you also flatten this into a single commit, and rebase on top of the latest master?

Done as suggested (I think).
PTAL.

LGTM

authors: aeijdenberg pphaneuf


text:
.claspignorerules no longer work as they used to

Consider the following project structure:
src/appsscript.json
src/Code.ts
.clasp.json
.claspignore

Where .claspignore content is:
**/**
!src/appsscript.json
!src/*.ts

Now execute the command clasp status --json
Expected Behavior
Clasp output should report both files as filesToPush
{
  "filesToPush": ["src/Code.ts", "src/appsscript.json"],
  "untrackedFiles": []
}

Actual Behavior
Clasp output report both files as untrackedFiles
{
  "filesToPush": [],
  "untrackedFiles": ["src/Code.ts", "src/appsscript.json"]
}

Current workaround is to edit .claspignore to remove the src/ strings:
**/**
!appsscript.json
!*.ts

Steps to Reproduce the Problem

Specifications

Node version (node -v): 10.16.0
Version (clasp -v): 2.2.1
OS (Mac/Linux/Windows): MacOS

One thing that I have overlooked, my .clasp.json has rootDir set to src
Thus it might not be a bug after all but rather a strengthening of how .claspignore rules are processed (i.e. rules are now correctly evaluated relative to rootDir while before they were relative to the location of .clasp.json)

repo: google/clasp


text:
Updated Travis configuration to allow packages to be tested in parallel jobs

Added acyclic_json, safe_url_check and yaml_edit to travis jobs
Also commented out two ensure_build_test that were likely failing due to a build_runner issue

If it's not super important to see the analyze stage as separate from the test stage, I can make the script key of Travis run dartfmt and dartanalyzer too, which gives us the ability to only have to update the main env variable, rather than in 3 places (main env, as well as the env for the analyze and format stages)

If it's not super important to see the analyze stage as separate from the test stage,

Yeah, that probably doesn't matter much :D

authors: jonasfj walnutdust

repo: google/dart-neats


text:
JDK 21 compatibility issue

error-prone version: 2.19.1
Error:       BugPattern: (see stack trace)
Error:       Stack Trace:
Error:       java.lang.NoSuchMethodError: 'com.sun.tools.javac.tree.JCTree$JCExpression com.sun.tools.javac.tree.TreeMaker.Select(com.sun.tools.javac.tree.JCTree$JCExpression, com.sun.tools.javac.code.Symbol)'
Error:    	at org.checkerframework.errorprone.javacutil.trees.TreeBuilder.buildIteratorMethodAccess(TreeBuilder.java:122)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitEnhancedForLoop(CFGTranslationPhaseOne.java:2728)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitEnhancedForLoop(CFGTranslationPhaseOne.java:197)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCEnhancedForLoop.accept(JCTree.java:1248)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.scan(CFGTranslationPhaseOne.java:550)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitBlock(CFGTranslationPhaseOne.java:2206)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.visitBlock(CFGTranslationPhaseOne.java:197)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1100)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.scan(CFGTranslationPhaseOne.java:550)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.process(CFGTranslationPhaseOne.java:447)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGTranslationPhaseOne.process(CFGTranslationPhaseOne.java:498)
Error:    	at org.checkerframework.errorprone.dataflow.cfg.builder.CFGBuilder.build(CFGBuilder.java:70)
Error:    	at com.google.errorprone.dataflow.DataFlow$2.load(DataFlow.java:125)
Error:    	at com.google.errorprone.dataflow.DataFlow$2.load(DataFlow.java:93)
Error:    	at com.github.benmanes.caffeine.cache.LocalLoadingCache.lambda$newMappingFunction$3(LocalLoadingCache.java:197)
Error:    	at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$13(BoundedLocalCache.java:2451)
Error:    	at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
Error:    	at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2449)
Error:    	at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2432)
Error:    	at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:107)
Error:    	at com.github.benmanes.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:57)
Error:    	at com.google.errorprone.dataflow.DataFlow.methodDataflow(DataFlow.java:172)
Error:    	at com.google.errorprone.dataflow.DataFlow.expressionDataflow(DataFlow.java:229)
Error:    	at com.google.errorprone.dataflow.nullnesspropagation.NullnessAnalysis.getNullness(NullnessAnalysis.java:59)
Error:    	at com.google.errorprone.bugpatterns.AbstractReferenceEquality.getNullness(AbstractReferenceEquality.java:224)
Error:    	at com.google.errorprone.bugpatterns.AbstractReferenceEquality.addFixes(AbstractReferenceEquality.java:128)
Error:    	at com.google.errorprone.bugpatterns.AbstractReferenceEquality.matchBinary(AbstractReferenceEquality.java:83)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:449)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:512)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:2186)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitBinary(TreeScanner.java:721)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:513)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:2186)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitBinary(TreeScanner.java:721)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:513)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBinary(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:2186)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitParenthesized(TreeScanner.java:661)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitParenthesized(ErrorProneScanner.java:799)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitParenthesized(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCParens.accept(JCTree.java:2042)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitIf(TreeScanner.java:485)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:654)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1585)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:272)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:520)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1100)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:224)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:740)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:944)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:203)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:548)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:851)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:119)
Error:    	at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:152)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:560)
Error:    	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:150)
Error:    	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:619)
Error:    	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
Error:    	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
Error:    	at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
Error:    	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:156)
Error:    	at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
Error:    	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1412)
Error:    	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1359)
Error:    	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:951)
Error:    	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
Error:    	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
Error:    	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
Error:    	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
Error:    	at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:136)
Error:    	at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:183)
Error:    	at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1140)
Error:    	at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:193)
Error:    	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:342)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:330)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:175)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:76)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:163)
Error:    	at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39)
Error:    	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:160)
Error:    	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105)
Error:    	at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:193)
Error:    	at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:180)
Error:    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
Error:    	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
Error:    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
Error:    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
Error:    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:[642](https://github.com/trinodb/trino/actions/runs/5000975710/jobs/8959063923?pr=17520#step:5:643))
Error:    	at java.base/java.lang.Thread.run(Thread.java:1583)

https://github.com/google/error-prone/issues/3843

authors: cushon wendigo

repo: google/error-prone


text:
[FR] Save/load of model parameters

Keras offers a very handy way to serialise and deserialise model 'hyper-parameters' to json.
This allows to reconstruct a model, equivalent to a flax Module, with no code, just by loading them from a file.
This powers its functionality of loading a model from a file without having to store an accompanying script with the model weights.
See for example this link
One thing that other the years I've consistently desired is for flax to offer something similar.
While flax offers a good way to serialise parameters (through flax.serialise or orbax) serialising the structure is not easy:

if using linen, we can call dataclasses.asdict(LinenModule), but this results in several non-json compatible types. In principle we could pickle it, which is not ideal but better than nothing, however the large use of lambdas in flax initialisers break it

In [1]: import flax; import dataclasses; import pickle
In [2]: nn = flax.linen.Dense(3)
In [3]: dataclasses.asdict(nn)
Out[3]:
{'features': 3,
 'use_bias': True,
 'dtype': None,
 'param_dtype': jax.numpy.float32,
 'precision': None,
 'kernel_init': <function jax._src.nn.initializers.variance_scaling.<locals>.init(key: 'Array', shape: 'core.Shape', dtype: 'DTypeLikeInexact' = <class 'jax.numpy.float64'>) -> 'Array'>,
 'bias_init': <function jax.nn.initializers.zeros(key: 'Array', shape: 'core.Shape', dtype: 'DTypeLikeInexact' = <class 'jax.numpy.float64'>) -> 'Array'>,
....
}
In [4]: pickle.dumps(dataclasses.asdict(nn))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[4], line 1
----> 1 pickle.dumps(dataclasses.asdict(nn))

AttributeError: Can't pickle local object 'variance_scaling.<locals>.init'

it is possible to use cloud pickle to serialise this dictionary, but cloud pickle is incompatible among different python versions, so it is not a good solution for storing this kind of metadata.
If using the new nnx, this approach does not work, and I'm unsure of what alternative one could use.

It would be a huge addition if some similar feature was supported in flax.
Already a minor improvement would be if the initialisers in flax where partial(init_fun, kwargs) instead of lambdas, as to make them pickle able.
But in general, a mechanism like that of keras to make all Modules serialisable, and a method that also supports nnx, would be an important addition.
This, in my opinion, should be supported by flax itself and not an addition by an external package, because it should be something standardised, so that when users define custom modules they can optionally define the methods necessary to make them play well with serialisation.

Hey @PhilipVinc, try using cloudpickle which has better support for lambdas. Getting base pickle to work would require a lot of work.

authors: PhilipVinc cgarciae

repo: google/flax


text:
Failed to load the weights of PaliGemma

When loading the weights of PaliGemma, it reports this error:
Abort at blob_store.cc:42: Key Bc_vit_encoder_norm_bias is too long, please truncate to 16 chars.
Aborted (core dumped)

Thanks for reporting! We've fixed this in #425.

authors: jan-wassenberg ufownl


text:
Similarity search using Gemini embeddings and Qdrant

Description of the change
Similarity search using Gemini embeddings and Qdrant
Type of change
Other
Checklist

[x] I have performed a self-review of my code.
[x] I have added detailed comments to my code where applicable.
[x] I have verified that my change does not break existing code.
[x] My PR is based on the latest changes of the main branch (if unsure, please run git pull --rebase upstream main).
[x] I am familiar with the Google Style Guide for the language I have coded in.
[x] I have read through the Contributing Guide and signed the Contributor License Agreement.

I accidentally pushed my main onto yours, which made this PR a no-op and closed it, removing my ability to push the fixed branch. I have a new PR in #389.

authors: markmcd nidhinpd-YML

repo: google/generative-ai-docs


text:
Add ShieldGemma notebooks

Description of the change
Adds Colab notebooks demonstrating ShieldGemma's use in KerasNLP and Hugging Face Transformers.
Motivation
Adds the Colab notebooks that document example usage of ShieldGemma. See launch announcement: https://developers.googleblog.com/en/smaller-safer-more-transparent-advancing-responsible-ai-with-gemma/
Type of change
Choose one: Documentation
Checklist

[x] I have performed a self-review of my code.
[x] I have added detailed comments to my code where applicable.
[x] I have verified that my change does not break existing code.
[ x My PR is based on the latest changes of the main branch (if unsure, please run git pull --rebase upstream main).
[x] I am familiar with the Google Style Guide for the language I have coded in.
[x] I have read through the Contributing Guide and signed the Contributor License Agreement.

FYI: The linter check is going to fails because it's finding instance of "we" in a Python string. The uses of "we" in these notebooks is required per the safety policy definitions used by this model.


text:
can LVPWELL be used without DNWELL?

Looking at the current pcells, it seems that drawing the LVPWELL for nfet:
https://github.com/google/globalfoundries-pdk-libs-gf180mcu_fd_pr/blob/11770e5e5bae2a2072899e7ef282c080e6c5d762/cells/klayout/pymacros/cells/draw_mos.py#L192-L195
is gated by having deepnwell param enabled:
https://github.com/google/globalfoundries-pdk-libs-gf180mcu_fd_pr/blob/11770e5e5bae2a2072899e7ef282c080e6c5d762/cells/klayout/pymacros/cells/draw_mos.py#L172
Are those two always tied together? looking at the design manual there seems to be a valid use case for using LVPWELL outside of DNWELL:
https://gf180mcu-pdk.readthedocs.io/en/latest/physical_verification/design_manual/drm_07_04.html

If this layer is used without DNWELL (outside DNWELL), the body of all those transistors will by default be connected to P-substrate potential.

@atorkmabrains @RTimothyEdwards

@proppy :  Yes, LVPWELL outside of DNWELL is equivalent to substrate and should be treated as such.  That usage is in much of the GF IP.

Thanks @RTimothyEdwards

@RTimothyEdwards Thanks for the explanation.
@atorkmabrains would it makes sense to update the pcells to always draw LVPWELL when Bulk Tie is set?
https://github.com/google/globalfoundries-pdk-libs-gf180mcu_fd_pr/blob/11770e5e5bae2a2072899e7ef282c080e6c5d762/cells/klayout/pymacros/cells/draw_mos.py#L192-L195

@msaligane - this was the issue I was talking about

@atorkmabrains currently it seems that LVPWELL is only drawn when DNWELL is set in the pcell option, would it make sense to update the pcell implementation to always draw LVPWELL when bulk tie is enabled independently of the state of the DNWELL option?

@proppy That's a separate issue. LVPWELL is optional or don't care in case that DNWELL is not drawn. If you draw, DNWELL you can draw LVPWELL. Pcell is functioning correctly, no need to add this modification into the pcell.
@spnadig Could you please show me the design that caused this?
@spnadig I advise that you use DRC and LVS from https://github.com/efabless/globalfoundries-pdk-libs-gf180mcu_fd_pr? Also, please stay tuned as we are going to move LVS and DRC to: https://github.com/efabless/globalfoundries-pdk-libs-gf180mcu_fd_pv.
cc @msaligane

@RTimothyEdwards Thanks for the explanation.
@atorkmabrains would it makes sense to update the pcells to always draw LVPWELL when Bulk Tie is set?
https://github.com/google/globalfoundries-pdk-libs-gf180mcu_fd_pr/blob/11770e5e5bae2a2072899e7ef282c080e6c5d762/cells/klayout/pymacros/cells/draw_mos.py#L192-L195

No, as I mentioned in my comment above, LVPWELL is totally ignored in everything if there is no DNWELL. No need to modify the pcell.
The issue that @spnadig is a separate issue. I need to look into it.

My understanding is that in https://github.com/google/globalfoundries-pdk-libs-gf180mcu_fd_pr/issues/104#issuecomment-1421127633 @RTimothyEdwards stated that LVPWELL without DNWELL was a valid usecase.
Shouldn't we make sure that this is also supported by the pcell?

@proppy yes, you could draw LVPWELL but the correct action is to not to draw it by default as it's disregarded in case the DNWELL is not drawn. The pcell is designed to allow the real use case of the LVPWELL. I don't advise to add LVPWELL if you are not really using it.
An exception to my comment above is the standard cells, standard cells should have LVPWELL just in case the user might want to use DNWELL later around the digital block later for any electrical reasons. But this use scenario is only valid for standard cells.

@proppy I'm more concerned about the issue the @spnadig regarding the LVS. I need to understand that use case and why it didn't pass without DNWELL even if the LVPWELL. This has nothing to do with the pcell adding LVPWELL.

@atorkmabrains I think this is due to the substrate connection of the bulk tie creating an additional signal (gf180mcu_gnd) when the LVPWELL is not present.
Is there a usecase for setting Bulk tie without drawing LVPWELL?

@proppy bulk tie doesn't need to LVPWELL to happen, please read here:
https://en.wikipedia.org/wiki/CMOS
And BTW, that's the normal in almost all CMOS processes.
GF180MCU is a triple well technology, hence we need a PWELL marker:
https://www.researchgate.net/figure/Triple-well-NMOS-transistor-structure-See-the-colors-in-the-online-version_fig2_303530652

bulk tie doesn't need LVPWELL to happen, please read here: https://en.wikipedia.org/wiki/CMOS

Thanks for providing the links, I could find any mention of bulk tie nor its relation (if any) to PWELL on it, do you have an alternative source of documentation?

GF180MCU is a triple well technology, hence we need a PWELL marker:
https://www.researchgate.net/figure/Triple-well-NMOS-transistor-structure-See-the-colors-in-the-online-version_fig2_303530652

Without a PWELL it seems that the current LVS extraction is not able to infer the substrate connection of the BULK tied to SRC terminal for nmos device effectively leaving it floating with a different ground net, is that intentional? Or is there a different way to provide a hint for this implicit connection in the layout?

Without a PWELL it seems that the current LVS extraction is not able to infer the substrate connection of the BULK tied to SRC terminal for nmos device effectively leaving it floating with a different ground net, is that intentional? Or is there a different way to provide a hint for this implicit connection in the layout?

If what you mentioned is true that LVS requires LVPWELL to get the connectivity to substrate, then that's definitely a bug in LVS. I need the test case that has that issue. Also, are they using Google repo? If yes, then please tell them to use efabless one as Google repo is not updated and not cleaned.

bulk tie doesn't need LVPWELL to happen, please read here: https://en.wikipedia.org/wiki/CMOS

Thanks for providing the links, I could find any mention of bulk tie nor its relation (if any) to PWELL on it, do you have an alternative source of documentation?

As for your question about this, you need to know more about micro-electronics bulk tie has many different words, you don't necessarily need to find in the link I provided. Here is a few good courses you could start looking at:

https://ocw.mit.edu/courses/6-012-microelectronic-devices-and-circuits-fall-2005/pages/lecture-notes/
http://bwrcs.eecs.berkeley.edu/Classes/icdesign/ee240_sp12/lectures.html

authors: RTimothyEdwards atorkmabrains proppy spnadig


text:
Fix warning in VS2015.

This fixes a warning about truncation from size_t (64 bits on 64 bit Windows) to int (32 bits on 64 bit Windows).

Changed from auto to size_t.

Now all errors and warnings from CMake, Visual Studio 2017 RC and Xcode 8.2.1 are fixed. Please pull.

I addressed all comments except the one about disabling WITH_ defaults. How can I make this warning go away?

@gonsolo See my previous comment. The warning (which is of informative nature) can be simply ignored.

Ok. Changed back. I addressed all other comments. Is there anything still
to do before you can pull?
And thanks for reviewing. :)
On Wed, Jan 18, 2017 at 10:50 AM, Sergiu Deitsch notifications@github.com
wrote:

@gonsolo https://github.com/gonsolo See my previous comment. The
warning (which is of informative nature) can be simply ignored.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156#issuecomment-273431002, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AB8npGW2mT8mggH5_SLNSBpsWIgNbmGwks5rTeBwgaJpZM4LkqOe
.

--
g

Just squash the commits into one using git rebase -i. There are just too many.

Done.
On Wed, Jan 18, 2017 at 11:25 AM, Sergiu Deitsch notifications@github.com
wrote:

Just squash the commits into one using git rebase -i. There are just too
many.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156#issuecomment-273438895, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AB8npEI5kUV8tmZoJ7fUBAFhD1dSaEmYks5rTeh9gaJpZM4LkqOe
.

--
g

Oh, I misread ssize_t for size_t. Sorry.
I am using ptrdiff_t now. Do you want me to change that to ssize_t?
On Wed, Jan 18, 2017 at 12:47 PM, Sergiu Deitsch notifications@github.com
wrote:

@sergiud commented on this pull request.
In src/logging.cc https://github.com/google/glog/pull/156:

@@ -628,7 +628,7 @@ inline void LogDestination::RemoveLogSink(LogSink *destination) {
MutexLock l(&sink_mutex_);
// This doesn't keep the sinks in order, but who cares?
if (sinks_) {

for (int i = sinks_->size() - 1; i >= 0; i--) {

for (int i = (int)sinks_->size() - 1; i >= 0; i--) {

I don't understand. ssize_t is the signed counterpart of size_t.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156, or mute the thread
https://github.com/notifications/unsubscribe-auth/AB8npL1Jp0OLPC6qOlJJeTpAHgo_YYS8ks5rTfvXgaJpZM4LkqOe
.

--
g

Ok. I see. Thanks.
On Wed, Jan 18, 2017 at 12:51 PM, Gonsolo gonsolo@gmail.com wrote:

Oh, I misread ssize_t for size_t. Sorry.
I am using ptrdiff_t now. Do you want me to change that to ssize_t?
On Wed, Jan 18, 2017 at 12:47 PM, Sergiu Deitsch <notifications@github.com

wrote:

@sergiud commented on this pull request.
In src/logging.cc https://github.com/google/glog/pull/156:

@@ -628,7 +628,7 @@ inline void LogDestination::RemoveLogSink(LogSink *destination) {
MutexLock l(&sink_mutex_);
// This doesn't keep the sinks in order, but who cares?
if (sinks_) {

for (int i = sinks_->size() - 1; i >= 0; i--) {

for (int i = (int)sinks_->size() - 1; i >= 0; i--) {

I don't understand. ssize_t is the signed counterpart of size_t.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156, or mute the thread
https://github.com/notifications/unsubscribe-auth/AB8npL1Jp0OLPC6qOlJJeTpAHgo_YYS8ks5rTfvXgaJpZM4LkqOe
.

--
g

--
g

Ok, found it. The typedef is defined in a macro and subsequently not used.
Removed it and pushed.
On Wed, Jan 18, 2017 at 12:52 PM, Sergiu Deitsch notifications@github.com
wrote:

@sergiud commented on this pull request.
In src/logging_unittest.cc https://github.com/google/glog/pull/156:

@@ -251,8 +251,8 @@ void TestLogging(bool check_counts) {
PLOG_EVERY_N(ERROR, 2) << "Plog every 2, iteration " << COUNTER;
errno = old_errno;

LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;

//LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
//LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;

Maybe using attribute((unused)) can help? The typedef is likely
generated using macros. Try searching for a small part of typedef's name.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156, or mute the thread
https://github.com/notifications/unsubscribe-auth/AB8npAm5eGxxZNjXaJ4G9cGcJ48nCsP3ks5rTf0ZgaJpZM4LkqOe
.

--
g

Found a even better solution: The typedef is a compile check so it is just
marked unused.
On Wed, Jan 18, 2017 at 1:27 PM, Gonsolo gonsolo@gmail.com wrote:

Ok, found it. The typedef is defined in a macro and subsequently not used.
Removed it and pushed.
On Wed, Jan 18, 2017 at 12:52 PM, Sergiu Deitsch <notifications@github.com

wrote:

@sergiud commented on this pull request.
In src/logging_unittest.cc https://github.com/google/glog/pull/156:

@@ -251,8 +251,8 @@ void TestLogging(bool check_counts) {
PLOG_EVERY_N(ERROR, 2) << "Plog every 2, iteration " << COUNTER;
errno = old_errno;

LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;

//LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
//LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;

Maybe using attribute((unused)) can help? The typedef is likely
generated using macros. Try searching for a small part of typedef's name.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156, or mute the thread
https://github.com/notifications/unsubscribe-auth/AB8npAm5eGxxZNjXaJ4G9cGcJ48nCsP3ks5rTf0ZgaJpZM4LkqOe
.

--
g

--
g

Fixed whitespace and rebased. Should be ready to pull now.
On Wed, Jan 18, 2017 at 2:13 PM, Gonsolo gonsolo@gmail.com wrote:

Found a even better solution: The typedef is a compile check so it is just
marked unused.
On Wed, Jan 18, 2017 at 1:27 PM, Gonsolo gonsolo@gmail.com wrote:

Ok, found it. The typedef is defined in a macro and subsequently not
used. Removed it and pushed.
On Wed, Jan 18, 2017 at 12:52 PM, Sergiu Deitsch <
notifications@github.com> wrote:

@sergiud commented on this pull request.
In src/logging_unittest.cc https://github.com/google/glog/pull/156:

@@ -251,8 +251,8 @@ void TestLogging(bool check_counts) {
PLOG_EVERY_N(ERROR, 2) << "Plog every 2, iteration " << COUNTER;
errno = old_errno;

LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;

//LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
//LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;

Maybe using attribute((unused)) can help? The typedef is likely
generated using macros. Try searching for a small part of typedef's name.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/glog/pull/156, or mute the thread
https://github.com/notifications/unsubscribe-auth/AB8npAm5eGxxZNjXaJ4G9cGcJ48nCsP3ks5rTf0ZgaJpZM4LkqOe
.

--
g

--
g

--
g

The source problem is that strlen returns size_t but _read and _write use int on Windows. So somewhere it has to be cast. I tried to leave the source mostly as it was now (or changed to size_t) and just disabled the warnings where it happened.

Fixed and rebased again. Next try. :)

This can be right. sinks_ is of type std::vector<LogSink*> whose size
method returns a type compatible to size_t. So the proposed should be
just fine.

I was talking of the original version where sinks_ returned size_t but it
was assigned to an int.
--
g

Or you can use std::vector<LogSink*>::reverse_iterator.

Can we just stick with ptrdiff_t? I just wanted to get rid of the warning
and not think of the program logic too much. Changing this could introduce
different semantics or subtle errors.
--
g

FWIW, I'm using glog in a bigger project and I just tried to get rid
of all warnings so new warnings in the project will stand out clearly.
--
g

@gonsolo The way the loop is implemented now, is incorrect. By using my proposal you will fix this and get rid of the corresponding warnings.

@gonsolo https://github.com/gonsolo The way the loop is implemented
now, is incorrect. By using my proposal you will fix this and get rid of
the corresponding warnings.

Old version:
for (int i = sinks_->size() - 1; i >= 0; i--) {
My version:
for (ptrdiff_t i = sinks_->size() - 1; i >= 0; i--) {
I don't get it, what's wrong here?
--
g

@gonsolo Correct me if I'm wrong, but size() return value (which is unsigned) is truncated by conversion to ptrdiff_t (which is signed).

@gonsolo https://github.com/gonsolo Correct me if I'm wrong, but size()
return value (which is unsigned) is truncated by conversion to ptrdiff_t
(which is signed).

Yes. The old version truncated to 32 bits signed (int) and the new version
to 64 bit signed (signed). VS warns about the former but not the latter. So
it's progress. :)
Anyway, I changed it to reverse iterators.
There is one pop_back in a loop but I guess it's ok since it only
invalidates the last element, right?
--
g

Anything else I can improve?

@gonsolo Could you please resolve the conflicts?

No, it's been nearly three years and I stopped using glog.

authors: gonsolo sergiud

repo: google/glog


text:
[docs] Add Conan usage on README

Add a new installation step in README file, explaining how to use Conan to install glog.

Codecov Report

Merging #862 (40c312e) into master (b70ea80) will increase coverage by 1.80%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #862      +/-   ##
==========================================
+ Coverage   73.29%   75.10%   +1.80%
==========================================
  Files          17       11       -6
  Lines        3292     2478     -814
==========================================
- Hits         2413     1861     -552
+ Misses        879      617     -262

Impacted Files
Coverage Δ

src/symbolize.cc
0.00% <0.00%> (-64.12%)
:arrow_down:

src/utilities.cc
50.00% <0.00%> (-17.89%)
:arrow_down:

src/logging.cc
74.20% <0.00%> (-0.71%)
:arrow_down:

src/demangle.cc
97.14% <0.00%> (-0.34%)
:arrow_down:

src/base/mutex.h
100.00% <0.00%> (ø)

src/glog/logging.h.in

src/stacktrace_libunwind-inl.h

src/windows/dirent.h

src/glog/stl_logging.h.in

src/windows/port.h

... and 3 more

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

Thanks!

authors: codecov-commenter sergiud uilianries


text:
fix import statement

Correct import statement and update according to https://godoc.org/github.com/google/go-github/github.

I signed it!

Hey @gmlewis !
I tested the code. It wasn't working. I updated it as https://godoc.org/github.com/google/go-github/github. If this isn't correct, it should be corrected. From my testing experience, I can say that this is correct. Please test it once in the meantime.

Thanks, @themousepotato.
What version of Go are you using?
Is your environment variable GO111MODULE set?
If so, what is its value?
Have you read the docs on Go modules and specifically release information here:
https://github.com/golang/go/wiki/Modules#releasing-modules-v2-or-higher
?
One thing we are trying to do is move toward supporting Go v1.11 and beyond by adding support for Go modules.

@gmlewis Sorry for the late reply. Here you go:
go version go1.11 linux/amd64
GO111MODULE env var is not set. I only tried to keep in sync with the docs on https://godoc.org/github.com/google/go-github/github. Thanks!

Thanks, @themousepotato, for the extra info.
@marwan-at-work - do you have time to take a look at this PR and comment please?

authors: gmlewis themousepotato

repo: google/go-github


text:
getPlaylistId() is null

What the title says, I'm doing this
if(rId.getKind().equals("youtube#playlist"))
    sb.append(":file_folder: **https://youtube.com/playlist?list=").append(rId.getPlaylistId()).append("**");

And it ends on youtube.com/playlist?list=null

Will this be fixed soon?

@Artuto Which API endpoint are you trying to use? Are you able to able to reproduce the query that has a null playlistId field? What class is rId?

https://github.com/EndlessBot/Endless/blob/master/src/main/java/me/artuto/endless/commands/utils/YouTubeCmd.java#L70-L93

@Artuto You're excluding the id/playlistId field when asking for data to be returned here.

repo: google/google-api-java-client


text:
ReadPacketDate reads a jumbo packet, but WritePacketData writes two smaller sequential packets

Sorry in advance if this is the wrong place to raise this issue.
I have written a simple reader/writer program that writes to a network interface, and reads off of a connected interface and calculates the number of packets sent. (This is implemented using separate Go routines). However my write count is sometimes greater than my read count. Investigating this issue using tcpdump showed that large packets are being written as two packets (sequence # 0:1448, 1448:2896), but are sometimes read in as one large packet(0:2896). The behavior is occurs often but appears to be random (ie not all packets follow the same behavior).
Here is the tcpdump of me repeatedly sending the same two packets until it occurs.
tcpdump on the reader's interface
16:52:07.855234 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:1448, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855242 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 1448:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855283 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:1448, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855413 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 1448:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855421 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 2896
16:52:07.855426 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 2896
tcpdump on the writer interface
16:52:07.855036 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:1448, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855081 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 1448:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855126 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:1448, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855169 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 1448:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855213 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:1448, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855246 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 1448:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855281 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 0:1448, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
16:52:07.855305 IP 74.125.174.140.http > 192.168.1.64.52519: Flags [.], seq 1448:2896, ack 1, win 238, options [nop,nop,TS val 829523941 ecr 1466196712], length 1448
Thank you very much for your assistance.

Sorry about this, the issue was due to the network card de-fragmenting the packets due to General-Receive-Offloading being enabled.

repo: google/gopacket


text:
support nflog

When will nflog be supported?

You can use nflog already as source for gopacket.
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/florianl/go-nflog"
	"github.com/google/gopacket"
	"github.com/google/gopacket/layers"
)

func main() {
	// Send outgoing pings to nflog group 100
	// # sudo iptables -I OUTPUT -p icmp -j NFLOG --nflog-group 100

	//Set configuration parameters
	config := nflog.Config{
		Group:       100,
		Copymode:    nflog.CopyPacket,
		ReadTimeout: 10 * time.Millisecond,
	}

	nf, err := nflog.Open(&config)
	if err != nil {
		fmt.Println("could not open nflog socket:", err)
		return
	}
	defer nf.Close()

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	fn := func(attrs nflog.Attribute) int {
		// Decode the packet from NFLOG with gopacket
		packet := gopacket.NewPacket(*attrs.Payload, layers.LayerTypeIPv4, gopacket.Default)
		if icmpLayer := packet.Layer(layers.LayerTypeICMPv4); icmpLayer != nil {
			ipLayer := packet.Layer(layers.LayerTypeIPv4)
			ip, _ := ipLayer.(*layers.IPv4)
			icmp, _ := icmpLayer.(*layers.ICMPv4)
			fmt.Printf("%d\t%s > %s\n", icmp.Seq, ip.SrcIP, ip.DstIP)
		}
		return 0
	}

	// Register your function to listen on nflog group 100
	err = nf.Register(ctx, fn)
	if err != nil {
		fmt.Println(err)
		return
	}

	// Block till the context expires
	<-ctx.Done()
}

But it won't help decode pcaps with DLT_NFLOG, obtained e.g. with tcpdump -i nflog:1

authors: WGH- florianl pythonsite


text:
[afpacket] return err when empty block

Patch a12eb5bd add retry when empty block received,
but the retry loop will disable POLL_TIMEOUT.
Signed-off-by: Yang XIANG xiangyang@yunshan.net.cn

I signed it!


text:
Add possibility to represent opaque using abs

Implementation of #400

Closing this PR due to inactivity.

authors: afd niazarak

repo: google/graphicsfuzz


text:
[Code health] Replace Optional with TaskData?

Fixes #1735

This PR aims at replacing usages of Optional<TaskData> with TaskData?. This

@JSunde @gino-m  PTAL?

/gcbrun

repo: google/ground-android


text:
Proof of concept: make servlet/filter pipeline more extensible

Extract common code into abstract base classes
Expose selected interfaces to support external implementations
Rebase default implementations to extend the abstract classes

Note: while this patch is marked as a "proof of concept" for general review/comment, we have been successfully using it in production to support alternative mechanisms for finding servlet and filter definitions.

@mcculls -- any update on this?  I'm inclined to close it otherwise.  We can reopen later if necessary.

@sameb since you already have pending changes in this area I'm happy for this to be closed for now. Once your change is in I'll look at reworking this PR; removing the use of injector.getInstance should hopefully simplify things on our side.

I'll try to push our change along, it's been sitting dormant for a while for various reasons... but maybe we can give it some life support and merge it in.  Thanks Stuart!

authors: mcculls sameb

repo: google/guice


text:
Updated validations.py python script

Fixed the behaviour of validate_user function in validations.py
Closes: #1
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

@googlebot I signed it!

repo: google/it-cert-automation-practice


text:
Closes: #1

Updated validations.py python script.
Fixed the behavior of validate_user function in validations.py.
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

@googlebot I signed it!


text:
Closes: #1

Updated validations.py python script.
Fixed the behavior of validate_user function in validations.py.
Fixes # 1

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

@googlebot I signed it!


text:
"Closes: #1"

Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[x] Tests pass
[x] Appropriate changes to README are included in PR

Completeing


text:
Closes: #1 Updated validation.py script

Updated validations.py python script.
Fixed the behavior of validate_user function in validations.py.
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

@boopesh07