juliamath / gsl.jl Goto Github PK
View Code? Open in Web Editor NEWJulia interface to the GNU Scientific Library (GSL)
License: Other
Julia interface to the GNU Scientific Library (GSL)
License: Other
I cannot add GSL under Windows7 64 bits.
This is the message I get after wiping out the .julia directory.
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.8 (2015-04-30 23:40 UTC)
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release
|__/ | x86_64-w64-mingw32
julia> Pkg.init()
INFO: Initializing package repository H:\.julia\v0.3
INFO: Cloning METADATA from git://github.com/JuliaLang/METADATA.jl
julia> Pkg.add("GSL")
INFO: Cloning cache of BinDeps from git://github.com/JuliaLang/BinDeps.jl.git
INFO: Cloning cache of Compat from git://github.com/JuliaLang/Compat.jl.git
INFO: Cloning cache of GSL from git://github.com/jiahao/GSL.jl.git
INFO: Cloning cache of SHA from git://github.com/staticfloat/SHA.jl.git
INFO: Cloning cache of URIParser from git://github.com/JuliaWeb/URIParser.jl.git
INFO: Installing BinDeps v0.3.12
INFO: Installing Compat v0.4.4
INFO: Installing GSL v0.1.2
INFO: Installing SHA v0.0.4
INFO: Installing URIParser v0.0.5
INFO: Building GSL
=====================================================[ ERROR: GSL ]=====================================================
WinRPM not found
while loading H:\.julia\v0.3\GSL\deps\build.jl, in expression starting on line 21
========================================================================================================================
====================================================[ BUILD ERRORS ]====================================================
WARNING: GSL had build errors.
- packages with build errors remain installed in H:\.julia\v0.3
- build the package(s) and all dependencies with `Pkg.build("GSL")`
- build a single package by running its `deps/build.jl` script
========================================================================================================================
INFO: Package database updated
julia> Pkg.add("WinRPM")
INFO: Cloning cache of LibExpat from git://github.com/amitmurthy/LibExpat.jl.git
INFO: Cloning cache of WinRPM from git://github.com/JuliaLang/WinRPM.jl.git
INFO: Cloning cache of Zlib from git://github.com/dcjones/Zlib.jl.git
INFO: Installing LibExpat v0.0.8
INFO: Installing WinRPM v0.1.7
INFO: Installing Zlib v0.1.8
INFO: Building WinRPM
WARNING: skipping repodata/repomd.xml, not in cache -- call WinRPM.update() to download
WARNING: skipping repodata/repomd.xml, not in cache -- call WinRPM.update() to download
INFO: Downloading http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1//repodata/repomd.xml
INFO: Downloading http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1//repodata/43d71ec7f3cb30
4bb266478e0b47535ba43a94c79eac6b7f8a2fa02d4125020f-primary.xml.gz
INFO: Downloading http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1//repodata/repomd.xml
INFO: Downloading http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1//repodata/6d143658b43c07
112ea05bd0d12c2c6316e82af871dd5442e2326fd36329a052-primary.xml.gz
INFO: Package database updated
INFO: METADATA might be out-of-date - you may not have the latest version of WinRPM
INFO: Use `Pkg.update()` to get the latest versions of your packages
julia> Pkg.update()
INFO: Updating METADATA...
INFO: Computing changes...
INFO: No packages to install, update or remove
julia> Pkg.add("GSL")
INFO: Nothing to be done
julia> Pkg.build("GSL")
INFO: Building GSL
INFO: Updating WinRPM package list
INFO: Downloading http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1//repodata/repomd.xml
INFO: Downloading http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1//repodata/repomd.xml
INFO: Multiple package candidates found for mingw64-cross-pkg-config, picking newest.
WARNING: Multiple package candidates have the same version, picking one at random
WARNING: Package not found that provides libglib-2.0.so.0
WARNING: Package not found that provides libc.so.6(GLIBC_2.4)
WARNING: Package not found that provides pkg-config
WARNING: Package not found that provides rpm
WARNING: Package not found that provides /bin/sh
WARNING: Package not found that provides /bin/bash
INFO: Multiple package candidates found for mingw64-cross-breakpad-tools, picking newest.
WARNING: Multiple package candidates have the same version, picking one at random
WARNING: Package not found that provides libstdc++.so.6
WARNING: Package not found that provides libstdc++.so.6(GLIBCXX_3.4.9)
WARNING: Package not found that provides libstdc++.so.6(GLIBCXX_3.4)
WARNING: Package not found that provides libm.so.6(GLIBC_2.0)
WARNING: Package not found that provides libstdc++.so.6(GLIBCXX_3.4.15)
WARNING: Package not found that provides libm.so.6
WARNING: Package not found that provides libstdc++.so.6(GLIBCXX_3.4.11)
WARNING: Package not found that provides libstdc++.so.6(CXXABI_1.3)
WARNING: Package not found that provides libgcc_s.so.1(GCC_3.0)
WARNING: Package not found that provides libgcc_s.so.1
WARNING: Package not found that provides libstdc++.so.6(GLIBCXX_3.4.10)
INFO: Packages to install: mingw64-cross-breakpad-tools, filesystem, libgsl0, mingw64-cross-pkg-config, gsl
INFO: Downloading: mingw64-cross-breakpad-tools
INFO: Extracting: mingw64-cross-breakpad-tools
INFO: Downloading: filesystem
INFO: Extracting: filesystem
INFO: Downloading: libgsl0
INFO: Extracting: libgsl0
INFO: Downloading: mingw64-cross-pkg-config
INFO: Extracting: mingw64-cross-pkg-config
INFO: Downloading: gsl
INFO: Extracting: gsl
INFO: Complete
=====================================================[ ERROR: GSL ]=====================================================
Provider PackageManager failed to satisfy dependency libgsl
while loading H:\.julia\v0.3\GSL\deps\build.jl, in expression starting on line 29
========================================================================================================================
====================================================[ BUILD ERRORS ]====================================================
WARNING: GSL had build errors.
- packages with build errors remain installed in H:\.julia\v0.3
- build the package(s) and all dependencies with `Pkg.build("GSL")`
- build a single package by running its `deps/build.jl` script
========================================================================================================================
The function gsl_sf_wigner_drot
is missing in julia wrapper (see gnu_gsl/contrib/wigner.h
)
I need it for my calculations. Do you suggest me adding it and requesting a merge?
I found an old comment on the same issue https://savannah.gnu.org/bugs/?46677
Unfortunately, none responded to this guy.
┌ Error: Error building `GSL`:
│ WARNING: Base.Pkg is deprecated, run `using Pkg` instead
│ likely near /Users/sheehanolver/.julia/packages/GSL/TcP5m/deps/build.jl:13
│ ┌ Warning: `is_apple` is deprecated, use `Sys.isapple` instead.
│ │ caller = top-level scope at none:0
│ └ @ Core none:0
│ ERROR: LoadError: MethodError: no method matching installed(::String)
│ Closest candidates are:
│ installed() at /Users/osx/buildbot/slave/package_osx64/build/usr/share/julia/stdlib/v0.7/Pkg/src/API.jl:261
│ Stacktrace:
│ [1] top-level scope at /Users/sheehanolver/.julia/packages/GSL/TcP5m/deps/build.jl:14
│ [2] include at ./boot.jl:317 [inlined]
│ [3] include_relative(::Module, ::String) at ./loading.jl:1038
│ [4] include(::Module, ::String) at ./sysimg.jl:29
│ [5] include(::String) at ./client.jl:398
│ [6] top-level scope at none:0
│ in expression starting at /Users/sheehanolver/.julia/packages/GSL/TcP5m/deps/build.jl:13
└ @ Pkg.Operations /U
I believe we need more changes of the kind made in #40. For example _35_3_Providing_the_function_to_solve.jl still has a use of Ref{Void}
in a struct. This is only correct if you want the struct to contain exactly a pointer to the object nothing
. @vtjnash am I right about that?
Problems arise when storing a Ptr{Void}
to such a field, because Ptr{Void}
is no-op convertible to Ref{Void}
, so the field ends up pointing to a boxed pointer. This strikes me as a bug in the type safety of Ref
.
Is the integrand missing in integration_qawf
signature?
Other integration routines have the integrand as the first argument:
integration_cquad(f::Ref{gsl_function}, ...)
integration_qng(f::Ref{gsl_function},...)
Currently this package is based on GSL 1.16, which is quite old now. I've already prepared a build for GSL 2.5: https://github.com/giordano/GSLBuilder.jl/releases/tag/v2.5 As soon as maintainers decide to upgrade, you only need to take https://github.com/giordano/GSLBuilder.jl/releases/download/v2.5/build_GSL.v2.5.0.jl (and probably adapt to support Julia 0.6).
One thing that could be improved is to use OpenBLAS, instead of the internal GSLCBLAS, as suggested by @simonbyrne at #71 (comment). I know how to use another build script as a dependency, but I don't know how to convince GSL to build against OpenBLAS. I couldn't find a configuration option for that, probably I should somehow replace GSLCBLAS with OpenBLAS?
Hi, I am have a package that uses GSL.jl, but it won't build on Travis due to
INFO: Building GSL
Installing dependency libgsl0-dev via `apt-get install libgsl0-dev`:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
It seems like the GSL build requires root permissions? Is there some way around this?
I'm getting the following error for negative values of the third parameter.
julia> sf_hyperg_U(-1.0,-1.0,1.0)
2.0
julia> sf_hyperg_U(-1.0,-1.0,-1.0)
ERROR: DomainError
in custom_error_handler at /home/mweastwood/.julia/GSL/src/ConvertGSL.jl:20
Now, I don't know anything about the hypergeometric functions, but because sf_hyperg_U(-1.0, -1.0, randn())
is used to test whether GSL has been correctly loaded, I get a spurious error half the time when I type using GSL
.
For example:
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" to list help topics
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0-rc1+59 (2014-07-17 17:31 UTC)
_/ |\__'_|_|_|\__'_| | Commit e963643 (0 days old master)
|__/ | x86_64-unknown-linux-gnu
julia> using GSL
ERROR: The GNU Scientific Library does not appear to be installed.
in error at error.jl:21
in include at ./boot.jl:245
in include_from_node1 at ./loading.jl:128
in reload_path at loading.jl:152
in _require at loading.jl:67
in require at loading.jl:51
while loading /home/mweastwood/.julia/GSL/src/GSL.jl, in expression starting on line 29
julia> sf_hyperg_U(-1.0,-1.0,1.0)
2.0
The GSL vector_view
type is pretty much totally redundant with the Julia SubArray
type, so I would tend to not include it at all (issue #12).
However, if you are going to include it, you must define it as a type
which contains a reference to the original Array
that was used to construct it, as otherwise the latter may be garbage-collected by Julia, which would lead to a crash when GSL next tries to access the vector contents.
Hi!
i was trying to implement this example: http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Example-programs.html#Interpolation-Example-programs
it seems all pretty straightforward except the point where I want to do
pS = spline_alloc(interp_cspline,n)
and it tells me that interp_cspline
is not defined. I tried to do something like Ptr(gsl_interp_type)
or Ptr{gsl_interp_type}
. I'm lacking some basic "how to allocate a pointer" knowledge, sorry.
the rest seems to work just fine, for example that
julia> A = interp_accel_alloc()
Ptr{gsl_interp_accel} @0x0000000101385110
i was looking for an equivalent interp_type_alloc()
but couldnt find any. thanks!
Many of the GSL functions, especially the various special functions, should be vectorized so that they can operate on Array
arguments in addition to scalars. This is easily accomplished with Julia's built-in @vectorize_1arg
and @vectorize_2arg
macros (from base/operators.jl
).
For example the gsl_sf_gamma(x)
function can be vectorized with:
@vectorize_1arg Number gsl_sf_gamma
and the gsl_sf_beta(a,b)
function can be vectorized with
@vectorize_2arg Number gsl_sf_beta
Note that you should use the generic Number
type (or possibly Real
), not Cdouble
or whatever specific type the C interface wants---Julia will throw an error if the user passes an array type that cannot be converted to the correct scalar argument type. (See also issue #1.)
There isn't a @vectorize_3arg
macro, but it would be easy to write one (based on those in operators.jl
) for 3-argument functions like gsl_sf_laguerre_n
.
It seems that line 29 in GSL.jl, namely
sf_hyperg_U(-1.0, -1.0, randn())
causes a DomainError, since randn could produce negative values, . Changing it to
sf_hyperg_U(-1.0, -1.0, rand())
seems to fix the issue.
With Julia 0.4 (but not with Julia 0.3), the unit tests for GSL don't pass on my system (Ubuntu Trusty, with libgsl 1.16 installed). I get the error message below:
julia> Pkg.clone("https://github.com/jiahao/GSL.jl.git")
INFO: Cloning GSL from https://github.com/jiahao/GSL.jl.git
INFO: Computing changes...
INFO: No packages to install, update or remove
INFO: Package database updated
julia> Pkg.build("GSL")
INFO: Building GSL
WARNING: beginswith is deprecated, use startswith instead.
in depwarn at ./deprecated.jl:40
in beginswith at deprecated.jl:10
in available_versions at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:116
in package_available at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:111
in can_provide at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:608
in _find_library at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:451
in satisfy! at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:738 (repeats 2 times)
in anonymous at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:778
in include at ./boot.jl:250
in include_from_node1 at ./loading.jl:132
in evalfile at loading.jl:174 (repeats 2 times)
in anonymous at pkg/entry.jl:626
in cd at ./file.jl:20
in build! at pkg/entry.jl:625
in build at pkg/entry.jl:637
in anonymous at pkg/dir.jl:29
in cd at file.jl:20
in cd at pkg/dir.jl:29
in build at pkg.jl:62
WARNING: beginswith is deprecated, use startswith instead.
in depwarn at ./deprecated.jl:40
in beginswith at deprecated.jl:10
in available_versions at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:124
in package_available at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:111
in can_provide at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:608
in _find_library at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:451
in satisfy! at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:738 (repeats 2 times)
in anonymous at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:778
in include at ./boot.jl:250
in include_from_node1 at ./loading.jl:132
in evalfile at loading.jl:174 (repeats 2 times)
in anonymous at pkg/entry.jl:626
in cd at ./file.jl:20
in build! at pkg/entry.jl:625
in build at pkg/entry.jl:637
in anonymous at pkg/dir.jl:29
in cd at file.jl:20
in cd at pkg/dir.jl:29
in build at pkg.jl:62
julia> Pkg.test("GSL")
INFO: Testing GSL
WARNING: beginswith is deprecated, use startswith instead.
in depwarn at ./deprecated.jl:40
in beginswith at deprecated.jl:10
in available_versions at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:116
in package_available at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:111
in can_provide at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:608
in _find_library at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:451
in include at ./boot.jl:250
in include_from_node1 at ./loading.jl:132
in reload_path at ./loading.jl:156
in _require at ./loading.jl:68
in require at ./loading.jl:51
in include at ./boot.jl:250
in include_from_node1 at loading.jl:132
in process_options at ./client.jl:308
in _start at ./client.jl:407
WARNING: beginswith is deprecated, use startswith instead.
in depwarn at ./deprecated.jl:40
in beginswith at deprecated.jl:10
in available_versions at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:124
in package_available at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:111
in can_provide at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:608
in _find_library at /home/jeff/.julia/v0.4/BinDeps/src/dependencies.jl:451
in include at ./boot.jl:250
in include_from_node1 at ./loading.jl:132
in reload_path at ./loading.jl:156
in _require at ./loading.jl:68
in require at ./loading.jl:51
in include at ./boot.jl:250
in include_from_node1 at loading.jl:132
in process_options at ./client.jl:308
in _start at ./client.jl:407
WARNING: int(x::FloatingPoint) is deprecated, use round(Int,x) instead.
in depwarn at ./deprecated.jl:40
in int at deprecated.jl:29
in include at ./boot.jl:250
in include_from_node1 at ./loading.jl:132
in include at ./boot.jl:250
in include_from_node1 at loading.jl:132
in process_options at ./client.jl:308
in _start at ./client.jl:407
ERROR: LoadError: LoadError: MethodError: `convert` has no method matching convert(::Type{Ptr{GSL.gsl_sf_result}}, ::Array{GSL.gsl_sf_result,1})
This may have arisen from a call to the constructor Ptr{GSL.gsl_sf_result}(...),
since type constructors fall back to convert methods.
Closest candidates are:
convert{T}(::Type{Ptr{T}}, ::UInt64)
convert{T}(::Type{Ptr{T}}, ::Int64)
convert{T}(::Type{Ptr{T}}, ::Ptr{T})
...
in anonymous at no file:16
in include at ./boot.jl:250
in include_from_node1 at ./loading.jl:132
in include at ./boot.jl:250
in include_from_node1 at loading.jl:132
in process_options at ./client.jl:308
in _start at ./client.jl:407
while loading /home/jeff/.julia/v0.4/GSL/test/basic.jl, in expression starting on line 11
while loading /home/jeff/.julia/v0.4/GSL/test/runtests.jl, in expression starting on line 7
My coworker @nicolasdidier noticed this strange issue with sf_hyperg_2F1
on half of the domain:
(I wasn't able to test it on 1.0 due to unsatisfiable package requirements.) Is there any way this could be an issue with this package or is this definitely due to GSL?
Hello, I canot build the package with the following error:
julia> Pkg.build("GSL")
INFO: Building GSL
Installing dependency gsl via `sudo pacman -S --needed gsl`:
warning: gsl-2.5-1 is up to date -- skipping
there is nothing to do
=====================================[ ERROR: GSL ]=====================================
LoadError: Provider BinDeps.PackageManager failed to satisfy dependency libgsl
while loading /home/gluon/.julia/v0.6/GSL/deps/build.jl, in expression starting on line 30
gsl is installed as it can be seen from the message. What is the issue here?
I am on julia 0.6.2.
gsl_sf_legendre_Plm_array
and gsl_sf_legendre_Plm_deriv_array
are deprecated according to the document and seems to be missing from version 2.1 of the library (or at least it's not in the ArchLinux package).
Using Julia v0.4.3 and GSL.jl v0.3.1, when executing the example in 35_Multidimensional_Root_Finding.jl
, the value for status
that is returned when executing
status = GSL.multiroot_fsolver_iterate(dnewton_solver)
in the final for loop returns a value of 0 instead of GSL.gsl_errno(0)
corresponding to SUCCESS
.
This behavior implies that the version of multiroot_fsolver_iterate
that is being executed is from the file _35_4_Iteration.jl
(which currently returns errno
) and not 35_4_Iteration.jl
(which returns gsl_errno
).
Within the file GSL.jl
, the file __FILELIST.jl
(which includes _35_4_Iteration.jl
) is being included before 35_4_Iteration.jl
is included.
Does the strategy of maintaining methods in the original output of the generator script in "underscore" files, while placing modified versions of those same methods in "no-underscore" files, need to be revisited?
I'm trying to convert some code from C++/GSL to Julia/GSL.jl
The C++ code I have uses gsl_vector_complex variables. Are there plans to implement that in GSL.jl? Would that make sense? Thanks in advance.
Hello,
I would like to use the GSL package in order to find the roots of a multidimensional system of equations.
According to the reference manual, I have to allocate memory to the solver. But to do so, I have to give a pointer to a fslover_type. Indeed, methods(multiroot_fsolver_alloc) prints out:
multiroot_fsolver_alloc(T::Ptr{gsl_multiroot_fsolver_type},n::Integer)
But I cannot find any fsolver_type that could be used. The only one that is given is: gsl_multiroot_fsolver_hybrid and it is not defined. I don't know what to do.
Besides, I don't know how to convert julia vector to gsl vector. As mentionned in issue #12, gsl_vectors_* have been deleted.
Thanks for helping,
AM.
The function GSL.deriv_central
no longer seems to work:
jeff@arina~/git/Celeste.jl/test $ rm -rf ~/.julia/lib/
jeff@arina~/git/Celeste.jl/test $ rm -rf ~/.julia/.cache/
jeff@arina~/git/Celeste.jl/test $ rm -rf ~/.julia/v0.4/
jeff@arina~/git/Celeste.jl/test $ julia4
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.4.0-rc3 (2015-09-27 20:34 UTC)
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release
|__/ | x86_64-unknown-linux-gnu
julia> Pkg.status()
INFO: Initializing package repository /home/jeff/.julia/v0.4
INFO: Cloning METADATA from git://github.com/JuliaLang/METADATA.jl
No packages installed
julia> Pkg.add("GSL")
INFO: Cloning cache of BinDeps from git://github.com/JuliaLang/BinDeps.jl.git
INFO: Cloning cache of Compat from git://github.com/JuliaLang/Compat.jl.git
INFO: Cloning cache of GSL from git://github.com/jiahao/GSL.jl.git
INFO: Cloning cache of SHA from git://github.com/staticfloat/SHA.jl.git
INFO: Cloning cache of URIParser from git://github.com/JuliaWeb/URIParser.jl.git
INFO: Installing BinDeps v0.3.18
INFO: Installing Compat v0.7.5
INFO: Installing GSL v0.2.0
INFO: Installing SHA v0.1.2
INFO: Installing URIParser v0.1.1
INFO: Building GSL
INFO: Precompiling module Compat...
INFO: Precompiling module URIParser...
INFO: Precompiling module SHA...
INFO: Package database updated
julia> import GSL.deriv_central
julia> function f2(x) 1. end
f2 (generic function with 1 method)
julia> deriv_central(f2, 0., 1e-3)
ERROR: ReadOnlyMemoryError()
Follow-up to #12
GSL uses pass-by-"reference" (pointer arguments) in order to return multiple values, as is natural in C. In Julia, it would be good to convert these to just returning tuples.
For example, gsl_poly_solve_cubic
should really be something like:
function gsl_poly_solve_cubic(a::Real, b::Real, c::Real)
x0 = Array(Cdouble,1); x1 = Array(Cdouble,1); x2 = Array(Cdouble, 2)
nroot = ccall( (:gsl_poly_solve_cubic, "libgsl"), Cint, (Cdouble, Cdouble,
Cdouble, Ptr{Cdouble}, Ptr{Cdouble}, Ptr{Cdouble}), a, b, c, x0, x1, x2)
return nroot == 3 ? (x0[1],x1[1],x2[1]) : nroot == 2 ? (x0[1],x1[1]) : nroot == 1 ? (x0[1],) : ()
end
Declaring arrays to pass pointers is somewhat ugly and annoying for simple scalar output arguments, not to mention being suboptimal; hopefully this will be fixed in the future. See Julia issue #2322.
hi!
I'm getting an error when runnign the b-spline example on this line:
https://github.com/jiahao/GSL.jl/blob/master/examples/39_Example-programs-for-B-splines.jl#L13
julia> B = vector_alloc(ncoeffs)
ERROR: vector_alloc not defined
I've just seen that you only included a few files into the GSL module. Do you prefer me not to look at the package for a while until you export more functions?
GSL uses a lot of "opaque" pointer types (pointers to undocumented/hidden structs) in its interface, a typical abstraction technique in C. Currently, GSL.jl represents these all as Ptr{Void}
. This prevents Julia's type-checking from working, since the user could pass the wrong Ptr{Void}
to a function and crash GSL. It also leads to a less-comprehensible method signature, and prevents future overloading by method dispatch on the pointer type.
A better solution would be to declare an opaque pointer type in Julia. For example, the GSL gsl_rng*
type could be represented as:
type gsl_rng; end
typealias GSL_rng Ptr{gsl_rng}
Then you could define e.g. gsl_ran_gamma(r::GSL_rng, a::Cdouble, b::Cdouble)
rather than using Ptr{Void}
for the first argument. Note that the contents of the gsl_rng
type in Julia are irrelevant since you will never instantiate this type; you will only pass around GSL_rng pointers (which are, of course, the same size as Ptr{Void}
.)
Hi!
I am having trouble computing values of Mathieu functions using the GSL.jl wrapper. For example:
julia> using GSL
julia> sf_mathieu_ce(1, 0., 1.0)
GSL.gsl_sf_result(5.0e-324,0.0)
julia> sf_mathieu_ce(1, 0., 2.0)
GSL.gsl_sf_result(1.0e-323,0.0)
julia> sf_mathieu_ce(1, 0., 3.0)
GSL.gsl_sf_result(1.0e-323,0.0)
If I am not mistaken, the value of
Other functions return "zero" too:
julia> sf_mathieu_se(4, 10., 30.0)
GSL.gsl_sf_result(6.93008513984393e-310,6.9296557058916e-310)
Am I missing something? I will be happy to provide more info if needed.
Has the Levenberg-Marquardt solver described in section 38.8 of the manual been implemented? It seems to have been only partially wrapped. For example, there is multifit_fdfsolver_alloc
but I cannot figure out how to get a pointer T
to Ptr{gsl_multifit_fdfsolver_type}
. It should be gsl_multifit_fdfsolver_lmder
or gsl_multifit_fdfsolver_lmsder
but I cannot find them.
Am I missing something simple?
This issue is being filed by a script, but if you reply, I will see it.
PackageEvaluator.jl is a script that runs nightly. It attempts to load all Julia packages and run their test (if available) on both the stable version of Julia (0.2) and the nightly build of the unstable version (0.3).
The results of this script are used to generate a package listing enhanced with testing results.
The status of this package, GSL, on...
'No tests, but package loads.' can be due to their being no tests (you should write some if you can!) but can also be due to PackageEvaluator not being able to find your tests. Consider adding a test/runtests.jl
file.
'Package doesn't load.' is the worst-case scenario. Sometimes this arises because your package doesn't have BinDeps support, or needs something that can't be installed with BinDeps. If this is the case for your package, please file an issue and an exception can be made so your package will not be tested.
This automatically filed issue is a one-off message. Starting soon, issues will only be filed when the testing status of your package changes in a negative direction (gets worse). If you'd like to opt-out of these status-change messages, reply to this message.
When I have installed GSL.jl with Pkg.add("GSL") everything appears to have worked correctly, however when I try to use it I get this error:
Johns-MacBook-Pro:nuppe john$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" to list help topics
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0-prerelease+2628 (2014-04-15 11:08 UTC)
_/ |\__'_|_|_|\__'_| | Commit 3766e86* (0 days old master)
|__/ | x86_64-apple-darwin13.1.0
julia> using GSL
ERROR: Could not find the GNU Scientific Library.
Please ensure that libgsl is installed on your system and is available on the system path.
in error at error.jl:21
in reload_path at loading.jl:152
in _require at loading.jl:67
in require at loading.jl:51
while loading /Users/john/.julia/v0.3/GSL/src/ConvertGSL.jl, in expression starting on line 49
while loading /Users/john/.julia/v0.3/GSL/src/GSL.jl, in expression starting on line 6
julia>
The install log is available here:
https://gist.github.com/jtravs/262557d67866430ca8b7
I don't think this is connected to #16
Any help appreciated!
Instead of installing GSL, it somehow gets homebrew to install zeromq instead.
julia> Pkg.add("GSL")
INFO: Installing GSL v0.1.1
INFO: Building Homebrew
HEAD is now at c588ffb Remove git rebasing code that slipped through
HEAD is now at b8b84ed Update hdf5 and szip
Uninstalling /Users/jiahao/.julia/v0.3/Homebrew/deps/usr/Cellar/zeromq/3.2.4...
==> Downloading http://archive.org/download/julialang/bottles/zeromq-3.2.4.snow_leopard_or_later.bottle.1.tar.gz
Already downloaded: /Users/jiahao/Library/Caches/Homebrew.jl/zeromq-3.2.4.snow_leopard_or_later.bottle.1.tar.gz
==> Pouring zeromq-3.2.4.snow_leopard_or_later.bottle.1.tar.gz
/Users/jiahao/.julia/v0.3/Homebrew/deps/usr/Cellar/zeromq/3.2.4: 54 files, 2.3M
INFO: Building GSL
INFO: Package database updated
:(
GSL uses a gsl_
prefix for every function, type, etcetera, because C lacks namespace encapsulation.
Since Julia modules live in their own namespace, this is not necessary. So, you can just remove all of the gsl_
prefixes. Then, the user can either do:
using GSL
y = sf_laguerre_n(3, 2.3, 4.6)
if they want to import everything into the global namespace, or
import GSL
y = GSL.sf_laguerre_n(3, 2.3, 4.6)
if they want to use prefixes, or
import GSL.sf_laguerre_n
y = sf_laguerre_n(3, 2.3, 4.6)
to import specific functions into the global namespace.
The functions that take Vector{T}
arguments and convert
them to the type GSL expects should really take AbstractVector{T}
arguments instead, in order to handle more general array types.
When a GSL allocation function (one of the many functions that returns a pointer to an opaque pointer) returns C_NULL
, an exception (whose type is determined by checking the gsl_errno
global variable) should be thrown.
For example in _7_16_2_Relative_Exponential_Functions.jl:
result = convert(Ptr{gsl_sf_result}, Array(gsl_sf_result, 1))
This creates an array and immediately drops any references to it, leading to a serious memory bug (use after free). Fortunately direct conversion to Ptr has been disallowed in Julia 0.4, so this line raises
an error now.
There is seldom any need to manually convert to Ptr. ccall
handles this for you; just pass the array and index it to read the result. Actually now a Ref
should be used instead of an array, but an array still works.
Hi, I try to call the GSL random number generator from Julia. It works well, but I can't change gsl_rng_type and can only take the default algorithm. I found the following code from the package. Could you please give an example about setting "gsl_rng_type"? Many thanks! Danke schön!
best
Chong
function rng_alloc(T::Ref{gsl_rng_type})
output_ptr = ccall( (:gsl_rng_alloc, libgsl), Ptr{gsl_rng},
(Ref{gsl_rng_type}, ), T )
output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
end
My version of Julia complains because src/GSL.jl
is missing; it looks like you should rename src/gsl.jl
?
There are some portions of GSL that are so redundant with the Julia standard library that it is almost inconceivable that anyone would want to use them.
The whole GSL vector and matrix interface, the BLAS interface, the linear algebra and eigensystems interfaces, the FFT functions, and the basic complex-number routines are vastly inferior to those bundled with Julia, for example, and I would tend to just omit them from GSL.jl.
Including them increases your maintenance load, requires special care to avoid crashing interactions with the garbage collection (issue #11), and slows down the loading of the GSL package (using GSL
is pretty slow as it is, so anything to trim the library would be an improvement).
Hi,
In sf_legendre_Pl_array
and perhaps similar functions, Julia raises the following error on a variety of inputs (on a Mac at least):
`convert` has no method matching convert(::Type{Float64},::Array{Float64,1})
in sf_legendre_Pl_array at _7_24_1_Legendre_Polynomials.jl:116
Not really sure what's going on here as I'm not familiar with C/ccall at all, but hope that helps.
Dear Jiahao:
I tried to test the gsl multiroot finding code, but failed. Using v0.3.11, I tried the test file examples/35_Multidimensional_Root_Finding.jl and it gives the error message
ERROR: Ref not defined
in include at /Applications/Julia-0.3.11.app/Contents/Resources/julia/lib/julia/sys.dylib
in include_from_node1 at /Applications/Julia-0.3.11.app/Contents/Resources/julia/lib/julia/sys.dylib
while loading /Users/laurent/test.jl, in expression starting on line 34
I also tried GSL with v0.4, and there the package GSL shows lots of warnings upon loading; and then
ERROR: LoadError: MethodError: multiroot_fsolver_iterate
has no method matching multiroot_fsolver_iterate(::Ptr{GSL.gsl_multiroot_fsolver})
in anonymous at no file:57
in include at ./boot.jl:259
in include_from_node1 at ./loading.jl:267
Thanks in advance! Laurent
Here's an install attempt:
$ SUDO_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass ./julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-redhat-linux
julia> Pkg.build("GSL")
INFO: Building GSL
Installing dependency gsl-devel via `sudo yum install gsl-devel`:
Redirecting to '/usr/bin/dnf install gsl-devel' (see 'man yum2dnf')
Last metadata expiration check: 0:02:21 ago on Mon Oct 24 16:15:24 2016.
Package gsl-devel-2.1-4.fc24.x86_64 is already installed, skipping.
Dependencies resolved.
Nothing to do.
Complete!
=================================[ ERROR: GSL ]=================================
LoadError: Provider BinDeps.PackageManager failed to satisfy dependency libgsl
while loading /home/rick/.julia/v0.5/GSL/deps/build.jl, in expression starting on line 30
================================================================================
================================[ BUILD ERRORS ]================================
WARNING: GSL had build errors.
- packages with build errors remain installed in /home/rick/.julia/v0.5
- build the package(s) and all dependencies with `Pkg.build("GSL")`
- build a single package by running its `deps/build.jl` script
================================================================================
It looks like a lot of the functions that take vector arguments have a bug, apparently a bug in your generating script. For example:
function ran_discrete_preproc{tA<:Real}(K::Integer, P_in::Vector{tA})
convert(Vector{Cdouble}, P_in)
ccall( (:gsl_ran_discrete_preproc, :libgsl), Ptr{gsl_ran_discrete_t},
(Csize_t, Ptr{Cdouble}), K, P )
end
is missing the P =
assignment in the first line, so P
is not defined.
Also, it should probably not take an argument K
, and instead determine K
from length(P_in)
. Similarly for other functions that take Vector
args: the length should not be a separate argument.
(Also, it should check the return value for C_NULL
(see issue #9), which happens on an out-of-memory situation or for invalid arguments (negative probability inputs).)
First of all, thanks for GSL.jl! It's great!
Minor problem:
Incorrect inputs to the hypergeometric function 2F1 yielded this:
julia> using GSL
julia> a, b = [1.0, 2.0], 3.0
julia> GSL.hypergeom(a, b, 1.0)
ERROR: UndefVarError: bytestring not defined
Stacktrace:
[1] custom_error_handler(::Ptr{UInt8}, ::Ptr{UInt8}, ::Int32, ::Int32) at /Users/james/.julia/v0.6/GSL/src/ConvertGSL.jl:18
[2] hypergeom(::Array{Float64,1}, ::Float64, ::Float64) at /Users/james/.julia/v0.6/GSL/src/7_21_HypergeometricFunctions.jl:21
but after
cd /Users/james/.julia/v0.6/GSL/src/
for i in *; do sed -i 's/bytestring/string/g' "$i"; done
I get a DomainError
julia> GSL.hypergeom(a, b, 1.0)
ERROR: GSL Error: Ptr{Int8} @0x00000001233f4e28 -- Ptr{UInt8} @0x00000001233fd388 at Ptr{UInt8} @0x00000001233fe8cf:685
ERROR: DomainError:
Stacktrace:
[1] custom_error_handler(::String, ::String, ::Int32, ::Int32) at /Users/james/.julia/v0.6/GSL/src/ConvertGSL.jl:35
[2] custom_error_handler(::Ptr{UInt8}, ::Ptr{UInt8}, ::Int32, ::Int32) at /Users/james/.julia/v0.6/GSL/src/ConvertGSL.jl:18
[3] hypergeom(::Array{Float64,1}, ::Float64, ::Float64) at /Users/james/.julia/v0.6/GSL/src/7_21_HypergeometricFunctions.jl:21
Hi ,
I have a java test program that calling C++ (JNI) and the C++ calling Julia.
It works fine when running one instance, but when repeatedly running the instance, I got following
error (In our real application, it killed the running processor).
Julia 0.4.6 : julia-0.4.6-linux-x86_64
Linux : 2.6.32-358.el6.x86_64
gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
Thanks
Jason
fatal: error thrown and no exception handler available.
ReadOnlyMemoryError()
rec_backtrace at /home/Julia/julia-2e358ce975/lib/julia/libjulia.so (unknown line)
jl_throw at /home/Julia/julia-2e358ce975/lib/julia/libjulia.so (unknown line)
jl_exit_on_sigint at /home/Julia/julia-2e358ce975/lib/julia/libjulia.so (unknown line)
unknown function (ip: 0x3e8a40f500)
unknown function (ip: 0x7f9244ddf1e4)
unknown function (ip: 0x7f9244dd8365)
unknown function (ip: 0x7f9244f1992f)
unknown function (ip: 0x7f9244f19a35)
unknown function (ip: 0x7f9244de04b8)
unknown function (ip: 0x3e8a407851)
clone at /lib64/libc.so.6 (unknown line)
unknown function (ip: (nil))
In a lot of cases the types are a bit overspecified: the Julia functions should accept any argument type that can be convert
-ed into the C argument type. The Julia interface does not need to be restricted to the C argument type.
For example:
gsl_sf_pow_int (x::Cdouble, n::Cint) = ccall( (:gsl_sf_pow_int, "libgsl"), Cdouble, (Cdouble, Cint), x, n)
could be declared as merely
gsl_sf_pow_int (x::Real, n::Integer) = ...
or even:
gsl_sf_pow_int (x, n) = ...
Julia will throw an error if you call it with arguments for which convert(Cdouble, x)
or convert(Cint, n)
fail. There is no need to specify the Julia argument types except as a hint to the user about what types are expected (e.g. if they just type gsl_sf_pow_int
it will print something helpful), or if you are planning to overload the function with different definitions for different types.
My Julia package requires GSL.jl. Its unit tests pass on my system, but on travis-ci.org, I get the error message below from listing GSL in the REQUIRE file. Do I just need to modify my package's .travis.yml file, or is there a way to change the GSL installation scripts to work even when sudo isn't available?
INFO: Building GSL
Installing dependency libgsl0-dev via `sudo apt-get install libgsl0-dev`:
sudo: must be setuid root
=================================[ ERROR: GSL ]=================================
failed process: Process(`sudo apt-get install libgsl0-dev`, ProcessExited(1)) [1]
while loading /home/travis/.julia/v0.3/GSL/deps/build.jl, in expression starting on line 29
================================================================================
================================[ BUILD ERRORS ]================================
WARNING: GSL had build errors.
- packages with build errors remain installed in /home/travis/.julia/v0.3
- build the package(s) and all dependencies with `Pkg.build("GSL")`
- build a single package by running its `deps/build.jl` script
hypergeom([1.0; 2.0],2.0*im,2.)
returns
MethodError: no method matching hypergeom(::Array{Float64,1}, ::Complex{Float64}, ::Float64)
Closest candidates are:
hypergeom(::Union{Array{Float64,1}, Array{Union{},1}, Float64}, ::Union{Array{Float64,1}, Array{Union{},1}, Float64}, ::Float64) at /Users/nataliesheils/.julia/v0.6/GSL/src/7_21_HypergeometricFunctions.jl:11
I'm seeing a lot of warnings in output from travis-cI from my calls to GSL.jl. Unfortunately I don't think I can instruct travis-ci to use the master branch for GSL, though it looks like there have been some improvements since the last release.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:1456250880
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:-1
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.MemoryError is deprecated, use OutOfMemoryError instead.
in custom_error_handler at /home/travis/.julia/v0.4/GSL/src/ConvertGSL.jl:29
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
in strerror at /home/travis/.julia/v0.4/GSL/src/../src/_3_2_Error_Codes.jl:22
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
in strerror at /home/travis/.julia/v0.4/GSL/src/../src/_3_2_Error_Codes.jl:22
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
in strerror at /home/travis/.julia/v0.4/GSL/src/../src/_3_2_Error_Codes.jl:22
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
in strerror at /home/travis/.julia/v0.4/GSL/src/../src/_3_2_Error_Codes.jl:22
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: Base.Uint8 is deprecated, use UInt8 instead.
WARNING: deprecated syntax "poly_solve_quadratic (" at /home/travis/.julia/v0.4/GSL/src/6_3_QuadraticEquations.jl:26.
Use "poly_solve_quadratic(" instead.
WARNING: deprecated syntax "poly_complex_solve_quadratic (" at /home/travis/.julia/v0.4/GSL/src/6_3_QuadraticEquations.jl:52.
Use "poly_complex_solve_quadratic(" instead.
WARNING: deprecated syntax "poly_solve_cubic (" at /home/travis/.julia/v0.4/GSL/src/6_4_CubicEquations.jl:22.
Use "poly_solve_cubic(" instead.
WARNING: deprecated syntax "poly_complex_solve_cubic (" at /home/travis/.julia/v0.4/GSL/src/6_4_CubicEquations.jl:46.
Use "poly_complex_solve_cubic(" instead.
WARNING: Base.None is deprecated, use Union{} instead.
WARNING: Union(args...) is deprecated, use Union{args...} instead.
in depwarn at deprecated.jl:73
in call at deprecated.jl:50
in include at ./boot.jl:261
in include_from_node1 at ./loading.jl:304
in include at ./boot.jl:261
in include_from_node1 at ./loading.jl:304
in require at ./loading.jl:243
in include at ./boot.jl:261
in include_from_node1 at ./loading.jl:304
in include at ./boot.jl:261
in include_from_node1 at ./loading.jl:304
in process_options at ./client.jl:308
in _start at ./client.jl:411
while loading /home/travis/.julia/v0.4/GSL/src/7_21_HypergeometricFunctions.jl, in expression starting on line 7
WARNING: deprecated syntax "ran_dir_3d (" at /home/travis/.julia/v0.4/GSL/src/20_23_SphericalVectorDistributions.jl:31.
Use "ran_dir_3d(" instead.
WARNING: deprecated syntax "ran_dir_nd (" at /home/travis/.julia/v0.4/GSL/src/20_23_SphericalVectorDistributions.jl:50.
Use "ran_dir_nd(" instead.
When GSL was not built with Pkg.build("GSL")
the error message, which is supposed to tell the user to run Pkg.build("GSL")
, is not shown. Instead there is an error constructing the error.
julia> using GSL
ERROR: `LoadError` has no method matching LoadError(::ASCIIString)
in include at /usr/bin/../lib/julia/sys.so
in include_from_node1 at /usr/bin/../lib/julia/sys.so
in reload_path at loading.jl:152
in _require at loading.jl:67
in require at loading.jl:51
while loading /home/slangangular/.julia/v0.3/GSL/src/GSL.jl, in expression starting on line 5
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.