rbs 2.8.4 → 3.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -4
- data/.github/workflows/comments.yml +11 -11
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/ruby.yml +40 -49
- data/.github/workflows/typecheck.yml +36 -0
- data/.github/workflows/windows.yml +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +42 -2
- data/CHANGELOG.md +845 -1
- data/README.md +64 -4
- data/Rakefile +198 -18
- data/Steepfile +11 -11
- data/config.yml +311 -0
- data/core/array.rbs +2189 -1914
- data/core/basic_object.rbs +59 -84
- data/core/binding.rbs +7 -69
- data/core/builtin.rbs +210 -11
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +23 -25
- data/core/complex.rbs +449 -227
- data/core/constants.rbs +29 -21
- data/core/data.rbs +415 -0
- data/core/dir.rbs +698 -415
- data/core/encoding.rbs +468 -843
- data/core/enumerable.rbs +495 -455
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +106 -9
- data/core/env.rbs +1 -1
- data/core/errno.rbs +506 -605
- data/core/errors.rbs +15 -17
- data/core/exception.rbs +361 -145
- data/core/false_class.rbs +39 -26
- data/core/fiber.rbs +121 -14
- data/core/file.rbs +1262 -320
- data/core/file_test.rbs +62 -45
- data/core/float.rbs +187 -208
- data/core/gc.rbs +446 -196
- data/core/global_variables.rbs +29 -29
- data/core/hash.rbs +242 -349
- data/core/integer.rbs +246 -308
- data/core/io/buffer.rbs +373 -122
- data/core/io/wait.rbs +29 -17
- data/core/io.rbs +1881 -1518
- data/core/kernel.rbs +2116 -1538
- data/core/marshal.rbs +24 -14
- data/core/match_data.rbs +413 -166
- data/core/math.rbs +531 -291
- data/core/method.rbs +101 -32
- data/core/module.rbs +228 -64
- data/core/nil_class.rbs +106 -47
- data/core/numeric.rbs +206 -292
- data/core/object.rbs +73 -1168
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +5 -3
- data/core/proc.rbs +280 -39
- data/core/process.rbs +1318 -658
- data/core/ractor.rbs +200 -134
- data/core/random.rbs +21 -4
- data/core/range.rbs +309 -153
- data/core/rational.rbs +4 -12
- data/core/rb_config.rbs +64 -43
- data/core/rbs/unnamed/argf.rbs +411 -147
- data/core/rbs/unnamed/env_class.rbs +137 -253
- data/core/rbs/unnamed/random.rbs +49 -26
- data/core/refinement.rbs +16 -1
- data/core/regexp.rbs +1568 -862
- data/core/ruby_vm.rbs +719 -7
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +69 -6
- data/core/rubygems/rubygems.rbs +71 -17
- data/core/rubygems/version.rbs +11 -7
- data/{stdlib/set/0 → core}/set.rbs +80 -91
- data/core/signal.rbs +14 -8
- data/core/string.rbs +1732 -1607
- data/core/struct.rbs +467 -95
- data/core/symbol.rbs +215 -245
- data/core/thread.rbs +133 -89
- data/core/thread_group.rbs +9 -9
- data/core/time.rbs +1141 -841
- data/core/trace_point.rbs +181 -121
- data/core/true_class.rbs +58 -32
- data/core/unbound_method.rbs +103 -30
- data/core/warning.rbs +50 -5
- data/docs/CONTRIBUTING.md +1 -1
- data/docs/architecture.md +110 -0
- data/docs/collection.md +59 -5
- data/docs/data_and_struct.md +86 -0
- data/docs/gem.md +57 -0
- data/docs/rbs_by_example.md +16 -35
- data/docs/repo.md +1 -1
- data/docs/sigs.md +7 -7
- data/docs/stdlib.md +63 -5
- data/docs/syntax.md +255 -61
- data/docs/tools.md +1 -0
- data/ext/rbs_extension/extconf.rb +10 -0
- data/ext/rbs_extension/lexer.c +1741 -1548
- data/ext/rbs_extension/lexer.h +11 -1
- data/ext/rbs_extension/lexer.re +12 -6
- data/ext/rbs_extension/lexstate.c +26 -3
- data/ext/rbs_extension/location.c +119 -111
- data/ext/rbs_extension/location.h +32 -7
- data/ext/rbs_extension/main.c +3 -0
- data/ext/rbs_extension/parser.c +883 -481
- data/ext/rbs_extension/parserstate.c +65 -25
- data/ext/rbs_extension/parserstate.h +13 -3
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/ext/rbs_extension/unescape.c +7 -47
- data/goodcheck.yml +2 -2
- data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/formatter.rb +13 -3
- data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
- data/lib/rbs/annotate/rdoc_source.rb +12 -3
- data/lib/rbs/ast/declarations.rb +85 -2
- data/lib/rbs/ast/directives.rb +39 -0
- data/lib/rbs/ast/members.rb +49 -15
- data/lib/rbs/ast/type_param.rb +104 -15
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +5 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +83 -0
- data/lib/rbs/cli/validate.rb +356 -0
- data/lib/rbs/cli.rb +253 -143
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
- data/lib/rbs/collection/config.rb +19 -46
- data/lib/rbs/collection/installer.rb +12 -13
- data/lib/rbs/collection/sources/base.rb +2 -2
- data/lib/rbs/collection/sources/git.rb +146 -69
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +10 -12
- data/lib/rbs/collection/sources/stdlib.rb +14 -13
- data/lib/rbs/collection/sources.rb +15 -2
- data/lib/rbs/collection.rb +2 -1
- data/lib/rbs/definition.rb +13 -16
- data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
- data/lib/rbs/definition_builder/method_builder.rb +4 -4
- data/lib/rbs/definition_builder.rb +489 -584
- data/lib/rbs/diff.rb +125 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +406 -105
- data/lib/rbs/environment_loader.rb +48 -44
- data/lib/rbs/environment_walker.rb +1 -1
- data/lib/rbs/errors.rb +175 -56
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/location_aux.rb +8 -7
- data/lib/rbs/locator.rb +37 -15
- data/lib/rbs/method_type.rb +23 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +22 -13
- data/lib/rbs/prototype/helpers.rb +48 -22
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +125 -31
- data/lib/rbs/prototype/rbi.rb +49 -36
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
- data/lib/rbs/prototype/runtime.rb +273 -159
- data/lib/rbs/resolver/constant_resolver.rb +24 -8
- data/lib/rbs/resolver/type_name_resolver.rb +41 -7
- data/lib/rbs/sorter.rb +153 -123
- data/lib/rbs/substitution.rb +19 -0
- data/lib/rbs/subtractor.rb +201 -0
- data/lib/rbs/test/errors.rb +24 -11
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +45 -40
- data/lib/rbs/test/setup.rb +1 -1
- data/lib/rbs/test/tester.rb +1 -1
- data/lib/rbs/test/type_check.rb +120 -23
- data/lib/rbs/test.rb +6 -3
- data/lib/rbs/type_alias_dependency.rb +13 -3
- data/lib/rbs/type_alias_regularity.rb +21 -14
- data/lib/rbs/type_name.rb +18 -13
- data/lib/rbs/types.rb +352 -18
- data/lib/rbs/unit_test/convertibles.rb +176 -0
- data/lib/rbs/unit_test/spy.rb +136 -0
- data/lib/rbs/unit_test/type_assertions.rb +341 -0
- data/lib/rbs/unit_test/with_aliases.rb +143 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +55 -30
- data/lib/rbs/variance_calculator.rb +26 -23
- data/lib/rbs/vendorer.rb +3 -3
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +69 -22
- data/lib/rbs.rb +7 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +5 -5
- data/rbs.gemspec +12 -2
- data/schema/decls.json +1 -1
- data/schema/members.json +15 -10
- data/sig/ancestor_builder.rbs +4 -0
- data/sig/ancestor_graph.rbs +22 -2
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +21 -0
- data/sig/cli/validate.rbs +43 -0
- data/sig/cli.rbs +4 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +66 -0
- data/sig/collection/config.rbs +5 -48
- data/sig/collection/installer.rbs +1 -1
- data/sig/collection/sources.rbs +105 -33
- data/sig/constant.rbs +1 -1
- data/sig/declarations.rbs +42 -3
- data/sig/definition.rbs +26 -10
- data/sig/definition_builder.rbs +103 -81
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +61 -0
- data/sig/environment.rbs +175 -29
- data/sig/environment_loader.rbs +20 -18
- data/sig/errors.rbs +123 -2
- data/sig/file_finder.rbs +28 -0
- data/sig/location.rbs +0 -3
- data/sig/locator.rbs +14 -2
- data/sig/manifest.yaml +0 -1
- data/sig/members.rbs +32 -9
- data/sig/method_types.rbs +10 -4
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +55 -16
- data/sig/prototype/helpers.rbs +4 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +10 -2
- data/sig/prototype/rbi.rbs +2 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +1 -1
- data/sig/rdoc/rbs.rbs +4 -0
- data/sig/repository.rbs +7 -5
- data/sig/resolver/constant_resolver.rbs +3 -4
- data/sig/resolver/context.rbs +1 -1
- data/sig/resolver/type_name_resolver.rbs +5 -1
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +23 -5
- data/sig/substitution.rbs +6 -0
- data/sig/subtractor.rbs +37 -0
- data/sig/test/errors.rbs +52 -0
- data/sig/test/guranteed.rbs +9 -0
- data/sig/test/type_check.rbs +19 -0
- data/sig/test.rbs +82 -0
- data/sig/type_alias_dependency.rbs +31 -0
- data/sig/type_alias_regularity.rbs +12 -6
- data/sig/type_param.rbs +45 -9
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +119 -12
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +28 -0
- data/sig/unit_test/type_assertions.rbs +194 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/validator.rbs +12 -5
- data/sig/variance_calculator.rbs +3 -1
- data/sig/vendorer.rbs +1 -1
- data/sig/visitor.rbs +47 -0
- data/sig/writer.rbs +6 -2
- data/src/constants.c +153 -0
- data/src/ruby_objs.c +793 -0
- data/stdlib/base64/0/base64.rbs +298 -45
- data/stdlib/benchmark/0/benchmark.rbs +12 -3
- data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
- data/stdlib/cgi/0/core.rbs +68 -15
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +50 -11
- data/stdlib/csv/0/csv.rbs +90 -119
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +806 -735
- data/stdlib/date/0/date_time.rbs +70 -211
- data/stdlib/dbm/0/dbm.rbs +0 -2
- data/stdlib/delegate/0/delegator.rbs +184 -0
- data/stdlib/delegate/0/kernel.rbs +47 -0
- data/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
- data/stdlib/digest/0/digest.rbs +48 -35
- data/stdlib/erb/0/erb.rbs +15 -39
- data/stdlib/etc/0/etc.rbs +174 -54
- data/stdlib/fileutils/0/fileutils.rbs +1234 -385
- data/stdlib/forwardable/0/forwardable.rbs +4 -4
- data/stdlib/io-console/0/io-console.rbs +82 -17
- data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
- data/stdlib/json/0/json.rbs +434 -151
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +0 -2
- data/stdlib/logger/0/log_device.rbs +1 -3
- data/stdlib/logger/0/logger.rbs +465 -328
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +91 -10
- data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
- data/stdlib/net-http/0/manifest.yaml +1 -1
- data/stdlib/net-http/0/net-http.rbs +3858 -964
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/stdlib/nkf/0/nkf.rbs +35 -5
- data/stdlib/objspace/0/objspace.rbs +40 -18
- data/stdlib/observable/0/observable.rbs +217 -0
- data/stdlib/open-uri/0/manifest.yaml +4 -0
- data/stdlib/open-uri/0/open-uri.rbs +393 -0
- data/stdlib/open3/0/open3.rbs +147 -0
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +681 -316
- data/stdlib/optparse/0/optparse.rbs +100 -65
- data/stdlib/pathname/0/pathname.rbs +24 -15
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +300 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
- data/stdlib/pstore/0/pstore.rbs +370 -156
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +402 -0
- data/stdlib/{yaml → psych}/0/store.rbs +2 -2
- data/stdlib/pty/0/pty.rbs +63 -11
- data/stdlib/rdoc/0/code_object.rbs +51 -0
- data/stdlib/rdoc/0/comment.rbs +59 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +13 -380
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/resolv/0/resolv.rbs +16 -79
- data/stdlib/ripper/0/ripper.rbs +1648 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -3
- data/stdlib/socket/0/addrinfo.rbs +13 -18
- data/stdlib/socket/0/basic_socket.rbs +5 -10
- data/stdlib/socket/0/ip_socket.rbs +0 -2
- data/stdlib/socket/0/socket.rbs +77 -46
- data/stdlib/socket/0/tcp_server.rbs +0 -5
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +4 -5
- data/stdlib/socket/0/unix_server.rbs +0 -5
- data/stdlib/socket/0/unix_socket.rbs +2 -4
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
- data/stdlib/strscan/0/string_scanner.rbs +1269 -425
- data/stdlib/tempfile/0/tempfile.rbs +224 -61
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +17 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +271 -144
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +26 -22
- data/stdlib/uri/0/http.rbs +4 -4
- data/stdlib/uri/0/ldap.rbs +1 -1
- data/stdlib/uri/0/mailto.rbs +84 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/yaml/0/manifest.yaml +1 -2
- data/stdlib/yaml/0/yaml.rbs +1 -199
- data/stdlib/zlib/0/buf_error.rbs +10 -0
- data/stdlib/zlib/0/data_error.rbs +10 -0
- data/stdlib/zlib/0/deflate.rbs +210 -0
- data/stdlib/zlib/0/error.rbs +20 -0
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/stdlib/zlib/0/gzip_writer.rbs +166 -0
- data/stdlib/zlib/0/inflate.rbs +180 -0
- data/stdlib/zlib/0/mem_error.rbs +10 -0
- data/stdlib/zlib/0/need_dict.rbs +13 -0
- data/stdlib/zlib/0/stream_end.rbs +11 -0
- data/stdlib/zlib/0/stream_error.rbs +11 -0
- data/stdlib/zlib/0/version_error.rbs +11 -0
- data/stdlib/zlib/0/zlib.rbs +1 -3
- data/stdlib/zlib/0/zstream.rbs +200 -0
- data/templates/include/rbs/constants.h.erb +20 -0
- data/templates/include/rbs/ruby_objs.h.erb +10 -0
- data/templates/src/constants.c.erb +36 -0
- data/templates/src/ruby_objs.c.erb +27 -0
- data/templates/template.rb +122 -0
- metadata +136 -36
- data/Gemfile +0 -33
- data/Gemfile.lock +0 -118
- data/core/deprecated.rbs +0 -9
- data/ext/rbs_extension/constants.c +0 -135
- data/ext/rbs_extension/ruby_objs.c +0 -525
- data/ext/rbs_extension/ruby_objs.h +0 -43
- data/lib/rbs/constant_table.rb +0 -167
- data/lib/rbs/parser_compat/lexer_error.rb +0 -6
- data/lib/rbs/parser_compat/located_value.rb +0 -7
- data/lib/rbs/parser_compat/semantics_error.rb +0 -6
- data/lib/rbs/parser_compat/syntax_error.rb +0 -6
- data/lib/rbs/test/spy.rb +0 -6
- data/lib/rbs/type_name_resolver.rb +0 -67
- data/sig/constant_table.rbs +0 -30
- data/sig/shims/abstract_syntax_tree.rbs +0 -25
- data/sig/shims/pp.rbs +0 -3
- data/sig/shims/ripper.rbs +0 -8
- data/sig/shims.rbs +0 -69
- data/sig/type_name_resolver.rbs +0 -26
- data/stdlib/minitest/0/manifest.yaml +0 -2
- data/stdlib/prime/0/integer-extension.rbs +0 -41
- data/stdlib/prime/0/manifest.yaml +0 -2
- data/stdlib/prime/0/prime.rbs +0 -372
data/core/complex.rbs
CHANGED
@@ -1,118 +1,223 @@
|
|
1
1
|
# <!-- rdoc-file=complex.c -->
|
2
|
-
# A
|
3
|
-
#
|
4
|
-
# unit. Real a equals complex a+0i mathematically.
|
2
|
+
# A Complex object houses a pair of values, given when the object is created as
|
3
|
+
# either *rectangular coordinates* or *polar coordinates*.
|
5
4
|
#
|
6
|
-
#
|
5
|
+
# ## Rectangular Coordinates
|
7
6
|
#
|
8
|
-
#
|
7
|
+
# The rectangular coordinates of a complex number are called the *real* and
|
8
|
+
# *imaginary* parts; see [Complex number
|
9
|
+
# definition](https://en.wikipedia.org/wiki/Complex_number#Definition_and_basic_
|
10
|
+
# operations).
|
9
11
|
#
|
12
|
+
# You can create a Complex object from rectangular coordinates with:
|
10
13
|
#
|
11
|
-
#
|
14
|
+
# * A [complex literal](rdoc-ref:syntax/literals.rdoc@Complex+Literals).
|
15
|
+
# * Method Complex.rect.
|
16
|
+
# * Method Kernel#Complex, either with numeric arguments or with certain
|
17
|
+
# string arguments.
|
18
|
+
# * Method String#to_c, for certain strings.
|
12
19
|
#
|
13
|
-
#
|
20
|
+
# Note that each of the stored parts may be a an instance one of the classes
|
21
|
+
# Complex, Float, Integer, or Rational; they may be retrieved:
|
14
22
|
#
|
23
|
+
# * Separately, with methods Complex#real and Complex#imaginary.
|
24
|
+
# * Together, with method Complex#rect.
|
15
25
|
#
|
16
|
-
#
|
17
|
-
# Complex::rect, Complex::polar or to_c method.
|
26
|
+
# The corresponding (computed) polar values may be retrieved:
|
18
27
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# Complex(2, 3) #=> (2+3i)
|
22
|
-
# Complex.polar(2, 3) #=> (-1.9799849932008908+0.2822400161197344i)
|
23
|
-
# 3.to_c #=> (3+0i)
|
28
|
+
# * Separately, with methods Complex#abs and Complex#arg.
|
29
|
+
# * Together, with method Complex#polar.
|
24
30
|
#
|
25
|
-
#
|
31
|
+
# ## Polar Coordinates
|
26
32
|
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# Complex('1@2') #=> (-0.4161468365471424+0.9092974268256817i)
|
33
|
+
# The polar coordinates of a complex number are called the *absolute* and
|
34
|
+
# *argument* parts; see [Complex polar
|
35
|
+
# plane](https://en.wikipedia.org/wiki/Complex_number#Polar_form).
|
31
36
|
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# '1@2'.to_c #=> (-0.4161468365471424+0.9092974268256817i)
|
37
|
+
# In this class, the argument part in expressed
|
38
|
+
# [radians](https://en.wikipedia.org/wiki/Radian) (not
|
39
|
+
# [degrees](https://en.wikipedia.org/wiki/Degree_(angle))).
|
36
40
|
#
|
37
|
-
#
|
41
|
+
# You can create a Complex object from polar coordinates with:
|
38
42
|
#
|
39
|
-
#
|
40
|
-
#
|
43
|
+
# * Method Complex.polar.
|
44
|
+
# * Method Kernel#Complex, with certain string arguments.
|
45
|
+
# * Method String#to_c, for certain strings.
|
46
|
+
#
|
47
|
+
# Note that each of the stored parts may be a an instance one of the classes
|
48
|
+
# Complex, Float, Integer, or Rational; they may be retrieved:
|
49
|
+
#
|
50
|
+
# * Separately, with methods Complex#abs and Complex#arg.
|
51
|
+
# * Together, with method Complex#polar.
|
52
|
+
#
|
53
|
+
# The corresponding (computed) rectangular values may be retrieved:
|
54
|
+
#
|
55
|
+
# * Separately, with methods Complex#real and Complex#imag.
|
56
|
+
# * Together, with method Complex#rect.
|
57
|
+
#
|
58
|
+
# ## What's Here
|
59
|
+
#
|
60
|
+
# First, what's elsewhere:
|
61
|
+
#
|
62
|
+
# * Class Complex inherits (directly or indirectly) from classes
|
63
|
+
# [Numeric](rdoc-ref:Numeric@What-27s+Here) and
|
64
|
+
# [Object](rdoc-ref:Object@What-27s+Here).
|
65
|
+
# * Includes (indirectly) module
|
66
|
+
# [Comparable](rdoc-ref:Comparable@What-27s+Here).
|
67
|
+
#
|
68
|
+
# Here, class Complex has methods for:
|
69
|
+
#
|
70
|
+
# ### Creating Complex Objects
|
71
|
+
#
|
72
|
+
# * ::polar: Returns a new Complex object based on given polar coordinates.
|
73
|
+
# * ::rect (and its alias ::rectangular): Returns a new Complex object based
|
74
|
+
# on given rectangular coordinates.
|
75
|
+
#
|
76
|
+
# ### Querying
|
77
|
+
#
|
78
|
+
# * #abs (and its alias #magnitude): Returns the absolute value for `self`.
|
79
|
+
# * #arg (and its aliases #angle and #phase): Returns the argument (angle) for
|
80
|
+
# `self` in radians.
|
81
|
+
# * #denominator: Returns the denominator of `self`.
|
82
|
+
# * #finite?: Returns whether both `self.real` and `self.image` are finite.
|
83
|
+
# * #hash: Returns the integer hash value for `self`.
|
84
|
+
# * #imag (and its alias #imaginary): Returns the imaginary value for `self`.
|
85
|
+
# * #infinite?: Returns whether `self.real` or `self.image` is infinite.
|
86
|
+
# * #numerator: Returns the numerator of `self`.
|
87
|
+
# * #polar: Returns the array `[self.abs, self.arg]`.
|
88
|
+
# * #inspect: Returns a string representation of `self`.
|
89
|
+
# * #real: Returns the real value for `self`.
|
90
|
+
# * #real?: Returns `false`; for compatibility with Numeric#real?.
|
91
|
+
# * #rect (and its alias #rectangular): Returns the array `[self.real,
|
92
|
+
# self.imag]`.
|
93
|
+
#
|
94
|
+
# ### Comparing
|
95
|
+
#
|
96
|
+
# * #<=>: Returns whether `self` is less than, equal to, or greater than the
|
97
|
+
# given argument.
|
98
|
+
# * #==: Returns whether `self` is equal to the given argument.
|
99
|
+
#
|
100
|
+
# ### Converting
|
101
|
+
#
|
102
|
+
# * #rationalize: Returns a Rational object whose value is exactly or
|
103
|
+
# approximately equivalent to that of `self.real`.
|
104
|
+
# * #to_c: Returns `self`.
|
105
|
+
# * #to_d: Returns the value as a BigDecimal object.
|
106
|
+
# * #to_f: Returns the value of `self.real` as a Float, if possible.
|
107
|
+
# * #to_i: Returns the value of `self.real` as an Integer, if possible.
|
108
|
+
# * #to_r: Returns the value of `self.real` as a Rational, if possible.
|
109
|
+
# * #to_s: Returns a string representation of `self`.
|
110
|
+
#
|
111
|
+
# ### Performing Complex Arithmetic
|
112
|
+
#
|
113
|
+
# * #*: Returns the product of `self` and the given numeric.
|
114
|
+
# * #**: Returns `self` raised to power of the given numeric.
|
115
|
+
# * #+: Returns the sum of `self` and the given numeric.
|
116
|
+
# * #-: Returns the difference of `self` and the given numeric.
|
117
|
+
# * #-@: Returns the negation of `self`.
|
118
|
+
# * #/: Returns the quotient of `self` and the given numeric.
|
119
|
+
# * #abs2: Returns square of the absolute value (magnitude) for `self`.
|
120
|
+
# * #conj (and its alias #conjugate): Returns the conjugate of `self`.
|
121
|
+
# * #fdiv: Returns `Complex.rect(self.real/numeric, self.imag/numeric)`.
|
122
|
+
#
|
123
|
+
# ### Working with JSON
|
124
|
+
#
|
125
|
+
# * ::json_create: Returns a new Complex object, deserialized from the given
|
126
|
+
# serialized hash.
|
127
|
+
# * #as_json: Returns a serialized hash constructed from `self`.
|
128
|
+
# * #to_json: Returns a JSON string representing `self`.
|
129
|
+
#
|
130
|
+
# These methods are provided by the [JSON gem](https://github.com/ruby/json). To
|
131
|
+
# make these methods available:
|
132
|
+
#
|
133
|
+
# require 'json/add/complex'
|
41
134
|
#
|
42
135
|
class Complex < Numeric
|
43
136
|
# <!--
|
44
137
|
# rdoc-file=complex.c
|
45
|
-
# - Complex.polar(abs
|
138
|
+
# - Complex.polar(abs, arg = 0) -> complex
|
46
139
|
# -->
|
47
|
-
# Returns a
|
140
|
+
# Returns a new Complex object formed from the arguments, each of which must be
|
141
|
+
# an instance of Numeric, or an instance of one of its subclasses: Complex,
|
142
|
+
# Float, Integer, Rational. Argument `arg` is given in radians; see [Polar
|
143
|
+
# Coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
48
144
|
#
|
49
|
-
# Complex.polar(3
|
50
|
-
# Complex.polar(3,
|
51
|
-
# Complex.polar(3,
|
52
|
-
# Complex.polar(3, -Math::PI/2) #=> (1.836909530733566e-16-3.0i)
|
145
|
+
# Complex.polar(3) # => (3+0i)
|
146
|
+
# Complex.polar(3, 2.0) # => (-1.2484405096414273+2.727892280477045i)
|
147
|
+
# Complex.polar(-3, -2.0) # => (1.2484405096414273+2.727892280477045i)
|
53
148
|
#
|
54
149
|
def self.polar: (Numeric, ?Numeric) -> Complex
|
55
150
|
|
56
151
|
# <!--
|
57
152
|
# rdoc-file=complex.c
|
58
|
-
# - Complex.rect(real
|
59
|
-
# - Complex.rectangular(real[, imag]) -> complex
|
153
|
+
# - Complex.rect(real, imag = 0) -> complex
|
60
154
|
# -->
|
61
|
-
# Returns a
|
155
|
+
# Returns a new Complex object formed from the arguments, each of which must be
|
156
|
+
# an instance of Numeric, or an instance of one of its subclasses: Complex,
|
157
|
+
# Float, Integer, Rational; see [Rectangular
|
158
|
+
# Coordinates](rdoc-ref:Complex@Rectangular+Coordinates):
|
159
|
+
#
|
160
|
+
# Complex.rect(3) # => (3+0i)
|
161
|
+
# Complex.rect(3, Math::PI) # => (3+3.141592653589793i)
|
162
|
+
# Complex.rect(-3, -Math::PI) # => (-3-3.141592653589793i)
|
62
163
|
#
|
63
|
-
#
|
164
|
+
# Complex.rectangular is an alias for Complex.rect.
|
64
165
|
#
|
65
166
|
def self.rect: (Numeric, ?Numeric) -> Complex
|
66
167
|
|
67
168
|
# <!--
|
68
169
|
# rdoc-file=complex.c
|
69
|
-
# - Complex.rect(real
|
70
|
-
# - Complex.rectangular(real[, imag]) -> complex
|
170
|
+
# - Complex.rect(real, imag = 0) -> complex
|
71
171
|
# -->
|
72
|
-
# Returns a
|
172
|
+
# Returns a new Complex object formed from the arguments, each of which must be
|
173
|
+
# an instance of Numeric, or an instance of one of its subclasses: Complex,
|
174
|
+
# Float, Integer, Rational; see [Rectangular
|
175
|
+
# Coordinates](rdoc-ref:Complex@Rectangular+Coordinates):
|
73
176
|
#
|
74
|
-
# Complex.
|
177
|
+
# Complex.rect(3) # => (3+0i)
|
178
|
+
# Complex.rect(3, Math::PI) # => (3+3.141592653589793i)
|
179
|
+
# Complex.rect(-3, -Math::PI) # => (-3-3.141592653589793i)
|
180
|
+
#
|
181
|
+
# Complex.rectangular is an alias for Complex.rect.
|
75
182
|
#
|
76
183
|
alias self.rectangular self.rect
|
77
184
|
|
78
|
-
public
|
79
|
-
|
80
185
|
# <!--
|
81
186
|
# rdoc-file=complex.c
|
82
|
-
# -
|
187
|
+
# - complex * numeric -> new_complex
|
83
188
|
# -->
|
84
|
-
#
|
189
|
+
# Returns the product of `self` and `numeric`:
|
85
190
|
#
|
86
|
-
# Complex(2, 3) * Complex(2, 3)
|
87
|
-
# Complex(900) * Complex(1)
|
88
|
-
# Complex(-2, 9) * Complex(-9, 2)
|
89
|
-
# Complex(9, 8) * 4
|
90
|
-
# Complex(20, 9) * 9.8
|
191
|
+
# Complex.rect(2, 3) * Complex.rect(2, 3) # => (-5+12i)
|
192
|
+
# Complex.rect(900) * Complex.rect(1) # => (900+0i)
|
193
|
+
# Complex.rect(-2, 9) * Complex.rect(-9, 2) # => (0-85i)
|
194
|
+
# Complex.rect(9, 8) * 4 # => (36+32i)
|
195
|
+
# Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
|
91
196
|
#
|
92
197
|
def *: (Numeric) -> Complex
|
93
198
|
|
94
199
|
# <!--
|
95
200
|
# rdoc-file=complex.c
|
96
|
-
# -
|
201
|
+
# - complex ** numeric -> new_complex
|
97
202
|
# -->
|
98
|
-
#
|
203
|
+
# Returns `self` raised to power `numeric`:
|
99
204
|
#
|
100
|
-
# Complex(
|
101
|
-
# Complex(-8) ** Rational(1, 3)
|
205
|
+
# Complex.rect(0, 1) ** 2 # => (-1+0i)
|
206
|
+
# Complex.rect(-8) ** Rational(1, 3) # => (1.0000000000000002+1.7320508075688772i)
|
102
207
|
#
|
103
208
|
def **: (Numeric) -> Complex
|
104
209
|
|
105
210
|
# <!--
|
106
211
|
# rdoc-file=complex.c
|
107
|
-
# -
|
212
|
+
# - complex + numeric -> new_complex
|
108
213
|
# -->
|
109
|
-
#
|
214
|
+
# Returns the sum of `self` and `numeric`:
|
110
215
|
#
|
111
|
-
# Complex(2, 3) + Complex(2, 3)
|
112
|
-
# Complex(900) + Complex(1)
|
113
|
-
# Complex(-2, 9) + Complex(-9, 2)
|
114
|
-
# Complex(9, 8) + 4
|
115
|
-
# Complex(20, 9) + 9.8
|
216
|
+
# Complex.rect(2, 3) + Complex.rect(2, 3) # => (4+6i)
|
217
|
+
# Complex.rect(900) + Complex.rect(1) # => (901+0i)
|
218
|
+
# Complex.rect(-2, 9) + Complex.rect(-9, 2) # => (-11+11i)
|
219
|
+
# Complex.rect(9, 8) + 4 # => (13+8i)
|
220
|
+
# Complex.rect(20, 9) + 9.8 # => (29.8+9i)
|
116
221
|
#
|
117
222
|
def +: (Numeric) -> Complex
|
118
223
|
|
@@ -120,40 +225,40 @@ class Complex < Numeric
|
|
120
225
|
|
121
226
|
# <!--
|
122
227
|
# rdoc-file=complex.c
|
123
|
-
# -
|
228
|
+
# - complex - numeric -> new_complex
|
124
229
|
# -->
|
125
|
-
#
|
230
|
+
# Returns the difference of `self` and `numeric`:
|
126
231
|
#
|
127
|
-
# Complex(2, 3) - Complex(2, 3)
|
128
|
-
# Complex(900) - Complex(1)
|
129
|
-
# Complex(-2, 9) - Complex(-9, 2)
|
130
|
-
# Complex(9, 8) - 4
|
131
|
-
# Complex(20, 9) - 9.8
|
232
|
+
# Complex.rect(2, 3) - Complex.rect(2, 3) # => (0+0i)
|
233
|
+
# Complex.rect(900) - Complex.rect(1) # => (899+0i)
|
234
|
+
# Complex.rect(-2, 9) - Complex.rect(-9, 2) # => (7+7i)
|
235
|
+
# Complex.rect(9, 8) - 4 # => (5+8i)
|
236
|
+
# Complex.rect(20, 9) - 9.8 # => (10.2+9i)
|
132
237
|
#
|
133
238
|
def -: (Numeric) -> Complex
|
134
239
|
|
135
240
|
# <!--
|
136
241
|
# rdoc-file=complex.c
|
137
|
-
# - -
|
242
|
+
# - -complex -> new_complex
|
138
243
|
# -->
|
139
|
-
# Returns negation of the
|
244
|
+
# Returns the negation of `self`, which is the negation of each of its parts:
|
140
245
|
#
|
141
|
-
# -Complex(1, 2)
|
246
|
+
# -Complex.rect(1, 2) # => (-1-2i)
|
247
|
+
# -Complex.rect(-1, -2) # => (1+2i)
|
142
248
|
#
|
143
249
|
def -@: () -> Complex
|
144
250
|
|
145
251
|
# <!--
|
146
252
|
# rdoc-file=complex.c
|
147
|
-
# -
|
148
|
-
# - cmp.quo(numeric) -> complex
|
253
|
+
# - complex / numeric -> new_complex
|
149
254
|
# -->
|
150
|
-
#
|
255
|
+
# Returns the quotient of `self` and `numeric`:
|
151
256
|
#
|
152
|
-
# Complex(2, 3) / Complex(2, 3)
|
153
|
-
# Complex(900) / Complex(1)
|
154
|
-
# Complex(-2, 9) / Complex(-9, 2)
|
155
|
-
# Complex(9, 8) / 4
|
156
|
-
# Complex(20, 9) / 9.8
|
257
|
+
# Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
|
258
|
+
# Complex.rect(900) / Complex.rect(1) # => (900+0i)
|
259
|
+
# Complex.rect(-2, 9) / Complex.rect(-9, 2) # => ((36/85)-(77/85)*i)
|
260
|
+
# Complex.rect(9, 8) / 4 # => ((9/4)+2i)
|
261
|
+
# Complex.rect(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
|
157
262
|
#
|
158
263
|
def /: (Numeric) -> Complex
|
159
264
|
|
@@ -163,31 +268,36 @@ class Complex < Numeric
|
|
163
268
|
|
164
269
|
# <!--
|
165
270
|
# rdoc-file=complex.c
|
166
|
-
# -
|
271
|
+
# - complex <=> object -> -1, 0, 1, or nil
|
167
272
|
# -->
|
168
|
-
#
|
169
|
-
#
|
170
|
-
# `
|
273
|
+
# Returns:
|
274
|
+
#
|
275
|
+
# * `self.real <=> object.real` if both of the following are true:
|
276
|
+
#
|
277
|
+
# * `self.imag == 0`.
|
278
|
+
# * `object.imag == 0`. # Always true if object is numeric but not
|
279
|
+
# complex.
|
171
280
|
#
|
172
|
-
#
|
173
|
-
#
|
174
|
-
#
|
175
|
-
#
|
176
|
-
# Complex(2)
|
281
|
+
# * `nil` otherwise.
|
282
|
+
#
|
283
|
+
# Examples:
|
284
|
+
#
|
285
|
+
# Complex.rect(2) <=> 3 # => -1
|
286
|
+
# Complex.rect(2) <=> 2 # => 0
|
287
|
+
# Complex.rect(2) <=> 1 # => 1
|
288
|
+
# Complex.rect(2, 1) <=> 1 # => nil # self.imag not zero.
|
289
|
+
# Complex.rect(1) <=> Complex.rect(1, 1) # => nil # object.imag not zero.
|
290
|
+
# Complex.rect(1) <=> 'Foo' # => nil # object.imag not defined.
|
177
291
|
#
|
178
292
|
def <=>: (untyped) -> Integer?
|
179
293
|
|
180
294
|
# <!--
|
181
295
|
# rdoc-file=complex.c
|
182
|
-
# -
|
296
|
+
# - complex == object -> true or false
|
183
297
|
# -->
|
184
|
-
# Returns true if
|
298
|
+
# Returns `true` if `self.real == object.real` and `self.imag == object.imag`:
|
185
299
|
#
|
186
|
-
# Complex(2, 3) == Complex(2, 3)
|
187
|
-
# Complex(5) == 5 #=> true
|
188
|
-
# Complex(0) == 0.0 #=> true
|
189
|
-
# Complex('1/3') == 0.33 #=> false
|
190
|
-
# Complex('1/2') == '1/2' #=> false
|
300
|
+
# Complex.rect(2, 3) == Complex.rect(2.0, 3.0) # => true
|
191
301
|
#
|
192
302
|
def ==: (untyped) -> bool
|
193
303
|
|
@@ -197,43 +307,66 @@ class Complex < Numeric
|
|
197
307
|
|
198
308
|
# <!--
|
199
309
|
# rdoc-file=complex.c
|
200
|
-
# -
|
201
|
-
# - cmp.magnitude -> real
|
310
|
+
# - abs -> float
|
202
311
|
# -->
|
203
|
-
# Returns the absolute
|
312
|
+
# Returns the absolute value (magnitude) for `self`; see [polar
|
313
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
314
|
+
#
|
315
|
+
# Complex.polar(-1, 0).abs # => 1.0
|
316
|
+
#
|
317
|
+
# If `self` was created with [rectangular
|
318
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
319
|
+
# computed, and may be inexact:
|
204
320
|
#
|
205
|
-
# Complex(
|
206
|
-
# Complex(3.0, -4.0).abs #=> 5.0
|
321
|
+
# Complex.rectangular(1, 1).abs # => 1.4142135623730951 # The square root of 2.
|
207
322
|
#
|
208
323
|
def abs: () -> Numeric
|
209
324
|
|
210
325
|
# <!--
|
211
326
|
# rdoc-file=complex.c
|
212
|
-
# -
|
327
|
+
# - abs2 -> float
|
213
328
|
# -->
|
214
|
-
# Returns square of the absolute value
|
329
|
+
# Returns square of the absolute value (magnitude) for `self`; see [polar
|
330
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
215
331
|
#
|
216
|
-
# Complex(
|
217
|
-
#
|
332
|
+
# Complex.polar(2, 2).abs2 # => 4.0
|
333
|
+
#
|
334
|
+
# If `self` was created with [rectangular
|
335
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
336
|
+
# computed, and may be inexact:
|
337
|
+
#
|
338
|
+
# Complex.rectangular(1.0/3, 1.0/3).abs2 # => 0.2222222222222222
|
218
339
|
#
|
219
340
|
def abs2: () -> Numeric
|
220
341
|
|
221
342
|
# <!-- rdoc-file=complex.c -->
|
222
|
-
# Returns the angle
|
343
|
+
# Returns the argument (angle) for `self` in radians; see [polar
|
344
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
345
|
+
#
|
346
|
+
# Complex.polar(3, Math::PI/2).arg # => 1.57079632679489660
|
347
|
+
#
|
348
|
+
# If `self` was created with [rectangular
|
349
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
350
|
+
# computed, and may be inexact:
|
223
351
|
#
|
224
|
-
# Complex.polar(
|
352
|
+
# Complex.polar(1, 1.0/3).arg # => 0.33333333333333326
|
225
353
|
#
|
226
354
|
def angle: () -> Float
|
227
355
|
|
228
356
|
# <!--
|
229
357
|
# rdoc-file=complex.c
|
230
|
-
# -
|
231
|
-
# - cmp.angle -> float
|
232
|
-
# - cmp.phase -> float
|
358
|
+
# - arg -> float
|
233
359
|
# -->
|
234
|
-
# Returns the angle
|
360
|
+
# Returns the argument (angle) for `self` in radians; see [polar
|
361
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
235
362
|
#
|
236
|
-
# Complex.polar(3, Math::PI/2).arg
|
363
|
+
# Complex.polar(3, Math::PI/2).arg # => 1.57079632679489660
|
364
|
+
#
|
365
|
+
# If `self` was created with [rectangular
|
366
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
367
|
+
# computed, and may be inexact:
|
368
|
+
#
|
369
|
+
# Complex.polar(1, 1.0/3).arg # => 0.33333333333333326
|
237
370
|
#
|
238
371
|
alias arg angle
|
239
372
|
|
@@ -242,30 +375,35 @@ class Complex < Numeric
|
|
242
375
|
def coerce: (Numeric) -> [ Complex, Complex ]
|
243
376
|
|
244
377
|
# <!-- rdoc-file=complex.c -->
|
245
|
-
# Returns the
|
378
|
+
# Returns the conjugate of `self`, `Complex.rect(self.imag, self.real)`:
|
246
379
|
#
|
247
|
-
# Complex(1, 2).
|
380
|
+
# Complex.rect(1, 2).conj # => (1-2i)
|
248
381
|
#
|
249
382
|
def conj: () -> Complex
|
250
383
|
|
251
384
|
# <!--
|
252
385
|
# rdoc-file=complex.c
|
253
|
-
# -
|
254
|
-
# - cmp.conjugate -> complex
|
386
|
+
# - conj -> complex
|
255
387
|
# -->
|
256
|
-
# Returns the
|
388
|
+
# Returns the conjugate of `self`, `Complex.rect(self.imag, self.real)`:
|
257
389
|
#
|
258
|
-
# Complex(1, 2).
|
390
|
+
# Complex.rect(1, 2).conj # => (1-2i)
|
259
391
|
#
|
260
392
|
def conjugate: () -> Complex
|
261
393
|
|
262
394
|
# <!--
|
263
395
|
# rdoc-file=complex.c
|
264
|
-
# -
|
396
|
+
# - denominator -> integer
|
265
397
|
# -->
|
266
|
-
# Returns the denominator
|
398
|
+
# Returns the denominator of `self`, which is the [least common
|
399
|
+
# multiple](https://en.wikipedia.org/wiki/Least_common_multiple) of
|
400
|
+
# `self.real.denominator` and `self.imag.denominator`:
|
401
|
+
#
|
402
|
+
# Complex.rect(Rational(1, 2), Rational(2, 3)).denominator # => 6
|
267
403
|
#
|
268
|
-
#
|
404
|
+
# Note that `n.denominator` of a non-rational numeric is `1`.
|
405
|
+
#
|
406
|
+
# Related: Complex#numerator.
|
269
407
|
#
|
270
408
|
def denominator: () -> Integer
|
271
409
|
|
@@ -279,20 +417,25 @@ class Complex < Numeric
|
|
279
417
|
|
280
418
|
# <!--
|
281
419
|
# rdoc-file=complex.c
|
282
|
-
# -
|
420
|
+
# - fdiv(numeric) -> new_complex
|
283
421
|
# -->
|
284
|
-
#
|
422
|
+
# Returns `Complex.rect(self.real/numeric, self.imag/numeric)`:
|
285
423
|
#
|
286
|
-
# Complex(11, 22).fdiv(3)
|
424
|
+
# Complex.rect(11, 22).fdiv(3) # => (3.6666666666666665+7.333333333333333i)
|
287
425
|
#
|
288
426
|
def fdiv: (Numeric) -> Complex
|
289
427
|
|
290
428
|
# <!--
|
291
429
|
# rdoc-file=complex.c
|
292
|
-
# -
|
430
|
+
# - finite? -> true or false
|
293
431
|
# -->
|
294
|
-
# Returns `true` if `
|
295
|
-
#
|
432
|
+
# Returns `true` if both `self.real.finite?` and `self.imag.finite?` are true,
|
433
|
+
# `false` otherwise:
|
434
|
+
#
|
435
|
+
# Complex.rect(1, 1).finite? # => true
|
436
|
+
# Complex.rect(Float::INFINITY, 0).finite? # => false
|
437
|
+
#
|
438
|
+
# Related: Numeric#finite?, Float#finite?.
|
296
439
|
#
|
297
440
|
def finite?: () -> bool
|
298
441
|
|
@@ -300,68 +443,91 @@ class Complex < Numeric
|
|
300
443
|
|
301
444
|
# <!--
|
302
445
|
# rdoc-file=complex.c
|
303
|
-
# - hash
|
446
|
+
# - hash -> integer
|
304
447
|
# -->
|
448
|
+
# Returns the integer hash value for `self`.
|
449
|
+
#
|
450
|
+
# Two Complex objects created from the same values will have the same hash value
|
451
|
+
# (and will compare using #eql?):
|
452
|
+
#
|
453
|
+
# Complex.rect(1, 2).hash == Complex.rect(1, 2).hash # => true
|
305
454
|
#
|
306
455
|
def hash: () -> Integer
|
307
456
|
|
308
457
|
def i: () -> bot
|
309
458
|
|
310
459
|
# <!-- rdoc-file=complex.c -->
|
311
|
-
# Returns the imaginary
|
460
|
+
# Returns the imaginary value for `self`:
|
461
|
+
#
|
462
|
+
# Complex.rect(7).imag # => 0
|
463
|
+
# Complex.rect(9, -4).imag # => -4
|
312
464
|
#
|
313
|
-
#
|
314
|
-
#
|
465
|
+
# If `self` was created with [polar
|
466
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
|
467
|
+
# computed, and may be inexact:
|
468
|
+
#
|
469
|
+
# Complex.polar(1, Math::PI/4).imag # => 0.7071067811865476 # Square root of 2.
|
315
470
|
#
|
316
471
|
def imag: () -> Numeric
|
317
472
|
|
318
473
|
# <!--
|
319
474
|
# rdoc-file=complex.c
|
320
|
-
# -
|
321
|
-
# - cmp.imaginary -> real
|
475
|
+
# - imag -> numeric
|
322
476
|
# -->
|
323
|
-
# Returns the imaginary
|
477
|
+
# Returns the imaginary value for `self`:
|
478
|
+
#
|
479
|
+
# Complex.rect(7).imag # => 0
|
480
|
+
# Complex.rect(9, -4).imag # => -4
|
324
481
|
#
|
325
|
-
#
|
326
|
-
#
|
482
|
+
# If `self` was created with [polar
|
483
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
|
484
|
+
# computed, and may be inexact:
|
485
|
+
#
|
486
|
+
# Complex.polar(1, Math::PI/4).imag # => 0.7071067811865476 # Square root of 2.
|
327
487
|
#
|
328
488
|
def imaginary: () -> Numeric
|
329
489
|
|
330
490
|
# <!--
|
331
491
|
# rdoc-file=complex.c
|
332
|
-
# -
|
492
|
+
# - infinite? -> 1 or nil
|
333
493
|
# -->
|
334
|
-
# Returns `1` if `
|
335
|
-
#
|
494
|
+
# Returns `1` if either `self.real.infinite?` or `self.imag.infinite?` is true,
|
495
|
+
# `nil` otherwise:
|
336
496
|
#
|
337
|
-
#
|
497
|
+
# Complex.rect(Float::INFINITY, 0).infinite? # => 1
|
498
|
+
# Complex.rect(1, 1).infinite? # => nil
|
338
499
|
#
|
339
|
-
#
|
340
|
-
# (Float::INFINITY + 1i).infinite? #=> 1
|
500
|
+
# Related: Numeric#infinite?, Float#infinite?.
|
341
501
|
#
|
342
502
|
def infinite?: () -> Integer?
|
343
503
|
|
344
504
|
# <!--
|
345
505
|
# rdoc-file=complex.c
|
346
|
-
# -
|
506
|
+
# - inspect -> string
|
347
507
|
# -->
|
348
|
-
# Returns
|
508
|
+
# Returns a string representation of `self`:
|
349
509
|
#
|
350
|
-
# Complex(2).inspect
|
351
|
-
# Complex(
|
352
|
-
# Complex(
|
353
|
-
# Complex(0, Float::INFINITY).inspect
|
354
|
-
# Complex(Float::NAN, Float::NAN).inspect
|
510
|
+
# Complex.rect(2).inspect # => "(2+0i)"
|
511
|
+
# Complex.rect(-8, 6).inspect # => "(-8+6i)"
|
512
|
+
# Complex.rect(0, Rational(1, 2)).inspect # => "(0+(1/2)*i)"
|
513
|
+
# Complex.rect(0, Float::INFINITY).inspect # => "(0+Infinity*i)"
|
514
|
+
# Complex.rect(Float::NAN, Float::NAN).inspect # => "(NaN+NaN*i)"
|
355
515
|
#
|
356
516
|
def inspect: () -> String
|
357
517
|
|
358
518
|
def integer?: () -> bool
|
359
519
|
|
360
520
|
# <!-- rdoc-file=complex.c -->
|
361
|
-
# Returns the absolute
|
521
|
+
# Returns the absolute value (magnitude) for `self`; see [polar
|
522
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
523
|
+
#
|
524
|
+
# Complex.polar(-1, 0).abs # => 1.0
|
362
525
|
#
|
363
|
-
#
|
364
|
-
#
|
526
|
+
# If `self` was created with [rectangular
|
527
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
528
|
+
# computed, and may be inexact:
|
529
|
+
#
|
530
|
+
# Complex.rectangular(1, 1).abs # => 1.4142135623730951 # The square root of 2.
|
365
531
|
#
|
366
532
|
alias magnitude abs
|
367
533
|
|
@@ -373,39 +539,54 @@ class Complex < Numeric
|
|
373
539
|
|
374
540
|
# <!--
|
375
541
|
# rdoc-file=complex.c
|
376
|
-
# -
|
542
|
+
# - numerator -> new_complex
|
377
543
|
# -->
|
378
|
-
# Returns the
|
544
|
+
# Returns the Complex object created from the numerators of the real and
|
545
|
+
# imaginary parts of `self`, after converting each part to the [lowest common
|
546
|
+
# denominator](https://en.wikipedia.org/wiki/Lowest_common_denominator) of the
|
547
|
+
# two:
|
379
548
|
#
|
380
|
-
#
|
381
|
-
#
|
382
|
-
# 2 3 6 <- denominator
|
549
|
+
# c = Complex.rect(Rational(2, 3), Rational(3, 4)) # => ((2/3)+(3/4)*i)
|
550
|
+
# c.numerator # => (8+9i)
|
383
551
|
#
|
384
|
-
#
|
385
|
-
#
|
386
|
-
#
|
387
|
-
#
|
388
|
-
# Complex(Rational(n.real, d), Rational(n.imag, d))
|
389
|
-
# #=> ((1/2)+(2/3)*i)
|
552
|
+
# In this example, the lowest common denominator of the two parts is 12; the two
|
553
|
+
# converted parts may be thought of as Rational(8, 12) and Rational(9, 12),
|
554
|
+
# whose numerators, respectively, are 8 and 9; so the returned value of
|
555
|
+
# `c.numerator` is `Complex.rect(8, 9)`.
|
390
556
|
#
|
391
|
-
#
|
557
|
+
# Related: Complex#denominator.
|
392
558
|
#
|
393
559
|
def numerator: () -> Complex
|
394
560
|
|
395
561
|
# <!-- rdoc-file=complex.c -->
|
396
|
-
# Returns the angle
|
562
|
+
# Returns the argument (angle) for `self` in radians; see [polar
|
563
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates):
|
564
|
+
#
|
565
|
+
# Complex.polar(3, Math::PI/2).arg # => 1.57079632679489660
|
397
566
|
#
|
398
|
-
#
|
567
|
+
# If `self` was created with [rectangular
|
568
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
569
|
+
# computed, and may be inexact:
|
570
|
+
#
|
571
|
+
# Complex.polar(1, 1.0/3).arg # => 0.33333333333333326
|
399
572
|
#
|
400
573
|
alias phase angle
|
401
574
|
|
402
575
|
# <!--
|
403
576
|
# rdoc-file=complex.c
|
404
|
-
# -
|
577
|
+
# - polar -> array
|
405
578
|
# -->
|
406
|
-
# Returns
|
579
|
+
# Returns the array `[self.abs, self.arg]`:
|
580
|
+
#
|
581
|
+
# Complex.polar(1, 2).polar # => [1.0, 2.0]
|
407
582
|
#
|
408
|
-
#
|
583
|
+
# See [Polar Coordinates](rdoc-ref:Complex@Polar+Coordinates).
|
584
|
+
#
|
585
|
+
# If `self` was created with [rectangular
|
586
|
+
# coordinates](rdoc-ref:Complex@Rectangular+Coordinates), the returned value is
|
587
|
+
# computed, and may be inexact:
|
588
|
+
#
|
589
|
+
# Complex.rect(1, 1).polar # => [1.4142135623730951, 0.7853981633974483]
|
409
590
|
#
|
410
591
|
def polar: () -> [ Numeric, Float ]
|
411
592
|
|
@@ -413,69 +594,107 @@ class Complex < Numeric
|
|
413
594
|
|
414
595
|
# <!--
|
415
596
|
# rdoc-file=complex.c
|
416
|
-
# -
|
417
|
-
# - cmp.quo(numeric) -> complex
|
597
|
+
# - complex / numeric -> new_complex
|
418
598
|
# -->
|
419
|
-
#
|
599
|
+
# Returns the quotient of `self` and `numeric`:
|
420
600
|
#
|
421
|
-
# Complex(2, 3) / Complex(2, 3)
|
422
|
-
# Complex(900) / Complex(1)
|
423
|
-
# Complex(-2, 9) / Complex(-9, 2)
|
424
|
-
# Complex(9, 8) / 4
|
425
|
-
# Complex(20, 9) / 9.8
|
601
|
+
# Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
|
602
|
+
# Complex.rect(900) / Complex.rect(1) # => (900+0i)
|
603
|
+
# Complex.rect(-2, 9) / Complex.rect(-9, 2) # => ((36/85)-(77/85)*i)
|
604
|
+
# Complex.rect(9, 8) / 4 # => ((9/4)+2i)
|
605
|
+
# Complex.rect(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
|
426
606
|
#
|
427
607
|
def quo: (Numeric) -> Complex
|
428
608
|
|
429
609
|
# <!--
|
430
610
|
# rdoc-file=complex.c
|
431
|
-
# -
|
611
|
+
# - rationalize(epsilon = nil) -> rational
|
432
612
|
# -->
|
433
|
-
# Returns
|
434
|
-
#
|
613
|
+
# Returns a Rational object whose value is exactly or approximately equivalent
|
614
|
+
# to that of `self.real`.
|
615
|
+
#
|
616
|
+
# With no argument `epsilon` given, returns a Rational object whose value is
|
617
|
+
# exactly equal to that of `self.real.rationalize`:
|
618
|
+
#
|
619
|
+
# Complex.rect(1, 0).rationalize # => (1/1)
|
620
|
+
# Complex.rect(1, Rational(0, 1)).rationalize # => (1/1)
|
621
|
+
# Complex.rect(3.14159, 0).rationalize # => (314159/100000)
|
622
|
+
#
|
623
|
+
# With argument `epsilon` given, returns a Rational object whose value is
|
624
|
+
# exactly or approximately equal to that of `self.real` to the given precision:
|
435
625
|
#
|
436
|
-
# Complex(
|
437
|
-
# Complex(
|
438
|
-
# Complex(
|
626
|
+
# Complex.rect(3.14159, 0).rationalize(0.1) # => (16/5)
|
627
|
+
# Complex.rect(3.14159, 0).rationalize(0.01) # => (22/7)
|
628
|
+
# Complex.rect(3.14159, 0).rationalize(0.001) # => (201/64)
|
629
|
+
# Complex.rect(3.14159, 0).rationalize(0.0001) # => (333/106)
|
630
|
+
# Complex.rect(3.14159, 0).rationalize(0.00001) # => (355/113)
|
631
|
+
# Complex.rect(3.14159, 0).rationalize(0.000001) # => (7433/2366)
|
632
|
+
# Complex.rect(3.14159, 0).rationalize(0.0000001) # => (9208/2931)
|
633
|
+
# Complex.rect(3.14159, 0).rationalize(0.00000001) # => (47460/15107)
|
634
|
+
# Complex.rect(3.14159, 0).rationalize(0.000000001) # => (76149/24239)
|
635
|
+
# Complex.rect(3.14159, 0).rationalize(0.0000000001) # => (314159/100000)
|
636
|
+
# Complex.rect(3.14159, 0).rationalize(0.0) # => (3537115888337719/1125899906842624)
|
439
637
|
#
|
440
|
-
#
|
638
|
+
# Related: Complex#to_r.
|
441
639
|
#
|
442
640
|
def rationalize: (?Numeric eps) -> Rational
|
443
641
|
|
444
642
|
# <!--
|
445
643
|
# rdoc-file=complex.c
|
446
|
-
# -
|
644
|
+
# - real -> numeric
|
447
645
|
# -->
|
448
|
-
# Returns the real
|
646
|
+
# Returns the real value for `self`:
|
449
647
|
#
|
450
|
-
# Complex(7).real
|
451
|
-
# Complex(9, -4).real
|
648
|
+
# Complex.rect(7).real # => 7
|
649
|
+
# Complex.rect(9, -4).real # => 9
|
650
|
+
#
|
651
|
+
# If `self` was created with [polar
|
652
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
|
653
|
+
# computed, and may be inexact:
|
654
|
+
#
|
655
|
+
# Complex.polar(1, Math::PI/4).real # => 0.7071067811865476 # Square root of 2.
|
452
656
|
#
|
453
657
|
def real: () -> Numeric
|
454
658
|
|
455
659
|
# <!--
|
456
660
|
# rdoc-file=complex.c
|
457
|
-
# -
|
458
|
-
# - Complex(1, 2).real? -> false
|
661
|
+
# - real? -> false
|
459
662
|
# -->
|
460
|
-
# Returns false
|
663
|
+
# Returns `false`; for compatibility with Numeric#real?.
|
461
664
|
#
|
462
665
|
def real?: () -> false
|
463
666
|
|
464
667
|
# <!-- rdoc-file=complex.c -->
|
465
|
-
# Returns a
|
668
|
+
# Returns a new Complex object formed from the arguments, each of which must be
|
669
|
+
# an instance of Numeric, or an instance of one of its subclasses: Complex,
|
670
|
+
# Float, Integer, Rational; see [Rectangular
|
671
|
+
# Coordinates](rdoc-ref:Complex@Rectangular+Coordinates):
|
466
672
|
#
|
467
|
-
# Complex.
|
673
|
+
# Complex.rect(3) # => (3+0i)
|
674
|
+
# Complex.rect(3, Math::PI) # => (3+3.141592653589793i)
|
675
|
+
# Complex.rect(-3, -Math::PI) # => (-3-3.141592653589793i)
|
676
|
+
#
|
677
|
+
# Complex.rectangular is an alias for Complex.rect.
|
468
678
|
#
|
469
679
|
def rect: () -> [ Numeric, Numeric ]
|
470
680
|
|
471
681
|
# <!--
|
472
682
|
# rdoc-file=complex.c
|
473
|
-
# -
|
474
|
-
# - cmp.rectangular -> array
|
683
|
+
# - rect -> array
|
475
684
|
# -->
|
476
|
-
# Returns
|
685
|
+
# Returns the array `[self.real, self.imag]`:
|
686
|
+
#
|
687
|
+
# Complex.rect(1, 2).rect # => [1, 2]
|
477
688
|
#
|
478
|
-
#
|
689
|
+
# See [Rectangular Coordinates](rdoc-ref:Complex@Rectangular+Coordinates).
|
690
|
+
#
|
691
|
+
# If `self` was created with [polar
|
692
|
+
# coordinates](rdoc-ref:Complex@Polar+Coordinates), the returned value is
|
693
|
+
# computed, and may be inexact:
|
694
|
+
#
|
695
|
+
# Complex.polar(1.0, 1.0).rect # => [0.5403023058681398, 0.8414709848078965]
|
696
|
+
#
|
697
|
+
# Complex#rectangular is an alias for Complex#rect.
|
479
698
|
#
|
480
699
|
alias rectangular rect
|
481
700
|
|
@@ -487,38 +706,37 @@ class Complex < Numeric
|
|
487
706
|
|
488
707
|
# <!--
|
489
708
|
# rdoc-file=complex.c
|
490
|
-
# -
|
709
|
+
# - to_c -> self
|
491
710
|
# -->
|
492
|
-
# Returns self
|
493
|
-
#
|
494
|
-
# Complex(2).to_c #=> (2+0i)
|
495
|
-
# Complex(-8, 6).to_c #=> (-8+6i)
|
711
|
+
# Returns `self`.
|
496
712
|
#
|
497
713
|
def to_c: () -> Complex
|
498
714
|
|
499
715
|
# <!--
|
500
716
|
# rdoc-file=complex.c
|
501
|
-
# -
|
717
|
+
# - to_f -> float
|
502
718
|
# -->
|
503
|
-
# Returns the value as a
|
504
|
-
# zero).
|
719
|
+
# Returns the value of `self.real` as a Float, if possible:
|
505
720
|
#
|
506
|
-
# Complex(1, 0).to_f
|
507
|
-
# Complex(1, 0
|
508
|
-
#
|
721
|
+
# Complex.rect(1, 0).to_f # => 1.0
|
722
|
+
# Complex.rect(1, Rational(0, 1)).to_f # => 1.0
|
723
|
+
#
|
724
|
+
# Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
|
725
|
+
# `Rational(0, *n*)`).
|
509
726
|
#
|
510
727
|
def to_f: () -> Float
|
511
728
|
|
512
729
|
# <!--
|
513
730
|
# rdoc-file=complex.c
|
514
|
-
# -
|
731
|
+
# - to_i -> integer
|
515
732
|
# -->
|
516
|
-
# Returns the value as an
|
517
|
-
#
|
733
|
+
# Returns the value of `self.real` as an Integer, if possible:
|
734
|
+
#
|
735
|
+
# Complex.rect(1, 0).to_i # => 1
|
736
|
+
# Complex.rect(1, Rational(0, 1)).to_i # => 1
|
518
737
|
#
|
519
|
-
#
|
520
|
-
#
|
521
|
-
# Complex(1, 2).to_i # RangeError
|
738
|
+
# Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
|
739
|
+
# `Rational(0, *n*)`).
|
522
740
|
#
|
523
741
|
def to_i: () -> Integer
|
524
742
|
|
@@ -526,30 +744,32 @@ class Complex < Numeric
|
|
526
744
|
|
527
745
|
# <!--
|
528
746
|
# rdoc-file=complex.c
|
529
|
-
# -
|
747
|
+
# - to_r -> rational
|
530
748
|
# -->
|
531
|
-
# Returns the value as a
|
532
|
-
# exactly zero).
|
749
|
+
# Returns the value of `self.real` as a Rational, if possible:
|
533
750
|
#
|
534
|
-
# Complex(1, 0).to_r
|
535
|
-
# Complex(1, 0
|
536
|
-
# Complex(1,
|
751
|
+
# Complex.rect(1, 0).to_r # => (1/1)
|
752
|
+
# Complex.rect(1, Rational(0, 1)).to_r # => (1/1)
|
753
|
+
# Complex.rect(1, 0.0).to_r # => (1/1)
|
537
754
|
#
|
538
|
-
#
|
755
|
+
# Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
|
756
|
+
# `Rational(0, *n*)`) and `self.imag.to_r` is not exactly zero.
|
757
|
+
#
|
758
|
+
# Related: Complex#rationalize.
|
539
759
|
#
|
540
760
|
def to_r: () -> Rational
|
541
761
|
|
542
762
|
# <!--
|
543
763
|
# rdoc-file=complex.c
|
544
|
-
# -
|
764
|
+
# - to_s -> string
|
545
765
|
# -->
|
546
|
-
# Returns
|
766
|
+
# Returns a string representation of `self`:
|
547
767
|
#
|
548
|
-
# Complex(2).to_s
|
549
|
-
# Complex(
|
550
|
-
# Complex(
|
551
|
-
# Complex(0, Float::INFINITY).to_s
|
552
|
-
# Complex(Float::NAN, Float::NAN).to_s
|
768
|
+
# Complex.rect(2).to_s # => "2+0i"
|
769
|
+
# Complex.rect(-8, 6).to_s # => "-8+6i"
|
770
|
+
# Complex.rect(0, Rational(1, 2)).to_s # => "0+1/2i"
|
771
|
+
# Complex.rect(0, Float::INFINITY).to_s # => "0+Infinity*i"
|
772
|
+
# Complex.rect(Float::NAN, Float::NAN).to_s # => "NaN+NaN*i"
|
553
773
|
#
|
554
774
|
def to_s: () -> String
|
555
775
|
|
@@ -559,6 +779,8 @@ class Complex < Numeric
|
|
559
779
|
end
|
560
780
|
|
561
781
|
# <!-- rdoc-file=complex.c -->
|
562
|
-
#
|
782
|
+
# Equivalent to `Complex.rect(0, 1)`:
|
783
|
+
#
|
784
|
+
# Complex::I # => (0+1i)
|
563
785
|
#
|
564
786
|
Complex::I: Complex
|