superacli 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/adapter-schema.test.js +2 -0
- package/__tests__/config.test.js +62 -1
- package/__tests__/help-json.test.js +2 -0
- package/__tests__/mcp-adapter.test.js +14 -4
- package/__tests__/mcp-local.test.js +159 -0
- package/__tests__/mcp-stdio-jsonrpc.test.js +105 -0
- package/__tests__/monty-plugin.test.js +121 -0
- package/__tests__/plugin-browser-use-uninstall.test.js +23 -0
- package/__tests__/plugin-browser-use.test.js +77 -0
- package/__tests__/plugins-command.test.js +92 -1
- package/__tests__/plugins-learn.test.js +62 -0
- package/__tests__/plugins-registry.test.js +3 -1
- package/__tests__/resend-plugin.test.js +122 -0
- package/__tests__/skills.test.js +4 -0
- package/cli/adapter-schema.js +3 -2
- package/cli/adapters/mcp.js +22 -3
- package/cli/adapters/process.js +34 -7
- package/cli/config.js +27 -1
- package/cli/help-json.js +2 -2
- package/cli/mcp-diagnostics.js +152 -0
- package/cli/mcp-discovery.js +221 -0
- package/cli/mcp-local.js +267 -25
- package/cli/mcp-stdio-jsonrpc.js +246 -0
- package/cli/plugin-install-guidance.js +25 -0
- package/cli/plugins-command.js +86 -3
- package/cli/plugins-learn.js +177 -0
- package/cli/plugins-manager.js +3 -0
- package/cli/plugins-registry.js +2 -1
- package/cli/skills-mcp.js +102 -0
- package/cli/skills.js +6 -40
- package/cli/supercli.js +7 -2
- package/docs/initial/mcp-local-mode.md +35 -0
- package/docs/mcp-cheatsheet.md +324 -0
- package/docs/plugins.md +7 -0
- package/package.json +1 -1
- package/plugins/browser-use/plugin.json +23 -0
- package/plugins/browser-use/scripts/post-install.js +146 -0
- package/plugins/browser-use/scripts/post-uninstall.js +28 -0
- package/plugins/browser-use/skills/quickstart/SKILL.md +47 -0
- package/plugins/monty/README.md +49 -0
- package/plugins/monty/plugin.json +69 -0
- package/plugins/monty/scripts/post-install.js +73 -0
- package/plugins/monty/scripts/post-uninstall.js +23 -0
- package/plugins/monty/scripts/run-python.js +140 -0
- package/plugins/monty/scripts/setup-monty.js +27 -0
- package/plugins/plugins.json +29 -0
- package/plugins/resend/plugin.json +371 -0
- package/plugins/resend/scripts/post-install.js +59 -0
- package/plugins/resend/scripts/post-uninstall.js +23 -0
- package/plugins/resend/scripts/setup-resend.js +27 -0
- package/plugins/resend/skills/quickstart/SKILL.md +80 -0
- package/ref-monty/.cargo/config.toml +3 -0
- package/ref-monty/.claude/settings.json +60 -0
- package/ref-monty/.claude/skills/fastmod/SKILL.md +22 -0
- package/ref-monty/.claude/skills/python-playground/SKILL.md +47 -0
- package/ref-monty/.codecov.yml +12 -0
- package/ref-monty/.github/actions/build-pgo-wheel/action.yml +72 -0
- package/ref-monty/.github/workflows/ci.yml +776 -0
- package/ref-monty/.github/workflows/codspeed.yml +45 -0
- package/ref-monty/.github/workflows/init-npm-packages.yml +82 -0
- package/ref-monty/.pre-commit-config.yaml +47 -0
- package/ref-monty/.python-version +1 -0
- package/ref-monty/.rustfmt.toml +4 -0
- package/ref-monty/.zed/settings.json +11 -0
- package/ref-monty/CLAUDE.md +535 -0
- package/ref-monty/Cargo.lock +3798 -0
- package/ref-monty/Cargo.toml +87 -0
- package/ref-monty/LICENSE +21 -0
- package/ref-monty/Makefile +216 -0
- package/ref-monty/README.md +430 -0
- package/ref-monty/RELEASING.md +47 -0
- package/ref-monty/crates/fuzz/Cargo.toml +30 -0
- package/ref-monty/crates/fuzz/fuzz_targets/string_input_panic.rs +37 -0
- package/ref-monty/crates/fuzz/fuzz_targets/tokens_input_panic.rs +552 -0
- package/ref-monty/crates/monty/Cargo.toml +68 -0
- package/ref-monty/crates/monty/benches/main.rs +247 -0
- package/ref-monty/crates/monty/build.rs +10 -0
- package/ref-monty/crates/monty/src/args.rs +733 -0
- package/ref-monty/crates/monty/src/asyncio.rs +179 -0
- package/ref-monty/crates/monty/src/builtins/abs.rs +55 -0
- package/ref-monty/crates/monty/src/builtins/all.rs +30 -0
- package/ref-monty/crates/monty/src/builtins/any.rs +30 -0
- package/ref-monty/crates/monty/src/builtins/bin.rs +59 -0
- package/ref-monty/crates/monty/src/builtins/chr.rs +46 -0
- package/ref-monty/crates/monty/src/builtins/divmod.rs +164 -0
- package/ref-monty/crates/monty/src/builtins/enumerate.rs +52 -0
- package/ref-monty/crates/monty/src/builtins/filter.rs +67 -0
- package/ref-monty/crates/monty/src/builtins/getattr.rs +65 -0
- package/ref-monty/crates/monty/src/builtins/hash.rs +28 -0
- package/ref-monty/crates/monty/src/builtins/hex.rs +58 -0
- package/ref-monty/crates/monty/src/builtins/id.rs +24 -0
- package/ref-monty/crates/monty/src/builtins/isinstance.rs +68 -0
- package/ref-monty/crates/monty/src/builtins/len.rs +25 -0
- package/ref-monty/crates/monty/src/builtins/map.rs +98 -0
- package/ref-monty/crates/monty/src/builtins/min_max.rs +113 -0
- package/ref-monty/crates/monty/src/builtins/mod.rs +246 -0
- package/ref-monty/crates/monty/src/builtins/next.rs +21 -0
- package/ref-monty/crates/monty/src/builtins/oct.rs +59 -0
- package/ref-monty/crates/monty/src/builtins/ord.rs +67 -0
- package/ref-monty/crates/monty/src/builtins/pow.rs +365 -0
- package/ref-monty/crates/monty/src/builtins/print.rs +141 -0
- package/ref-monty/crates/monty/src/builtins/repr.rs +16 -0
- package/ref-monty/crates/monty/src/builtins/reversed.rs +28 -0
- package/ref-monty/crates/monty/src/builtins/round.rs +174 -0
- package/ref-monty/crates/monty/src/builtins/sorted.rs +151 -0
- package/ref-monty/crates/monty/src/builtins/sum.rs +66 -0
- package/ref-monty/crates/monty/src/builtins/type_.rs +16 -0
- package/ref-monty/crates/monty/src/builtins/zip.rs +77 -0
- package/ref-monty/crates/monty/src/bytecode/builder.rs +699 -0
- package/ref-monty/crates/monty/src/bytecode/code.rs +310 -0
- package/ref-monty/crates/monty/src/bytecode/compiler.rs +3206 -0
- package/ref-monty/crates/monty/src/bytecode/mod.rs +24 -0
- package/ref-monty/crates/monty/src/bytecode/op.rs +617 -0
- package/ref-monty/crates/monty/src/bytecode/vm/async_exec.rs +1058 -0
- package/ref-monty/crates/monty/src/bytecode/vm/attr.rs +63 -0
- package/ref-monty/crates/monty/src/bytecode/vm/binary.rs +487 -0
- package/ref-monty/crates/monty/src/bytecode/vm/call.rs +767 -0
- package/ref-monty/crates/monty/src/bytecode/vm/collections.rs +741 -0
- package/ref-monty/crates/monty/src/bytecode/vm/compare.rs +147 -0
- package/ref-monty/crates/monty/src/bytecode/vm/exceptions.rs +297 -0
- package/ref-monty/crates/monty/src/bytecode/vm/format.rs +132 -0
- package/ref-monty/crates/monty/src/bytecode/vm/mod.rs +1958 -0
- package/ref-monty/crates/monty/src/bytecode/vm/scheduler.rs +620 -0
- package/ref-monty/crates/monty/src/exception_private.rs +1513 -0
- package/ref-monty/crates/monty/src/exception_public.rs +346 -0
- package/ref-monty/crates/monty/src/expressions.rs +694 -0
- package/ref-monty/crates/monty/src/fstring.rs +854 -0
- package/ref-monty/crates/monty/src/function.rs +119 -0
- package/ref-monty/crates/monty/src/heap.rs +1073 -0
- package/ref-monty/crates/monty/src/heap_data.rs +985 -0
- package/ref-monty/crates/monty/src/heap_traits.rs +312 -0
- package/ref-monty/crates/monty/src/intern.rs +837 -0
- package/ref-monty/crates/monty/src/io.rs +106 -0
- package/ref-monty/crates/monty/src/lib.rs +52 -0
- package/ref-monty/crates/monty/src/modules/asyncio.rs +144 -0
- package/ref-monty/crates/monty/src/modules/math.rs +1453 -0
- package/ref-monty/crates/monty/src/modules/mod.rs +120 -0
- package/ref-monty/crates/monty/src/modules/os.rs +116 -0
- package/ref-monty/crates/monty/src/modules/pathlib.rs +33 -0
- package/ref-monty/crates/monty/src/modules/re.rs +606 -0
- package/ref-monty/crates/monty/src/modules/sys.rs +60 -0
- package/ref-monty/crates/monty/src/modules/typing.rs +70 -0
- package/ref-monty/crates/monty/src/namespace.rs +21 -0
- package/ref-monty/crates/monty/src/object.rs +1040 -0
- package/ref-monty/crates/monty/src/os.rs +215 -0
- package/ref-monty/crates/monty/src/parse.rs +1730 -0
- package/ref-monty/crates/monty/src/prepare.rs +3015 -0
- package/ref-monty/crates/monty/src/repl.rs +1109 -0
- package/ref-monty/crates/monty/src/resource.rs +559 -0
- package/ref-monty/crates/monty/src/run.rs +457 -0
- package/ref-monty/crates/monty/src/run_progress.rs +821 -0
- package/ref-monty/crates/monty/src/signature.rs +651 -0
- package/ref-monty/crates/monty/src/sorting.rs +100 -0
- package/ref-monty/crates/monty/src/types/bytes.rs +2356 -0
- package/ref-monty/crates/monty/src/types/dataclass.rs +345 -0
- package/ref-monty/crates/monty/src/types/dict.rs +879 -0
- package/ref-monty/crates/monty/src/types/dict_view.rs +619 -0
- package/ref-monty/crates/monty/src/types/iter.rs +799 -0
- package/ref-monty/crates/monty/src/types/list.rs +929 -0
- package/ref-monty/crates/monty/src/types/long_int.rs +211 -0
- package/ref-monty/crates/monty/src/types/mod.rs +48 -0
- package/ref-monty/crates/monty/src/types/module.rs +146 -0
- package/ref-monty/crates/monty/src/types/namedtuple.rs +261 -0
- package/ref-monty/crates/monty/src/types/path.rs +596 -0
- package/ref-monty/crates/monty/src/types/property.rs +35 -0
- package/ref-monty/crates/monty/src/types/py_trait.rs +322 -0
- package/ref-monty/crates/monty/src/types/range.rs +285 -0
- package/ref-monty/crates/monty/src/types/re_match.rs +522 -0
- package/ref-monty/crates/monty/src/types/re_pattern.rs +726 -0
- package/ref-monty/crates/monty/src/types/set.rs +1373 -0
- package/ref-monty/crates/monty/src/types/slice.rs +257 -0
- package/ref-monty/crates/monty/src/types/str.rs +2051 -0
- package/ref-monty/crates/monty/src/types/tuple.rs +376 -0
- package/ref-monty/crates/monty/src/types/type.rs +407 -0
- package/ref-monty/crates/monty/src/value.rs +2558 -0
- package/ref-monty/crates/monty/test_cases/args__dict_get_no_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_get_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_items_with_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_keys_with_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_pop_no_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_pop_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_values_with_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__id_too_many.py +2 -0
- package/ref-monty/crates/monty/test_cases/args__len_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/args__len_too_many.py +2 -0
- package/ref-monty/crates/monty/test_cases/args__len_type_error_int.py +9 -0
- package/ref-monty/crates/monty/test_cases/args__len_type_error_none.py +9 -0
- package/ref-monty/crates/monty/test_cases/args__list_append_no_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__list_append_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__list_insert_too_few.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__list_insert_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__repr_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__div_zero_float.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__div_zero_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__floordiv_zero_float.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__floordiv_zero_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__pow_zero_neg.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__pow_zero_neg_builtin.py +9 -0
- package/ref-monty/crates/monty/test_cases/assert__expr_fail.py +2 -0
- package/ref-monty/crates/monty/test_cases/assert__fail.py +2 -0
- package/ref-monty/crates/monty/test_cases/assert__fail_msg.py +2 -0
- package/ref-monty/crates/monty/test_cases/assert__fn_fail.py +3 -0
- package/ref-monty/crates/monty/test_cases/assert__ops.py +11 -0
- package/ref-monty/crates/monty/test_cases/async__asyncio_run.py +47 -0
- package/ref-monty/crates/monty/test_cases/async__basic.py +10 -0
- package/ref-monty/crates/monty/test_cases/async__closure.py +14 -0
- package/ref-monty/crates/monty/test_cases/async__double_await_coroutine.py +16 -0
- package/ref-monty/crates/monty/test_cases/async__exception.py +10 -0
- package/ref-monty/crates/monty/test_cases/async__ext_call.py +73 -0
- package/ref-monty/crates/monty/test_cases/async__gather_all.py +85 -0
- package/ref-monty/crates/monty/test_cases/async__nested_await.py +15 -0
- package/ref-monty/crates/monty/test_cases/async__nested_gather_ext.py +37 -0
- package/ref-monty/crates/monty/test_cases/async__not_awaitable.py +10 -0
- package/ref-monty/crates/monty/test_cases/async__not_imported.py +14 -0
- package/ref-monty/crates/monty/test_cases/async__recursion_depth_isolation.py +27 -0
- package/ref-monty/crates/monty/test_cases/async__return_types.py +31 -0
- package/ref-monty/crates/monty/test_cases/async__sequential.py +16 -0
- package/ref-monty/crates/monty/test_cases/async__traceback.py +19 -0
- package/ref-monty/crates/monty/test_cases/async__with_args.py +14 -0
- package/ref-monty/crates/monty/test_cases/attr__get_int_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/attr__get_list_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/attr__set_frozen_nonfield.py +12 -0
- package/ref-monty/crates/monty/test_cases/attr__set_int_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/attr__set_list_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/bench__kitchen_sink.py +68 -0
- package/ref-monty/crates/monty/test_cases/bool__ops.py +20 -0
- package/ref-monty/crates/monty/test_cases/builtin__add_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/builtin__filter.py +62 -0
- package/ref-monty/crates/monty/test_cases/builtin__filter_not_iterable.py +11 -0
- package/ref-monty/crates/monty/test_cases/builtin__getattr.py +84 -0
- package/ref-monty/crates/monty/test_cases/builtin__iter_funcs.py +42 -0
- package/ref-monty/crates/monty/test_cases/builtin__iter_next.py +66 -0
- package/ref-monty/crates/monty/test_cases/builtin__map.py +74 -0
- package/ref-monty/crates/monty/test_cases/builtin__map_not_iterable.py +11 -0
- package/ref-monty/crates/monty/test_cases/builtin__math_funcs.py +154 -0
- package/ref-monty/crates/monty/test_cases/builtin__more_iter_funcs.py +148 -0
- package/ref-monty/crates/monty/test_cases/builtin__next_stop_iteration.py +10 -0
- package/ref-monty/crates/monty/test_cases/builtin__print_invalid_kwarg.py +9 -0
- package/ref-monty/crates/monty/test_cases/builtin__print_kwargs.py +12 -0
- package/ref-monty/crates/monty/test_cases/builtin__repr.py +3 -0
- package/ref-monty/crates/monty/test_cases/builtin__string_funcs.py +73 -0
- package/ref-monty/crates/monty/test_cases/bytes__decode_invalid_utf8.py +18 -0
- package/ref-monty/crates/monty/test_cases/bytes__endswith_str_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/bytes__getitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/bytes__index_start_gt_end.py +10 -0
- package/ref-monty/crates/monty/test_cases/bytes__methods.py +394 -0
- package/ref-monty/crates/monty/test_cases/bytes__negative_count.py +9 -0
- package/ref-monty/crates/monty/test_cases/bytes__ops.py +90 -0
- package/ref-monty/crates/monty/test_cases/bytes__startswith_str_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/call_object.py +3 -0
- package/ref-monty/crates/monty/test_cases/chain_comparison__all.py +79 -0
- package/ref-monty/crates/monty/test_cases/closure__param_shadows_outer.py +81 -0
- package/ref-monty/crates/monty/test_cases/closure__pep448.py +203 -0
- package/ref-monty/crates/monty/test_cases/closure__undefined_nonlocal.py +13 -0
- package/ref-monty/crates/monty/test_cases/compare__mixed_types.py +120 -0
- package/ref-monty/crates/monty/test_cases/comprehension__all.py +208 -0
- package/ref-monty/crates/monty/test_cases/comprehension__scope.py +7 -0
- package/ref-monty/crates/monty/test_cases/comprehension__unbound_local.py +14 -0
- package/ref-monty/crates/monty/test_cases/dataclass__basic.py +238 -0
- package/ref-monty/crates/monty/test_cases/dataclass__call_field_error.py +12 -0
- package/ref-monty/crates/monty/test_cases/dataclass__frozen_set_error.py +12 -0
- package/ref-monty/crates/monty/test_cases/dataclass__get_missing_attr_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/dict__get_unhashable_key.py +3 -0
- package/ref-monty/crates/monty/test_cases/dict__literal_unhashable_key.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__method_pop_missing_error.py +3 -0
- package/ref-monty/crates/monty/test_cases/dict__methods.py +151 -0
- package/ref-monty/crates/monty/test_cases/dict__ops.py +133 -0
- package/ref-monty/crates/monty/test_cases/dict__pop_unhashable_key.py +4 -0
- package/ref-monty/crates/monty/test_cases/dict__popitem_empty.py +9 -0
- package/ref-monty/crates/monty/test_cases/dict__subscript_missing_key.py +3 -0
- package/ref-monty/crates/monty/test_cases/dict__unhashable_dict_key.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__unhashable_list_key.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__views.py +165 -0
- package/ref-monty/crates/monty/test_cases/edge__all.py +26 -0
- package/ref-monty/crates/monty/test_cases/edge__float_int_mod.py +2 -0
- package/ref-monty/crates/monty/test_cases/edge__int_float_mod.py +2 -0
- package/ref-monty/crates/monty/test_cases/exc__args.py +16 -0
- package/ref-monty/crates/monty/test_cases/exc__str.py +15 -0
- package/ref-monty/crates/monty/test_cases/execute_ok__all.py +54 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_instance_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_string_arg.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_string_arg_quotes.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_type.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_instance_via_var.py +4 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_list.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_number.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_type_call_via_var.py +4 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_type_direct.py +3 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_type_via_var.py +4 -0
- package/ref-monty/crates/monty/test_cases/ext_call__arg_side_effect_bug.py +22 -0
- package/ref-monty/crates/monty/test_cases/ext_call__augmented.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__augmented_refcount_bug.py +7 -0
- package/ref-monty/crates/monty/test_cases/ext_call__bare_raise_after_resume.py +34 -0
- package/ref-monty/crates/monty/test_cases/ext_call__basic.py +99 -0
- package/ref-monty/crates/monty/test_cases/ext_call__boolean.py +37 -0
- package/ref-monty/crates/monty/test_cases/ext_call__boolean_side_effect_hang.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__closure_bug.py +16 -0
- package/ref-monty/crates/monty/test_cases/ext_call__comparison.py +26 -0
- package/ref-monty/crates/monty/test_cases/ext_call__deep_call_stack.py +18 -0
- package/ref-monty/crates/monty/test_cases/ext_call__elif.py +171 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc.py +4 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc_deep_stack.py +39 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc_in_function.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc_nested_functions.py +31 -0
- package/ref-monty/crates/monty/test_cases/ext_call__ext_exc.py +171 -0
- package/ref-monty/crates/monty/test_cases/ext_call__for.py +114 -0
- package/ref-monty/crates/monty/test_cases/ext_call__fstring.py +12 -0
- package/ref-monty/crates/monty/test_cases/ext_call__if.py +135 -0
- package/ref-monty/crates/monty/test_cases/ext_call__if_condition.py +37 -0
- package/ref-monty/crates/monty/test_cases/ext_call__in_closure.py +14 -0
- package/ref-monty/crates/monty/test_cases/ext_call__in_function.py +40 -0
- package/ref-monty/crates/monty/test_cases/ext_call__in_function_simple.py +7 -0
- package/ref-monty/crates/monty/test_cases/ext_call__literals.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__multi_in_func.py +32 -0
- package/ref-monty/crates/monty/test_cases/ext_call__name_lookup.py +69 -0
- package/ref-monty/crates/monty/test_cases/ext_call__name_lookup_undefined.py +4 -0
- package/ref-monty/crates/monty/test_cases/ext_call__nested_calls.py +14 -0
- package/ref-monty/crates/monty/test_cases/ext_call__recursion_bug.py +19 -0
- package/ref-monty/crates/monty/test_cases/ext_call__return.py +28 -0
- package/ref-monty/crates/monty/test_cases/ext_call__side_effects.py +25 -0
- package/ref-monty/crates/monty/test_cases/ext_call__subscript.py +7 -0
- package/ref-monty/crates/monty/test_cases/ext_call__ternary.py +28 -0
- package/ref-monty/crates/monty/test_cases/ext_call__try.py +280 -0
- package/ref-monty/crates/monty/test_cases/ext_call__try_simple.py +10 -0
- package/ref-monty/crates/monty/test_cases/ext_call__unary.py +13 -0
- package/ref-monty/crates/monty/test_cases/frozenset__ops.py +178 -0
- package/ref-monty/crates/monty/test_cases/fstring__all.py +236 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_eq_align_on_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_float_f_on_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_int_d_on_float.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_int_d_on_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_invalid_spec.py +4 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_invalid_spec_dynamic.py +4 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_invalid_spec_str.py +4 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_str_s_on_int.py +3 -0
- package/ref-monty/crates/monty/test_cases/function__call_duplicate_kwargs.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__call_unpack.py +42 -0
- package/ref-monty/crates/monty/test_cases/function__defaults.py +117 -0
- package/ref-monty/crates/monty/test_cases/function__err_duplicate_arg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_duplicate_first_arg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_duplicate_kwarg_cleanup.py +9 -0
- package/ref-monty/crates/monty/test_cases/function__err_kwonly_as_positional.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_all_posonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_heap_cleanup.py +9 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_kwonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_posonly_with_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_with_posonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_posonly_as_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_posonly_first_as_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_too_many_posonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_too_many_with_kwonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg_cleanup.py +9 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg_quote.py +13 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg_simple.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_duplicate_arg.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_duplicate_heap.py +8 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_int.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_nonstring_key.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_not_mapping.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__kwargs_unpacking.py +173 -0
- package/ref-monty/crates/monty/test_cases/function__ops.py +294 -0
- package/ref-monty/crates/monty/test_cases/function__return_none.py +42 -0
- package/ref-monty/crates/monty/test_cases/function__signatures.py +47 -0
- package/ref-monty/crates/monty/test_cases/function__too_few_args_all.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_few_args_one.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_few_args_two.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_many_args_one.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_many_args_two.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_many_args_zero.py +6 -0
- package/ref-monty/crates/monty/test_cases/global__error_assigned_before.py +7 -0
- package/ref-monty/crates/monty/test_cases/global__ops.py +163 -0
- package/ref-monty/crates/monty/test_cases/hash__dict_unhashable.py +2 -0
- package/ref-monty/crates/monty/test_cases/hash__list_unhashable.py +2 -0
- package/ref-monty/crates/monty/test_cases/hash__ops.py +153 -0
- package/ref-monty/crates/monty/test_cases/id__bytes_literals_distinct.py +3 -0
- package/ref-monty/crates/monty/test_cases/id__int_copy_distinct.py +5 -0
- package/ref-monty/crates/monty/test_cases/id__is_number_is_number.py +3 -0
- package/ref-monty/crates/monty/test_cases/id__non_overlapping_lifetimes_distinct_types.py +10 -0
- package/ref-monty/crates/monty/test_cases/id__non_overlapping_lifetimes_same_types.py +6 -0
- package/ref-monty/crates/monty/test_cases/id__ops.py +97 -0
- package/ref-monty/crates/monty/test_cases/id__str_literals_same.py +3 -0
- package/ref-monty/crates/monty/test_cases/if__elif_else.py +207 -0
- package/ref-monty/crates/monty/test_cases/if__raise_elif.py +11 -0
- package/ref-monty/crates/monty/test_cases/if__raise_else.py +13 -0
- package/ref-monty/crates/monty/test_cases/if__raise_if.py +9 -0
- package/ref-monty/crates/monty/test_cases/if__raise_in_elif_condition.py +18 -0
- package/ref-monty/crates/monty/test_cases/if__raise_in_if_condition.py +16 -0
- package/ref-monty/crates/monty/test_cases/if_else_expr__all.py +55 -0
- package/ref-monty/crates/monty/test_cases/import__error_cannot_import.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__error_module_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__local_scope.py +68 -0
- package/ref-monty/crates/monty/test_cases/import__os.py +25 -0
- package/ref-monty/crates/monty/test_cases/import__relative_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__relative_no_module_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__runtime_error_when_executed.py +14 -0
- package/ref-monty/crates/monty/test_cases/import__star_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/import__sys.py +47 -0
- package/ref-monty/crates/monty/test_cases/import__sys_monty.py +28 -0
- package/ref-monty/crates/monty/test_cases/import__type_checking_guard.py +37 -0
- package/ref-monty/crates/monty/test_cases/import__typing.py +25 -0
- package/ref-monty/crates/monty/test_cases/import__typing_type_ignore.py +4 -0
- package/ref-monty/crates/monty/test_cases/int__bigint.py +467 -0
- package/ref-monty/crates/monty/test_cases/int__bigint_errors.py +260 -0
- package/ref-monty/crates/monty/test_cases/int__ops.py +219 -0
- package/ref-monty/crates/monty/test_cases/int__overflow_division.py +84 -0
- package/ref-monty/crates/monty/test_cases/is_variant__all.py +36 -0
- package/ref-monty/crates/monty/test_cases/isinstance__arg2_list_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/isinstance__arg2_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/iter__dict_mutation.py +4 -0
- package/ref-monty/crates/monty/test_cases/iter__for.py +243 -0
- package/ref-monty/crates/monty/test_cases/iter__for_loop_unpacking.py +66 -0
- package/ref-monty/crates/monty/test_cases/iter__generator_expr.py +20 -0
- package/ref-monty/crates/monty/test_cases/iter__generator_expr_type.py +7 -0
- package/ref-monty/crates/monty/test_cases/iter__not_iterable.py +3 -0
- package/ref-monty/crates/monty/test_cases/lambda__all.py +145 -0
- package/ref-monty/crates/monty/test_cases/list__extend_not_iterable.py +7 -0
- package/ref-monty/crates/monty/test_cases/list__getitem_out_of_bounds.py +3 -0
- package/ref-monty/crates/monty/test_cases/list__index_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__index_start_gt_end.py +10 -0
- package/ref-monty/crates/monty/test_cases/list__ops.py +473 -0
- package/ref-monty/crates/monty/test_cases/list__pop_empty.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__pop_out_of_range.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__pop_type_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__remove_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_dict_index.py +13 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_huge_int_index.py +13 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_type_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/list__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/longint__index_error.py +3 -0
- package/ref-monty/crates/monty/test_cases/longint__repeat_error.py +3 -0
- package/ref-monty/crates/monty/test_cases/loop__break_continue.py +113 -0
- package/ref-monty/crates/monty/test_cases/loop__break_finally.py +69 -0
- package/ref-monty/crates/monty/test_cases/loop__break_in_function_error.py +13 -0
- package/ref-monty/crates/monty/test_cases/loop__break_in_if_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/loop__break_nested_except_clears.py +55 -0
- package/ref-monty/crates/monty/test_cases/loop__break_outside_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_finally.py +81 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_in_function_error.py +13 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_in_if_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_nested_except_clears.py +60 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_outside_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/math__acos_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__acosh_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__asin_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__atanh_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__cos_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__cosh_overflow_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__exp_overflow_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__factorial_float_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__factorial_negative_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__floor_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__floor_nan_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__floor_str_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__fmod_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__gamma_neg_int_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__gcd_float_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__isqrt_negative_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__ldexp_overflow_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__log1p_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__log_base1_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__log_zero_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__module.py +1432 -0
- package/ref-monty/crates/monty/test_cases/math__pow_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__sin_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__sqrt_negative_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__tan_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__trunc_str_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/method__args_kwargs_unpacking.py +259 -0
- package/ref-monty/crates/monty/test_cases/name_error__unbound_local_func.py +19 -0
- package/ref-monty/crates/monty/test_cases/name_error__unbound_local_module.py +12 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_chained.py +9 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_in_expr.py +9 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_in_function.py +16 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_with_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_global.py +10 -0
- package/ref-monty/crates/monty/test_cases/namedtuple__missing_attr.py +11 -0
- package/ref-monty/crates/monty/test_cases/namedtuple__ops.py +34 -0
- package/ref-monty/crates/monty/test_cases/nonlocal__error_module_level.py +3 -0
- package/ref-monty/crates/monty/test_cases/nonlocal__ops.py +353 -0
- package/ref-monty/crates/monty/test_cases/os__environ.py +40 -0
- package/ref-monty/crates/monty/test_cases/os__getenv_key_list_error.py +5 -0
- package/ref-monty/crates/monty/test_cases/os__getenv_key_type_error.py +5 -0
- package/ref-monty/crates/monty/test_cases/parse_error__complex.py +3 -0
- package/ref-monty/crates/monty/test_cases/pathlib__import.py +11 -0
- package/ref-monty/crates/monty/test_cases/pathlib__os.py +136 -0
- package/ref-monty/crates/monty/test_cases/pathlib__os_read_error.py +12 -0
- package/ref-monty/crates/monty/test_cases/pathlib__pure.py +81 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_dict_self.py +5 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_list_dict.py +6 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_list_self.py +5 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_multiple_refs.py +6 -0
- package/ref-monty/crates/monty/test_cases/range__error_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/range__error_step_zero.py +2 -0
- package/ref-monty/crates/monty/test_cases/range__error_too_many_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/range__getitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/range__ops.py +236 -0
- package/ref-monty/crates/monty/test_cases/re__basic.py +756 -0
- package/ref-monty/crates/monty/test_cases/re__grouping.py +241 -0
- package/ref-monty/crates/monty/test_cases/re__match.py +148 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_drop.py +26 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_eq.py +23 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_hash.py +46 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_repr.py +12 -0
- package/ref-monty/crates/monty/test_cases/recursion__function_depth.py +13 -0
- package/ref-monty/crates/monty/test_cases/refcount__cycle_mutual_reference.py +18 -0
- package/ref-monty/crates/monty/test_cases/refcount__cycle_self_reference.py +12 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_basic.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_get.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_keys_and.py +14 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_overwrite.py +6 -0
- package/ref-monty/crates/monty/test_cases/refcount__gather_cleanup.py +16 -0
- package/ref-monty/crates/monty/test_cases/refcount__gather_exception.py +18 -0
- package/ref-monty/crates/monty/test_cases/refcount__gather_nested_cancel.py +25 -0
- package/ref-monty/crates/monty/test_cases/refcount__immediate_skipped.py +4 -0
- package/ref-monty/crates/monty/test_cases/refcount__kwargs_unpacking.py +27 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_append_multiple.py +6 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_append_ref.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_concat.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_getitem.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_iadd.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__nested_list.py +4 -0
- package/ref-monty/crates/monty/test_cases/refcount__re_pattern_sub_error_paths.py +37 -0
- package/ref-monty/crates/monty/test_cases/refcount__re_search_match.py +34 -0
- package/ref-monty/crates/monty/test_cases/refcount__re_sub_error_paths.py +31 -0
- package/ref-monty/crates/monty/test_cases/refcount__shared_reference.py +4 -0
- package/ref-monty/crates/monty/test_cases/refcount__single_list.py +3 -0
- package/ref-monty/crates/monty/test_cases/repr__cycle_detection.py +24 -0
- package/ref-monty/crates/monty/test_cases/set__ops.py +191 -0
- package/ref-monty/crates/monty/test_cases/set__review_bugs.py +35 -0
- package/ref-monty/crates/monty/test_cases/set__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/slice__invalid_indices.py +2 -0
- package/ref-monty/crates/monty/test_cases/slice__kwargs.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__no_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__ops.py +149 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_bytes.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_range.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_str.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_tuple.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__too_many_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__getitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/str__index_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_no_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_non_string.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_not_iterable.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_too_many_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__methods.py +327 -0
- package/ref-monty/crates/monty/test_cases/str__ops.py +162 -0
- package/ref-monty/crates/monty/test_cases/str__partition_empty.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__rsplit_empty_sep.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__split_empty_sep.py +9 -0
- package/ref-monty/crates/monty/test_cases/sys__types.py +7 -0
- package/ref-monty/crates/monty/test_cases/traceback__division_error.py +30 -0
- package/ref-monty/crates/monty/test_cases/traceback__index_error.py +17 -0
- package/ref-monty/crates/monty/test_cases/traceback__insert_as_int.py +10 -0
- package/ref-monty/crates/monty/test_cases/traceback__nested_call.py +29 -0
- package/ref-monty/crates/monty/test_cases/traceback__nonlocal_module_scope.py +10 -0
- package/ref-monty/crates/monty/test_cases/traceback__nonlocal_unbound.py +24 -0
- package/ref-monty/crates/monty/test_cases/traceback__range_as_int.py +9 -0
- package/ref-monty/crates/monty/test_cases/traceback__recursion_error.py +23 -0
- package/ref-monty/crates/monty/test_cases/traceback__set_mutation.py +11 -0
- package/ref-monty/crates/monty/test_cases/traceback__undefined_attr_call.py +16 -0
- package/ref-monty/crates/monty/test_cases/traceback__undefined_call.py +16 -0
- package/ref-monty/crates/monty/test_cases/traceback__undefined_raise.py +16 -0
- package/ref-monty/crates/monty/test_cases/try_except__all.py +472 -0
- package/ref-monty/crates/monty/test_cases/try_except__bare_raise_no_context.py +2 -0
- package/ref-monty/crates/monty/test_cases/try_except__invalid_type.py +5 -0
- package/ref-monty/crates/monty/test_cases/tuple__getitem_out_of_bounds.py +3 -0
- package/ref-monty/crates/monty/test_cases/tuple__index_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/tuple__index_start_gt_end.py +10 -0
- package/ref-monty/crates/monty/test_cases/tuple__methods.py +19 -0
- package/ref-monty/crates/monty/test_cases/tuple__ops.py +133 -0
- package/ref-monty/crates/monty/test_cases/tuple__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__builtin_attr_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__bytes_negative.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__cell_not_builtin.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__exception_attr_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/type__float_conversion_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__float_repr_both_quotes.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__float_repr_newline.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__float_repr_single_quote.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__int_conversion_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__list_not_iterable.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__non_builtin_name_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__ops.py +200 -0
- package/ref-monty/crates/monty/test_cases/type__shadow_exc.py +3 -0
- package/ref-monty/crates/monty/test_cases/type__shadow_int.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__shadow_len.py +3 -0
- package/ref-monty/crates/monty/test_cases/type__tuple_not_iterable.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_add_list.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_div_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_floordiv_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_iadd_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_mod_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_pow_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_sub_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__list_add_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__list_add_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__list_iadd_int.py +6 -0
- package/ref-monty/crates/monty/test_cases/type_error__str_add_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__str_iadd_int.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_invert_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_minus_str.py +4 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_neg_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_plus_str.py +4 -0
- package/ref-monty/crates/monty/test_cases/typing__types.py +24 -0
- package/ref-monty/crates/monty/test_cases/unpack__nested.py +48 -0
- package/ref-monty/crates/monty/test_cases/unpack__non_sequence.py +9 -0
- package/ref-monty/crates/monty/test_cases/unpack__not_enough.py +9 -0
- package/ref-monty/crates/monty/test_cases/unpack__ops.py +153 -0
- package/ref-monty/crates/monty/test_cases/unpack__star_not_enough.py +9 -0
- package/ref-monty/crates/monty/test_cases/unpack__too_many.py +9 -0
- package/ref-monty/crates/monty/test_cases/version__cpython.py +4 -0
- package/ref-monty/crates/monty/test_cases/walrus__all.py +178 -0
- package/ref-monty/crates/monty/test_cases/while__all.py +206 -0
- package/ref-monty/crates/monty/tests/asyncio.rs +764 -0
- package/ref-monty/crates/monty/tests/binary_serde.rs +185 -0
- package/ref-monty/crates/monty/tests/bytecode_limits.rs +248 -0
- package/ref-monty/crates/monty/tests/datatest_runner.rs +2029 -0
- package/ref-monty/crates/monty/tests/inputs.rs +420 -0
- package/ref-monty/crates/monty/tests/json_serde.rs +250 -0
- package/ref-monty/crates/monty/tests/main.rs +71 -0
- package/ref-monty/crates/monty/tests/math_module.rs +114 -0
- package/ref-monty/crates/monty/tests/name_lookup.rs +482 -0
- package/ref-monty/crates/monty/tests/os_tests.rs +459 -0
- package/ref-monty/crates/monty/tests/parse_errors.rs +441 -0
- package/ref-monty/crates/monty/tests/print_writer.rs +238 -0
- package/ref-monty/crates/monty/tests/py_object.rs +121 -0
- package/ref-monty/crates/monty/tests/regex.rs +90 -0
- package/ref-monty/crates/monty/tests/repl.rs +344 -0
- package/ref-monty/crates/monty/tests/resource_limits.rs +1826 -0
- package/ref-monty/crates/monty/tests/try_from.rs +167 -0
- package/ref-monty/crates/monty-cli/Cargo.toml +25 -0
- package/ref-monty/crates/monty-cli/src/main.rs +541 -0
- package/ref-monty/crates/monty-js/.cargo/config.toml +2 -0
- package/ref-monty/crates/monty-js/.prettierignore +8 -0
- package/ref-monty/crates/monty-js/Cargo.toml +32 -0
- package/ref-monty/crates/monty-js/README.md +207 -0
- package/ref-monty/crates/monty-js/__test__/async.spec.ts +350 -0
- package/ref-monty/crates/monty-js/__test__/basic.spec.ts +114 -0
- package/ref-monty/crates/monty-js/__test__/exceptions.spec.ts +427 -0
- package/ref-monty/crates/monty-js/__test__/external.spec.ts +354 -0
- package/ref-monty/crates/monty-js/__test__/inputs.spec.ts +143 -0
- package/ref-monty/crates/monty-js/__test__/limits.spec.ts +162 -0
- package/ref-monty/crates/monty-js/__test__/package.json +3 -0
- package/ref-monty/crates/monty-js/__test__/print.spec.ts +229 -0
- package/ref-monty/crates/monty-js/__test__/repl.spec.ts +34 -0
- package/ref-monty/crates/monty-js/__test__/serialize.spec.ts +205 -0
- package/ref-monty/crates/monty-js/__test__/start.spec.ts +443 -0
- package/ref-monty/crates/monty-js/__test__/type_check.spec.ts +147 -0
- package/ref-monty/crates/monty-js/__test__/types.spec.ts +319 -0
- package/ref-monty/crates/monty-js/build.rs +61 -0
- package/ref-monty/crates/monty-js/index-header.d.ts +3 -0
- package/ref-monty/crates/monty-js/package-lock.json +4694 -0
- package/ref-monty/crates/monty-js/package.json +100 -0
- package/ref-monty/crates/monty-js/scripts/smoke-test.sh +69 -0
- package/ref-monty/crates/monty-js/smoke-test/package.json +17 -0
- package/ref-monty/crates/monty-js/smoke-test/test.ts +171 -0
- package/ref-monty/crates/monty-js/smoke-test/tsconfig.json +11 -0
- package/ref-monty/crates/monty-js/src/convert.rs +648 -0
- package/ref-monty/crates/monty-js/src/exceptions.rs +293 -0
- package/ref-monty/crates/monty-js/src/lib.rs +41 -0
- package/ref-monty/crates/monty-js/src/limits.rs +53 -0
- package/ref-monty/crates/monty-js/src/monty_cls.rs +1407 -0
- package/ref-monty/crates/monty-js/tsconfig.json +17 -0
- package/ref-monty/crates/monty-js/wrapper.ts +701 -0
- package/ref-monty/crates/monty-python/Cargo.toml +38 -0
- package/ref-monty/crates/monty-python/README.md +134 -0
- package/ref-monty/crates/monty-python/build.rs +4 -0
- package/ref-monty/crates/monty-python/example.py +40 -0
- package/ref-monty/crates/monty-python/exercise.py +46 -0
- package/ref-monty/crates/monty-python/pyproject.toml +57 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/__init__.py +281 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/_monty.pyi +677 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/os_access.py +933 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/py.typed +0 -0
- package/ref-monty/crates/monty-python/src/convert.rs +273 -0
- package/ref-monty/crates/monty-python/src/dataclass.rs +461 -0
- package/ref-monty/crates/monty-python/src/exceptions.rs +557 -0
- package/ref-monty/crates/monty-python/src/external.rs +165 -0
- package/ref-monty/crates/monty-python/src/lib.rs +77 -0
- package/ref-monty/crates/monty-python/src/limits.rs +142 -0
- package/ref-monty/crates/monty-python/src/monty_cls.rs +1650 -0
- package/ref-monty/crates/monty-python/src/repl.rs +470 -0
- package/ref-monty/crates/monty-python/src/serialization.rs +761 -0
- package/ref-monty/crates/monty-python/tests/test_async.py +1201 -0
- package/ref-monty/crates/monty-python/tests/test_basic.py +66 -0
- package/ref-monty/crates/monty-python/tests/test_dataclasses.py +971 -0
- package/ref-monty/crates/monty-python/tests/test_exceptions.py +361 -0
- package/ref-monty/crates/monty-python/tests/test_external.py +367 -0
- package/ref-monty/crates/monty-python/tests/test_inputs.py +126 -0
- package/ref-monty/crates/monty-python/tests/test_limits.py +257 -0
- package/ref-monty/crates/monty-python/tests/test_os_access.py +1286 -0
- package/ref-monty/crates/monty-python/tests/test_os_access_compat.py +731 -0
- package/ref-monty/crates/monty-python/tests/test_os_access_raw.py +483 -0
- package/ref-monty/crates/monty-python/tests/test_os_calls.py +819 -0
- package/ref-monty/crates/monty-python/tests/test_print.py +208 -0
- package/ref-monty/crates/monty-python/tests/test_re.py +170 -0
- package/ref-monty/crates/monty-python/tests/test_readme_examples.py +20 -0
- package/ref-monty/crates/monty-python/tests/test_repl.py +749 -0
- package/ref-monty/crates/monty-python/tests/test_serialize.py +284 -0
- package/ref-monty/crates/monty-python/tests/test_start.py +346 -0
- package/ref-monty/crates/monty-python/tests/test_threading.py +163 -0
- package/ref-monty/crates/monty-python/tests/test_type_check.py +344 -0
- package/ref-monty/crates/monty-python/tests/test_types.py +553 -0
- package/ref-monty/crates/monty-type-checking/Cargo.toml +32 -0
- package/ref-monty/crates/monty-type-checking/src/db.rs +116 -0
- package/ref-monty/crates/monty-type-checking/src/lib.rs +4 -0
- package/ref-monty/crates/monty-type-checking/src/type_check.rs +280 -0
- package/ref-monty/crates/monty-type-checking/tests/bad_types.py +109 -0
- package/ref-monty/crates/monty-type-checking/tests/bad_types_output.txt +21 -0
- package/ref-monty/crates/monty-type-checking/tests/good_types.py +475 -0
- package/ref-monty/crates/monty-type-checking/tests/main.rs +205 -0
- package/ref-monty/crates/monty-type-checking/tests/reveal_types.py +56 -0
- package/ref-monty/crates/monty-type-checking/tests/reveal_types_output.txt +41 -0
- package/ref-monty/crates/monty-typeshed/Cargo.toml +29 -0
- package/ref-monty/crates/monty-typeshed/README.md +11 -0
- package/ref-monty/crates/monty-typeshed/build.rs +101 -0
- package/ref-monty/crates/monty-typeshed/custom/README.md +1 -0
- package/ref-monty/crates/monty-typeshed/custom/asyncio.pyi +138 -0
- package/ref-monty/crates/monty-typeshed/custom/os.pyi +87 -0
- package/ref-monty/crates/monty-typeshed/custom/sys.pyi +33 -0
- package/ref-monty/crates/monty-typeshed/src/lib.rs +56 -0
- package/ref-monty/crates/monty-typeshed/update.py +321 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/source_commit.txt +1 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/VERSIONS +20 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/_collections_abc.pyi +105 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/_typeshed/__init__.pyi +394 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/asyncio.pyi +138 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/builtins.pyi +1434 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/collections/__init__.pyi +527 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/collections/abc.pyi +2 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/dataclasses.pyi +502 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/enum.pyi +376 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/math.pyi +149 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/os.pyi +87 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/pathlib/__init__.pyi +395 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/pathlib/types.pyi +8 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/re.pyi +337 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/sys.pyi +33 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/types.pyi +741 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/typing.pyi +1217 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/typing_extensions.pyi +716 -0
- package/ref-monty/docs/usage-guide.md +117 -0
- package/ref-monty/examples/README.md +3 -0
- package/ref-monty/examples/expense_analysis/README.md +3 -0
- package/ref-monty/examples/expense_analysis/data.py +124 -0
- package/ref-monty/examples/expense_analysis/main.py +115 -0
- package/ref-monty/examples/sql_playground/README.md +20 -0
- package/ref-monty/examples/sql_playground/external_functions.py +129 -0
- package/ref-monty/examples/sql_playground/main.py +81 -0
- package/ref-monty/examples/sql_playground/sandbox_code.py +82 -0
- package/ref-monty/examples/sql_playground/type_stubs.pyi +14 -0
- package/ref-monty/examples/web_scraper/README.md +15 -0
- package/ref-monty/examples/web_scraper/browser.py +56 -0
- package/ref-monty/examples/web_scraper/example_code.py +59 -0
- package/ref-monty/examples/web_scraper/external_functions.py +324 -0
- package/ref-monty/examples/web_scraper/main.py +193 -0
- package/ref-monty/examples/web_scraper/sub_agent.py +79 -0
- package/ref-monty/monty-npm.md +235 -0
- package/ref-monty/pyproject.toml +162 -0
- package/ref-monty/scripts/check_imports.py +91 -0
- package/ref-monty/scripts/codecov_diff.py +412 -0
- package/ref-monty/scripts/complete_tests.py +146 -0
- package/ref-monty/scripts/flamegraph_to_text.py +208 -0
- package/ref-monty/scripts/iter_test_methods.py +540 -0
- package/ref-monty/scripts/run_traceback.py +180 -0
- package/ref-monty/scripts/startup_performance.py +130 -0
- package/ref-monty/uv.lock +1779 -0
- package/temp_resend_cli/repo/.github/scripts/pr-title-check.js +34 -0
- package/temp_resend_cli/repo/.github/workflows/ci.yml +67 -0
- package/temp_resend_cli/repo/.github/workflows/post-release.yml +51 -0
- package/temp_resend_cli/repo/.github/workflows/pr-title-check.yml +13 -0
- package/temp_resend_cli/repo/.github/workflows/release.yml +175 -0
- package/temp_resend_cli/repo/.github/workflows/test-install-unix.yml +34 -0
- package/temp_resend_cli/repo/.github/workflows/test-install-windows.yml +48 -0
- package/temp_resend_cli/repo/CHANGELOG.md +31 -0
- package/temp_resend_cli/repo/LICENSE +21 -0
- package/temp_resend_cli/repo/README.md +450 -0
- package/temp_resend_cli/repo/biome.json +36 -0
- package/temp_resend_cli/repo/install.ps1 +141 -0
- package/temp_resend_cli/repo/install.sh +301 -0
- package/temp_resend_cli/repo/package.json +61 -0
- package/temp_resend_cli/repo/pnpm-lock.yaml +2439 -0
- package/temp_resend_cli/repo/renovate.json +4 -0
- package/temp_resend_cli/repo/src/cli.ts +98 -0
- package/temp_resend_cli/repo/src/commands/api-keys/create.ts +114 -0
- package/temp_resend_cli/repo/src/commands/api-keys/delete.ts +47 -0
- package/temp_resend_cli/repo/src/commands/api-keys/index.ts +26 -0
- package/temp_resend_cli/repo/src/commands/api-keys/list.ts +35 -0
- package/temp_resend_cli/repo/src/commands/api-keys/utils.ts +8 -0
- package/temp_resend_cli/repo/src/commands/auth/index.ts +20 -0
- package/temp_resend_cli/repo/src/commands/auth/login.ts +234 -0
- package/temp_resend_cli/repo/src/commands/auth/logout.ts +105 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/create.ts +196 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/delete.ts +46 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/get.ts +59 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/index.ts +43 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/list.ts +60 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/send.ts +56 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/update.ts +95 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/utils.ts +35 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/create.ts +118 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/delete.ts +48 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/get.ts +46 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/index.ts +48 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/list.ts +68 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/update.ts +88 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/utils.ts +17 -0
- package/temp_resend_cli/repo/src/commands/contacts/add-segment.ts +78 -0
- package/temp_resend_cli/repo/src/commands/contacts/create.ts +122 -0
- package/temp_resend_cli/repo/src/commands/contacts/delete.ts +49 -0
- package/temp_resend_cli/repo/src/commands/contacts/get.ts +53 -0
- package/temp_resend_cli/repo/src/commands/contacts/index.ts +58 -0
- package/temp_resend_cli/repo/src/commands/contacts/list.ts +57 -0
- package/temp_resend_cli/repo/src/commands/contacts/remove-segment.ts +48 -0
- package/temp_resend_cli/repo/src/commands/contacts/segments.ts +39 -0
- package/temp_resend_cli/repo/src/commands/contacts/topics.ts +45 -0
- package/temp_resend_cli/repo/src/commands/contacts/update-topics.ts +90 -0
- package/temp_resend_cli/repo/src/commands/contacts/update.ts +77 -0
- package/temp_resend_cli/repo/src/commands/contacts/utils.ts +119 -0
- package/temp_resend_cli/repo/src/commands/doctor.ts +216 -0
- package/temp_resend_cli/repo/src/commands/domains/create.ts +83 -0
- package/temp_resend_cli/repo/src/commands/domains/delete.ts +42 -0
- package/temp_resend_cli/repo/src/commands/domains/get.ts +47 -0
- package/temp_resend_cli/repo/src/commands/domains/index.ts +35 -0
- package/temp_resend_cli/repo/src/commands/domains/list.ts +53 -0
- package/temp_resend_cli/repo/src/commands/domains/update.ts +75 -0
- package/temp_resend_cli/repo/src/commands/domains/utils.ts +44 -0
- package/temp_resend_cli/repo/src/commands/domains/verify.ts +38 -0
- package/temp_resend_cli/repo/src/commands/emails/batch.ts +140 -0
- package/temp_resend_cli/repo/src/commands/emails/get.ts +44 -0
- package/temp_resend_cli/repo/src/commands/emails/index.ts +30 -0
- package/temp_resend_cli/repo/src/commands/emails/list.ts +84 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/attachment.ts +55 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/attachments.ts +68 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/get.ts +58 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/index.ts +28 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/list.ts +59 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/utils.ts +38 -0
- package/temp_resend_cli/repo/src/commands/emails/send.ts +189 -0
- package/temp_resend_cli/repo/src/commands/open.ts +27 -0
- package/temp_resend_cli/repo/src/commands/segments/create.ts +50 -0
- package/temp_resend_cli/repo/src/commands/segments/delete.ts +47 -0
- package/temp_resend_cli/repo/src/commands/segments/get.ts +38 -0
- package/temp_resend_cli/repo/src/commands/segments/index.ts +36 -0
- package/temp_resend_cli/repo/src/commands/segments/list.ts +58 -0
- package/temp_resend_cli/repo/src/commands/segments/utils.ts +7 -0
- package/temp_resend_cli/repo/src/commands/teams/index.ts +10 -0
- package/temp_resend_cli/repo/src/commands/teams/list.ts +35 -0
- package/temp_resend_cli/repo/src/commands/teams/remove.ts +86 -0
- package/temp_resend_cli/repo/src/commands/teams/switch.ts +76 -0
- package/temp_resend_cli/repo/src/commands/topics/create.ts +73 -0
- package/temp_resend_cli/repo/src/commands/topics/delete.ts +47 -0
- package/temp_resend_cli/repo/src/commands/topics/get.ts +42 -0
- package/temp_resend_cli/repo/src/commands/topics/index.ts +42 -0
- package/temp_resend_cli/repo/src/commands/topics/list.ts +34 -0
- package/temp_resend_cli/repo/src/commands/topics/update.ts +59 -0
- package/temp_resend_cli/repo/src/commands/topics/utils.ts +16 -0
- package/temp_resend_cli/repo/src/commands/webhooks/create.ts +128 -0
- package/temp_resend_cli/repo/src/commands/webhooks/delete.ts +49 -0
- package/temp_resend_cli/repo/src/commands/webhooks/get.ts +42 -0
- package/temp_resend_cli/repo/src/commands/webhooks/index.ts +42 -0
- package/temp_resend_cli/repo/src/commands/webhooks/list.ts +55 -0
- package/temp_resend_cli/repo/src/commands/webhooks/listen.ts +379 -0
- package/temp_resend_cli/repo/src/commands/webhooks/update.ts +83 -0
- package/temp_resend_cli/repo/src/commands/webhooks/utils.ts +36 -0
- package/temp_resend_cli/repo/src/commands/whoami.ts +71 -0
- package/temp_resend_cli/repo/src/lib/actions.ts +157 -0
- package/temp_resend_cli/repo/src/lib/client.ts +37 -0
- package/temp_resend_cli/repo/src/lib/config.ts +217 -0
- package/temp_resend_cli/repo/src/lib/files.ts +15 -0
- package/temp_resend_cli/repo/src/lib/help-text.ts +38 -0
- package/temp_resend_cli/repo/src/lib/output.ts +56 -0
- package/temp_resend_cli/repo/src/lib/pagination.ts +36 -0
- package/temp_resend_cli/repo/src/lib/prompts.ts +149 -0
- package/temp_resend_cli/repo/src/lib/spinner.ts +100 -0
- package/temp_resend_cli/repo/src/lib/table.ts +57 -0
- package/temp_resend_cli/repo/src/lib/tty.ts +28 -0
- package/temp_resend_cli/repo/src/lib/update-check.ts +169 -0
- package/temp_resend_cli/repo/src/lib/version.ts +4 -0
- package/temp_resend_cli/repo/tests/commands/api-keys/create.test.ts +196 -0
- package/temp_resend_cli/repo/tests/commands/api-keys/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/api-keys/list.test.ts +134 -0
- package/temp_resend_cli/repo/tests/commands/auth/login.test.ts +153 -0
- package/temp_resend_cli/repo/tests/commands/auth/logout.test.ts +153 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/create.test.ts +454 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/delete.test.ts +183 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/get.test.ts +147 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/list.test.ts +199 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/send.test.ts +162 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/update.test.ts +288 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/create.test.ts +251 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/delete.test.ts +184 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/get.test.ts +145 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/list.test.ts +181 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/update.test.ts +217 -0
- package/temp_resend_cli/repo/tests/commands/contacts/add-segment.test.ts +189 -0
- package/temp_resend_cli/repo/tests/commands/contacts/create.test.ts +271 -0
- package/temp_resend_cli/repo/tests/commands/contacts/delete.test.ts +193 -0
- package/temp_resend_cli/repo/tests/commands/contacts/get.test.ts +149 -0
- package/temp_resend_cli/repo/tests/commands/contacts/list.test.ts +176 -0
- package/temp_resend_cli/repo/tests/commands/contacts/remove-segment.test.ts +167 -0
- package/temp_resend_cli/repo/tests/commands/contacts/segments.test.ts +168 -0
- package/temp_resend_cli/repo/tests/commands/contacts/topics.test.ts +164 -0
- package/temp_resend_cli/repo/tests/commands/contacts/update-topics.test.ts +248 -0
- package/temp_resend_cli/repo/tests/commands/contacts/update.test.ts +206 -0
- package/temp_resend_cli/repo/tests/commands/doctor.test.ts +164 -0
- package/temp_resend_cli/repo/tests/commands/domains/create.test.ts +193 -0
- package/temp_resend_cli/repo/tests/commands/domains/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/domains/get.test.ts +138 -0
- package/temp_resend_cli/repo/tests/commands/domains/list.test.ts +165 -0
- package/temp_resend_cli/repo/tests/commands/domains/update.test.ts +224 -0
- package/temp_resend_cli/repo/tests/commands/domains/verify.test.ts +118 -0
- package/temp_resend_cli/repo/tests/commands/emails/batch.test.ts +324 -0
- package/temp_resend_cli/repo/tests/commands/emails/get.test.ts +132 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/attachment.test.ts +141 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/attachments.test.ts +169 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/get.test.ts +141 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/list.test.ts +182 -0
- package/temp_resend_cli/repo/tests/commands/emails/send.test.ts +312 -0
- package/temp_resend_cli/repo/tests/commands/segments/create.test.ts +164 -0
- package/temp_resend_cli/repo/tests/commands/segments/delete.test.ts +183 -0
- package/temp_resend_cli/repo/tests/commands/segments/get.test.ts +138 -0
- package/temp_resend_cli/repo/tests/commands/segments/list.test.ts +174 -0
- package/temp_resend_cli/repo/tests/commands/teams/list.test.ts +62 -0
- package/temp_resend_cli/repo/tests/commands/teams/remove.test.ts +110 -0
- package/temp_resend_cli/repo/tests/commands/teams/switch.test.ts +103 -0
- package/temp_resend_cli/repo/tests/commands/topics/create.test.ts +192 -0
- package/temp_resend_cli/repo/tests/commands/topics/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/topics/get.test.ts +126 -0
- package/temp_resend_cli/repo/tests/commands/topics/list.test.ts +125 -0
- package/temp_resend_cli/repo/tests/commands/topics/update.test.ts +178 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/create.test.ts +225 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/get.test.ts +126 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/list.test.ts +178 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/update.test.ts +207 -0
- package/temp_resend_cli/repo/tests/commands/whoami.test.ts +98 -0
- package/temp_resend_cli/repo/tests/e2e/smoke.test.ts +93 -0
- package/temp_resend_cli/repo/tests/helpers.ts +86 -0
- package/temp_resend_cli/repo/tests/lib/client.test.ts +71 -0
- package/temp_resend_cli/repo/tests/lib/config.test.ts +451 -0
- package/temp_resend_cli/repo/tests/lib/files.test.ts +73 -0
- package/temp_resend_cli/repo/tests/lib/help-text.test.ts +97 -0
- package/temp_resend_cli/repo/tests/lib/output.test.ts +136 -0
- package/temp_resend_cli/repo/tests/lib/prompts.test.ts +185 -0
- package/temp_resend_cli/repo/tests/lib/spinner.test.ts +166 -0
- package/temp_resend_cli/repo/tests/lib/table.test.ts +63 -0
- package/temp_resend_cli/repo/tests/lib/tty.test.ts +89 -0
- package/temp_resend_cli/repo/tests/lib/update-check.test.ts +179 -0
- package/temp_resend_cli/repo/tsconfig.json +14 -0
- package/temp_resend_cli/repo/vitest.config.e2e.ts +8 -0
- package/temp_resend_cli/repo/vitest.config.ts +10 -0
- package/tests/test-mcp-browser-use-smoke.sh +28 -56
- package/tests/test-monty-smoke.sh +32 -0
- package/tests/test-resend-smoke.sh +36 -0
|
@@ -0,0 +1,1432 @@
|
|
|
1
|
+
import math
|
|
2
|
+
|
|
3
|
+
# === Constants ===
|
|
4
|
+
assert math.pi == 3.141592653589793, 'math.pi value'
|
|
5
|
+
assert math.e == 2.718281828459045, 'math.e value'
|
|
6
|
+
assert math.tau == 6.283185307179586, 'math.tau value'
|
|
7
|
+
assert math.inf == float('inf'), 'math.inf is infinity'
|
|
8
|
+
assert math.nan != math.nan, 'math.nan is NaN (not equal to itself)'
|
|
9
|
+
assert math.isinf(math.inf), 'math.inf is recognized by isinf'
|
|
10
|
+
assert math.isnan(math.nan), 'math.nan is recognized by isnan'
|
|
11
|
+
|
|
12
|
+
# === math.floor() ===
|
|
13
|
+
assert math.floor(2.3) == 2, 'floor(2.3)'
|
|
14
|
+
assert math.floor(-2.3) == -3, 'floor(-2.3)'
|
|
15
|
+
assert math.floor(2.0) == 2, 'floor(2.0)'
|
|
16
|
+
assert math.floor(5) == 5, 'floor(int)'
|
|
17
|
+
assert math.floor(True) == 1, 'floor(True)'
|
|
18
|
+
assert math.floor(False) == 0, 'floor(False)'
|
|
19
|
+
assert math.floor(-0.5) == -1, 'floor(-0.5)'
|
|
20
|
+
assert math.floor(0.9) == 0, 'floor(0.9)'
|
|
21
|
+
assert math.floor(1e18) == 1000000000000000000, 'floor(1e18)'
|
|
22
|
+
|
|
23
|
+
threw = False
|
|
24
|
+
try:
|
|
25
|
+
math.floor(float('inf'))
|
|
26
|
+
except OverflowError:
|
|
27
|
+
threw = True
|
|
28
|
+
assert threw, 'floor(inf) raises OverflowError'
|
|
29
|
+
|
|
30
|
+
threw = False
|
|
31
|
+
try:
|
|
32
|
+
math.floor(float('nan'))
|
|
33
|
+
except ValueError:
|
|
34
|
+
threw = True
|
|
35
|
+
assert threw, 'floor(nan) raises ValueError'
|
|
36
|
+
|
|
37
|
+
threw = False
|
|
38
|
+
try:
|
|
39
|
+
math.floor('x')
|
|
40
|
+
except TypeError:
|
|
41
|
+
threw = True
|
|
42
|
+
assert threw, 'floor(str) raises TypeError'
|
|
43
|
+
|
|
44
|
+
# === math.ceil() ===
|
|
45
|
+
assert math.ceil(2.3) == 3, 'ceil(2.3)'
|
|
46
|
+
assert math.ceil(-2.3) == -2, 'ceil(-2.3)'
|
|
47
|
+
assert math.ceil(2.0) == 2, 'ceil(2.0)'
|
|
48
|
+
assert math.ceil(5) == 5, 'ceil(int)'
|
|
49
|
+
assert math.ceil(True) == 1, 'ceil(True)'
|
|
50
|
+
assert math.ceil(False) == 0, 'ceil(False)'
|
|
51
|
+
assert math.ceil(0.1) == 1, 'ceil(0.1)'
|
|
52
|
+
assert math.ceil(-0.1) == 0, 'ceil(-0.1)'
|
|
53
|
+
|
|
54
|
+
threw = False
|
|
55
|
+
try:
|
|
56
|
+
math.ceil(float('inf'))
|
|
57
|
+
except OverflowError:
|
|
58
|
+
threw = True
|
|
59
|
+
assert threw, 'ceil(inf) raises OverflowError'
|
|
60
|
+
|
|
61
|
+
threw = False
|
|
62
|
+
try:
|
|
63
|
+
math.ceil(float('nan'))
|
|
64
|
+
except ValueError:
|
|
65
|
+
threw = True
|
|
66
|
+
assert threw, 'ceil(nan) raises ValueError'
|
|
67
|
+
|
|
68
|
+
threw = False
|
|
69
|
+
try:
|
|
70
|
+
math.ceil('x')
|
|
71
|
+
except TypeError:
|
|
72
|
+
threw = True
|
|
73
|
+
assert threw, 'ceil(str) raises TypeError'
|
|
74
|
+
|
|
75
|
+
# === math.trunc() ===
|
|
76
|
+
assert math.trunc(2.7) == 2, 'trunc(2.7)'
|
|
77
|
+
assert math.trunc(-2.7) == -2, 'trunc(-2.7)'
|
|
78
|
+
assert math.trunc(2.0) == 2, 'trunc(2.0)'
|
|
79
|
+
assert math.trunc(5) == 5, 'trunc(int)'
|
|
80
|
+
assert math.trunc(True) == 1, 'trunc(True)'
|
|
81
|
+
assert math.trunc(False) == 0, 'trunc(False)'
|
|
82
|
+
|
|
83
|
+
threw = False
|
|
84
|
+
try:
|
|
85
|
+
math.trunc(float('inf'))
|
|
86
|
+
except OverflowError:
|
|
87
|
+
threw = True
|
|
88
|
+
assert threw, 'trunc(inf) raises OverflowError'
|
|
89
|
+
|
|
90
|
+
threw = False
|
|
91
|
+
try:
|
|
92
|
+
math.trunc(float('nan'))
|
|
93
|
+
except ValueError:
|
|
94
|
+
threw = True
|
|
95
|
+
assert threw, 'trunc(nan) raises ValueError'
|
|
96
|
+
|
|
97
|
+
threw = False
|
|
98
|
+
try:
|
|
99
|
+
math.trunc('x')
|
|
100
|
+
except TypeError:
|
|
101
|
+
threw = True
|
|
102
|
+
assert threw, 'trunc(str) raises TypeError'
|
|
103
|
+
|
|
104
|
+
# === math.sqrt() ===
|
|
105
|
+
assert math.sqrt(4) == 2.0, 'sqrt(4)'
|
|
106
|
+
assert math.sqrt(2) == 1.4142135623730951, 'sqrt(2)'
|
|
107
|
+
assert math.sqrt(0) == 0.0, 'sqrt(0)'
|
|
108
|
+
assert math.sqrt(1) == 1.0, 'sqrt(1)'
|
|
109
|
+
assert math.sqrt(0.25) == 0.5, 'sqrt(0.25)'
|
|
110
|
+
assert isinstance(math.sqrt(4), float), 'sqrt returns float'
|
|
111
|
+
assert math.sqrt(True) == 1.0, 'sqrt(True)'
|
|
112
|
+
assert math.sqrt(False) == 0.0, 'sqrt(False)'
|
|
113
|
+
assert math.sqrt(float('inf')) == float('inf'), 'sqrt(inf) returns inf'
|
|
114
|
+
assert math.isnan(math.sqrt(float('nan'))), 'sqrt(nan) returns nan'
|
|
115
|
+
|
|
116
|
+
threw = False
|
|
117
|
+
try:
|
|
118
|
+
math.sqrt(-1)
|
|
119
|
+
except ValueError:
|
|
120
|
+
threw = True
|
|
121
|
+
assert threw, 'sqrt(-1) raises ValueError'
|
|
122
|
+
|
|
123
|
+
threw = False
|
|
124
|
+
try:
|
|
125
|
+
math.sqrt('x')
|
|
126
|
+
except TypeError:
|
|
127
|
+
threw = True
|
|
128
|
+
assert threw, 'sqrt(str) raises TypeError'
|
|
129
|
+
|
|
130
|
+
# === math.isqrt() ===
|
|
131
|
+
assert math.isqrt(0) == 0, 'isqrt(0)'
|
|
132
|
+
assert math.isqrt(1) == 1, 'isqrt(1)'
|
|
133
|
+
assert math.isqrt(4) == 2, 'isqrt(4)'
|
|
134
|
+
assert math.isqrt(10) == 3, 'isqrt(10)'
|
|
135
|
+
assert math.isqrt(99) == 9, 'isqrt(99)'
|
|
136
|
+
assert math.isqrt(100) == 10, 'isqrt(100)'
|
|
137
|
+
assert math.isqrt(True) == 1, 'isqrt(True)'
|
|
138
|
+
|
|
139
|
+
threw = False
|
|
140
|
+
try:
|
|
141
|
+
math.isqrt(-1)
|
|
142
|
+
except ValueError:
|
|
143
|
+
threw = True
|
|
144
|
+
assert threw, 'isqrt(-1) raises ValueError'
|
|
145
|
+
|
|
146
|
+
threw = False
|
|
147
|
+
try:
|
|
148
|
+
math.isqrt(4.0)
|
|
149
|
+
except TypeError:
|
|
150
|
+
threw = True
|
|
151
|
+
assert threw, 'isqrt(float) raises TypeError'
|
|
152
|
+
|
|
153
|
+
# === math.cbrt() ===
|
|
154
|
+
assert math.cbrt(0) == 0.0, 'cbrt(0)'
|
|
155
|
+
assert math.cbrt(8) == 2.0, 'cbrt(8)'
|
|
156
|
+
assert math.cbrt(-8) == -2.0, 'cbrt(-8)'
|
|
157
|
+
assert math.cbrt(1) == 1.0, 'cbrt(1)'
|
|
158
|
+
assert math.cbrt(64) == 4.0, 'cbrt(64)'
|
|
159
|
+
assert math.cbrt(float('inf')) == float('inf'), 'cbrt(inf)'
|
|
160
|
+
assert math.cbrt(float('-inf')) == float('-inf'), 'cbrt(-inf)'
|
|
161
|
+
assert math.isnan(math.cbrt(float('nan'))), 'cbrt(nan) is nan'
|
|
162
|
+
|
|
163
|
+
threw = False
|
|
164
|
+
try:
|
|
165
|
+
math.cbrt('x')
|
|
166
|
+
except TypeError:
|
|
167
|
+
threw = True
|
|
168
|
+
assert threw, 'cbrt(str) raises TypeError'
|
|
169
|
+
|
|
170
|
+
# === math.pow() ===
|
|
171
|
+
assert math.pow(2, 3) == 8.0, 'pow(2, 3)'
|
|
172
|
+
assert math.pow(2.0, 0.5) == math.sqrt(2), 'pow(2, 0.5)'
|
|
173
|
+
assert math.pow(0, 0) == 1.0, 'pow(0, 0)'
|
|
174
|
+
assert isinstance(math.pow(2, 3), float), 'pow returns float'
|
|
175
|
+
assert math.pow(2, -1) == 0.5, 'pow(2, -1)'
|
|
176
|
+
assert math.pow(float('inf'), 0) == 1.0, 'pow(inf, 0)'
|
|
177
|
+
assert math.pow(float('nan'), 0) == 1.0, 'pow(nan, 0)'
|
|
178
|
+
assert math.pow(1, float('inf')) == 1.0, 'pow(1, inf)'
|
|
179
|
+
assert math.pow(1, float('nan')) == 1.0, 'pow(1, nan)'
|
|
180
|
+
|
|
181
|
+
threw = False
|
|
182
|
+
try:
|
|
183
|
+
math.pow(0, -1)
|
|
184
|
+
except ValueError:
|
|
185
|
+
threw = True
|
|
186
|
+
assert threw, 'pow(0, -1) raises ValueError'
|
|
187
|
+
|
|
188
|
+
threw = False
|
|
189
|
+
try:
|
|
190
|
+
math.pow(-1, 0.5)
|
|
191
|
+
except ValueError:
|
|
192
|
+
threw = True
|
|
193
|
+
assert threw, 'pow(-1, 0.5) raises ValueError'
|
|
194
|
+
|
|
195
|
+
threw = False
|
|
196
|
+
try:
|
|
197
|
+
math.pow(2, 1024)
|
|
198
|
+
except OverflowError:
|
|
199
|
+
threw = True
|
|
200
|
+
assert threw, 'pow(2, 1024) raises OverflowError'
|
|
201
|
+
|
|
202
|
+
threw = False
|
|
203
|
+
try:
|
|
204
|
+
math.pow('x', 2)
|
|
205
|
+
except TypeError:
|
|
206
|
+
threw = True
|
|
207
|
+
assert threw, 'pow(str, int) raises TypeError'
|
|
208
|
+
|
|
209
|
+
# === math.exp() ===
|
|
210
|
+
assert math.exp(0) == 1.0, 'exp(0)'
|
|
211
|
+
assert math.exp(1) == math.e, 'exp(1)'
|
|
212
|
+
assert math.exp(float('-inf')) == 0.0, 'exp(-inf)'
|
|
213
|
+
assert math.exp(float('inf')) == float('inf'), 'exp(inf)'
|
|
214
|
+
assert math.isnan(math.exp(float('nan'))), 'exp(nan) is nan'
|
|
215
|
+
|
|
216
|
+
threw = False
|
|
217
|
+
try:
|
|
218
|
+
math.exp(1000)
|
|
219
|
+
except OverflowError:
|
|
220
|
+
threw = True
|
|
221
|
+
assert threw, 'exp(1000) raises OverflowError'
|
|
222
|
+
|
|
223
|
+
threw = False
|
|
224
|
+
try:
|
|
225
|
+
math.exp('x')
|
|
226
|
+
except TypeError:
|
|
227
|
+
threw = True
|
|
228
|
+
assert threw, 'exp(str) raises TypeError'
|
|
229
|
+
|
|
230
|
+
# === math.exp2() ===
|
|
231
|
+
assert math.exp2(0) == 1.0, 'exp2(0)'
|
|
232
|
+
assert math.exp2(3) == 8.0, 'exp2(3)'
|
|
233
|
+
assert math.exp2(10) == 1024.0, 'exp2(10)'
|
|
234
|
+
assert math.exp2(float('-inf')) == 0.0, 'exp2(-inf)'
|
|
235
|
+
assert math.exp2(float('inf')) == float('inf'), 'exp2(inf)'
|
|
236
|
+
assert math.isnan(math.exp2(float('nan'))), 'exp2(nan) is nan'
|
|
237
|
+
|
|
238
|
+
threw = False
|
|
239
|
+
try:
|
|
240
|
+
math.exp2(1024)
|
|
241
|
+
except OverflowError:
|
|
242
|
+
threw = True
|
|
243
|
+
assert threw, 'exp2(1024) raises OverflowError'
|
|
244
|
+
|
|
245
|
+
threw = False
|
|
246
|
+
try:
|
|
247
|
+
math.exp2('x')
|
|
248
|
+
except TypeError:
|
|
249
|
+
threw = True
|
|
250
|
+
assert threw, 'exp2(str) raises TypeError'
|
|
251
|
+
|
|
252
|
+
# === math.expm1() ===
|
|
253
|
+
assert math.expm1(0) == 0.0, 'expm1(0)'
|
|
254
|
+
assert math.isclose(math.expm1(1), math.e - 1), 'expm1(1)'
|
|
255
|
+
assert math.expm1(1e-15) != 0.0, 'expm1(1e-15) is precise'
|
|
256
|
+
assert math.expm1(float('-inf')) == -1.0, 'expm1(-inf)'
|
|
257
|
+
assert math.expm1(float('inf')) == float('inf'), 'expm1(inf)'
|
|
258
|
+
assert math.isnan(math.expm1(float('nan'))), 'expm1(nan) is nan'
|
|
259
|
+
|
|
260
|
+
threw = False
|
|
261
|
+
try:
|
|
262
|
+
math.expm1(1000)
|
|
263
|
+
except OverflowError:
|
|
264
|
+
threw = True
|
|
265
|
+
assert threw, 'expm1(1000) raises OverflowError'
|
|
266
|
+
|
|
267
|
+
threw = False
|
|
268
|
+
try:
|
|
269
|
+
math.expm1('x')
|
|
270
|
+
except TypeError:
|
|
271
|
+
threw = True
|
|
272
|
+
assert threw, 'expm1(str) raises TypeError'
|
|
273
|
+
|
|
274
|
+
# === math.fabs() ===
|
|
275
|
+
assert math.fabs(-5) == 5.0, 'fabs(-5)'
|
|
276
|
+
assert math.fabs(5) == 5.0, 'fabs(5)'
|
|
277
|
+
assert math.fabs(-3.14) == 3.14, 'fabs(-3.14)'
|
|
278
|
+
assert math.fabs(0) == 0.0, 'fabs(0)'
|
|
279
|
+
assert isinstance(math.fabs(-5), float), 'fabs returns float'
|
|
280
|
+
assert isinstance(math.fabs(0), float), 'fabs(0) returns float'
|
|
281
|
+
assert math.fabs(True) == 1.0, 'fabs(True)'
|
|
282
|
+
assert math.fabs(False) == 0.0, 'fabs(False)'
|
|
283
|
+
assert math.fabs(float('inf')) == float('inf'), 'fabs(inf)'
|
|
284
|
+
assert math.fabs(float('-inf')) == float('inf'), 'fabs(-inf)'
|
|
285
|
+
assert math.isnan(math.fabs(float('nan'))), 'fabs(nan) returns nan'
|
|
286
|
+
|
|
287
|
+
threw = False
|
|
288
|
+
try:
|
|
289
|
+
math.fabs('x')
|
|
290
|
+
except TypeError:
|
|
291
|
+
threw = True
|
|
292
|
+
assert threw, 'fabs(str) raises TypeError'
|
|
293
|
+
|
|
294
|
+
# === math.isnan() ===
|
|
295
|
+
assert math.isnan(float('nan')) == True, 'isnan(nan)'
|
|
296
|
+
assert math.isnan(1.0) == False, 'isnan(1.0)'
|
|
297
|
+
assert math.isnan(0.0) == False, 'isnan(0.0)'
|
|
298
|
+
assert math.isnan(float('inf')) == False, 'isnan(inf)'
|
|
299
|
+
assert math.isnan(0) == False, 'isnan(int)'
|
|
300
|
+
assert math.isnan(True) == False, 'isnan(True)'
|
|
301
|
+
assert math.isnan(False) == False, 'isnan(False)'
|
|
302
|
+
|
|
303
|
+
threw = False
|
|
304
|
+
try:
|
|
305
|
+
math.isnan('x')
|
|
306
|
+
except TypeError:
|
|
307
|
+
threw = True
|
|
308
|
+
assert threw, 'isnan(str) raises TypeError'
|
|
309
|
+
|
|
310
|
+
# === math.isinf() ===
|
|
311
|
+
assert math.isinf(float('inf')) == True, 'isinf(inf)'
|
|
312
|
+
assert math.isinf(float('-inf')) == True, 'isinf(-inf)'
|
|
313
|
+
assert math.isinf(1.0) == False, 'isinf(1.0)'
|
|
314
|
+
assert math.isinf(float('nan')) == False, 'isinf(nan)'
|
|
315
|
+
assert math.isinf(0) == False, 'isinf(int)'
|
|
316
|
+
assert math.isinf(True) == False, 'isinf(True)'
|
|
317
|
+
assert math.isinf(False) == False, 'isinf(False)'
|
|
318
|
+
|
|
319
|
+
threw = False
|
|
320
|
+
try:
|
|
321
|
+
math.isinf('x')
|
|
322
|
+
except TypeError:
|
|
323
|
+
threw = True
|
|
324
|
+
assert threw, 'isinf(str) raises TypeError'
|
|
325
|
+
|
|
326
|
+
# === math.isfinite() ===
|
|
327
|
+
assert math.isfinite(1.0) == True, 'isfinite(1.0)'
|
|
328
|
+
assert math.isfinite(0) == True, 'isfinite(0)'
|
|
329
|
+
assert math.isfinite(float('inf')) == False, 'isfinite(inf)'
|
|
330
|
+
assert math.isfinite(float('-inf')) == False, 'isfinite(-inf)'
|
|
331
|
+
assert math.isfinite(float('nan')) == False, 'isfinite(nan)'
|
|
332
|
+
assert math.isfinite(True) == True, 'isfinite(True)'
|
|
333
|
+
assert math.isfinite(False) == True, 'isfinite(False)'
|
|
334
|
+
|
|
335
|
+
threw = False
|
|
336
|
+
try:
|
|
337
|
+
math.isfinite('x')
|
|
338
|
+
except TypeError:
|
|
339
|
+
threw = True
|
|
340
|
+
assert threw, 'isfinite(str) raises TypeError'
|
|
341
|
+
|
|
342
|
+
# === math.copysign() ===
|
|
343
|
+
assert math.copysign(1.0, -0.0) == -1.0, 'copysign(1.0, -0.0)'
|
|
344
|
+
assert math.copysign(-1.0, 1.0) == 1.0, 'copysign(-1.0, 1.0)'
|
|
345
|
+
assert math.copysign(5, -3) == -5.0, 'copysign(5, -3)'
|
|
346
|
+
assert isinstance(math.copysign(5, -3), float), 'copysign returns float'
|
|
347
|
+
assert math.copysign(float('inf'), -1.0) == float('-inf'), 'copysign(inf, -1.0)'
|
|
348
|
+
assert math.copysign(0.0, -1.0) == -0.0, 'copysign(0.0, -1.0)'
|
|
349
|
+
assert math.isnan(math.copysign(float('nan'), -1.0)), 'copysign(nan, -1.0) is nan'
|
|
350
|
+
assert math.copysign(True, -1) == -1.0, 'copysign(True, -1)'
|
|
351
|
+
|
|
352
|
+
threw = False
|
|
353
|
+
try:
|
|
354
|
+
math.copysign('x', 1)
|
|
355
|
+
except TypeError:
|
|
356
|
+
threw = True
|
|
357
|
+
assert threw, 'copysign(str, int) raises TypeError'
|
|
358
|
+
|
|
359
|
+
# === math.isclose() ===
|
|
360
|
+
assert math.isclose(1.0, 1.0) == True, 'isclose equal'
|
|
361
|
+
assert math.isclose(1.0, 1.0000000001) == True, 'isclose very close'
|
|
362
|
+
assert math.isclose(1.0, 1.1) == False, 'isclose not close'
|
|
363
|
+
assert math.isclose(0.0, 0.0) == True, 'isclose zeros'
|
|
364
|
+
assert math.isclose(-0.0, 0.0) == True, 'isclose neg zero and zero'
|
|
365
|
+
assert math.isclose(float('inf'), float('inf')) == True, 'isclose(inf, inf)'
|
|
366
|
+
assert math.isclose(float('inf'), 1e308) == False, 'isclose(inf, large) is False'
|
|
367
|
+
assert math.isclose(float('nan'), float('nan')) == False, 'isclose(nan, nan) is False'
|
|
368
|
+
assert math.isclose(1e-15, 0.0) == False, 'isclose(1e-15, 0.0) is False with default abs_tol'
|
|
369
|
+
assert math.isclose(0.0, 1e-15) == False, 'isclose(0.0, 1e-15) is False with default abs_tol'
|
|
370
|
+
|
|
371
|
+
threw = False
|
|
372
|
+
try:
|
|
373
|
+
math.isclose('x', 1)
|
|
374
|
+
except TypeError:
|
|
375
|
+
threw = True
|
|
376
|
+
assert threw, 'isclose(str, int) raises TypeError'
|
|
377
|
+
|
|
378
|
+
# === math.log() ===
|
|
379
|
+
assert math.log(1) == 0.0, 'log(1)'
|
|
380
|
+
assert math.log(math.e) == 1.0, 'log(e)'
|
|
381
|
+
assert math.log(100, 10) == 2.0, 'log(100, 10)'
|
|
382
|
+
assert math.log(1, 10) == 0.0, 'log(1, 10)'
|
|
383
|
+
assert math.log(True) == 0.0, 'log(True)'
|
|
384
|
+
assert math.log(float('inf')) == float('inf'), 'log(inf) returns inf'
|
|
385
|
+
assert math.isnan(math.log(float('nan'))), 'log(nan) returns nan'
|
|
386
|
+
assert math.isnan(math.log(float('nan'), 2)), 'log(nan, 2) returns nan'
|
|
387
|
+
assert math.log(float('inf'), 2) == float('inf'), 'log(inf, 2) returns inf'
|
|
388
|
+
|
|
389
|
+
threw = False
|
|
390
|
+
try:
|
|
391
|
+
math.log(0)
|
|
392
|
+
except ValueError:
|
|
393
|
+
threw = True
|
|
394
|
+
assert threw, 'log(0) raises ValueError'
|
|
395
|
+
|
|
396
|
+
threw = False
|
|
397
|
+
try:
|
|
398
|
+
math.log(-1)
|
|
399
|
+
except ValueError:
|
|
400
|
+
threw = True
|
|
401
|
+
assert threw, 'log(-1) raises ValueError'
|
|
402
|
+
|
|
403
|
+
threw = False
|
|
404
|
+
try:
|
|
405
|
+
math.log(10, 1)
|
|
406
|
+
except ZeroDivisionError:
|
|
407
|
+
threw = True
|
|
408
|
+
assert threw, 'log(10, 1) raises ZeroDivisionError'
|
|
409
|
+
|
|
410
|
+
threw = False
|
|
411
|
+
try:
|
|
412
|
+
math.log(10, 0)
|
|
413
|
+
except ValueError:
|
|
414
|
+
threw = True
|
|
415
|
+
assert threw, 'log(10, 0) raises ValueError'
|
|
416
|
+
|
|
417
|
+
threw = False
|
|
418
|
+
try:
|
|
419
|
+
math.log(10, -1)
|
|
420
|
+
except ValueError:
|
|
421
|
+
threw = True
|
|
422
|
+
assert threw, 'log(10, -1) raises ValueError'
|
|
423
|
+
|
|
424
|
+
threw = False
|
|
425
|
+
try:
|
|
426
|
+
math.log('x')
|
|
427
|
+
except TypeError:
|
|
428
|
+
threw = True
|
|
429
|
+
assert threw, 'log(str) raises TypeError'
|
|
430
|
+
|
|
431
|
+
# === math.log2() ===
|
|
432
|
+
assert math.log2(1) == 0.0, 'log2(1)'
|
|
433
|
+
assert math.log2(8) == 3.0, 'log2(8)'
|
|
434
|
+
assert math.log2(1024) == 10.0, 'log2(1024)'
|
|
435
|
+
assert math.log2(True) == 0.0, 'log2(True)'
|
|
436
|
+
assert math.log2(float('inf')) == float('inf'), 'log2(inf) returns inf'
|
|
437
|
+
assert math.isnan(math.log2(float('nan'))), 'log2(nan) returns nan'
|
|
438
|
+
|
|
439
|
+
threw = False
|
|
440
|
+
try:
|
|
441
|
+
math.log2(0)
|
|
442
|
+
except ValueError:
|
|
443
|
+
threw = True
|
|
444
|
+
assert threw, 'log2(0) raises ValueError'
|
|
445
|
+
|
|
446
|
+
threw = False
|
|
447
|
+
try:
|
|
448
|
+
math.log2(-1)
|
|
449
|
+
except ValueError:
|
|
450
|
+
threw = True
|
|
451
|
+
assert threw, 'log2(-1) raises ValueError'
|
|
452
|
+
|
|
453
|
+
threw = False
|
|
454
|
+
try:
|
|
455
|
+
math.log2('x')
|
|
456
|
+
except TypeError:
|
|
457
|
+
threw = True
|
|
458
|
+
assert threw, 'log2(str) raises TypeError'
|
|
459
|
+
|
|
460
|
+
# === math.log10() ===
|
|
461
|
+
assert math.log10(1) == 0.0, 'log10(1)'
|
|
462
|
+
assert math.log10(1000) == 3.0, 'log10(1000)'
|
|
463
|
+
assert math.log10(100) == 2.0, 'log10(100)'
|
|
464
|
+
assert math.log10(True) == 0.0, 'log10(True)'
|
|
465
|
+
assert math.log10(float('inf')) == float('inf'), 'log10(inf) returns inf'
|
|
466
|
+
assert math.isnan(math.log10(float('nan'))), 'log10(nan) returns nan'
|
|
467
|
+
|
|
468
|
+
threw = False
|
|
469
|
+
try:
|
|
470
|
+
math.log10(0)
|
|
471
|
+
except ValueError:
|
|
472
|
+
threw = True
|
|
473
|
+
assert threw, 'log10(0) raises ValueError'
|
|
474
|
+
|
|
475
|
+
threw = False
|
|
476
|
+
try:
|
|
477
|
+
math.log10(-1)
|
|
478
|
+
except ValueError:
|
|
479
|
+
threw = True
|
|
480
|
+
assert threw, 'log10(-1) raises ValueError'
|
|
481
|
+
|
|
482
|
+
threw = False
|
|
483
|
+
try:
|
|
484
|
+
math.log10('x')
|
|
485
|
+
except TypeError:
|
|
486
|
+
threw = True
|
|
487
|
+
assert threw, 'log10(str) raises TypeError'
|
|
488
|
+
|
|
489
|
+
# === math.log1p() ===
|
|
490
|
+
assert math.log1p(0) == 0.0, 'log1p(0)'
|
|
491
|
+
assert math.isclose(math.log1p(math.e - 1), 1.0), 'log1p(e-1)'
|
|
492
|
+
assert math.log1p(float('inf')) == float('inf'), 'log1p(inf)'
|
|
493
|
+
assert math.isnan(math.log1p(float('nan'))), 'log1p(nan) is nan'
|
|
494
|
+
|
|
495
|
+
threw = False
|
|
496
|
+
try:
|
|
497
|
+
math.log1p(-1)
|
|
498
|
+
except ValueError:
|
|
499
|
+
threw = True
|
|
500
|
+
assert threw, 'log1p(-1) raises ValueError'
|
|
501
|
+
|
|
502
|
+
threw = False
|
|
503
|
+
try:
|
|
504
|
+
math.log1p(-2)
|
|
505
|
+
except ValueError:
|
|
506
|
+
threw = True
|
|
507
|
+
assert threw, 'log1p(-2) raises ValueError'
|
|
508
|
+
|
|
509
|
+
threw = False
|
|
510
|
+
try:
|
|
511
|
+
math.log1p('x')
|
|
512
|
+
except TypeError:
|
|
513
|
+
threw = True
|
|
514
|
+
assert threw, 'log1p(str) raises TypeError'
|
|
515
|
+
|
|
516
|
+
# === math.factorial() ===
|
|
517
|
+
assert math.factorial(0) == 1, 'factorial(0)'
|
|
518
|
+
assert math.factorial(1) == 1, 'factorial(1)'
|
|
519
|
+
assert math.factorial(5) == 120, 'factorial(5)'
|
|
520
|
+
assert math.factorial(10) == 3628800, 'factorial(10)'
|
|
521
|
+
assert math.factorial(20) == 2432902008176640000, 'factorial(20)'
|
|
522
|
+
assert math.factorial(True) == 1, 'factorial(True)'
|
|
523
|
+
assert math.factorial(False) == 1, 'factorial(False)'
|
|
524
|
+
|
|
525
|
+
threw = False
|
|
526
|
+
try:
|
|
527
|
+
math.factorial(-1)
|
|
528
|
+
except ValueError:
|
|
529
|
+
threw = True
|
|
530
|
+
assert threw, 'factorial(-1) raises ValueError'
|
|
531
|
+
|
|
532
|
+
threw = False
|
|
533
|
+
try:
|
|
534
|
+
math.factorial(1.5)
|
|
535
|
+
except TypeError:
|
|
536
|
+
threw = True
|
|
537
|
+
assert threw, 'factorial(1.5) raises TypeError'
|
|
538
|
+
|
|
539
|
+
threw = False
|
|
540
|
+
try:
|
|
541
|
+
math.factorial('x')
|
|
542
|
+
except TypeError:
|
|
543
|
+
threw = True
|
|
544
|
+
assert threw, 'factorial(str) raises TypeError'
|
|
545
|
+
|
|
546
|
+
# === math.gcd() ===
|
|
547
|
+
assert math.gcd(12, 8) == 4, 'gcd(12, 8)'
|
|
548
|
+
assert math.gcd(0, 5) == 5, 'gcd(0, 5)'
|
|
549
|
+
assert math.gcd(5, 0) == 5, 'gcd(5, 0)'
|
|
550
|
+
assert math.gcd(0, 0) == 0, 'gcd(0, 0)'
|
|
551
|
+
assert math.gcd(-12, 8) == 4, 'gcd(-12, 8)'
|
|
552
|
+
assert math.gcd(12, -8) == 4, 'gcd(12, -8)'
|
|
553
|
+
assert math.gcd(-12, -8) == 4, 'gcd(-12, -8)'
|
|
554
|
+
assert math.gcd(7, 13) == 1, 'gcd(7, 13) coprime'
|
|
555
|
+
assert math.gcd(True, 2) == 1, 'gcd(True, 2)'
|
|
556
|
+
assert math.gcd(False, 5) == 5, 'gcd(False, 5)'
|
|
557
|
+
|
|
558
|
+
threw = False
|
|
559
|
+
try:
|
|
560
|
+
math.gcd(1.5, 2)
|
|
561
|
+
except TypeError:
|
|
562
|
+
threw = True
|
|
563
|
+
assert threw, 'gcd(float, int) raises TypeError'
|
|
564
|
+
|
|
565
|
+
threw = False
|
|
566
|
+
try:
|
|
567
|
+
math.gcd(2, 1.5)
|
|
568
|
+
except TypeError:
|
|
569
|
+
threw = True
|
|
570
|
+
assert threw, 'gcd(int, float) raises TypeError'
|
|
571
|
+
|
|
572
|
+
# === math.lcm() ===
|
|
573
|
+
assert math.lcm(4, 6) == 12, 'lcm(4, 6)'
|
|
574
|
+
assert math.lcm(0, 5) == 0, 'lcm(0, 5)'
|
|
575
|
+
assert math.lcm(5, 0) == 0, 'lcm(5, 0)'
|
|
576
|
+
assert math.lcm(0, 0) == 0, 'lcm(0, 0)'
|
|
577
|
+
assert math.lcm(3, 7) == 21, 'lcm(3, 7) coprime'
|
|
578
|
+
assert math.lcm(6, 6) == 6, 'lcm(6, 6) equal'
|
|
579
|
+
assert math.lcm(-4, 6) == 12, 'lcm(-4, 6) negative'
|
|
580
|
+
assert math.lcm(-4, -6) == 12, 'lcm(-4, -6) both negative'
|
|
581
|
+
assert math.lcm(True, 2) == 2, 'lcm(True, 2)'
|
|
582
|
+
assert math.lcm(False, 5) == 0, 'lcm(False, 5)'
|
|
583
|
+
|
|
584
|
+
threw = False
|
|
585
|
+
try:
|
|
586
|
+
math.lcm(1.5, 2)
|
|
587
|
+
except TypeError:
|
|
588
|
+
threw = True
|
|
589
|
+
assert threw, 'lcm(float, int) raises TypeError'
|
|
590
|
+
|
|
591
|
+
threw = False
|
|
592
|
+
try:
|
|
593
|
+
math.lcm(2, 1.5)
|
|
594
|
+
except TypeError:
|
|
595
|
+
threw = True
|
|
596
|
+
assert threw, 'lcm(int, float) raises TypeError'
|
|
597
|
+
|
|
598
|
+
# === math.comb() ===
|
|
599
|
+
assert math.comb(5, 2) == 10, 'comb(5, 2)'
|
|
600
|
+
assert math.comb(10, 0) == 1, 'comb(10, 0)'
|
|
601
|
+
assert math.comb(10, 10) == 1, 'comb(10, 10)'
|
|
602
|
+
assert math.comb(0, 0) == 1, 'comb(0, 0)'
|
|
603
|
+
assert math.comb(5, 6) == 0, 'comb(5, 6) k > n'
|
|
604
|
+
|
|
605
|
+
threw = False
|
|
606
|
+
try:
|
|
607
|
+
math.comb(5, -1)
|
|
608
|
+
except ValueError:
|
|
609
|
+
threw = True
|
|
610
|
+
assert threw, 'comb(5, -1) raises ValueError'
|
|
611
|
+
|
|
612
|
+
threw = False
|
|
613
|
+
try:
|
|
614
|
+
math.comb(-1, 2)
|
|
615
|
+
except ValueError:
|
|
616
|
+
threw = True
|
|
617
|
+
assert threw, 'comb(-1, 2) raises ValueError'
|
|
618
|
+
|
|
619
|
+
threw = False
|
|
620
|
+
try:
|
|
621
|
+
math.comb(5.0, 2)
|
|
622
|
+
except TypeError:
|
|
623
|
+
threw = True
|
|
624
|
+
assert threw, 'comb(float, int) raises TypeError'
|
|
625
|
+
|
|
626
|
+
# === math.perm() ===
|
|
627
|
+
assert math.perm(5, 2) == 20, 'perm(5, 2)'
|
|
628
|
+
assert math.perm(5, 0) == 1, 'perm(5, 0)'
|
|
629
|
+
assert math.perm(5, 5) == 120, 'perm(5, 5)'
|
|
630
|
+
assert math.perm(5, 6) == 0, 'perm(5, 6) k > n'
|
|
631
|
+
|
|
632
|
+
threw = False
|
|
633
|
+
try:
|
|
634
|
+
math.perm(5, -1)
|
|
635
|
+
except ValueError:
|
|
636
|
+
threw = True
|
|
637
|
+
assert threw, 'perm(5, -1) raises ValueError'
|
|
638
|
+
|
|
639
|
+
threw = False
|
|
640
|
+
try:
|
|
641
|
+
math.perm(-1, 2)
|
|
642
|
+
except ValueError:
|
|
643
|
+
threw = True
|
|
644
|
+
assert threw, 'perm(-1, 2) raises ValueError'
|
|
645
|
+
|
|
646
|
+
threw = False
|
|
647
|
+
try:
|
|
648
|
+
math.perm(5.0, 2)
|
|
649
|
+
except TypeError:
|
|
650
|
+
threw = True
|
|
651
|
+
assert threw, 'perm(float, int) raises TypeError'
|
|
652
|
+
|
|
653
|
+
# === math.copysign() (already above) ===
|
|
654
|
+
|
|
655
|
+
# === math.isclose() (already above) ===
|
|
656
|
+
|
|
657
|
+
# === math.degrees() ===
|
|
658
|
+
assert math.degrees(0) == 0.0, 'degrees(0)'
|
|
659
|
+
assert math.degrees(math.pi) == 180.0, 'degrees(pi)'
|
|
660
|
+
assert math.degrees(math.tau) == 360.0, 'degrees(tau)'
|
|
661
|
+
assert math.degrees(True) == math.degrees(1), 'degrees(True)'
|
|
662
|
+
assert math.degrees(float('inf')) == float('inf'), 'degrees(inf)'
|
|
663
|
+
assert math.degrees(float('-inf')) == float('-inf'), 'degrees(-inf)'
|
|
664
|
+
assert math.isnan(math.degrees(float('nan'))), 'degrees(nan) is nan'
|
|
665
|
+
|
|
666
|
+
threw = False
|
|
667
|
+
try:
|
|
668
|
+
math.degrees('x')
|
|
669
|
+
except TypeError:
|
|
670
|
+
threw = True
|
|
671
|
+
assert threw, 'degrees(str) raises TypeError'
|
|
672
|
+
|
|
673
|
+
# === math.radians() ===
|
|
674
|
+
assert math.radians(0) == 0.0, 'radians(0)'
|
|
675
|
+
assert math.radians(180) == math.pi, 'radians(180)'
|
|
676
|
+
assert math.radians(360) == math.tau, 'radians(360)'
|
|
677
|
+
assert math.radians(True) == math.radians(1), 'radians(True)'
|
|
678
|
+
assert math.radians(float('inf')) == float('inf'), 'radians(inf)'
|
|
679
|
+
assert math.radians(float('-inf')) == float('-inf'), 'radians(-inf)'
|
|
680
|
+
assert math.isnan(math.radians(float('nan'))), 'radians(nan) is nan'
|
|
681
|
+
|
|
682
|
+
threw = False
|
|
683
|
+
try:
|
|
684
|
+
math.radians('x')
|
|
685
|
+
except TypeError:
|
|
686
|
+
threw = True
|
|
687
|
+
assert threw, 'radians(str) raises TypeError'
|
|
688
|
+
|
|
689
|
+
# === math.sin() ===
|
|
690
|
+
assert math.sin(0) == 0.0, 'sin(0)'
|
|
691
|
+
assert math.sin(math.pi / 2) == 1.0, 'sin(pi/2)'
|
|
692
|
+
assert math.sin(math.pi) < 1e-15, 'sin(pi) near zero'
|
|
693
|
+
assert math.isnan(math.sin(float('nan'))), 'sin(nan) is nan'
|
|
694
|
+
|
|
695
|
+
threw = False
|
|
696
|
+
try:
|
|
697
|
+
math.sin(float('inf'))
|
|
698
|
+
except ValueError:
|
|
699
|
+
threw = True
|
|
700
|
+
assert threw, 'sin(inf) raises ValueError'
|
|
701
|
+
|
|
702
|
+
threw = False
|
|
703
|
+
try:
|
|
704
|
+
math.sin(float('-inf'))
|
|
705
|
+
except ValueError:
|
|
706
|
+
threw = True
|
|
707
|
+
assert threw, 'sin(-inf) raises ValueError'
|
|
708
|
+
|
|
709
|
+
threw = False
|
|
710
|
+
try:
|
|
711
|
+
math.sin('x')
|
|
712
|
+
except TypeError:
|
|
713
|
+
threw = True
|
|
714
|
+
assert threw, 'sin(str) raises TypeError'
|
|
715
|
+
|
|
716
|
+
# === math.cos() ===
|
|
717
|
+
assert math.cos(0) == 1.0, 'cos(0)'
|
|
718
|
+
assert abs(math.cos(math.pi / 2)) < 1e-15, 'cos(pi/2) near zero'
|
|
719
|
+
assert math.cos(math.pi) == -1.0, 'cos(pi)'
|
|
720
|
+
assert math.isnan(math.cos(float('nan'))), 'cos(nan) is nan'
|
|
721
|
+
|
|
722
|
+
threw = False
|
|
723
|
+
try:
|
|
724
|
+
math.cos(float('inf'))
|
|
725
|
+
except ValueError:
|
|
726
|
+
threw = True
|
|
727
|
+
assert threw, 'cos(inf) raises ValueError'
|
|
728
|
+
|
|
729
|
+
threw = False
|
|
730
|
+
try:
|
|
731
|
+
math.cos(float('-inf'))
|
|
732
|
+
except ValueError:
|
|
733
|
+
threw = True
|
|
734
|
+
assert threw, 'cos(-inf) raises ValueError'
|
|
735
|
+
|
|
736
|
+
threw = False
|
|
737
|
+
try:
|
|
738
|
+
math.cos('x')
|
|
739
|
+
except TypeError:
|
|
740
|
+
threw = True
|
|
741
|
+
assert threw, 'cos(str) raises TypeError'
|
|
742
|
+
|
|
743
|
+
# === math.tan() ===
|
|
744
|
+
assert math.tan(0) == 0.0, 'tan(0)'
|
|
745
|
+
assert abs(math.tan(math.pi / 4) - 1.0) < 1e-15, 'tan(pi/4) near 1'
|
|
746
|
+
assert math.isnan(math.tan(float('nan'))), 'tan(nan) is nan'
|
|
747
|
+
|
|
748
|
+
threw = False
|
|
749
|
+
try:
|
|
750
|
+
math.tan(float('inf'))
|
|
751
|
+
except ValueError:
|
|
752
|
+
threw = True
|
|
753
|
+
assert threw, 'tan(inf) raises ValueError'
|
|
754
|
+
|
|
755
|
+
threw = False
|
|
756
|
+
try:
|
|
757
|
+
math.tan(float('-inf'))
|
|
758
|
+
except ValueError:
|
|
759
|
+
threw = True
|
|
760
|
+
assert threw, 'tan(-inf) raises ValueError'
|
|
761
|
+
|
|
762
|
+
threw = False
|
|
763
|
+
try:
|
|
764
|
+
math.tan('x')
|
|
765
|
+
except TypeError:
|
|
766
|
+
threw = True
|
|
767
|
+
assert threw, 'tan(str) raises TypeError'
|
|
768
|
+
|
|
769
|
+
# === math.asin() ===
|
|
770
|
+
assert math.asin(0) == 0.0, 'asin(0)'
|
|
771
|
+
assert math.asin(1) == math.pi / 2, 'asin(1)'
|
|
772
|
+
assert math.asin(-1) == -math.pi / 2, 'asin(-1)'
|
|
773
|
+
assert math.isnan(math.asin(float('nan'))), 'asin(nan) is nan'
|
|
774
|
+
|
|
775
|
+
threw = False
|
|
776
|
+
try:
|
|
777
|
+
math.asin(2)
|
|
778
|
+
except ValueError:
|
|
779
|
+
threw = True
|
|
780
|
+
assert threw, 'asin(2) raises ValueError'
|
|
781
|
+
|
|
782
|
+
threw = False
|
|
783
|
+
try:
|
|
784
|
+
math.asin(-2)
|
|
785
|
+
except ValueError:
|
|
786
|
+
threw = True
|
|
787
|
+
assert threw, 'asin(-2) raises ValueError'
|
|
788
|
+
|
|
789
|
+
threw = False
|
|
790
|
+
try:
|
|
791
|
+
math.asin('x')
|
|
792
|
+
except TypeError:
|
|
793
|
+
threw = True
|
|
794
|
+
assert threw, 'asin(str) raises TypeError'
|
|
795
|
+
|
|
796
|
+
# === math.acos() ===
|
|
797
|
+
assert math.acos(1) == 0.0, 'acos(1)'
|
|
798
|
+
assert math.acos(0) == math.pi / 2, 'acos(0)'
|
|
799
|
+
assert math.acos(-1) == math.pi, 'acos(-1)'
|
|
800
|
+
assert math.isnan(math.acos(float('nan'))), 'acos(nan) is nan'
|
|
801
|
+
|
|
802
|
+
threw = False
|
|
803
|
+
try:
|
|
804
|
+
math.acos(2)
|
|
805
|
+
except ValueError:
|
|
806
|
+
threw = True
|
|
807
|
+
assert threw, 'acos(2) raises ValueError'
|
|
808
|
+
|
|
809
|
+
threw = False
|
|
810
|
+
try:
|
|
811
|
+
math.acos(-2)
|
|
812
|
+
except ValueError:
|
|
813
|
+
threw = True
|
|
814
|
+
assert threw, 'acos(-2) raises ValueError'
|
|
815
|
+
|
|
816
|
+
threw = False
|
|
817
|
+
try:
|
|
818
|
+
math.acos('x')
|
|
819
|
+
except TypeError:
|
|
820
|
+
threw = True
|
|
821
|
+
assert threw, 'acos(str) raises TypeError'
|
|
822
|
+
|
|
823
|
+
# === math.atan() ===
|
|
824
|
+
assert math.atan(0) == 0.0, 'atan(0)'
|
|
825
|
+
assert math.atan(1) == math.pi / 4, 'atan(1)'
|
|
826
|
+
assert math.atan(float('inf')) == math.pi / 2, 'atan(inf)'
|
|
827
|
+
assert math.atan(float('-inf')) == -math.pi / 2, 'atan(-inf)'
|
|
828
|
+
assert math.isnan(math.atan(float('nan'))), 'atan(nan) is nan'
|
|
829
|
+
|
|
830
|
+
threw = False
|
|
831
|
+
try:
|
|
832
|
+
math.atan('x')
|
|
833
|
+
except TypeError:
|
|
834
|
+
threw = True
|
|
835
|
+
assert threw, 'atan(str) raises TypeError'
|
|
836
|
+
|
|
837
|
+
# === math.atan2() ===
|
|
838
|
+
assert math.atan2(0, 1) == 0.0, 'atan2(0, 1)'
|
|
839
|
+
assert math.atan2(1, 0) == math.pi / 2, 'atan2(1, 0)'
|
|
840
|
+
assert math.atan2(0, -1) == math.pi, 'atan2(0, -1)'
|
|
841
|
+
assert math.atan2(0, 0) == 0.0, 'atan2(0, 0)'
|
|
842
|
+
assert math.atan2(-1, 0) == -math.pi / 2, 'atan2(-1, 0)'
|
|
843
|
+
assert math.isclose(math.atan2(float('inf'), float('inf')), math.pi / 4), 'atan2(inf, inf)'
|
|
844
|
+
assert math.isnan(math.atan2(float('nan'), 1)), 'atan2(nan, 1) is nan'
|
|
845
|
+
assert math.isnan(math.atan2(1, float('nan'))), 'atan2(1, nan) is nan'
|
|
846
|
+
|
|
847
|
+
threw = False
|
|
848
|
+
try:
|
|
849
|
+
math.atan2('x', 1)
|
|
850
|
+
except TypeError:
|
|
851
|
+
threw = True
|
|
852
|
+
assert threw, 'atan2(str, int) raises TypeError'
|
|
853
|
+
|
|
854
|
+
# === math.sinh() ===
|
|
855
|
+
assert math.sinh(0) == 0.0, 'sinh(0)'
|
|
856
|
+
assert math.isclose(math.sinh(1), 1.1752011936438014), 'sinh(1)'
|
|
857
|
+
assert math.sinh(float('inf')) == float('inf'), 'sinh(inf)'
|
|
858
|
+
assert math.sinh(float('-inf')) == float('-inf'), 'sinh(-inf)'
|
|
859
|
+
assert math.isnan(math.sinh(float('nan'))), 'sinh(nan) is nan'
|
|
860
|
+
|
|
861
|
+
threw = False
|
|
862
|
+
try:
|
|
863
|
+
math.sinh(1000)
|
|
864
|
+
except OverflowError:
|
|
865
|
+
threw = True
|
|
866
|
+
assert threw, 'sinh(1000) raises OverflowError'
|
|
867
|
+
|
|
868
|
+
threw = False
|
|
869
|
+
try:
|
|
870
|
+
math.sinh('x')
|
|
871
|
+
except TypeError:
|
|
872
|
+
threw = True
|
|
873
|
+
assert threw, 'sinh(str) raises TypeError'
|
|
874
|
+
|
|
875
|
+
# === math.cosh() ===
|
|
876
|
+
assert math.cosh(0) == 1.0, 'cosh(0)'
|
|
877
|
+
assert math.isclose(math.cosh(1), 1.5430806348152437), 'cosh(1)'
|
|
878
|
+
assert math.cosh(float('inf')) == float('inf'), 'cosh(inf)'
|
|
879
|
+
assert math.cosh(float('-inf')) == float('inf'), 'cosh(-inf)'
|
|
880
|
+
assert math.isnan(math.cosh(float('nan'))), 'cosh(nan) is nan'
|
|
881
|
+
|
|
882
|
+
threw = False
|
|
883
|
+
try:
|
|
884
|
+
math.cosh(1000)
|
|
885
|
+
except OverflowError:
|
|
886
|
+
threw = True
|
|
887
|
+
assert threw, 'cosh(1000) raises OverflowError'
|
|
888
|
+
|
|
889
|
+
threw = False
|
|
890
|
+
try:
|
|
891
|
+
math.cosh('x')
|
|
892
|
+
except TypeError:
|
|
893
|
+
threw = True
|
|
894
|
+
assert threw, 'cosh(str) raises TypeError'
|
|
895
|
+
|
|
896
|
+
# === math.tanh() ===
|
|
897
|
+
assert math.tanh(0) == 0.0, 'tanh(0)'
|
|
898
|
+
assert math.tanh(float('inf')) == 1.0, 'tanh(inf)'
|
|
899
|
+
assert math.tanh(float('-inf')) == -1.0, 'tanh(-inf)'
|
|
900
|
+
assert math.tanh(1) == 0.7615941559557649, 'tanh(1)'
|
|
901
|
+
assert math.isnan(math.tanh(float('nan'))), 'tanh(nan) is nan'
|
|
902
|
+
|
|
903
|
+
threw = False
|
|
904
|
+
try:
|
|
905
|
+
math.tanh('x')
|
|
906
|
+
except TypeError:
|
|
907
|
+
threw = True
|
|
908
|
+
assert threw, 'tanh(str) raises TypeError'
|
|
909
|
+
|
|
910
|
+
# === math.asinh() ===
|
|
911
|
+
assert math.asinh(0) == 0.0, 'asinh(0)'
|
|
912
|
+
assert math.isclose(math.asinh(1), 0.881373587019543), 'asinh(1)'
|
|
913
|
+
assert math.asinh(float('inf')) == float('inf'), 'asinh(inf)'
|
|
914
|
+
assert math.asinh(float('-inf')) == float('-inf'), 'asinh(-inf)'
|
|
915
|
+
assert math.isnan(math.asinh(float('nan'))), 'asinh(nan) is nan'
|
|
916
|
+
|
|
917
|
+
threw = False
|
|
918
|
+
try:
|
|
919
|
+
math.asinh('x')
|
|
920
|
+
except TypeError:
|
|
921
|
+
threw = True
|
|
922
|
+
assert threw, 'asinh(str) raises TypeError'
|
|
923
|
+
|
|
924
|
+
# === math.acosh() ===
|
|
925
|
+
assert math.acosh(1) == 0.0, 'acosh(1)'
|
|
926
|
+
assert math.isclose(math.acosh(2), 1.3169578969248166), 'acosh(2)'
|
|
927
|
+
assert math.acosh(float('inf')) == float('inf'), 'acosh(inf)'
|
|
928
|
+
assert math.isnan(math.acosh(float('nan'))), 'acosh(nan) is nan'
|
|
929
|
+
|
|
930
|
+
threw = False
|
|
931
|
+
try:
|
|
932
|
+
math.acosh(0.5)
|
|
933
|
+
except ValueError:
|
|
934
|
+
threw = True
|
|
935
|
+
assert threw, 'acosh(0.5) raises ValueError'
|
|
936
|
+
|
|
937
|
+
threw = False
|
|
938
|
+
try:
|
|
939
|
+
math.acosh('x')
|
|
940
|
+
except TypeError:
|
|
941
|
+
threw = True
|
|
942
|
+
assert threw, 'acosh(str) raises TypeError'
|
|
943
|
+
|
|
944
|
+
# === math.atanh() ===
|
|
945
|
+
assert math.atanh(0) == 0.0, 'atanh(0)'
|
|
946
|
+
assert math.isclose(math.atanh(0.5), 0.5493061443340549), 'atanh(0.5)'
|
|
947
|
+
assert math.isnan(math.atanh(float('nan'))), 'atanh(nan) is nan'
|
|
948
|
+
|
|
949
|
+
threw = False
|
|
950
|
+
try:
|
|
951
|
+
math.atanh(1)
|
|
952
|
+
except ValueError:
|
|
953
|
+
threw = True
|
|
954
|
+
assert threw, 'atanh(1) raises ValueError'
|
|
955
|
+
|
|
956
|
+
threw = False
|
|
957
|
+
try:
|
|
958
|
+
math.atanh(-1)
|
|
959
|
+
except ValueError:
|
|
960
|
+
threw = True
|
|
961
|
+
assert threw, 'atanh(-1) raises ValueError'
|
|
962
|
+
|
|
963
|
+
threw = False
|
|
964
|
+
try:
|
|
965
|
+
math.atanh('x')
|
|
966
|
+
except TypeError:
|
|
967
|
+
threw = True
|
|
968
|
+
assert threw, 'atanh(str) raises TypeError'
|
|
969
|
+
|
|
970
|
+
# === math.fmod() ===
|
|
971
|
+
assert math.fmod(10, 3) == 1.0, 'fmod(10, 3)'
|
|
972
|
+
assert math.fmod(-10, 3) == -1.0, 'fmod(-10, 3)'
|
|
973
|
+
assert math.fmod(10.5, 3) == 1.5, 'fmod(10.5, 3)'
|
|
974
|
+
assert math.fmod(3, float('inf')) == 3.0, 'fmod(3, inf)'
|
|
975
|
+
assert math.isnan(math.fmod(float('nan'), 3)), 'fmod(nan, 3) is nan'
|
|
976
|
+
assert math.isnan(math.fmod(3, float('nan'))), 'fmod(3, nan) is nan'
|
|
977
|
+
assert math.isnan(math.fmod(float('nan'), float('nan'))), 'fmod(nan, nan) is nan'
|
|
978
|
+
|
|
979
|
+
threw = False
|
|
980
|
+
try:
|
|
981
|
+
math.fmod(10, 0)
|
|
982
|
+
except ValueError:
|
|
983
|
+
threw = True
|
|
984
|
+
assert threw, 'fmod(10, 0) raises ValueError'
|
|
985
|
+
|
|
986
|
+
threw = False
|
|
987
|
+
try:
|
|
988
|
+
math.fmod(float('inf'), 3)
|
|
989
|
+
except ValueError:
|
|
990
|
+
threw = True
|
|
991
|
+
assert threw, 'fmod(inf, 3) raises ValueError'
|
|
992
|
+
|
|
993
|
+
threw = False
|
|
994
|
+
try:
|
|
995
|
+
math.fmod('x', 3)
|
|
996
|
+
except TypeError:
|
|
997
|
+
threw = True
|
|
998
|
+
assert threw, 'fmod(str, int) raises TypeError'
|
|
999
|
+
|
|
1000
|
+
# === math.remainder() ===
|
|
1001
|
+
assert math.remainder(10, 3) == 1.0, 'remainder(10, 3)'
|
|
1002
|
+
assert math.remainder(10, 4) == 2.0, 'remainder(10, 4)'
|
|
1003
|
+
assert math.remainder(-10, 3) == -1.0, 'remainder(-10, 3)'
|
|
1004
|
+
assert math.remainder(10.5, 3) == -1.5, 'remainder(10.5, 3)'
|
|
1005
|
+
assert math.remainder(3, float('inf')) == 3.0, 'remainder(3, inf)'
|
|
1006
|
+
assert math.isnan(math.remainder(float('nan'), 3)), 'remainder(nan, 3) is nan'
|
|
1007
|
+
assert math.isnan(math.remainder(3, float('nan'))), 'remainder(3, nan) is nan'
|
|
1008
|
+
|
|
1009
|
+
threw = False
|
|
1010
|
+
try:
|
|
1011
|
+
math.remainder(10, 0)
|
|
1012
|
+
except ValueError:
|
|
1013
|
+
threw = True
|
|
1014
|
+
assert threw, 'remainder(10, 0) raises ValueError'
|
|
1015
|
+
|
|
1016
|
+
threw = False
|
|
1017
|
+
try:
|
|
1018
|
+
math.remainder(float('inf'), 3)
|
|
1019
|
+
except ValueError:
|
|
1020
|
+
threw = True
|
|
1021
|
+
assert threw, 'remainder(inf, 3) raises ValueError'
|
|
1022
|
+
|
|
1023
|
+
threw = False
|
|
1024
|
+
try:
|
|
1025
|
+
math.remainder('x', 3)
|
|
1026
|
+
except TypeError:
|
|
1027
|
+
threw = True
|
|
1028
|
+
assert threw, 'remainder(str, int) raises TypeError'
|
|
1029
|
+
|
|
1030
|
+
# === math.modf() ===
|
|
1031
|
+
r = math.modf(3.5)
|
|
1032
|
+
assert r == (0.5, 3.0), 'modf(3.5)'
|
|
1033
|
+
r = math.modf(-3.5)
|
|
1034
|
+
assert r == (-0.5, -3.0), 'modf(-3.5)'
|
|
1035
|
+
r = math.modf(0.0)
|
|
1036
|
+
assert r == (0.0, 0.0), 'modf(0.0)'
|
|
1037
|
+
r = math.modf(float('inf'))
|
|
1038
|
+
assert r == (0.0, float('inf')), 'modf(inf)'
|
|
1039
|
+
r = math.modf(float('-inf'))
|
|
1040
|
+
# modf(-inf) returns (-0.0, -inf), verify both parts including sign of fractional
|
|
1041
|
+
assert str(r[0]) == '-0.0', 'modf(-inf) fractional part is -0.0'
|
|
1042
|
+
assert r[1] == float('-inf'), 'modf(-inf) integer part is -inf'
|
|
1043
|
+
r_nan = math.modf(float('nan'))
|
|
1044
|
+
assert math.isnan(r_nan[0]) and math.isnan(r_nan[1]), 'modf(nan) both parts are nan'
|
|
1045
|
+
|
|
1046
|
+
threw = False
|
|
1047
|
+
try:
|
|
1048
|
+
math.modf('x')
|
|
1049
|
+
except TypeError:
|
|
1050
|
+
threw = True
|
|
1051
|
+
assert threw, 'modf(str) raises TypeError'
|
|
1052
|
+
|
|
1053
|
+
# === math.frexp() ===
|
|
1054
|
+
r = math.frexp(0.0)
|
|
1055
|
+
assert r == (0.0, 0), 'frexp(0.0)'
|
|
1056
|
+
r = math.frexp(3.5)
|
|
1057
|
+
assert r == (0.875, 2), 'frexp(3.5)'
|
|
1058
|
+
r = math.frexp(1.0)
|
|
1059
|
+
assert r == (0.5, 1), 'frexp(1.0)'
|
|
1060
|
+
r = math.frexp(-1.0)
|
|
1061
|
+
assert r == (-0.5, 1), 'frexp(-1.0)'
|
|
1062
|
+
r = math.frexp(float('inf'))
|
|
1063
|
+
assert r == (float('inf'), 0), 'frexp(inf)'
|
|
1064
|
+
r = math.frexp(float('-inf'))
|
|
1065
|
+
assert r == (float('-inf'), 0), 'frexp(-inf)'
|
|
1066
|
+
r_nan = math.frexp(float('nan'))
|
|
1067
|
+
assert math.isnan(r_nan[0]) and r_nan[1] == 0, 'frexp(nan)'
|
|
1068
|
+
|
|
1069
|
+
threw = False
|
|
1070
|
+
try:
|
|
1071
|
+
math.frexp('x')
|
|
1072
|
+
except TypeError:
|
|
1073
|
+
threw = True
|
|
1074
|
+
assert threw, 'frexp(str) raises TypeError'
|
|
1075
|
+
|
|
1076
|
+
# === math.ldexp() ===
|
|
1077
|
+
assert math.ldexp(0.875, 2) == 3.5, 'ldexp(0.875, 2)'
|
|
1078
|
+
assert math.ldexp(1.0, 0) == 1.0, 'ldexp(1.0, 0)'
|
|
1079
|
+
assert math.ldexp(0.5, 1) == 1.0, 'ldexp(0.5, 1)'
|
|
1080
|
+
assert math.ldexp(1.0, -1075) == 0.0, 'ldexp(1.0, -1075) underflows to 0'
|
|
1081
|
+
assert math.ldexp(float('inf'), 1) == float('inf'), 'ldexp(inf, 1)'
|
|
1082
|
+
assert math.isnan(math.ldexp(float('nan'), 1)), 'ldexp(nan, 1) is nan'
|
|
1083
|
+
assert math.ldexp(0.0, 1000) == 0.0, 'ldexp(0.0, 1000)'
|
|
1084
|
+
|
|
1085
|
+
threw = False
|
|
1086
|
+
try:
|
|
1087
|
+
math.ldexp(1.0, 1075)
|
|
1088
|
+
except OverflowError:
|
|
1089
|
+
threw = True
|
|
1090
|
+
assert threw, 'ldexp(1.0, 1075) raises OverflowError'
|
|
1091
|
+
|
|
1092
|
+
threw = False
|
|
1093
|
+
try:
|
|
1094
|
+
math.ldexp(0.5, 1025)
|
|
1095
|
+
except OverflowError:
|
|
1096
|
+
threw = True
|
|
1097
|
+
assert threw, 'ldexp(0.5, 1025) raises OverflowError'
|
|
1098
|
+
|
|
1099
|
+
threw = False
|
|
1100
|
+
try:
|
|
1101
|
+
math.ldexp('x', 1)
|
|
1102
|
+
except TypeError:
|
|
1103
|
+
threw = True
|
|
1104
|
+
assert threw, 'ldexp(str, int) raises TypeError'
|
|
1105
|
+
|
|
1106
|
+
# === math.gamma() ===
|
|
1107
|
+
assert math.gamma(1) == 1.0, 'gamma(1)'
|
|
1108
|
+
assert math.gamma(5) == 24.0, 'gamma(5)'
|
|
1109
|
+
assert math.isclose(math.gamma(0.5), math.sqrt(math.pi)), 'gamma(0.5)'
|
|
1110
|
+
assert math.gamma(float('inf')) == float('inf'), 'gamma(inf)'
|
|
1111
|
+
assert math.isnan(math.gamma(float('nan'))), 'gamma(nan) is nan'
|
|
1112
|
+
|
|
1113
|
+
threw = False
|
|
1114
|
+
try:
|
|
1115
|
+
math.gamma(0)
|
|
1116
|
+
except ValueError:
|
|
1117
|
+
threw = True
|
|
1118
|
+
assert threw, 'gamma(0) raises ValueError'
|
|
1119
|
+
|
|
1120
|
+
threw = False
|
|
1121
|
+
try:
|
|
1122
|
+
math.gamma(-1)
|
|
1123
|
+
except ValueError:
|
|
1124
|
+
threw = True
|
|
1125
|
+
assert threw, 'gamma(-1) raises ValueError'
|
|
1126
|
+
|
|
1127
|
+
threw = False
|
|
1128
|
+
try:
|
|
1129
|
+
math.gamma(float('-inf'))
|
|
1130
|
+
except ValueError:
|
|
1131
|
+
threw = True
|
|
1132
|
+
assert threw, 'gamma(-inf) raises ValueError'
|
|
1133
|
+
|
|
1134
|
+
threw = False
|
|
1135
|
+
try:
|
|
1136
|
+
math.gamma(172)
|
|
1137
|
+
except OverflowError:
|
|
1138
|
+
threw = True
|
|
1139
|
+
assert threw, 'gamma(172) raises OverflowError'
|
|
1140
|
+
|
|
1141
|
+
threw = False
|
|
1142
|
+
try:
|
|
1143
|
+
math.gamma('x')
|
|
1144
|
+
except TypeError:
|
|
1145
|
+
threw = True
|
|
1146
|
+
assert threw, 'gamma(str) raises TypeError'
|
|
1147
|
+
|
|
1148
|
+
# === math.lgamma() ===
|
|
1149
|
+
assert math.lgamma(1) == 0.0, 'lgamma(1)'
|
|
1150
|
+
assert math.isclose(math.lgamma(5), math.log(24)), 'lgamma(5)'
|
|
1151
|
+
assert math.lgamma(float('inf')) == float('inf'), 'lgamma(inf)'
|
|
1152
|
+
assert math.isnan(math.lgamma(float('nan'))), 'lgamma(nan) is nan'
|
|
1153
|
+
assert math.isclose(math.lgamma(-0.5), 1.265512123484645), 'lgamma(-0.5)'
|
|
1154
|
+
|
|
1155
|
+
threw = False
|
|
1156
|
+
try:
|
|
1157
|
+
math.lgamma(0)
|
|
1158
|
+
except ValueError:
|
|
1159
|
+
threw = True
|
|
1160
|
+
assert threw, 'lgamma(0) raises ValueError'
|
|
1161
|
+
|
|
1162
|
+
threw = False
|
|
1163
|
+
try:
|
|
1164
|
+
math.lgamma(-2)
|
|
1165
|
+
except ValueError:
|
|
1166
|
+
threw = True
|
|
1167
|
+
assert threw, 'lgamma(-2) raises ValueError'
|
|
1168
|
+
|
|
1169
|
+
threw = False
|
|
1170
|
+
try:
|
|
1171
|
+
math.lgamma('x')
|
|
1172
|
+
except TypeError:
|
|
1173
|
+
threw = True
|
|
1174
|
+
assert threw, 'lgamma(str) raises TypeError'
|
|
1175
|
+
|
|
1176
|
+
# === math.erf() ===
|
|
1177
|
+
assert math.erf(0) == 0.0, 'erf(0)'
|
|
1178
|
+
assert math.isclose(math.erf(1), 0.8427007929497148, rel_tol=1e-15), 'erf(1)'
|
|
1179
|
+
assert math.isclose(math.erf(-1), -0.8427007929497148, rel_tol=1e-15), 'erf(-1)'
|
|
1180
|
+
assert math.erf(float('inf')) == 1.0, 'erf(inf)'
|
|
1181
|
+
assert math.erf(float('-inf')) == -1.0, 'erf(-inf)'
|
|
1182
|
+
assert math.isnan(math.erf(float('nan'))), 'erf(nan) is nan'
|
|
1183
|
+
|
|
1184
|
+
threw = False
|
|
1185
|
+
try:
|
|
1186
|
+
math.erf('x')
|
|
1187
|
+
except TypeError:
|
|
1188
|
+
threw = True
|
|
1189
|
+
assert threw, 'erf(str) raises TypeError'
|
|
1190
|
+
|
|
1191
|
+
# === math.erfc() ===
|
|
1192
|
+
assert math.erfc(0) == 1.0, 'erfc(0)'
|
|
1193
|
+
assert math.isclose(math.erfc(1), 1.0 - math.erf(1)), 'erfc(1)'
|
|
1194
|
+
assert math.erfc(float('inf')) == 0.0, 'erfc(inf)'
|
|
1195
|
+
assert math.erfc(float('-inf')) == 2.0, 'erfc(-inf)'
|
|
1196
|
+
assert math.isnan(math.erfc(float('nan'))), 'erfc(nan) is nan'
|
|
1197
|
+
|
|
1198
|
+
threw = False
|
|
1199
|
+
try:
|
|
1200
|
+
math.erfc('x')
|
|
1201
|
+
except TypeError:
|
|
1202
|
+
threw = True
|
|
1203
|
+
assert threw, 'erfc(str) raises TypeError'
|
|
1204
|
+
|
|
1205
|
+
# === math.nextafter() ===
|
|
1206
|
+
r = math.nextafter(1.0, 2.0)
|
|
1207
|
+
assert r > 1.0, 'nextafter(1.0, 2.0) > 1.0'
|
|
1208
|
+
assert r == 1.0000000000000002, 'nextafter(1.0, 2.0) value'
|
|
1209
|
+
r = math.nextafter(1.0, 0.0)
|
|
1210
|
+
assert r < 1.0, 'nextafter(1.0, 0.0) < 1.0'
|
|
1211
|
+
assert math.nextafter(0.0, 1.0) == 5e-324, 'nextafter(0.0, 1.0) smallest positive'
|
|
1212
|
+
assert math.nextafter(0.0, -1.0) == -5e-324, 'nextafter(0.0, -1.0) smallest negative'
|
|
1213
|
+
assert math.isnan(math.nextafter(float('nan'), 1.0)), 'nextafter(nan, 1.0) is nan'
|
|
1214
|
+
assert math.isnan(math.nextafter(1.0, float('nan'))), 'nextafter(1.0, nan) is nan'
|
|
1215
|
+
assert math.nextafter(float('inf'), float('inf')) == float('inf'), 'nextafter(inf, inf)'
|
|
1216
|
+
assert math.nextafter(1.0, 1.0) == 1.0, 'nextafter(1.0, 1.0) equal inputs'
|
|
1217
|
+
|
|
1218
|
+
threw = False
|
|
1219
|
+
try:
|
|
1220
|
+
math.nextafter('x', 1.0)
|
|
1221
|
+
except TypeError:
|
|
1222
|
+
threw = True
|
|
1223
|
+
assert threw, 'nextafter(str, float) raises TypeError'
|
|
1224
|
+
|
|
1225
|
+
# === math.ulp() ===
|
|
1226
|
+
assert math.ulp(1.0) == 2.220446049250313e-16, 'ulp(1.0)'
|
|
1227
|
+
assert math.ulp(-1.0) == 2.220446049250313e-16, 'ulp(-1.0) same as ulp(1.0)'
|
|
1228
|
+
assert math.ulp(0.0) == 5e-324, 'ulp(0.0) is smallest subnormal'
|
|
1229
|
+
assert math.isinf(math.ulp(float('inf'))), 'ulp(inf) is inf'
|
|
1230
|
+
assert math.isnan(math.ulp(float('nan'))), 'ulp(nan) is nan'
|
|
1231
|
+
assert math.ulp(5e-324) == 5e-324, 'ulp(smallest subnormal)'
|
|
1232
|
+
|
|
1233
|
+
threw = False
|
|
1234
|
+
try:
|
|
1235
|
+
math.ulp('x')
|
|
1236
|
+
except TypeError:
|
|
1237
|
+
threw = True
|
|
1238
|
+
assert threw, 'ulp(str) raises TypeError'
|
|
1239
|
+
|
|
1240
|
+
# === Additional edge cases for coverage ===
|
|
1241
|
+
|
|
1242
|
+
# --- frexp subnormal numbers ---
|
|
1243
|
+
r = math.frexp(5e-324)
|
|
1244
|
+
assert r == (0.5, -1073), 'frexp(5e-324) subnormal'
|
|
1245
|
+
|
|
1246
|
+
# --- ldexp large negative exponent (underflow to zero) ---
|
|
1247
|
+
assert math.ldexp(1.0, -2000) == 0.0, 'ldexp(1.0, -2000) underflows to 0'
|
|
1248
|
+
|
|
1249
|
+
# --- fmod NaN propagation edge cases ---
|
|
1250
|
+
assert math.isnan(math.fmod(float('inf'), float('nan'))), 'fmod(inf, nan) propagates nan'
|
|
1251
|
+
assert math.isnan(math.fmod(float('nan'), 0)), 'fmod(nan, 0) propagates nan'
|
|
1252
|
+
|
|
1253
|
+
# --- gamma negative non-integer (reflection formula) ---
|
|
1254
|
+
assert math.isclose(math.gamma(-0.5), -3.544907701811032), 'gamma(-0.5)'
|
|
1255
|
+
assert math.isclose(math.gamma(-1.5), 2.3632718012073544), 'gamma(-1.5)'
|
|
1256
|
+
|
|
1257
|
+
# --- lgamma(-inf) returns inf ---
|
|
1258
|
+
assert math.lgamma(float('-inf')) == float('inf'), 'lgamma(-inf) returns inf'
|
|
1259
|
+
|
|
1260
|
+
# --- lgamma overflow for extremely large input ---
|
|
1261
|
+
threw = False
|
|
1262
|
+
try:
|
|
1263
|
+
math.lgamma(1e308)
|
|
1264
|
+
except OverflowError:
|
|
1265
|
+
threw = True
|
|
1266
|
+
assert threw, 'lgamma(1e308) raises OverflowError'
|
|
1267
|
+
|
|
1268
|
+
# --- lgamma negative non-integer (reflection formula) ---
|
|
1269
|
+
assert math.isclose(math.lgamma(-0.5), 1.265512123484645), 'lgamma(-0.5) reflection'
|
|
1270
|
+
|
|
1271
|
+
# ==========================================================
|
|
1272
|
+
# Tests for bug fixes and CPython behavior alignment
|
|
1273
|
+
# ==========================================================
|
|
1274
|
+
|
|
1275
|
+
# === floor/ceil/trunc with large floats (LongInt promotion) ===
|
|
1276
|
+
large_floor = math.floor(1e300)
|
|
1277
|
+
assert large_floor > 0, 'floor(1e300) should be positive'
|
|
1278
|
+
assert (
|
|
1279
|
+
large_floor
|
|
1280
|
+
== 1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704443832883878176942523235360430575644792184786706982848387200926575803737830233794788090059368953234970799945081119038967640880074652742780142494579258788820056842838115669472196386865459400540160
|
|
1281
|
+
), 'floor(1e300) matches CPython'
|
|
1282
|
+
|
|
1283
|
+
large_ceil = math.ceil(-1e300)
|
|
1284
|
+
assert large_ceil < 0, 'ceil(-1e300) should be negative'
|
|
1285
|
+
assert (
|
|
1286
|
+
large_ceil
|
|
1287
|
+
== -1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704443832883878176942523235360430575644792184786706982848387200926575803737830233794788090059368953234970799945081119038967640880074652742780142494579258788820056842838115669472196386865459400540160
|
|
1288
|
+
), 'ceil(-1e300) matches CPython'
|
|
1289
|
+
|
|
1290
|
+
large_trunc = math.trunc(1e300)
|
|
1291
|
+
assert large_trunc == math.floor(1e300), 'trunc(1e300) matches floor(1e300) for positive'
|
|
1292
|
+
large_trunc_neg = math.trunc(-1e300)
|
|
1293
|
+
assert large_trunc_neg == math.ceil(-1e300), 'trunc(-1e300) matches ceil(-1e300) for negative'
|
|
1294
|
+
|
|
1295
|
+
# floor/ceil should still work normally for values within i64 range
|
|
1296
|
+
assert math.floor(1e18) == 1000000000000000000, 'floor(1e18) within i64 range'
|
|
1297
|
+
assert math.floor(2.7) == 2, 'floor(2.7) basic case'
|
|
1298
|
+
assert math.ceil(-2.7) == -2, 'ceil(-2.7) basic case'
|
|
1299
|
+
|
|
1300
|
+
# === ldexp with large exponent but small x ===
|
|
1301
|
+
assert math.ldexp(5e-324, 1075) == 2.0, 'ldexp(5e-324, 1075) should be 2.0'
|
|
1302
|
+
assert math.ldexp(0.5, 1024) == 8.98846567431158e307, 'ldexp(0.5, 1024) large but finite'
|
|
1303
|
+
|
|
1304
|
+
# === modf(-0.0) sign preservation ===
|
|
1305
|
+
frac, integer = math.modf(-0.0)
|
|
1306
|
+
# Both parts should be -0.0
|
|
1307
|
+
assert str(frac) == '-0.0', 'modf(-0.0) fractional part is -0.0'
|
|
1308
|
+
assert str(integer) == '-0.0', 'modf(-0.0) integer part is -0.0'
|
|
1309
|
+
|
|
1310
|
+
# === erfc accuracy for large x ===
|
|
1311
|
+
erfc_6 = math.erfc(6)
|
|
1312
|
+
assert erfc_6 > 0, 'erfc(6) should be positive, not zero'
|
|
1313
|
+
assert math.isclose(erfc_6, 2.1519736712498913e-17, rel_tol=1e-12), 'erfc(6) matches CPython'
|
|
1314
|
+
erfc_neg6 = math.erfc(-6)
|
|
1315
|
+
assert erfc_neg6 == 2.0, 'erfc(-6) is exactly 2.0'
|
|
1316
|
+
assert math.erfc(0) == 1.0, 'erfc(0) is 1.0'
|
|
1317
|
+
|
|
1318
|
+
# === variadic gcd ===
|
|
1319
|
+
assert math.gcd() == 0, 'gcd() with no args returns 0'
|
|
1320
|
+
assert math.gcd(12) == 12, 'gcd(12) single arg returns abs(12)'
|
|
1321
|
+
assert math.gcd(-12) == 12, 'gcd(-12) single arg returns abs(-12)'
|
|
1322
|
+
assert math.gcd(12, 8) == 4, 'gcd(12, 8) two args'
|
|
1323
|
+
assert math.gcd(12, 8, 6) == 2, 'gcd(12, 8, 6) three args'
|
|
1324
|
+
|
|
1325
|
+
# === variadic lcm ===
|
|
1326
|
+
assert math.lcm() == 1, 'lcm() with no args returns 1'
|
|
1327
|
+
assert math.lcm(12) == 12, 'lcm(12) single arg returns abs(12)'
|
|
1328
|
+
assert math.lcm(-12) == 12, 'lcm(-12) single negative arg returns abs(-12)'
|
|
1329
|
+
assert math.lcm(4, 6) == 12, 'lcm(4, 6) two args'
|
|
1330
|
+
assert math.lcm(4, 6, 10) == 60, 'lcm(4, 6, 10) three args'
|
|
1331
|
+
assert math.lcm(0, 5) == 0, 'lcm(0, 5) returns 0 if any arg is 0'
|
|
1332
|
+
|
|
1333
|
+
# === perm with optional k ===
|
|
1334
|
+
assert math.perm(5) == 120, 'perm(5) defaults k to n (= 5!)'
|
|
1335
|
+
assert math.perm(5, 2) == 20, 'perm(5, 2) with explicit k'
|
|
1336
|
+
assert math.perm(0) == 1, 'perm(0) is 1'
|
|
1337
|
+
|
|
1338
|
+
# === isclose with rel_tol/abs_tol kwargs ===
|
|
1339
|
+
assert math.isclose(1.0, 1.1, rel_tol=0.2) == True, 'isclose with rel_tol=0.2'
|
|
1340
|
+
assert math.isclose(1.0, 1.1, abs_tol=0.2) == True, 'isclose with abs_tol=0.2'
|
|
1341
|
+
assert math.isclose(1.0, 1.1) == False, 'isclose with defaults (not close)'
|
|
1342
|
+
assert math.isclose(1.0, 1.0 + 1e-10) == True, 'isclose with defaults (close)'
|
|
1343
|
+
|
|
1344
|
+
# isclose negative tolerance raises ValueError
|
|
1345
|
+
threw = False
|
|
1346
|
+
try:
|
|
1347
|
+
math.isclose(1.0, 1.0, rel_tol=-0.1)
|
|
1348
|
+
except ValueError:
|
|
1349
|
+
threw = True
|
|
1350
|
+
assert threw, 'isclose with negative rel_tol raises ValueError'
|
|
1351
|
+
|
|
1352
|
+
threw = False
|
|
1353
|
+
try:
|
|
1354
|
+
math.isclose(1.0, 1.0, abs_tol=-0.1)
|
|
1355
|
+
except ValueError:
|
|
1356
|
+
threw = True
|
|
1357
|
+
assert threw, 'isclose with negative abs_tol raises ValueError'
|
|
1358
|
+
|
|
1359
|
+
# isclose unknown kwarg raises TypeError
|
|
1360
|
+
threw = False
|
|
1361
|
+
try:
|
|
1362
|
+
math.isclose(1.0, 1.0, foo=0.1)
|
|
1363
|
+
except TypeError:
|
|
1364
|
+
threw = True
|
|
1365
|
+
assert threw, 'isclose with unknown kwarg raises TypeError'
|
|
1366
|
+
|
|
1367
|
+
# === ldexp sign preservation ===
|
|
1368
|
+
assert str(math.ldexp(-0.0, 1000)) == '-0.0', 'ldexp(-0.0, n) preserves sign'
|
|
1369
|
+
assert math.ldexp(float('-inf'), 1) == float('-inf'), 'ldexp(-inf, 1) returns -inf'
|
|
1370
|
+
|
|
1371
|
+
# === frexp(-0.0) sign preservation ===
|
|
1372
|
+
m, e = math.frexp(-0.0)
|
|
1373
|
+
assert str(m) == '-0.0', 'frexp(-0.0) mantissa preserves sign'
|
|
1374
|
+
assert e == 0, 'frexp(-0.0) exponent is 0'
|
|
1375
|
+
|
|
1376
|
+
# === comb with GCD reduction (values that would overflow intermediate without it) ===
|
|
1377
|
+
assert math.comb(62, 31) == 465428353255261088, 'comb(62, 31) with GCD reduction'
|
|
1378
|
+
assert math.comb(61, 30) == 232714176627630544, 'comb(61, 30) with GCD reduction'
|
|
1379
|
+
|
|
1380
|
+
# === isclose arg count errors ===
|
|
1381
|
+
threw = False
|
|
1382
|
+
try:
|
|
1383
|
+
math.isclose()
|
|
1384
|
+
except TypeError:
|
|
1385
|
+
threw = True
|
|
1386
|
+
assert threw, 'isclose with 0 args raises TypeError'
|
|
1387
|
+
|
|
1388
|
+
threw = False
|
|
1389
|
+
try:
|
|
1390
|
+
math.isclose(1.0)
|
|
1391
|
+
except TypeError:
|
|
1392
|
+
threw = True
|
|
1393
|
+
assert threw, 'isclose with 1 arg raises TypeError'
|
|
1394
|
+
|
|
1395
|
+
threw = False
|
|
1396
|
+
try:
|
|
1397
|
+
math.isclose(1.0, 2.0, 3.0)
|
|
1398
|
+
except TypeError:
|
|
1399
|
+
threw = True
|
|
1400
|
+
assert threw, 'isclose with 3 positional args raises TypeError'
|
|
1401
|
+
|
|
1402
|
+
# === perm(-1) single-arg error message ===
|
|
1403
|
+
threw = False
|
|
1404
|
+
try:
|
|
1405
|
+
math.perm(-1)
|
|
1406
|
+
except ValueError:
|
|
1407
|
+
threw = True
|
|
1408
|
+
assert threw, 'perm(-1) single-arg raises ValueError'
|
|
1409
|
+
|
|
1410
|
+
# === gcd/lcm with i64::MIN-like values (u64 promotion) ===
|
|
1411
|
+
# gcd(-9223372036854775808, 0) should return 9223372036854775808 (exceeds i64::MAX)
|
|
1412
|
+
big_gcd = math.gcd(-9223372036854775808, 0)
|
|
1413
|
+
assert big_gcd == 9223372036854775808, 'gcd(i64::MIN, 0) promotes to LongInt'
|
|
1414
|
+
|
|
1415
|
+
# === isqrt large values (Newton's method refinement) ===
|
|
1416
|
+
# Values near i64::MAX where f64 sqrt loses precision
|
|
1417
|
+
assert math.isqrt(9223372036854775807) == 3037000499, 'isqrt(i64::MAX)'
|
|
1418
|
+
assert math.isqrt(9223372030926249001) == 3037000499, 'isqrt(3037000499^2)'
|
|
1419
|
+
assert math.isqrt(9223372030926249000) == 3037000498, 'isqrt(3037000499^2 - 1)'
|
|
1420
|
+
|
|
1421
|
+
# === erf/erfc range coverage ===
|
|
1422
|
+
# Small x (|x| < 0.84375): exercises PP/QQ polynomial
|
|
1423
|
+
assert math.erf(0.1) == 0.1124629160182849, 'erf(0.1) small-x range'
|
|
1424
|
+
assert math.erf(0.5) == 0.5204998778130465, 'erf(0.5) small-x range'
|
|
1425
|
+
|
|
1426
|
+
# Medium x (1.25 ≤ |x| < 28): exercises erfc_inner path
|
|
1427
|
+
assert math.erf(2.0) == 0.9953222650189527, 'erf(2.0) medium-x range'
|
|
1428
|
+
assert math.erf(5.0) == 0.9999999999984626, 'erf(5.0) large-x range'
|
|
1429
|
+
|
|
1430
|
+
# erfc in range 3 (1.25 ≤ |x| < 2.857): exercises RA/SA coefficients
|
|
1431
|
+
erfc_2 = math.erfc(2.0)
|
|
1432
|
+
assert math.isclose(erfc_2, 0.004677734981047266, rel_tol=1e-12), 'erfc(2.0) range 3'
|