1662473760
Chains multiple vectors. Only index translation is done and the constituent Vectors are not copied. This can be efficient in situations where avoiding allocation and copying of data is important. For example, during sequential file reading, ChainedVectors can be used to store file blocks progressively as the file is read. As it grows beyond a certain size, buffers from the head of the chain can be removed and resued to read further data at the tail.
julia> v1 = [1, 2, 3]
3-element Int64 Array:
1
2
3
julia> v2 = [4, 5, 6]
3-element Int64 Array:
4
5
6
julia> cv = ChainedVector{Int}(v1, v2)
6-element Int64 ChainedVector:
[1, 2, 3, 4, 5, ...]
julia> cv[1]
1
julia> cv[5]
5
ChainedVector{Uint8} has specialized methods for search, beginswith, and beginswithat that help in working with textual data.
julia> cv = ChainedVector{Uint8}(b"Hello World ", b"Goodbye World ")
26-element Uint8 ChainedVector:
[0x48, 0x65, 0x6c, 0x6c, 0x6f, ...]
julia> search(cv, 'W')
7
julia> search(cv, 'W', 8)
21
julia> search(cv, 'W', 22)
0
julia> beginswith(cv, b"Hello")
true
julia> beginswith(cv, b"ello")
false
julia> beginswithat(cv, 2, b"ello")
true
julia> beginswithat(cv, 7, b"World Goodbye")
true
Using the sub method, a portion of the data in the ChainedVector can be accessed as a view:
sub(cv::ChainedVector, r::Range1{Int})
Example:
julia> v1 = [1, 2, 3, 4, 5, 6];
julia> v2 = [7, 8, 9, 10, 11, 12];
julia> cv = ChainedVector{Int}(v1, v2);
julia> sv = sub(cv, 3:10)
8-element Int64 SubVector:
[3, 4, 5, 6, 7, ...]
julia> sv[1]
3
julia> # sv[7] is the same as cv[9] and v2[3]
julia> println("sv[7]=$(sv[7]), v2[3]=$(v2[3]), cv[9]=$(cv[9])")
sv[7]=9, v2[3]=9, cv[9]=9
julia>
julia> # changing values through sv will be visible at cv and v2
julia> sv[7] = 71
71
julia> println("sv[7]=$(sv[7]), v2[3]=$(v2[3]), cv[9]=$(cv[9])")
sv[7]=71, v2[3]=71, cv[9]=71
The sub method returns a Vector that indexes into the chained vector at the given range. The returned Vector is not a copy and any modifications affect the Chainedvector and consequently the constituent vectors of the ChainedVector as well. The returned vector can be an instance of either a SubVector or a Vector obtained through the method fast_sub_vec.
SubVector
Provides index translations for abstract vectors. Example:
julia> v1 = [1, 2, 3, 4, 5, 6];
julia> sv = SubVector(v1, 2:5)
4-element Int64 SubVector:
[2, 3, 4, 5, ]
julia> sv[1]
2
julia> sv[1] = 20
20
julia> v1[2]
20
fast_sub_vec
Provides an optimized way of creating a Vector that points within another Vector and uses the same underlying data. Since it reuses the same memory locations, it works only on concrete Vectors that give contiguous memory locations. Internally the instance of the view vector is maintained in a WeakKeyDict along with a reference to the larger vector to prevent gc from releasing the parent vector till the view is in use. Example:
julia> v1 = [1, 2, 3, 4, 5, 6];
julia> sv = fast_sub_vec(v1, 2:5)
4-element Int64 Array:
2
3
4
5
julia>
julia> println("sv[1]=$(sv[1]), v1[2]=$(v1[2])")
sv[1]=2, v1[2]=2
julia> sv[1] = 20
20
julia> println("sv[1]=$(sv[1]), v1[2]=$(v1[2])")
sv[1]=20, v1[2]=20
Below is the output of some benchmarks done using time_tests.jl located in the test folder.
Times for getindex across all elements of vectors of 33554432 integers.
Split into two 16777216 buffers for ChainedVectors.
Vector: 0.041909848
ChainedVector: 0.261795721
SubVector: 0.172702399
FastSubVector: 0.041579312
SubArray: 3.848813439
SubVector of ChainedVector: 0.418898455
Author: Tanmaykm
Source Code: https://github.com/tanmaykm/ChainedVectors.jl
License: MIT license
1662473760
Chains multiple vectors. Only index translation is done and the constituent Vectors are not copied. This can be efficient in situations where avoiding allocation and copying of data is important. For example, during sequential file reading, ChainedVectors can be used to store file blocks progressively as the file is read. As it grows beyond a certain size, buffers from the head of the chain can be removed and resued to read further data at the tail.
julia> v1 = [1, 2, 3]
3-element Int64 Array:
1
2
3
julia> v2 = [4, 5, 6]
3-element Int64 Array:
4
5
6
julia> cv = ChainedVector{Int}(v1, v2)
6-element Int64 ChainedVector:
[1, 2, 3, 4, 5, ...]
julia> cv[1]
1
julia> cv[5]
5
ChainedVector{Uint8} has specialized methods for search, beginswith, and beginswithat that help in working with textual data.
julia> cv = ChainedVector{Uint8}(b"Hello World ", b"Goodbye World ")
26-element Uint8 ChainedVector:
[0x48, 0x65, 0x6c, 0x6c, 0x6f, ...]
julia> search(cv, 'W')
7
julia> search(cv, 'W', 8)
21
julia> search(cv, 'W', 22)
0
julia> beginswith(cv, b"Hello")
true
julia> beginswith(cv, b"ello")
false
julia> beginswithat(cv, 2, b"ello")
true
julia> beginswithat(cv, 7, b"World Goodbye")
true
Using the sub method, a portion of the data in the ChainedVector can be accessed as a view:
sub(cv::ChainedVector, r::Range1{Int})
Example:
julia> v1 = [1, 2, 3, 4, 5, 6];
julia> v2 = [7, 8, 9, 10, 11, 12];
julia> cv = ChainedVector{Int}(v1, v2);
julia> sv = sub(cv, 3:10)
8-element Int64 SubVector:
[3, 4, 5, 6, 7, ...]
julia> sv[1]
3
julia> # sv[7] is the same as cv[9] and v2[3]
julia> println("sv[7]=$(sv[7]), v2[3]=$(v2[3]), cv[9]=$(cv[9])")
sv[7]=9, v2[3]=9, cv[9]=9
julia>
julia> # changing values through sv will be visible at cv and v2
julia> sv[7] = 71
71
julia> println("sv[7]=$(sv[7]), v2[3]=$(v2[3]), cv[9]=$(cv[9])")
sv[7]=71, v2[3]=71, cv[9]=71
The sub method returns a Vector that indexes into the chained vector at the given range. The returned Vector is not a copy and any modifications affect the Chainedvector and consequently the constituent vectors of the ChainedVector as well. The returned vector can be an instance of either a SubVector or a Vector obtained through the method fast_sub_vec.
SubVector
Provides index translations for abstract vectors. Example:
julia> v1 = [1, 2, 3, 4, 5, 6];
julia> sv = SubVector(v1, 2:5)
4-element Int64 SubVector:
[2, 3, 4, 5, ]
julia> sv[1]
2
julia> sv[1] = 20
20
julia> v1[2]
20
fast_sub_vec
Provides an optimized way of creating a Vector that points within another Vector and uses the same underlying data. Since it reuses the same memory locations, it works only on concrete Vectors that give contiguous memory locations. Internally the instance of the view vector is maintained in a WeakKeyDict along with a reference to the larger vector to prevent gc from releasing the parent vector till the view is in use. Example:
julia> v1 = [1, 2, 3, 4, 5, 6];
julia> sv = fast_sub_vec(v1, 2:5)
4-element Int64 Array:
2
3
4
5
julia>
julia> println("sv[1]=$(sv[1]), v1[2]=$(v1[2])")
sv[1]=2, v1[2]=2
julia> sv[1] = 20
20
julia> println("sv[1]=$(sv[1]), v1[2]=$(v1[2])")
sv[1]=20, v1[2]=20
Below is the output of some benchmarks done using time_tests.jl located in the test folder.
Times for getindex across all elements of vectors of 33554432 integers.
Split into two 16777216 buffers for ChainedVectors.
Vector: 0.041909848
ChainedVector: 0.261795721
SubVector: 0.172702399
FastSubVector: 0.041579312
SubArray: 3.848813439
SubVector of ChainedVector: 0.418898455
Author: Tanmaykm
Source Code: https://github.com/tanmaykm/ChainedVectors.jl
License: MIT license
1661989320
Manage large vectors of bits types in Julia. A thin wrapper for mmapped binary data, with a few sanity checks and convenience functions.
For each dataset, the columns (vectors of equal length) and metadata are stored in a directory like this:
dir/
├── layout.jld2
├── meta/
│ └ ...
├── 1.bin
├── 2.bin
├── ...
├── ...
└── ...
The file layout.jld2
specifies the number and types of columns (using JLD2.jl, and the total number of elements. The $i.bin
files contain the data for each column, which can be memory mapped.
Additional metadata can be saved as in files in the directory meta
. This is ignored by this library; use the function meta_path
to calculate paths relative to dir/meta
.
Two interfaces are provided. Use SinkColumns
for an ex ante unknown number of elements, written sequentially. This is useful for ingesting data.
MmappedColumns
is useful when the number of records is known and fixed.
Types for the columns are specified as Tuple
s. See the docstrings for both interfaces and the unit tests for examples.
Acknowledgments
Work on this library was supported by the Austrian National Bank Jubiläumsfonds grant 17378.
Author: tpapp
Source Code: https://github.com/tpapp/LargeColumns.jl
License: View license
1668077768
Collection of utility types, complementing TypeScript built-in mapped types and aliases (think "lodash" for static types).
Found it useful? Want more updates?
🎉 Now updated to support TypeScript v3.7 🎉
TypeScript
.dts-jest
# NPM
npm install utility-types
# YARN
yarn add utility-types
TypeScript support
v3.x.x
- TypeScript v3.1+v2.x.x
- TypeScript v2.8.1+v1.x.x
- TypeScript v2.7.2+Utility-Types is an open-source project created by people investing their time for the benefit of our community.
Issues like bug fixes or feature requests can be very quickly resolved when funded through the IssueHunt platform.
I highly recommend adding a bounty to the issue that you're waiting for to attract some contributors willing to work on it.
We are open for contributions. If you're planning to contribute please make sure to read the contributing guide as it can save you from wasting your time: CONTRIBUTING.md
Table of Contents
SetIntersection<A, B>
SetDifference<A, B>
SetComplement<A, A1>
SymmetricDifference<A, B>
Exclude<A, B>
(built-in)Extract<A, B>
(built-in)NonNullable<T>
(built-in)NonUndefined<T>
FunctionKeys<T>
NonFunctionKeys<T>
MutableKeys<T>
ReadonlyKeys<T>
RequiredKeys<T>
OptionalKeys<T>
Optional<T, K>
Partial<T>
(built-in)DeepPartial<T>
Required<T, K>
DeepRequired<T>
Readonly<T>
(built-in)DeepReadonly<T>
Mutable<T>
Pick<T, K>
(built-in)Omit<T, K>
(built-in)PickByValue<T, ValueType>
PickByValueExact<T, ValueType>
OmitByValue<T, ValueType>
OmitByValueExact<T, ValueType>
Intersection<T, U>
Diff<T, U>
Subtract<T, T1>
Overwrite<T, U>
Assign<T, U>
ValuesType<T>
ReturnType<T>
(built-in)InstanceType<T>
(built-in)PromiseType<T>
Unionize<T>
Brand<T, U>
UnionToIntersection<U>
$Keys<T>
$Values<T>
$ReadOnly<T>
$Diff<T, U>
$PropertyType<T, K>
$ElementType<T, K>
$Call<T>
$Shape<T>
$NonMaybeType<T>
Class<T>
mixed
getReturnOfExpression()
- from TS v2.0 it's better to use type-level ReturnType
insteadPrimitive
Type representing primitive types in JavaScript, and thus TypeScript: string | number | bigint | boolean | symbol | null | undefined
You can test for singular of these types with typeof
isPrimitive
This is a TypeScript Typeguard for the Primitive
type.
This can be useful to control the type of a parameter as the program flows. Example:
const consumer = (param: Primitive[] | Primitive): string => {
if (isPrimitive(param)) {
// typeof param === Primitive
return String(param) + ' was Primitive';
}
// typeof param === Primitive[]
const resultArray = param
.map(consumer)
.map(rootString => '\n\t' + rootString);
return resultArray.reduce((comm, newV) => comm + newV, 'this was nested:');
};
Falsy
Type representing falsy values in TypeScript: false | "" | 0 | null | undefined
Except
NaN
which cannot be represented as a type literal
isFalsy
const consumer = (param: Falsy | string): string => {
if (isFalsy(param)) {
// typeof param === Falsy
return String(param) + ' was Falsy';
}
// typeof param === string
return param.toString();
};
Nullish
Type representing nullish values in TypeScript: null | undefined
isNullish
const consumer = (param: Nullish | string): string => {
if (isNullish(param)) {
// typeof param === Nullish
return String(param) + ' was Nullish';
}
// typeof param === string
return param.toString();
};
SetIntersection<A, B>
(same as Extract)Set intersection of given union types A
and B
Usage:
import { SetIntersection } from 'utility-types';
// Expect: "2" | "3"
type ResultSet = SetIntersection<'1' | '2' | '3', '2' | '3' | '4'>;
// Expect: () => void
type ResultSetMixed = SetIntersection<string | number | (() => void), Function>;
SetDifference<A, B>
(same as Exclude)Set difference of given union types A
and B
Usage:
import { SetDifference } from 'utility-types';
// Expect: "1"
type ResultSet = SetDifference<'1' | '2' | '3', '2' | '3' | '4'>;
// Expect: string | number
type ResultSetMixed = SetDifference<string | number | (() => void), Function>;
SetComplement<A, A1>
Set complement of given union types A
and (it's subset) A1
Usage:
import { SetComplement } from 'utility-types';
// Expect: "1"
type ResultSet = SetComplement<'1' | '2' | '3', '2' | '3'>;
SymmetricDifference<A, B>
Set difference of union and intersection of given union types A
and B
Usage:
import { SymmetricDifference } from 'utility-types';
// Expect: "1" | "4"
type ResultSet = SymmetricDifference<'1' | '2' | '3', '2' | '3' | '4'>;
NonNullable<A>
Exclude null
and undefined
from set A
NonUndefined<A>
Exclude undefined
from set A
Exclude<A, B>
Exclude subset B
from set A
Extract<A, B>
Extract subset B
from set A
FunctionKeys<T>
Get union type of keys that are functions in object type T
Usage:
import { FunctionKeys } from 'utility-types';
type MixedProps = { name: string; setName: (name: string) => void };
// Expect: "setName"
type Keys = FunctionKeys<MixedProps>;
NonFunctionKeys<T>
Get union type of keys that are non-functions in object type T
Usage:
import { NonFunctionKeys } from 'utility-types';
type MixedProps = { name: string; setName: (name: string) => void };
// Expect: "name"
type Keys = NonFunctionKeys<MixedProps>;
MutableKeys<T>
Get union type of keys that are mutable (not readonly) in object type T
Alias: WritableKeys<T>
Usage:
import { MutableKeys } from 'utility-types';
type Props = { readonly foo: string; bar: number };
// Expect: "bar"
type Keys = MutableKeys<Props>;
ReadonlyKeys<T>
Get union type of keys that are readonly in object type T
Usage:
import { ReadonlyKeys } from 'utility-types';
type Props = { readonly foo: string; bar: number };
// Expect: "foo"
type Keys = ReadonlyKeys<Props>;
RequiredKeys<T>
Get union type of keys that are required in object type T
Usage:
import { RequiredKeys } from 'utility-types';
type Props = { req: number; reqUndef: number | undefined; opt?: string; optUndef?: number | undefined; };
// Expect: "req" | "reqUndef"
type Keys = RequiredKeys<Props>;
OptionalKeys<T>
Get union type of keys that are optional in object type T
Usage:
import { OptionalKeys } from 'utility-types';
type Props = { req: number; reqUndef: number | undefined; opt?: string; optUndef?: number | undefined; };
// Expect: "opt" | "optUndef"
type Keys = OptionalKeys<Props>;
Optional<T, K>
From T
make a set of properties by key K
become optional
Usage:
import { Optional } from 'utility-types';
type Props = { name: string; age: number; visible: boolean; };
// Expect: { name?: string; age?: number; visible?: boolean; }
type Props = Optional<Props>
// Expect: { name: string; age?: number; visible?: boolean; }
type Props = Optional<Props, 'age' | 'visible'>;
Pick<T, K>
(built-in)From T
pick a set of properties by key K
Usage:
type Props = { name: string; age: number; visible: boolean };
// Expect: { age: number; }
type Props = Pick<Props, 'age'>;
PickByValue<T, ValueType>
From T
pick a set of properties by value matching ValueType
. (Credit: Piotr Lewandowski)
Usage:
import { PickByValue } from 'utility-types';
type Props = { req: number; reqUndef: number | undefined; opt?: string; };
// Expect: { req: number }
type Props = PickByValue<Props, number>;
// Expect: { req: number; reqUndef: number | undefined; }
type Props = PickByValue<Props, number | undefined>;
PickByValueExact<T, ValueType>
From T
pick a set of properties by value matching exact ValueType
.
Usage:
import { PickByValueExact } from 'utility-types';
type Props = { req: number; reqUndef: number | undefined; opt?: string; };
// Expect: { req: number }
type Props = PickByValueExact<Props, number>;
// Expect: { reqUndef: number | undefined; }
type Props = PickByValueExact<Props, number | undefined>;
Omit<T, K>
From T
remove a set of properties by key K
Usage:
import { Omit } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: { name: string; visible: boolean; }
type Props = Omit<Props, 'age'>;
OmitByValue<T, ValueType>
From T
remove a set of properties by value matching ValueType
. (Credit: Piotr Lewandowski)
Usage:
import { OmitByValue } from 'utility-types';
type Props = { req: number; reqUndef: number | undefined; opt?: string; };
// Expect: { reqUndef: number | undefined; opt?: string; }
type Props = OmitByValue<Props, number>;
// Expect: { opt?: string; }
type Props = OmitByValue<Props, number | undefined>;
OmitByValueExact<T, ValueType>
From T
remove a set of properties by value matching exact ValueType
.
Usage:
import { OmitByValueExact } from 'utility-types';
type Props = { req: number; reqUndef: number | undefined; opt?: string; };
// Expect: { reqUndef: number | undefined; opt?: string; }
type Props = OmitByValueExact<Props, number>;
// Expect: { req: number; opt?: string }
type Props = OmitByValueExact<Props, number | undefined>;
Intersection<T, U>
From T
pick properties that exist in U
Usage:
import { Intersection } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
type DefaultProps = { age: number };
// Expect: { age: number; }
type DuplicatedProps = Intersection<Props, DefaultProps>;
Diff<T, U>
From T
remove properties that exist in U
Usage:
import { Diff } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
type DefaultProps = { age: number };
// Expect: { name: string; visible: boolean; }
type RequiredProps = Diff<Props, DefaultProps>;
Subtract<T, T1>
From T
remove properties that exist in T1
(T1
has a subset of the properties of T
)
Usage:
import { Subtract } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
type DefaultProps = { age: number };
// Expect: { name: string; visible: boolean; }
type RequiredProps = Subtract<Props, DefaultProps>;
Overwrite<T, U>
From U
overwrite properties to T
Usage:
import { Overwrite } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
type NewProps = { age: string; other: string };
// Expect: { name: string; age: string; visible: boolean; }
type ReplacedProps = Overwrite<Props, NewProps>;
Assign<T, U>
From U
assign properties to T
(just like object assign)
Usage:
import { Assign } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
type NewProps = { age: string; other: string };
// Expect: { name: string; age: string; visible: boolean; other: string; }
type ExtendedProps = Assign<Props, NewProps>;
ValuesType<T>
Get the union type of all the values in an object, tuple, array or array-like type T
.
Usage:
import { ValuesType } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: string | number | boolean
type PropsValues = ValuesType<Props>;
type NumberArray = number[];
// Expect: number
type NumberItems = ValuesType<NumberArray>;
type ReadonlyNumberTuple = readonly [1, 2];
// Expect: 1 | 2
type AnotherNumberUnion = ValuesType<NumberTuple>;
type BinaryArray = Uint8Array;
// Expect: number
type BinaryItems = ValuesType<BinaryArray>;
Partial<T>
Make all properties of object type optional
Required<T, K>
From T
make a set of properties by key K
become required
Usage:
import { Required } from 'utility-types';
type Props = { name?: string; age?: number; visible?: boolean; };
// Expect: { name: string; age: number; visible: boolean; }
type Props = Required<Props>
// Expect: { name?: string; age: number; visible: boolean; }
type Props = Required<Props, 'age' | 'visible'>;
Readonly<T>
Make all properties of object type readonly
Mutable<T>
From T
make all properties become mutable
Alias: Writable<T>
import { Mutable } from 'utility-types';
type Props = {
readonly name: string;
readonly age: number;
readonly visible: boolean;
};
// Expect: { name: string; age: number; visible: boolean; }
Mutable<Props>;
ReturnType<T>
Obtain the return type of a function
InstanceType<T>
Obtain the instance type of a class
Unionize<T>
Disjoin object to form union of objects, each with single property
Usage:
import { Unionize } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: { name: string; } | { age: number; } | { visible: boolean; }
type UnionizedType = Unionize<Props>;
PromiseType<T>
Obtain Promise resolve type
Usage:
import { PromiseType } from 'utility-types';
// Expect: string
type Response = PromiseType<Promise<string>>;
DeepReadonly<T>
Readonly that works for deeply nested structures
Usage:
import { DeepReadonly } from 'utility-types';
type NestedProps = {
first: {
second: {
name: string;
};
};
};
// Expect: {
// readonly first: {
// readonly second: {
// readonly name: string;
// };
// };
// }
type ReadonlyNestedProps = DeepReadonly<NestedProps>;
DeepRequired<T>
Required that works for deeply nested structures
Usage:
import { DeepRequired } from 'utility-types';
type NestedProps = {
first?: {
second?: {
name?: string;
};
};
};
// Expect: {
// first: {
// second: {
// name: string;
// };
// };
// }
type RequiredNestedProps = DeepRequired<NestedProps>;
DeepNonNullable<T>
NonNullable that works for deeply nested structure
Usage:
import { DeepNonNullable } from 'utility-types';
type NestedProps = {
first?: null | {
second?: null | {
name?: string | null | undefined;
};
};
};
// Expect: {
// first: {
// second: {
// name: string;
// };
// };
// }
type RequiredNestedProps = DeepNonNullable<NestedProps>;
DeepPartial<T>
Partial that works for deeply nested structures
Usage:
import { DeepPartial } from 'utility-types';
type NestedProps = {
first: {
second: {
name: string;
};
};
};
// Expect: {
// first?: {
// second?: {
// name?: string;
// };
// };
// }
type PartialNestedProps = DeepPartial<NestedProps>;
Brand<T, U>
Define nominal type of U
based on type of T
. Similar to Opaque types in Flow.
Usage:
import { Brand } from 'utility-types';
type USD = Brand<number, "USD">
type EUR = Brand<number, "EUR">
const tax = 5 as USD;
const usd = 10 as USD;
const eur = 10 as EUR;
function gross(net: USD): USD {
return (net + tax) as USD;
}
gross(usd); // ok
gross(eur); // Type '"EUR"' is not assignable to type '"USD"'.
UnionToIntersection<U>
Get intersection type given union type U
Usage:
import { UnionToIntersection } from 'utility-types';
// Expect: { name: string } & { age: number } & { visible: boolean }
UnionToIntersection<{ name: string } | { age: number } | { visible: boolean }>
$Keys<T>
get the union type of all the keys in an object type T
https://flow.org/en/docs/types/utilities/#toc-keys
Usage:
import { $Keys } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: "name" | "age" | "visible"
type PropsKeys = $Keys<Props>;
$Values<T>
get the union type of all the values in an object type T
https://flow.org/en/docs/types/utilities/#toc-values
Usage:
import { $Values } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: string | number | boolean
type PropsValues = $Values<Props>;
$ReadOnly<T>
get the read-only version of a given object type T
https://flow.org/en/docs/types/utilities/#toc-readonly
Usage:
import { $ReadOnly } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: Readonly<{ name: string; age: number; visible: boolean; }>
type ReadOnlyProps = $ReadOnly<Props>;
$Diff<T, U>
get the set difference of a given object types T
and U
(T \ U
)
https://flow.org/en/docs/types/utilities/#toc-diff
Usage:
import { $Diff } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
type DefaultProps = { age: number };
// Expect: { name: string; visible: boolean; }
type RequiredProps = $Diff<Props, DefaultProps>;
$PropertyType<T, K>
get the type of property of an object at a given key K
https://flow.org/en/docs/types/utilities/#toc-propertytype
Usage:
import { $PropertyType } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: string
type NameType = $PropertyType<Props, 'name'>;
type Tuple = [boolean, number];
// Expect: boolean
type A = $PropertyType<Tuple, '0'>;
// Expect: number
type B = $PropertyType<Tuple, '1'>;
$ElementType<T, K>
get the type of elements inside of array, tuple or object of type T
, that matches the given index type K
https://flow.org/en/docs/types/utilities/#toc-elementtype
Usage:
import { $ElementType } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: string
type NameType = $ElementType<Props, 'name'>;
type Tuple = [boolean, number];
// Expect: boolean
type A = $ElementType<Tuple, 0>;
// Expect: number
type B = $ElementType<Tuple, 1>;
type Arr = boolean[];
// Expect: boolean
type ItemsType = $ElementType<Arr, number>;
type Obj = { [key: string]: number };
// Expect: number
type ValuesType = $ElementType<Obj, string>;
$Call<T>
get the return type of a given expression type
https://flow.org/en/docs/types/utilities/#toc-call
The built-in ReturnType
can be used to accomplish the same goal, although it may have some subtle differences.
Usage:
import { $Call } from 'utility-types';
// Common use-case
const add = (amount: number) => ({ type: 'ADD' as 'ADD', payload: amount });
type AddAction = $Call<typeof add>; // { type: 'ADD'; payload: number }
// Examples migrated from Flow docs
type ExtractPropType<T extends { prop: any }> = (arg: T) => T['prop'];
type Obj = { prop: number };
type PropType = $Call<ExtractPropType<Obj>>; // number
// type Nope = $Call<ExtractPropType<{ nope: number }>>; // Error: argument doesn't match `Obj`.
type ExtractReturnType<T extends () => any> = (arg: T) => ReturnType<T>;
type Fn = () => number;
type FnReturnType = $Call<ExtractReturnType<Fn>>; // number
$Shape<T>
Copies the shape of the type supplied, but marks every field optional.
https://flow.org/en/docs/types/utilities/#toc-shape
Usage:
import { $Shape } from 'utility-types';
type Props = { name: string; age: number; visible: boolean };
// Expect: Partial<Props>
type PartialProps = $Shape<Props>;
$NonMaybeType<T>
Converts a type T
to a non-maybe type. In other words, the values of $NonMaybeType<T>
are the values of T
except for null
and undefined
.
https://flow.org/en/docs/types/utilities/#toc-nonmaybe
Usage:
import { $NonMaybeType } from 'utility-types';
type MaybeName = string | null;
// Expect: string
type Name = $NonMaybeType<MaybeName>;
Class<T>
Given a type T representing instances of a class C, the type Class is the type of the class C
https://flow.org/en/docs/types/utilities/#toc-class * Differs from original Flow's util - implements only constructor part and won't include any static members. Additionally classes in Typescript are not treated as nominal
Usage:
import { Class } from 'utility-types';
function makeStore(storeClass: Class<Store>): Store {
return new storeClass();
}
An arbitrary type that could be anything (same as unknown
)
https://flow.org/en/docs/types/mixed
ts-toolbelt
- Higher type safety for TypeScript$mol_type
- Collection of TypeScript meta types for complex logicAuthor: piotrwitek
Source Code: https://github.com/piotrwitek/utility-types
License: MIT license
1667567940
Object and type viewer for Julia
Eyeball exports one main tool to browse Julia objects and types.
eye(object)
eye(object, depth)
eye(object = Main, depth = 10; interactive = true, all = false)
depth
controls the depth of folding. all
expands options.
The user can interactively browse the object tree using the following keys:
↑
↓
←
→
-- Up and down moves through the tree. Left collapses a tree. Right expands a folded tree. Vim movement keys (h
j
k
l
) are also supported.d
-- Docs. Show documentation on the object.e
-- Expand. Show more subobjects. The number of objects is doubled each time.f
-- Toggle fields. By default, parameters are shown for most objects. f
toggles between the normal view and a view showing the fields of an object.m
-- Methodswith. Show methods available for objects of this type. M
specifies supertypes = true
.o
-- Open. Open the object in a new tree view. O
opens all (mainly useful for modules).r
-- Return tree (a FoldingTrees.Node
).s
-- Show object.S
-- Sort. Open the sorted object in a new view.t
-- Typeof. Show the type of the object in a new tree view.z
-- Summarize. Toggle a summary of the object and child objects. For arrays, this shows the mean and 0, 25, 50, 75, and 100% quantiles (skipping missings).0
-9
-- Fold to depth. Also toggles expansion of items normally left folded.enter
-- Return the selected object.q
-- Quit.Notes:
e
to expand.o
to open these in a new tree view.O
and all = true
adds a wrapper Eyeball.All
around the object. This is mainly for use with modules where options are taken with name(module, all = true)
.z
shows a summary of child objects. That's useful for DataFrames, nested arrays, and similar types.a = (h=rand(5), e=:(5sin(pi*t)), f=sin, c=33im, set=Set((:a, 9, rand(1:5, 8))), b=(c=1,d=9,e=(i=9,f=0)), x=9 => 99:109, d=Dict(1=>2, 3=>4), ds=Dict(:s=>4,:t=>7), dm=Dict(1=>9, "x"=>8))
eye(a)
julia> eye(a)
[f] fields [d] docs [e] expand [m/M] methodswith [o] open [r] tree [s] show [t] typeof [z] summarize [q] quit
> : NamedTuple{(:h, :e, :f, :c, :set, :b, :x, :d, :ds, :dm), Tuple{Vector{Float64}, Expr, typeof(sin), Complex{Int64} + h: Vector{Float64} (5,) 40 [0.589398, 0.761107, 0.963494, 0.835393, 0.488657]
e: Expr :(5 * sin(pi * t))
head: Symbol :call
args: Vector{Any} (3,) 24 Any[:*, 5, :(sin(pi * t))]
1: Symbol :*
2: Int64 5
3: Expr :(sin(pi * t))
head: Symbol :call
args: Vector{Any} (2,) 16 Any[:sin, :(pi * t)]
1: Symbol :sin
2: Expr :(pi * t)
head: Symbol :call
args: Vector{Any} (3,) 24 Any[:*, :pi, :t]
1: Symbol :*
2: Symbol :pi
3: Symbol :t
f: typeof(sin) sin
+ c: Complex{Int64} 0+33im
set: Set{Any} Set(Any[:a, 9, [2, 3, 2, 5, 5, 1, 4, 5]])
: Symbol :a
: Int64 9
+ : Vector{Int64} (8,) 64 [2, 3, 2, 5, 5, 1, 4, 5]
b: NamedTuple{(:c, :d, :e), Tuple{Int64, Int64, NamedTuple{(:i, :f), Tuple{Int64, Int64}}}} (c = 1, d = 9, e = (i c: Int64 1
d: Int64 9
e: NamedTuple{(:i, :f), Tuple{Int64, Int64}} (i = 9, f = 0)
i: Int64 9
f: Int64 0
+ x: Pair{Int64, UnitRange{Int64}} 9=>99:109
d: Dict{Int64, Int64} Dict(3=>4, 1=>2)
3: Int64 4
1: Int64 2
ds: Dict{Symbol, Int64} Dict(:s=>4, :t=>7)
s: Int64 4
v t: Int64 7
eye() # equivalent to `eye(Main)`
Expand results
julia> eye()
[f] fields [d] docs [e] expand [m/M] methodswith [o] open [r] tree [s] show [t] typeof [z] summarize [q] quit
> : Module Main
Base: Module Base
Core: Module Core
InteractiveUtils: Module InteractiveUtils
Main: Module Main
a: NamedTuple{(:h, :e, :f, :c, :set, :b, :x, :d, :ds, :dm), Tuple{Vector{Float64}, Expr, typeof(sin), Complex{Int6 + h: Vector{Float64} (5,) 40 [0.589398, 0.761107, 0.963494, 0.835393, 0.488657]
e: Expr :(5 * sin(pi * t))
head: Symbol :call
args: Vector{Any} (3,) 24 Any[:*, 5, :(sin(pi * t))]
1: Symbol :*
2: Int64 5
3: Expr :(sin(pi * t))
head: Symbol :call
args: Vector{Any} (2,) 16 Any[:sin, :(pi * t)]
1: Symbol :sin
2: Expr :(pi * t)
head: Symbol :call
args: Vector{Any} (3,) 24 Any[:*, :pi, :t]
1: Symbol :*
2: Symbol :pi
3: Symbol :t
f: typeof(sin) sin
+ c: Complex{Int64} 0+33im
set: Set{Any} Set(Any[:a, 9, [2, 3, 2, 5, 5, 1, 4, 5]])
: Symbol :a
: Int64 9
+ : Vector{Int64} (8,) 64 [2, 3, 2, 5, 5, 1, 4, 5]
b: NamedTuple{(:c, :d, :e), Tuple{Int64, Int64, NamedTuple{(:i, :f), Tuple{Int64, Int64}}}} (c = 1, d = 9, e = ( c: Int64 1
d: Int64 9
e: NamedTuple{(:i, :f), Tuple{Int64, Int64}} (i = 9, f = 0)
i: Int64 9
f: Int64 0
+ x: Pair{Int64, UnitRange{Int64}} 9=>99:109
v d: Dict{Int64, Int64} Dict(3=>4, 1=>2)
eye(Number)
Expand results
julia> eye(Number)
[f] fields [d] docs [e] expand [m/M] methodswith [o] open [r] tree [s] show [t] typeof [z] summarize [q] quit
> : DataType Number
+ : UnionAll Complex
: DataType Real
: DataType AbstractFloat
+ : DataType BigFloat
: DataType Float16
: DataType Float32
: DataType Float64
: DataType AbstractIrrational
+ : UnionAll Irrational
: DataType Integer
: DataType Bool
: DataType Signed
+ : DataType BigInt
: DataType Int128
: DataType Int16
: DataType Int32
: DataType Int64
: DataType Int8
: DataType Unsigned
: DataType UInt128
: DataType UInt16
: DataType UInt32
: DataType UInt64
: DataType UInt8
+ : UnionAll Rational
With the keyword argument interactive
set to false
, eye
returns the tree as a FoldingTrees.Node
. That is automatically displayed via show
or by using FoldingTrees.print_tree
.
eye(Number, interactive = false)
Expand results
julia> eye(Number, interactive = false)
DataType
├─ + : UnionAll Complex
└─ : DataType Real
├─ : DataType AbstractFloat
│ ├─ + : DataType BigFloat
│ ├─ : DataType Float16
│ ├─ : DataType Float32
│ └─ : DataType Float64
├─ : DataType AbstractIrrational
│ └─ + : UnionAll Irrational
├─ : DataType Integer
│ ├─ : DataType Bool
│ ├─ : DataType Signed
│ │ ├─ + : DataType BigInt
│ │ ├─ : DataType Int128
│ │ ├─ : DataType Int16
│ │ ├─ : DataType Int32
│ │ ├─ : DataType Int64
│ │ └─ : DataType Int8
│ └─ : DataType Unsigned
│ ├─ : DataType UInt128
│ ├─ : DataType UInt16
│ ├─ : DataType UInt32
│ ├─ : DataType UInt64
│ └─ : DataType UInt8
└─ + : UnionAll Rational
Show a summary of arrays in a named tuple (also useful for DataFrames).
d = (a = rand(100), b = rand(100:200, 100), c = 4rand(Float32, 100))
eye(d) # then hit `z` to summarize
Expand results
julia> eye(d)
[f] fields [d] docs [e] expand [m/M] methodswith [o] open [r] tree [s] show [t] typeof [z] summarize [q] quit
> : NamedTuple{(:a, :b, :c), Tuple{Vector{Float64}, Vector{Int64}, Vector{Float32}}} (a = [0.721857, 0.174408, 0.897
> + a: Vector{Float64} (100,) 800 x̄=0.535717, q=[0.0372074, 0.305533, 0.556568, 0.770658, 0.979569]
> + b: Vector{Int64} (100,) 800 x̄=145.5, q=[100.0, 117.0, 145.5, 170.0, 200.0]
> + c: Vector{Float32} (100,) 400 x̄=1.90419, q=[0.0898504, 1.09705, 1.9039, 2.68442, 3.93898]
By default, eye
shows the properties of an object. That can be customized for different objects. For example, Dict
s are shown with the key then the value, and abstract types are shown with subtypes. To customize what's shown for SomeType
, define Eyeball.getobjects(x::SomeType)
. This method should return an iterator that returns a key and a value describing each of the child objects to be shown.
The display of objects can also be customized with the following boolean methods:
Eyeball.shouldrecurse(x)
Eyeball.foldobject(x)
shouldrecurse
controls whether eye
recurses into object x
. This defaults to true
. For overly large or complex objects, it helps to return false
. That's done internally for Module
s, Method
s, and a few other types. foldobject
controls whether eye
automatically folds the object. This is useful for types where the components usually don't need to be shown. This defaults to false
.
To add additional "summarize" options, define Base.show(io::IO, x::Eyeball.Summarize{T})
for type T
.
Eyeball
uses FoldingTrees for display of trees and interactivity. This fork was extended to support customized key presses. TerminalPager is used for paging.
The code was adapted from InteractiveErrors.jl and Cthulhu.jl.
Author: tshort
Source Code: https://github.com/tshort/Eyeball.jl
License: View license
1593156510
At the end of 2019, Python is one of the fastest-growing programming languages. More than 10% of developers have opted for Python development.
In the programming world, Data types play an important role. Each Variable is stored in different data types and responsible for various functions. Python had two different objects, and They are mutable and immutable objects.
Table of Contents hide
III Built-in data types in Python
The Size and declared value and its sequence of the object can able to be modified called mutable objects.
Mutable Data Types are list, dict, set, byte array
The Size and declared value and its sequence of the object can able to be modified.
Immutable data types are int, float, complex, String, tuples, bytes, and frozen sets.
id() and type() is used to know the Identity and data type of the object
a**=25+**85j
type**(a)**
output**:<class’complex’>**
b**={1:10,2:“Pinky”****}**
id**(b)**
output**:**238989244168
a**=str(“Hello python world”)****#str**
b**=int(18)****#int**
c**=float(20482.5)****#float**
d**=complex(5+85j)****#complex**
e**=list((“python”,“fast”,“growing”,“in”,2018))****#list**
f**=tuple((“python”,“easy”,“learning”))****#tuple**
g**=range(10)****#range**
h**=dict(name=“Vidu”,age=36)****#dict**
i**=set((“python”,“fast”,“growing”,“in”,2018))****#set**
j**=frozenset((“python”,“fast”,“growing”,“in”,2018))****#frozenset**
k**=bool(18)****#bool**
l**=bytes(8)****#bytes**
m**=bytearray(8)****#bytearray**
n**=memoryview(bytes(18))****#memoryview**
Numbers are stored in numeric Types. when a number is assigned to a variable, Python creates Number objects.
#signed interger
age**=**18
print**(age)**
Output**:**18
Python supports 3 types of numeric data.
int (signed integers like 20, 2, 225, etc.)
float (float is used to store floating-point numbers like 9.8, 3.1444, 89.52, etc.)
complex (complex numbers like 8.94j, 4.0 + 7.3j, etc.)
A complex number contains an ordered pair, i.e., a + ib where a and b denote the real and imaginary parts respectively).
The string can be represented as the sequence of characters in the quotation marks. In python, to define strings we can use single, double, or triple quotes.
# String Handling
‘Hello Python’
#single (') Quoted String
“Hello Python”
# Double (") Quoted String
“”“Hello Python”“”
‘’‘Hello Python’‘’
# triple (‘’') (“”") Quoted String
In python, string handling is a straightforward task, and python provides various built-in functions and operators for representing strings.
The operator “+” is used to concatenate strings and “*” is used to repeat the string.
“Hello”+“python”
output**:****‘Hello python’**
"python "*****2
'Output : Python python ’
#python web development #data types in python #list of all python data types #python data types #python datatypes #python types #python variable type