Question: How to achieve digest auth that survives after service restarts.

I'm using Digest strategy and works fine until I restart my service. Chrome re-challenges user to give creds again.  Strategy returns:
userInfo = nil, err = Invalid Response
to all web requests.  I'm using FIFO lib cache FWIW.
Do I need to implement my own cache implementation that stores values on disk to survive restarts?
I'm trying to replace nginx reverse proxy and this doesn't happen w/nginx so this is a loss in functionality as well and user issue.

@dhubler
FYI, When a client first requests a protected page, the server returns a 401 status code along with a challenge in the WWW-Authenticate header.
At this point, most browsers will present a dialog box to the user prompting them to log in.
then the browser will keep sending the same nonce to the server as long as it's valid on the server-side, once the nonce expired then the whole process repeated.
same as well when the server restarts. unless nonce persistent.
it's not recommended to persist the nonce and it may cause a security vulnerability.
I've tested the digest with FF 85, Chrome 88, Safari 14.
and it keeps authenticating the user and once the server restarted it present a dialog box to the user prompting them to log in and it continues from there.
code:
package main

import (
	"crypto"
	_ "crypto/md5"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/gorilla/mux"
	"github.com/shaj13/libcache"
	_ "github.com/shaj13/libcache/fifo"

	"github.com/shaj13/go-guardian/v2/auth"
	"github.com/shaj13/go-guardian/v2/auth/strategies/digest"
)

var strategy *digest.Digest

func init() {
	var c libcache.Cache
	c = libcache.FIFO.New(10)
	c.SetTTL(time.Minute * 3)
	c.RegisterOnExpired(func(key, _ interface{}) {
		c.Delete(key)
	})
	opt := digest.SetHash(crypto.MD5, crypto.MD5.String())
	strategy = digest.New(validateUser, c, opt)
}

func main() {
	router := mux.NewRouter()
	router.HandleFunc("/v1/book/{id}", middleware(http.HandlerFunc(getBookAuthor))).Methods("GET")
	log.Println("server started and listening on http://<IP_ADDRESS>:8080")
	http.ListenAndServe("<IP_ADDRESS>:8080", router)
}

func getBookAuthor(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	id := vars["id"]
	books := map[string]string{
		"1449311601": "Ryan Boyd",
		"148425094X": "Yvonne Wilson",
		"1484220498": "Prabath Siriwarden",
	}
	body := fmt.Sprintf("Author: %s \n", books[id])
	w.Write([]byte(body))
}

func validateUser(userName string) (string, auth.Info, error) {
	// here connect to db or any other service to fetch user and validate it.
	if userName == "admin" {
		return "admin", auth.NewDefaultUser("admin", "1", nil, nil), nil
	}

	return "", nil, fmt.Errorf("Invalid credentials")
}

func middleware(next http.Handler) http.HandlerFunc {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		log.Println("Executing Auth Middleware")
		log.Println("Debug Authorization Header:", r.Header.Get("Authorization"))
		user, err := strategy.Authenticate(r.Context(), r)
		if err != nil {
			code := http.StatusUnauthorized
			w.Header().Add("WWW-Authenticate", strategy.GetChallenge())
			http.Error(w, http.StatusText(code), code)
			fmt.Println("send error", err)
			return
		}
		log.Printf("User %s Authenticated\n", user.GetUserName())
		next.ServeHTTP(w, r)
	})
}

Thanks for the response.
Is nginx digest is insecure because it survives restarts?  Do you have any recommendations for what I want to achieve?

@dhubler
nginx digest store nonce in /dev/shm so when the process restarted it all the nonce can be accessible again but once VM or bare-metal server rebooted all the nonce will be dropped.
it depends on your requirement and what security level you want to achieve,
but basically, you can stick with the re-login, the server must be highly available, and restart should only happen occasionally. for scalability, you can use jwt token alongside digest so the first request will use user credentials and then switch to token once token expired ask the user to re-login using digest and so on.
so if the server restarted and the token still active use it to prevent the user login.
make sure your server is listening over an HTTPS socket to mitigate MITM attacks.
sample code
package main

import (
	"crypto"
	_ "crypto/md5"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/gorilla/mux"
	"github.com/shaj13/libcache"
	_ "github.com/shaj13/libcache/fifo"

	"github.com/shaj13/go-guardian/v2/auth"
	"github.com/shaj13/go-guardian/v2/auth/strategies/digest"
	"github.com/shaj13/go-guardian/v2/auth/strategies/jwt"
	"github.com/shaj13/go-guardian/v2/auth/strategies/token"
	"github.com/shaj13/go-guardian/v2/auth/strategies/union"
)

// Usage:
// curl --digest --user admin:admin http://<IP_ADDRESS>:8080/v1/book/1449311601

var strategy union.Union
var digestStrategy *digest.Digest
var secret jwt.SecretsKeeper

func init() {
	var c libcache.Cache
	c = libcache.FIFO.New(10)
	c.SetTTL(time.Minute * 3)
	c.RegisterOnExpired(func(key, _ interface{}) {
		c.Delete(key)
	})
	secret = jwt.StaticSecret{
		Algorithm: jwt.HS256,
		ID:        "static-kid",
		Secret:    []byte("generated-secrets"),
	}
	parser := token.SetParser(token.CookieParser("token"))
	jwtStrategy := jwt.New(c, secret, parser)
	opt := digest.SetHash(crypto.MD5, crypto.MD5.String())
	digestStrategy = digest.New(validateUser, c, opt)
	strategy = union.New(jwtStrategy, digestStrategy)
}

func main() {
	router := mux.NewRouter()
	router.HandleFunc("/v1/book/{id}", middleware(http.HandlerFunc(getBookAuthor))).Methods("GET")
	log.Println("server started and listening on http://<IP_ADDRESS>:8080")
	http.ListenAndServe("<IP_ADDRESS>:8080", router)
}

func getBookAuthor(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	id := vars["id"]
	books := map[string]string{
		"1449311601": "Ryan Boyd",
		"148425094X": "Yvonne Wilson",
		"1484220498": "Prabath Siriwarden",
	}
	body := fmt.Sprintf("Author: %s \n", books[id])
	w.Write([]byte(body))
}

func validateUser(userName string) (string, auth.Info, error) {
	// here connect to db or any other service to fetch user and validate it.
	if userName == "admin" {
		return "admin", auth.NewDefaultUser("admin", "1", nil, nil), nil
	}

	return "", nil, fmt.Errorf("Invalid credentials")
}

func middleware(next http.Handler) http.HandlerFunc {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		log.Println("Executing Auth Middleware")

		target, user, err := strategy.AuthenticateRequest(r)
		if err != nil {
			code := http.StatusUnauthorized
			w.Header().Add("WWW-Authenticate", digestStrategy.GetChallenge())
			http.Error(w, http.StatusText(code), code)
			fmt.Println("send error", err)
			return
		}
		log.Printf("User %s Authenticated\n", user.GetUserName())

		if _, ok := target.(*digest.Digest); ok {
			opt := jwt.SetExpDuration(time.Second * 3)
			token, _ := jwt.IssueAccessToken(user, secret, opt)
			cookie := http.Cookie{Name: "token", Value: token}
			http.SetCookie(w, &cookie)
		}

		next.ServeHTTP(w, r)
	})
}

feel free to reach out or reopen.


[Feature Request] Remove individual torrent method?

I can't seem to find a method to remove/stop downloaded torrents. I see that libtorrent manual has such a method.
void remove_torrent(torrent_handle const& h, int options = none);

I don't know much about this dependencies or Java in general, but could it be that the method is available on this session instance?

TorrentSession has a stop method, here. It invokes stop on the session manager and removes the event listener.
I didn't include a method on the TorrentSession to call remove on the SessionManager method, here. This was because for my use case, I invoke the stop method and then remove the file/directory from the download location.

I will add this once I find some time to get around to it.

Ah Ok!. I only use magnet links so if I stop the TorrentSession then the magnet will not be there when a new session is instanced, right? No need for a remove torrent method, I could just stop then start a new session

Yes, if you create a new TorrentSession instance, then the new instance will not know anything about the previous session. Does that answer your question?

Yes it does. Thank you!

Awesome, thanks. Going to close this ticket.


This will avoid the permission error when launching a container

This is the error I'm trying to fix:
"container_linux.go:247: starting container process caused "exec: "/docker-entrypoint.sh": permission denied"

This error should really never happen. Can you try with latest version of the kong image? The permissions are already +x.

Closing this; both centos and alpine entrypoints have the x bit set.


I hope to provide configuration options to choose whether to join the connection or execute two queries during the query

I simulated a query scenario:
client.DataDeviceBox.Query().Where(datadevicebox.ProjectID(d.ProjectID)).WithPoles().QueryPoles().QueryDevices().QueryPole().QueryBox().All(ctx)

This will generate the following SQL:
SELECT DISTINCT `data_device_box`.`box_id`,
                `data_device_box`.`delete_at`,
                `data_device_box`.`lat`,
                `data_device_box`.`lon`,
                `data_device_box`.`code`,
                `data_device_box`.`mode`,
                `data_device_box`.`address`,
                `data_device_box`.`region`,
                `data_device_box`.`ip`,
                `data_device_box`.`name`,
                `data_device_box`.`project_id`,
                `data_device_box`.`status`,
                `data_device_box`.`sync_status`
FROM `data_device_box`
         JOIN (SELECT `data_device_pole`.`box_id`
               FROM `data_device_pole`
                        JOIN (SELECT `data_device`.`pole_id`
                              FROM `data_device`
                                       JOIN (SELECT `data_device_pole`.`pole_id`
                                             FROM `data_device_pole`
                                                      JOIN (SELECT `data_device_box`.`box_id`
                                                            FROM `data_device_box`
                                                            WHERE `data_device_box`.`project_id` = ?
                                                              AND `data_device_box`.`delete_at` = ?) AS `t1`
                                                           ON `data_device_pole`.`box_id` = `t1`.`box_id`
                                             WHERE `data_device_pole`.`delete_at` = ?) AS `t1`
                                            ON `data_device`.`pole_id` = `t1`.`pole_id`
                              WHERE `data_device`.`delete_at` = ?) AS `t1`
                             ON `data_device_pole`.`pole_id` = `t1`.`pole_id`
               WHERE `data_device_pole`.`delete_at` = ?) AS `t1` ON `data_device_box`.`box_id` = `t1`.`box_id`
WHERE `data_device_box`.`delete_at` = ?

Unlimited joins can lead to significant performance degradation.Is it expected to be changed to a multiple query or configurable solution in the future?

Hey @Dark1Forest 👋
This was discussed a few times in the issue tracker (you can search for it), and from what we found in our experiments, JOINs lead to less performant queries in most cases (multiple loaded edges, duplicate rows, etc). In the future, we might add some extra logic that optimizes specific paths and uses JOINs for loading single O2O edges. But it's not planned atm.
For now, you can use custom templates or modifiers to customize the way relations are loaded in your applications.


THT parts are not exported in CPL file; only SMT

JLCPCB supports soldering of THT parts.  However, the ULP here for generating the CPL file only exports SMT parts.   THT parts will be missing, even though LCSC/JLCPCB has them in the library and even though the LCSC_PART attributes are set for those THT parts.

Hey @laf0rge
THT parts should be added to the components list both for BOM and CPL, since the merge of the feature/tht branch. Have you used a recent rev for your test?
Can you share a sample brd file that verifies the issue?

I'm closing this one, I imply that this is already fixed.

sorry for never providing feedback, guess I missed your update back [almost] one year ago. Thanks in any case!


[Candidate 4v4 Wastelands Dust ZH v4] Ruins appear very dark when revealed

Observed behavior
Ruins appear very dark when revealed.
Expected behavior
Ruins look natural when revealed.
Screenshots

fixed

There still is one thing that is darkened:

Is ok.


R.pipe(R.tryCatch, ...) anomaly

"ramda": "^0.29.0".
// deltas :: String -> [Delta]
const deltas = R.pipe(
	R.split("\n"),
	R.map(R.trim),
	R.reject(R.isEmpty),
	R.map(R.replace(/^data:/, "")),
	R.map(R.trim),
	R.map(
		R.ifElse(
			R.equals("[DONE]"),
			R.always({ isDone: true }),
			R.pipe(
				R.tap(() => {}), // NOTE: MAGIC FIX of Ramda
				R.tryCatch(JSON.parse, R.always({})),
				R.pathOr("", ["choices", 0, "delta"]),
				R.objOf("delta"),
				R.mergeRight({ isDone: false })
			)
		)
	),
	R.reject(R.isEmpty)
);

With Magic Fix I get expected results:
{ isDone: false, delta: { content: ' both' } }
{ isDone: false, delta: { content: ' the' } }
{ isDone: false, delta: { content: ' client' } }
{ isDone: false, delta: { content: ' and' } }
{ isDone: false, delta: { content: ' server' } }
{ isDone: false, delta: { content: ' side' } }
{ isDone: false, delta: { content: '.' } }
{ isDone: false, delta: {} }
{ isDone: true }

Commenting R.tap(() => {}) line what I get is:
[Function (anonymous)]
[Function (anonymous)]
[Function (anonymous)]
[Function (anonymous)]

Hi @orsenkucher , could you post some sample input?

@kedashoe Hi!
Yes, sure!
I use this functions with deltas(data.toString()).
Here are few samples of console.log(JSON.stringify(data.toString()))
"data: {\"id\":\"chatcmpl-7TFKQZlJPXyd33RDvEQKAV1QZKzE8\",\"object\":\"chat.completion.chunk\",\"created\":1687204790,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\"},\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-7TFKQZlJPXyd33RDvEQKAV1QZKzE8\",\"object\":\"chat.completion.chunk\",\"created\":1687204790,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Hello\"},\"finish_reason\":null}]}\n\n"

"data: {\"id\":\"chatcmpl-7TFKQZlJPXyd33RDvEQKAV1QZKzE8\",\"object\":\"chat.completion.chunk\",\"created\":1687204790,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\"},\"finish_reason\":null}]}\n\n"

"data: {\"id\":\"chatcmpl-7TFKQZlJPXyd33RDvEQKAV1QZKzE8\",\"object\":\"chat.completion.chunk\",\"created\":1687204790,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".js\"},\"finish_reason\":null}]}\n\n"

"data: {\"id\":\"chatcmpl-7TFKQZlJPXyd33RDvEQKAV1QZKzE8\",\"object\":\"chat.completion.chunk\",\"created\":1687204790,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" is\"},\"finish_reason\":null}]}\n\n"

Also if you call R.ifElse(..., ..., (x) => R.pipe(...)(x)) it will work.

So I think the problem is the bare JSON.parse? I'm not sure why tap seems to fix this! The simplest solution is probably just adding an arrow function
      R.pipe(
        R.tryCatch(x => JSON.parse(x), R.always({})),
        R.pathOr("", ["choices", 0, "delta"]),
        R.objOf("delta"),
        R.mergeRight({ isDone: false })
      )

We created R.bind for situations like this, but it doesn't actually seem to solve it here.. not sure exactly what is going on, maybe someone else can shed some more light

@kedashoe Thanks for your input!
Yeah, JSON.parse seems just not to work with Ramda.
(x) => R.curry(JSON.parse)(x) breaks it again.
I'm curious too, and it'd be nice if someone else could provide further insight.
R.tap(() => {}) doesn't actually do anything, but it likely changes the context in which R.tryCatch calls JSON.parse, making the error go away. So it's better to fall to another solution.
R.bind(JSON.parse, null) isn't working as well, so using the x => JSON.parse(x) workaround is probably the best bet for now. Even though it's less elegant, at least it behaves as expected

JSON.parse accepts 3 arguments, so ramda is auto-currying the remaining arguments, you can do R.unary(JSON.parse) to fix the issue:
R.pipe(
  R.tryCatch(R.unary(JSON.parse), R.always({})),
  R.pathOr("", ["choices", 0, "delta"]),
  R.objOf("delta"),
  R.mergeRight({ isDone: false })
)

ah ty @jlissner ! That explains why adding tap first fixes things as pipe uses the first function to determine the arity of the function it creates

Thanks @jlissner!
Seems obvious now ahaha. Should I rename the issue to "Auto-currying in tryCatch with JSON.parse" or something?

I don't think it would be considered an issue. Ramda has made a choice to auto curry arguments in certain settings.
You could make a post stating your case for why ramda should not auto curry in a tryCatch if you feel strongly about it.

I don't think it would be considered an issue. Ramda has made a choice to auto curry arguments in certain settings.

Yes ramda does this pretty much everywhere to determine arity of the functions it creates, it would be quite a change to do something different at this point. It is usually the builtins/functions which accept optional arguments which catch people out. I will close now but feel free to discuss further.

Yep, I mean it's not the issue with Ramda, just was asking on how to make this github issue more indexable for other people if faced with an alike situation.

Yep, I mean it's not the issue with Ramda, just was asking on how to make this github issue more indexable for other people if faced with an alike situation.

Ah good thought.. probably fine to leave it, but ya something like what you suggested is good


Adds Number.isInteger polyfill

Fixes IE11, which doesn't have this functionality (as reported in https://github.com/pixijs/pixi.js/pull/4724)
Before: https://jsfiddle.net/themoonrat/zmmndr00/
After: https://jsfiddle.net/24cjpr2w/2/ (will work when build has finished for this branch)

Thanks for this


Links in "Configuration" page are broken

Links in "Configuration" page are broken:

Looking at the page I'm not sure what is wrong, maybe rendering because of the images?

Thanks for calling this out @tomkerkhove, it seems to be a markdown bug (?)

Dang! Looking into this.

Thanks for reporting this @tomkerkhove.

That's fast, thanks!


daytona server start fails if systemd file exists

Describe the bug
I upgraded and daytona wasn't running. So I ran daytona server start and got this error:
❯ daytona server start

 Starting the Daytona Server daemon...

FATA[0001] Init already exists: /home/metcalfc/.config/systemd/user/DaytonaServerDaemon.service

Expected behavior
I'd expect that daytona server start could handle the file existing and instead of throwing an error, tell the user that the service is running.  For example, you can "start" a service in systemd as often as you want. If its running, it doesn't even say anything because the desired outcome, the service running is true.
metcalfc in 🌐 boxloader in ~
❯ sudo systemctl start ollama

metcalfc in 🌐 boxloader in ~ took 3s
❯ sudo systemctl start ollama

I just got this too, and then I tried to start the unit file I got (I /think/ with my v0.22.0 install),
sven@xeon:~$ daytona server start

 Starting the Daytona Server daemon...

FATA[0002] Init already exists: /home/sven/.config/systemd/user/DaytonaServerDaemon.service
sven@xeon:~$ daytona server

 Starting the Daytona Server daemon...

FATA[0001] Init already exists: /home/sven/.config/systemd/user/DaytonaServerDaemon.service

sven@xeon:~$ systemctl enable /home/sven/.config/systemd/user/DaytonaServerDaemon.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ===
Authentication is required to manage system service or unit files.
Authenticating as: Sven Dowideit,,, (sven)
Password:

polkit-agent-helper-1: pam_authenticate failed: Authentication failure
==== AUTHENTICATION FAILED ===
Failed to enable unit: Access denied
sven@xeon:~$
sven@xeon:~$
sven@xeon:~$
sven@xeon:~$
sven@xeon:~$
sven@xeon:~$ systemctl enable /home/sven/.config/systemd/user/DaytonaServerDaemon.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ===
Authentication is required to manage system service or unit files.
Authenticating as: Sven Dowideit,,, (sven)
Password:
==== AUTHENTICATION COMPLETE ===
Created symlink /etc/systemd/system/multi-user.target.wants/DaytonaServerDaemon.service → /home/sven/.config/systemd/user/DaytonaServerDaemon.service.
Created symlink /etc/systemd/system/DaytonaServerDaemon.service → /home/sven/.config/systemd/user/DaytonaServerDaemon.service.
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
Authentication is required to reload the systemd state.
Authenticating as: Sven Dowideit,,, (sven)
Password:
==== AUTHENTICATION COMPLETE ===
sven@xeon:~$ systemctl status daytona
Unit daytona.service could not be found.
sven@xeon:~$ systemctl status Daytona
Unit Daytona.service could not be found.
sven@xeon:~$ systemctl status | grp Daytona
Command 'grp' not found, but there are 17 similar ones.
sven@xeon:~$ systemctl status | grep Daytona
           │     └─3537 grep --color=auto Daytona
sven@xeon:~$ systemctl start /home/sven/.config/systemd/user/DaytonaServerDaemon.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'home-sven-.config-systemd-user-DaytonaServerDaemon.service.mount'.
Authenticating as: Sven Dowideit,,, (sven)
Password:
==== AUTHENTICATION COMPLETE ===
Failed to start home-sven-.config-systemd-user-DaytonaServerDaemon.service.mount: Unit home-sven-.config-systemd-user-DaytonaServerDaemon.service.mount not found.
sven@xeon:~$ systemctl start DaytonaServerDaemon
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'DaytonaServerDaemon.service'.
Authenticating as: Sven Dowideit,,, (sven)
Password:
==== AUTHENTICATION COMPLETE ===
sven@xeon:~$ ps aux | grep daytona
sven        3576  0.0  0.0   9084  2560 pts/0    S+   14:35   0:00 grep --color=auto daytona
sven@xeon:~$ ps aux | grep Daytona
sven        3578  0.0  0.0   9084  2560 pts/0    S+   14:35   0:00 grep --color=auto Daytona
sven@xeon:~$ daytona version
Daytona version v0.22.0

The final systemctl start gave me some hints as to another possible bug:
sven@xeon:~$ journalctl -fu DaytonaServerDaemon
Jul 14 14:37:01 xeon systemd[1]: Started This is the Daytona Server daemon..
Jul 14 14:37:01 xeon daytona[3616]: time="2024-07-14T14:37:01+10:00" level=fatal msg="neither $XDG_CONFIG_HOME nor $HOME are defined"
Jul 14 14:37:01 xeon systemd[1]: DaytonaServerDaemon.service: Main process exited, code=exited, status=1/FAILURE
Jul 14 14:37:01 xeon systemd[1]: DaytonaServerDaemon.service: Failed with result 'exit-code'.
Jul 14 14:39:01 xeon systemd[1]: DaytonaServerDaemon.service: Scheduled restart job, restart counter is at 2.
Jul 14 14:39:01 xeon systemd[1]: Stopped This is the Daytona Server daemon..

And another thought - it would also help debugging if the "Started the Daytona Server daemon" line listed the version, the full path of the binary, and the user it was started as.  :)

and the "fix" I used, was to  set the HOME in the service file:
sven@xeon:~$ vi ~/.config/systemd/user/DaytonaServerDaemon.service
# ADD Environment="HOME=/home/sven" in [Service]
sven@xeon:~$ systemctl daemon-reload
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
Authentication is required to reload the systemd state.
Authenticating as: Sven Dowideit,,, (sven)
Password:
==== AUTHENTICATION COMPLETE ===
sven@xeon:~$ systemctl start DaytonaServerDaemon

@SvenDowideit yeah... When changing permissions after the server already ran can lead to unexpected things happening.
I would leave this issue to focus on the problem when the systemd file exists. Please open a new issue outlining what you believe is wrong with how we treat permissions.

Describe the bug I upgraded and daytona wasn't running. So I ran daytona server start and got this error:
❯ daytona server start

 Starting the Daytona Server daemon...

FATA[0001] Init already exists: /home/metcalfc/.config/systemd/user/DaytonaServerDaemon.service

Expected behavior I'd expect that daytona server start could handle the file existing and instead of throwing an error, tell the user that the service is running. For example, you can "start" a service in systemd as often as you want. If its running, it doesn't even say anything because the desired outcome, the service running is true.
metcalfc in 🌐 boxloader in ~
❯ sudo systemctl start ollama

metcalfc in 🌐 boxloader in ~ took 3s
❯ sudo systemctl start ollama

I feel there if the service already exits, the program should avoid creating a new one of if the existing service is obsolete in relation to the version of the program, the service should be removed and recreated by the program. The program should be able to resolve this issue without reporting it in a message.

@solaries agreed completely. That should be solved as part of this issue.

/bounty $20

/attempt #643
when the service install fails an error message is returned from the method. A solution would be to check if the error is one that states that the service already exists, if it exist, the error should not be returned, the program should continue it's execution with the service object.

/attempt #643

@ezhil56x There is a bug in the Algora bot that is failing to inform you about the limit of concurrent bounty attempts (2)
This is message that should've displayed:

We appreciate your enthusiasm but since you already have 2 active bounty attempts, we're going to keep this open for other contributors to attempt. 🫡

For this reason, we will only be considering your first two bounty attempts for now and the bounty will stay open to other contributors for a period of time. Thank you for understanding.

@idagelic I didn't know that. Are there any exceptions this time? because most of the work is done. And Algora bot didn't notify that I have exceeded my attempts. Also the issues I've attempted where not taken by anyone for last 2 days.
Thanks!

@ezhil56x I understand.
They will all be considered with same priority and regular things in mind: order of the PR, code quality, speed of implementing requested changes etc.
Thank you for your contributions!

Thank you!

@ezhil56x I understand.
They will all be considered with same priority and regular things in mind: order of the PR, code quality, speed of implementing requested changes etc.
Thank you for your contributions!


Upgrade to Go1.18

(I'm not sure why the DMG upload failed -- intermittent?)

Not an intermittent - the macOS build was really broken. This is fixed by https://github.com/DataDog/datadog-agent/pull/13211 that just got merged.

I'm rerunning that Action, it should succeed now.


[when OA version not available] send a request using the OpenAccessButton

Here is a suggestion (maybe have you already considered it?)
Whenever the resolving of a DOI to an OpenAccess version of a publication, a request could be made using the OpenAccessButton.
The request would then be made in the name of ImpactStory or someone in your team.
I wrote a few words about it here: https://github.com/OAButton/discussion/issues/915
As it will be the OpenAccessWeek soon www.openaccessweek.org/ it may be an acceptable moment for authors to receive such requests. And after this one week period, the test can be evaluated.
The OAB has a batch upload mode, so requests could be made with the non resolved DOIs of the day.
I'm available to help make this happen.

I continue with a suggestion to involve organizations to send requests to authors using the OpenAccessButton in their own names at https://github.com/OAButton/discussion/issues/916
As a major OA DOI resolving service, may I ask you your opinion on this? You may have a clear vision of the domain, that may help to model the process I propose in a pragmatic way.

@jibe-b this repository is for oadoi (the API), I think your request should rather be for Unpaywall (the extension)

Thanks for the suggestion! Agreed with @wetneb that it is out of scope for oaDOI, but we are interested in setting up this feature for Unpaywall, and in fact it's on the roadmap...but may not make it in in time for OA week.


error while creating mount source path

Hey,
Thanks for this, it's a big help. When I try to start it, I get the error:
ERROR: for influxdb  Cannot start service influxdb: error while creating mount source path '/srv/docker/influxdb/data': mkdir /srv/docker: read-only file system

Any idea why this would be? I'm running it on Ubuntu. Thanks!

No problems here on ubuntu 18.04.1
Did you try to run the 'run.sh' script?

echo "Current database list"
curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=glances" --data-urlencode "q=SHOW DATABASES"
Current database list
curl: (7) Failed to connect to localhost port 8086: Connection refused

does anyone know how to fix it?

If you're using Docker on Mac OSX, open Docker in the system menu, open preferences, file sharing then add an entry of '/srv/docker', apply and restart.


External HTML crate meta-issue

The purpose of this issue is tracking all issues and pull requests proposing features for an external full-featured crate for HTML rendering.
#629 and #631 pull requests propose solving #584 in different manners, and they can inspire an external crate.
#524 asks for opening links in a new tab.
#408 asks for bidirectional text.
#637 asks for lazy loading images.
Please comment here if a new HTML renderer crate is created, since it could be recommended in docs.

#525 implements the opening of links in a new tab.

#933 proposed an option to replace paragraphs by spans.

Did you have anything in mind for how you'd like an external crate to expose itself for this lib? I have a janky custom iterator for overriding HTML (emitting custom HTML events rather than the built-in events) and its just gross enough that I am considering biting the bullet and spinning up such a crate.

We don't have an opinionated design, but the external crate would not be used by this one. The idea is to have a crate with more options for people who like the performance of this crate but would like more customization.
My idea is a bin crate configured via a TOML file and a lib crate that receives a configuration object deserialized from the TOML with serde. The crate core would use a loop over events as the html.rs of this crate but taking into account the options to render content in the desired manner and adding more attributes where needed.
So, having a HtmlWriter / push_html is not required but a perfectly valid design option.
Thanks for your interest.

Ok I think I've got a reasonable start here:
Repo
Lib crate
CLI Crate
This is pretty rough, notably the configurable options were mostly arbitrarily selected and not all of the pulldown-cmark test that I copied over pass just yet. But I wanted to get some input on whether or not this is approximately what you were thinking before I went too much further, but im working on using this lib in my own static site generator library and it seems to be a reasonable alternative so far 🤞

I have not reviewed it in depth but it seems a good first approach!

After iterating on this for a while longer, my opinion is starting to sway towards implementing some of what I have in the external crate directly in pulldown-cmark instead.
Effectively I've created a trait called HtmlWriter that implements predictably named callbacks for dispatching from a new struct HtmlRenderer (names are hard, im not married to either of these 🤷) which now owns just the match block dispatch itself:
impl<W: StrWrite, H: HtmlWriter<W>> HtmlRenderer<W, H> {
    pub fn new(writer: H) -> Self {
        Self {
            writer,
            _phantom: PhantomData,
        }
    }

    pub fn run<'a, I>(&mut self, iter: I) -> Result<()>
    where
        I: Iterator<Item = Event<'a>>,
    {
        let mut iter = iter.peekable();
        while let Some(event) = iter.next() {
            match event {
                Event::Start(tag) => self.handle_start(&mut iter, tag)?,
                Event::End(tag) => self.handle_end(tag)?,
                Event::Text(text) => self.writer.text(&text)?,
                Event::Code(text) => self.handle_inline_code(&text)?,
                Event::Html(html) => self.writer.write_str(&html)?,
                Event::SoftBreak => self.writer.soft_break()?,
                Event::HardBreak => self.writer.hard_break()?,
                Event::Rule => self.writer.horizontal_rule()?,
                Event::FootnoteReference(name) => self.writer.footnote_reference(&name)?,
                Event::TaskListMarker(checked) => self.writer.task_list_item(checked)?,
                Event::InlineMath(_) | Event::DisplayMath(_) | Event::InlineHtml(_) => todo!(),
            }
        }
        Ok(())
    }

    fn handle_start<'a, I>(
        &mut self,
        iter: &mut Peekable,
        tag: pulldown_cmark::Tag<'a>,
    ) -> Result<()>
    where
        I: Iterator<Item = Event<'a>>,
    {
        match tag {
            Tag::Paragraph => self.writer.start_paragraph()?,
            Tag::Heading {
                level,
                id,
                classes,
                attrs,
            } => self
                .writer
                .start_heading(level, id.as_deref(), &classes, &attrs)?,
            Tag::BlockQuote(_) => self.writer.start_blockquote()?,
            Tag::CodeBlock(kind) => self.writer.start_code_block(kind)?,
            Tag::List(start) => self.writer.start_list(start)?,
            Tag::Item => self.writer.start_list_item()?,
            Tag::FootnoteDefinition(name) => self.writer.start_footnote_definition(&name)?,
            Tag::Table(alignments) => self.writer.start_table(alignments)?,
            Tag::TableHead => self.writer.start_table_head()?,
            Tag::TableRow => self.writer.start_table_row()?,
            Tag::TableCell => self.writer.start_table_cell()?,
            Tag::Emphasis => self.writer.start_emphasis()?,
            Tag::Strong => self.writer.start_strong()?,
            Tag::Strikethrough => self.writer.start_strikethrough()?,
            Tag::Link {
                link_type,
                dest_url,
                title,
                id: _,
            } => self.writer.start_link(link_type, &dest_url, &title)?,
            Tag::Image {
                link_type,
                dest_url,
                title,
                id: _,
            } => self
                .writer
                .start_image(link_type, &dest_url, &title, iter)?,

            Tag::DefinitionList => self.writer.start_definition_list()?,
            Tag::DefinitionListTitle => self.writer.start_definition_list_title()?,
            Tag::DefinitionListDefinition => self.writer.start_definition_list_definition()?,

            Tag::MetadataBlock(kind) => self.writer.start_metadata_block(&kind)?,
            Tag::HtmlBlock => (),
        }
        Ok(())
    }

    fn handle_end(&mut self, tag: TagEnd) -> Result<()> {
        match tag {
            TagEnd::Paragraph => self.writer.end_paragraph()?,
            TagEnd::Heading(level) => self.writer.end_heading(level)?,
            TagEnd::BlockQuote(_) => self.writer.end_blockquote()?,
            TagEnd::CodeBlock => self.writer.end_code_block()?,
            TagEnd::List(b) => self.writer.end_list(b)?,
            TagEnd::Item => self.writer.end_list_item()?,
            TagEnd::FootnoteDefinition => self.writer.end_footnote_definition()?,
            TagEnd::Table => self.writer.end_table()?,
            TagEnd::TableHead => self.writer.end_table_head()?,
            TagEnd::TableRow => self.writer.end_table_row()?,
            TagEnd::TableCell => self.writer.end_table_cell()?,
            TagEnd::Emphasis => self.writer.end_emphasis()?,
            TagEnd::Strong => self.writer.end_strong()?,
            TagEnd::Strikethrough => self.writer.end_strikethrough()?,
            TagEnd::Link {} => self.writer.end_link()?,
            TagEnd::Image {} => self.writer.end_image()?,
            TagEnd::DefinitionList => self.writer.end_definition_list()?,
            TagEnd::DefinitionListTitle => self.writer.end_definition_list_title()?,
            TagEnd::DefinitionListDefinition => self.writer.end_definition_list_title()?,

            TagEnd::MetadataBlock(_) => self.writer.end_metadata_block()?,
            TagEnd::HtmlBlock => (),
        }
        Ok(())
    }

    fn handle_inline_code(&mut self, text: &str) -> Result<()> {
        self.writer.start_inline_code()?;
        self.writer.text(text)?;
        self.writer.end_inline_code()?;
        Ok(())
    }
}```

This allows for the trait to encapsulate the rendering state and individual rendering methods like so:

```rust
pub trait HtmlWriter<W: StrWrite> {
    /// Write a string directly to the output
    fn write_str(&mut self, s: &str) -> Result<(), HtmlError> {
        self.get_writer()
            .write_str(s)
            .map_err(|_| HtmlError::Write(std::fmt::Error))
    }

    /// Write HTML attributes for a given element
    fn write_attributes(&mut self, element: &str) -> Result<(), HtmlError> {
        let mut attrs_string = String::new();

        if let Some(attrs) = self.get_config().attributes.element_attributes.get(element) {
            for (key, value) in attrs {
                attrs_string.push_str(&format!(" {}=\"{}\"", key, value));
            }
        }

        if !attrs_string.is_empty() {
            self.write_str(&attrs_string)?;
        }
        Ok(())
    }

    fn get_config(&self) -> &HtmlConfig;

    fn get_writer(&mut self) -> &mut W;

    fn get_state(&mut self) -> &mut HtmlState;

    fn start_paragraph(&mut self) -> Result<(), HtmlError> {
        if !self.get_state().currently_in_footnote {
            self.write_str("
")?;
        }
        Ok(())
    }

    fn end_paragraph(&mut self) -> Result<(), HtmlError> {
        if !self.get_state().currently_in_footnote {
            self.write_str("
")?;
        }
        Ok(())
    }
# etc ...

If something similar to that was in the base crate (and we export a default implementation of that trait with the current rendering methods as the defaults), the extended crate could contain the config-based writer as an implementation of the base trait, and could be the place to direct all further requests for customizing/extending the default HTML output. I am reasonably certain this could all be shipped in a way that does not break existing users and does not violate the idea that this crate contains only a basic implementation of rendering. Thoughts?

Edit: Show, dont tell seemed easier here: https://github.com/pulldown-cmark/pulldown-cmark/pull/987
That change should have no effect on end-users or the stated goals of the crate, but will drastically reduce the amount of code required to implement the extended rendering crate (by not requiring it host its own competing default implementation) while also probably reducing the overall need for such a crate in the first place.
Now users can do something more like this to hook and override individual renderer methods:
use pulldown_cmark::{html::HtmlElementRenderer, Event, Parser, LinkType};
use pulldown_cmark_escape::{escape_href, escape_html, FmtWriter, StrWrite};

struct SecureHtmlWriter<W: StrWrite> {
    inner: HtmlWriter<W>,
}

impl<W: StrWrite> Deref for SecureHtmlWriter<W> {
    type Target = HtmlWriter<W>;

    fn deref(&self) -> &Self::Target {
        &self.inner
    }
}

impl<W: StrWrite> DerefMut for SecureHtmlWriter<W> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.inner
    }
}

impl<W: StrWrite> SecureHtmlWriter<W> {
    fn new(writer: W) -> Self {
        Self {
            inner: HtmlWriter::new(writer)
        }
    }
}

// Now we only need to implement the methods we want to customize
impl<W: StrWrite> HtmlElementRenderer for SecureHtmlWriter<W> {
    type Error = W::Error;

    fn render_link_start(&mut self, link_type: LinkType, dest_url: &str, title: &str) -> Result<(), Self::Error> {
        match link_type {
            LinkType::Email => {
                self.write(" {
                self.write("<a")?;

                // Add rel attribute for external links
                if dest_url.starts_with("http") {
                    self.write(" rel=\"noopener noreferrer\"")?;
                }

                self.write(" href=\"")?;
                escape_href(&mut self.inner.writer, dest_url)?;
            }
        }

        if !title.is_empty() {
            self.write("\" title=\"")?;
            escape_html(&mut self.inner.writer, title)?;
        }
        self.write("\">")
    }
}

pub fn push_html_secure(output: &mut String, parser: Parser) {
    let writer = SecureHtmlWriter::new(FmtWriter(output));
    let processor = HtmlEventProcessor::new(parser, writer);
    processor.run().unwrap();
}


All three producers have corresponding votes, but only one is in production, the other two are not produced, only receive

1、Here is my  list of producers :

In fact, only lwz is in the non-stop production block, the other two producers hml and lz only receive, no rotation production block.
2、the folling is my nodeos config
2.1 host 1：<IP_ADDRESS>
eosio nodeos config:
# the endpoint upon which to listen for incoming connections (eosio::bnet_plugin)
bnet-endpoint = <IP_ADDRESS>:4321
//for communicatin with cleos
http-server-address = <IP_ADDRESS>:9800

# The actual host:port used to listen for incoming p2p connections. (eosio::net_plugin)
p2p-listen-endpoint = <IP_ADDRESS>:9900

//for sync block
# The public endpoint of a peer node to connect to. Use multiple p2p-peer-address options as needed to compose a network. (eosio::net_plugin)
p2p-peer-address = <IP_ADDRESS>:9900
p2p-peer-address = <IP_ADDRESS>:9877
p2p-peer-address = <IP_ADDRESS>:9877

agent-name = "EOS Test Agent"

enable-stale-production = true

//producer name
producer-name = eosio

signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

unlock-timeout = 90000

//load plugin
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::chain_plugin
plugin = eosio::history_plugin
plugin = eosio::net_plugin
plugin = eosio::net_api_plugin

lwz nodeos config:
\# the endpoint upon which to listen for incoming connections (eosio::bnet_plugin)
bnet-endpoint = <IP_ADDRESS>:4322
producer-name = lwz
enable-stale-production = false

http-server-address = <IP_ADDRESS>:8889
p2p-listen-endpoint = <IP_ADDRESS>:9877
p2p-peer-address = <IP_ADDRESS>:9900
p2p-peer-address = <IP_ADDRESS>:9900
p2p-peer-address = <IP_ADDRESS>:9877

signature-provider = EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4=KEY:5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::chain_plugin
plugin = eosio::history_plugin
plugin = eosio::net_plugin
plugin = eosio::net_api_plugin
plugin = eosio::http_plugin

1.2 host 2：<IP_ADDRESS>
hml nodeos config:
bnet-endpoint = <IP_ADDRESS>:4321
producer-name = hml
enable-stale-production = false
signature-provider = EOS7fu9rx1wtEPnX3jY2ZfezyLwV5Ly29g6nmyTSwtLAQMu4boFJz=KEY:5JjWBaVxKnWpcr857E8dWBr8Duq76M7wzoUEEwAAzzwUjz9Yyqs
http-server-address = <IP_ADDRESS>:9800

p2p-listen-endpoint = <IP_ADDRESS>:9900
p2p-peer-address = <IP_ADDRESS>:9900
p2p-peer-address = <IP_ADDRESS>:9877
p2p-peer-address = <IP_ADDRESS>:9877

enable-stale-production = false
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::chain_plugin
plugin = eosio::history_plugin
plugin = eosio::net_plugin
plugin = eosio::net_api_plugin
plugin = eosio::http_plugin

lx nodeos config:
# the endpoint upon which to listen for incoming connections (eosio::bnet_plugin)
bnet-endpoint = <IP_ADDRESS>:4322
producer-name = lx
enable-stale-production = false

http-server-address = <IP_ADDRESS>:8889

p2p-listen-endpoint = <IP_ADDRESS>:9877
p2p-peer-address = <IP_ADDRESS>:9900
p2p-peer-address = <IP_ADDRESS>:9877
p2p-peer-address = <IP_ADDRESS>:9900

signature-provider = EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6=KEY:5JCStvbRgUZ6hjyfUiUaxt5iU3HP6zC1kwx3W7SweaEGvs4EPfQ
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::chain_plugin
plugin = eosio::history_plugin
plugin = eosio::net_plugin
plugin = eosio::net_api_plugin
plugin = eosio::http_plugin

3、run nodeos :
3.1 run eosio:
nodeos --config-dir ./config --data-dir ./data

3.2 run lwz
nodeos --config-dir ./config --data-dir ./data --delete-all-blocks eosio::chain_plugin

3.3 run hml:
nodeos --config-dir ./config --data-dir ./data --delete-all-blocks eosio::chain_plugin

3.4 run lx
nodeos --config-dir ./config --data-dir ./data --delete-all-blocks eosio::chain_plugin

3、when i Cancel vote
cleos --url http://<IP_ADDRESS>:9800 system  voteproducer prods  userc  lx
cleos --url http://<IP_ADDRESS>:9800 system  voteproducer prods  userb  hml
cleos --url http://<IP_ADDRESS>:9800 system  voteproducer prods  usera  lwz

4、but only lwz is producing, hml && lx is not produe ,only receving.
https://user-images.githubusercontent.com/11773000/44388378-8e6dcb80-a55a-11e8-8f1e-0f67c6963f53.png
5、I vote again:
cleos --url http://<IP_ADDRESS>:9800 system  voteproducer prods  userc  hml
cleos --url http://<IP_ADDRESS>:9800 system  voteproducer prods  userb   hml
cleos --url http://<IP_ADDRESS>:9800 system  voteproducer prods  usera   lx

The result is still lwz has been in production, hml and lz have been receiving。
6、Finally, I run cleos --url http://<IP_ADDRESS>:9800 system unregprod lwz ,but lwz is still producing ,the  other two is receving.

@amActiveHello ,Is the problem solved? i have same problem,i don't know why some producers have enought vote,but don't produce block! @

I have adopted all the suggestions provided, but I have no expected results. EOS has a lot of pits, not mature enough. I then moved to the ethereum's POA consensus mechanism to deploy the underlying chain.

@amActiveHello That's bad news!

Are you sure the other two nodes are receiving and linking those blocks produced by the first node? Please ask in eosio.stackexchange.com if you have further questions.


docker image fails to build with lima (docker alternative) on apple M2: scipy missing BLAS

I'm trying to build the docker image on a MBP with an M2 Pro processor, using lima and nerdctl as docker replacements. This means I'm using nerdctl instead of docker, inside a VM running an 64bit arm ubuntu 22.10 on my mac.
Installation of pandas=1.2.3 as pinned in requirements/requirements.txt fails when installing numpy==1.17.3 (dependency), apparently because a lot of libraries are missing (BLAS among others). I suspect this could be due to the version of numpy (Released Oct. 17 2019) doesn't play well with 64 bit arm.
The error log is as follows:
egk@egk:~/git-reps/tram$ lima nerdctl build .
[+] Building 8.2s (6/6) FINISHED
 => [internal] load .dockerignore                                                                                0.0s
 => => transferring context: 117B                                                                                0.0s
 => [internal] load build definition from Dockerfile                                                                                0.0s
 => => transferring dockerfile: 400B                                                                                0.0s
 => [internal] load metadata for docker.io/library/ubuntu:20.04                                                                     0.8s
 => [1/3] FROM docker.io/library/ubuntu:20.04@sha256:db8bf6f4fb351aa7a26e27ba2686cf35a6a409f65603e59d4c203e58387dc6b3               0.0s
 => => resolve docker.io/library/ubuntu:20.04@sha256:db8bf6f4fb351aa7a26e27ba2686cf35a6a409f65603e59d4c203e58387dc6b3               0.0s
 => CACHED [2/3] RUN apt-get update &&     apt-get -y upgrade &&     apt-get -y install --no-install-recommends     ca-certificate  0.0s
 => ERROR [3/3] RUN python3 -m pip install pandas==1.2.3                                                                            7.4s
------
 > [3/3] RUN python3 -m pip install pandas==1.2.3:
#0 0.791 Collecting pandas==1.2.3
#0 0.925   Downloading pandas-1.2.3.tar.gz (5.5 MB)
#0 2.754   Installing build dependencies: started
#0 7.308   Installing build dependencies: finished with status 'error'
#0 7.308   ERROR: Command errored out with exit status 1:
#0 7.308    command: /usr/bin/python3 /usr/lib/python3/dist-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-9i_hfnvd/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel 'Cython>=0.29.21,<3' 'numpy==1.16.5; python_version=='"'"'3.7'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.17.3; python_version=='"'"'3.8'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.16.5; python_version=='"'"'3.7'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy==1.17.3; python_version=='"'"'3.8'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy; python_version>='"'"'3.9'"'"''
#0 7.308        cwd: None
#0 7.308   Complete output (581 lines):
#0 7.308   Ignoring numpy: markers 'python_version == "3.7" and platform_system != "AIX"' don't match your environment
#0 7.308   Ignoring numpy: markers 'python_version == "3.7" and platform_system == "AIX"' don't match your environment
#0 7.308   Ignoring numpy: markers 'python_version == "3.8" and platform_system == "AIX"' don't match your environment
#0 7.308   Ignoring numpy: markers 'python_version >= "3.9"' don't match your environment
#0 7.308   Collecting setuptools
#0 7.308     Downloading setuptools-67.7.1-py3-none-any.whl (1.1 MB)
#0 7.308   Collecting wheel
#0 7.308     Downloading wheel-0.40.0-py3-none-any.whl (64 kB)
#0 7.308   Collecting Cython<3,>=0.29.21
#0 7.308     Downloading Cython-0.29.34-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (1.8 MB)
#0 7.308   Collecting numpy==1.17.3
#0 7.308     Downloading numpy-1.17.3.zip (6.4 MB)
#0 7.308   Building wheels for collected packages: numpy
#0 7.308     Building wheel for numpy (setup.py): started
#0 7.308     Building wheel for numpy (setup.py): finished with status 'error'
#0 7.308     ERROR: Command errored out with exit status 1:
#0 7.308      command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-ldbsuhua
#0 7.308          cwd: /tmp/pip-install-46pmyfff/numpy/
#0 7.308     Complete output (262 lines):
#0 7.308     Running from numpy source directory.
#0 7.308     blas_opt_info:
#0 7.308     blas_mkl_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     blis_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries blis not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     openblas_info:
#0 7.308     customize UnixCCompiler
#0 7.308     customize UnixCCompiler
#0 7.308       libraries openblas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_3_10_blas_threads_info:
#0 7.308     Setting PTATLAS=ATLAS
#0 7.308     customize UnixCCompiler
#0 7.308       libraries tatlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_3_10_blas_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries satlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_blas_threads_info:
#0 7.308     Setting PTATLAS=ATLAS
#0 7.308     customize UnixCCompiler
#0 7.308       libraries ptf77blas,ptcblas,atlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_blas_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries f77blas,cblas,atlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     accelerate_info:
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:690: UserWarning:
#0 7.308         Optimized (vendor) Blas libraries are not found.
#0 7.308         Falls back to netlib Blas library which has worse performance.
#0 7.308         A better performance should be easily gained by switching
#0 7.308         Blas library.
#0 7.308       self.calc_info()
#0 7.308     blas_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries blas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:690: UserWarning:
#0 7.308         Blas (http://www.netlib.org/blas/) libraries not found.
#0 7.308         Directories to search for the libraries can be specified in the
#0 7.308         numpy/distutils/site.cfg file (section [blas]) or by setting
#0 7.308         the BLAS environment variable.
#0 7.308       self.calc_info()
#0 7.308     blas_src_info:
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:690: UserWarning:
#0 7.308         Blas (http://www.netlib.org/blas/) sources not found.
#0 7.308         Directories to search for the sources can be specified in the
#0 7.308         numpy/distutils/site.cfg file (section [blas_src]) or by setting
#0 7.308         the BLAS_SRC environment variable.
#0 7.308       self.calc_info()
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /bin/sh: 1: svnversion: not found
#0 7.308     non-existing path in 'numpy/distutils': 'site.cfg'
#0 7.308     lapack_opt_info:
#0 7.308     lapack_mkl_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     openblas_lapack_info:
#0 7.308     customize UnixCCompiler
#0 7.308     customize UnixCCompiler
#0 7.308       libraries openblas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     openblas_clapack_info:
#0 7.308     customize UnixCCompiler
#0 7.308     customize UnixCCompiler
#0 7.308       libraries openblas,lapack not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     flame_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries flame not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_3_10_threads_info:
#0 7.308     Setting PTATLAS=ATLAS
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries tatlas,tatlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries tatlas,tatlas not found in /usr/lib
#0 7.308     <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_3_10_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries satlas,satlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries satlas,satlas not found in /usr/lib
#0 7.308     <class 'numpy.distutils.system_info.atlas_3_10_info'>
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_threads_info:
#0 7.308     Setting PTATLAS=ATLAS
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries ptf77blas,ptcblas,atlas not found in /usr/lib
#0 7.308     <class 'numpy.distutils.system_info.atlas_threads_info'>
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     atlas_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries f77blas,cblas,atlas not found in /usr/local/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack_atlas not found in /usr/lib
#0 7.308     customize UnixCCompiler
#0 7.308       libraries f77blas,cblas,atlas not found in /usr/lib
#0 7.308     <class 'numpy.distutils.system_info.atlas_info'>
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     lapack_info:
#0 7.308     customize UnixCCompiler
#0 7.308       libraries lapack not found in ['/usr/local/lib', '/usr/lib']
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:1712: UserWarning:
#0 7.308         Lapack (http://www.netlib.org/lapack/) libraries not found.
#0 7.308         Directories to search for the libraries can be specified in the
#0 7.308         numpy/distutils/site.cfg file (section [lapack]) or by setting
#0 7.308         the LAPACK environment variable.
#0 7.308       if getattr(self, '_calc_info_{}'.format(lapack))():
#0 7.308     lapack_src_info:
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:1712: UserWarning:
#0 7.308         Lapack (http://www.netlib.org/lapack/) sources not found.
#0 7.308         Directories to search for the sources can be specified in the
#0 7.308         numpy/distutils/site.cfg file (section [lapack_src]) or by setting
#0 7.308         the LAPACK_SRC environment variable.
#0 7.308       if getattr(self, '_calc_info_{}'.format(lapack))():
#0 7.308       NOT AVAILABLE
#0 7.308
#0 7.308     /usr/lib/python3.8/distutils/dist.py:274: UserWarning: Unknown distribution option: 'define_macros'
#0 7.308       warnings.warn(msg)
#0 7.308     running bdist_wheel
#0 7.308     running build
#0 7.308     running config_cc
#0 7.308     unifing config_cc, config, build_clib, build_ext, build commands --compiler options
#0 7.308     running config_fc
#0 7.308     unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
#0 7.308     running build_src
#0 7.308     build_src
#0 7.308     building py_modules sources
#0 7.308     creating build
#0 7.308     creating build/src.linux-aarch64-3.8
#0 7.308     creating build/src.linux-aarch64-3.8/numpy
#0 7.308     creating build/src.linux-aarch64-3.8/numpy/distutils
#0 7.308     building library "npymath" sources
#0 7.308     get_default_fcompiler: matching types: '['gnu95', 'intel', 'lahey', 'pg', 'absoft', 'nag', 'vast', 'compaq', 'intele', 'intelem', 'gnu', 'g95', 'pathf95', 'nagfor']'
#0 7.308     customize Gnu95FCompiler
#0 7.308     Could not locate executable gfortran
#0 7.308     Could not locate executable f95
#0 7.308     customize IntelFCompiler
#0 7.308     Could not locate executable ifort
#0 7.308     Could not locate executable ifc
#0 7.308     customize LaheyFCompiler
#0 7.308     Could not locate executable lf95
#0 7.308     customize PGroupFCompiler
#0 7.308     Could not locate executable pgfortran
#0 7.308     customize AbsoftFCompiler
#0 7.308     Could not locate executable f90
#0 7.308     Could not locate executable f77
#0 7.308     customize NAGFCompiler
#0 7.308     customize VastFCompiler
#0 7.308     customize CompaqFCompiler
#0 7.308     Could not locate executable fort
#0 7.308     customize IntelItaniumFCompiler
#0 7.308     Could not locate executable efort
#0 7.308     Could not locate executable efc
#0 7.308     customize IntelEM64TFCompiler
#0 7.308     customize GnuFCompiler
#0 7.308     Could not locate executable g77
#0 7.308     customize G95FCompiler
#0 7.308     Could not locate executable g95
#0 7.308     customize PathScaleFCompiler
#0 7.308     Could not locate executable pathf95
#0 7.308     customize NAGFORCompiler
#0 7.308     Could not locate executable nagfor
#0 7.308     don't know how to compile Fortran code on platform 'posix'
#0 7.308     C compiler: aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC
#0 7.308
#0 7.308     compile options: '-Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/include/python3.8 -c'
#0 7.308     aarch64-linux-gnu-gcc: _configtest.c
#0 7.308     failure.
#0 7.308     removing: _configtest.c _configtest.o
#0 7.308     Traceback (most recent call last):
#0 7.308       File "<string>", line 1, in <module>
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/setup.py", line 443, in <module>
#0 7.308         setup_package()
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/setup.py", line 435, in setup_package
#0 7.308         setup(**metadata)
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/core.py", line 171, in setup
#0 7.308         return old_setup(**new_attr)
#0 7.308       File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 144, in setup
#0 7.308         return distutils.core.setup(**attrs)
#0 7.308       File "/usr/lib/python3.8/distutils/core.py", line 148, in setup
#0 7.308         dist.run_commands()
#0 7.308       File "/usr/lib/python3.8/distutils/dist.py", line 966, in run_commands
#0 7.308         self.run_command(cmd)
#0 7.308       File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
#0 7.308         cmd_obj.run()
#0 7.308       File "/usr/lib/python3/dist-packages/wheel/bdist_wheel.py", line 223, in run
#0 7.308         self.run_command('build')
#0 7.308       File "/usr/lib/python3.8/distutils/cmd.py", line 313, in run_command
#0 7.308         self.distribution.run_command(command)
#0 7.308       File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
#0 7.308         cmd_obj.run()
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build.py", line 47, in run
#0 7.308         old_build.run(self)
#0 7.308       File "/usr/lib/python3.8/distutils/command/build.py", line 135, in run
#0 7.308         self.run_command(cmd_name)
#0 7.308       File "/usr/lib/python3.8/distutils/cmd.py", line 313, in run_command
#0 7.308         self.distribution.run_command(command)
#0 7.308       File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
#0 7.308         cmd_obj.run()
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 142, in run
#0 7.308         self.build_sources()
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 153, in build_sources
#0 7.308         self.build_library_sources(*libname_info)
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 286, in build_library_sources
#0 7.308         sources = self.generate_sources(sources, (lib_name, build_info))
#0 7.308       File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 369, in generate_sources
#0 7.308         source = func(extension, build_dir)
#0 7.308       File "numpy/core/setup.py", line 669, in get_mathlib_info
#0 7.308         raise RuntimeError("Broken toolchain: cannot link a simple C program")
#0 7.308     RuntimeError: Broken toolchain: cannot link a simple C program
#0 7.308     ----------------------------------------
#0 7.308     ERROR: Failed building wheel for numpy
#0 7.308     Running setup.py clean for numpy
#0 7.308     ERROR: Command errored out with exit status 1:
#0 7.308      command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' clean --all
#0 7.308          cwd: /tmp/pip-install-46pmyfff/numpy
#0 7.308     Complete output (10 lines):
#0 7.308     Running from numpy source directory.
#0 7.308
#0 7.308     `setup.py clean` is not supported, use one of the following instead:
#0 7.308
#0 7.308       - `git clean -xdf` (cleans all files)
#0 7.308       - `git clean -Xdf` (cleans all versioned files, doesn't touch
#0 7.308                           files that aren't checked into the git repo)
#0 7.308
#0 7.308     Add `--force` to your command to use it anyway if you must (unsupported).
#0 7.308
#0 7.308     ----------------------------------------
#0 7.308     ERROR: Failed cleaning build dir for numpy
#0 7.308   Failed to build numpy
#0 7.308   Installing collected packages: setuptools, wheel, Cython, numpy
#0 7.308       Running setup.py install for numpy: started
#0 7.308       Running setup.py install for numpy: finished with status 'error'
#0 7.308       ERROR: Command errored out with exit status 1:
#0 7.308        command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-he1dm7ma/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-9i_hfnvd/overlay --compile --install-headers /tmp/pip-build-env-9i_hfnvd/overlay/include/python3.8/numpy
#0 7.308            cwd: /tmp/pip-install-46pmyfff/numpy/
#0 7.308       Complete output (271 lines):
#0 7.308       Running from numpy source directory.
#0 7.308
#0 7.308       Note: if you need reliable uninstall behavior, then install
#0 7.308       with pip instead of using `setup.py install`:
#0 7.308
#0 7.308         - `pip install .`       (from a git repo or downloaded source
#0 7.308                                  release)
#0 7.308         - `pip install numpy`   (last NumPy release on PyPi)
#0 7.308
#0 7.308
#0 7.308       blas_opt_info:
#0 7.308       blas_mkl_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       blis_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries blis not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       openblas_info:
#0 7.308       customize UnixCCompiler
#0 7.308       customize UnixCCompiler
#0 7.308         libraries openblas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_3_10_blas_threads_info:
#0 7.308       Setting PTATLAS=ATLAS
#0 7.308       customize UnixCCompiler
#0 7.308         libraries tatlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_3_10_blas_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries satlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_blas_threads_info:
#0 7.308       Setting PTATLAS=ATLAS
#0 7.308       customize UnixCCompiler
#0 7.308         libraries ptf77blas,ptcblas,atlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_blas_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries f77blas,cblas,atlas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       accelerate_info:
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:690: UserWarning:
#0 7.308           Optimized (vendor) Blas libraries are not found.
#0 7.308           Falls back to netlib Blas library which has worse performance.
#0 7.308           A better performance should be easily gained by switching
#0 7.308           Blas library.
#0 7.308         self.calc_info()
#0 7.308       blas_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries blas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:690: UserWarning:
#0 7.308           Blas (http://www.netlib.org/blas/) libraries not found.
#0 7.308           Directories to search for the libraries can be specified in the
#0 7.308           numpy/distutils/site.cfg file (section [blas]) or by setting
#0 7.308           the BLAS environment variable.
#0 7.308         self.calc_info()
#0 7.308       blas_src_info:
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:690: UserWarning:
#0 7.308           Blas (http://www.netlib.org/blas/) sources not found.
#0 7.308           Directories to search for the sources can be specified in the
#0 7.308           numpy/distutils/site.cfg file (section [blas_src]) or by setting
#0 7.308           the BLAS_SRC environment variable.
#0 7.308         self.calc_info()
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /bin/sh: 1: svnversion: not found
#0 7.308       non-existing path in 'numpy/distutils': 'site.cfg'
#0 7.308       lapack_opt_info:
#0 7.308       lapack_mkl_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       openblas_lapack_info:
#0 7.308       customize UnixCCompiler
#0 7.308       customize UnixCCompiler
#0 7.308         libraries openblas not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       openblas_clapack_info:
#0 7.308       customize UnixCCompiler
#0 7.308       customize UnixCCompiler
#0 7.308         libraries openblas,lapack not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       flame_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries flame not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_3_10_threads_info:
#0 7.308       Setting PTATLAS=ATLAS
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries tatlas,tatlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries tatlas,tatlas not found in /usr/lib
#0 7.308       <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_3_10_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries satlas,satlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries satlas,satlas not found in /usr/lib
#0 7.308       <class 'numpy.distutils.system_info.atlas_3_10_info'>
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_threads_info:
#0 7.308       Setting PTATLAS=ATLAS
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries ptf77blas,ptcblas,atlas not found in /usr/lib
#0 7.308       <class 'numpy.distutils.system_info.atlas_threads_info'>
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       atlas_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries f77blas,cblas,atlas not found in /usr/local/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack_atlas not found in /usr/lib
#0 7.308       customize UnixCCompiler
#0 7.308         libraries f77blas,cblas,atlas not found in /usr/lib
#0 7.308       <class 'numpy.distutils.system_info.atlas_info'>
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       lapack_info:
#0 7.308       customize UnixCCompiler
#0 7.308         libraries lapack not found in ['/usr/local/lib', '/usr/lib']
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:1712: UserWarning:
#0 7.308           Lapack (http://www.netlib.org/lapack/) libraries not found.
#0 7.308           Directories to search for the libraries can be specified in the
#0 7.308           numpy/distutils/site.cfg file (section [lapack]) or by setting
#0 7.308           the LAPACK environment variable.
#0 7.308         if getattr(self, '_calc_info_{}'.format(lapack))():
#0 7.308       lapack_src_info:
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /tmp/pip-install-46pmyfff/numpy/numpy/distutils/system_info.py:1712: UserWarning:
#0 7.308           Lapack (http://www.netlib.org/lapack/) sources not found.
#0 7.308           Directories to search for the sources can be specified in the
#0 7.308           numpy/distutils/site.cfg file (section [lapack_src]) or by setting
#0 7.308           the LAPACK_SRC environment variable.
#0 7.308         if getattr(self, '_calc_info_{}'.format(lapack))():
#0 7.308         NOT AVAILABLE
#0 7.308
#0 7.308       /usr/lib/python3.8/distutils/dist.py:274: UserWarning: Unknown distribution option: 'define_macros'
#0 7.308         warnings.warn(msg)
#0 7.308       running install
#0 7.308       running build
#0 7.308       running config_cc
#0 7.308       unifing config_cc, config, build_clib, build_ext, build commands --compiler options
#0 7.308       running config_fc
#0 7.308       unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
#0 7.308       running build_src
#0 7.308       build_src
#0 7.308       building py_modules sources
#0 7.308       building library "npymath" sources
#0 7.308       get_default_fcompiler: matching types: '['gnu95', 'intel', 'lahey', 'pg', 'absoft', 'nag', 'vast', 'compaq', 'intele', 'intelem', 'gnu', 'g95', 'pathf95', 'nagfor']'
#0 7.308       customize Gnu95FCompiler
#0 7.308       Could not locate executable gfortran
#0 7.308       Could not locate executable f95
#0 7.308       customize IntelFCompiler
#0 7.308       Could not locate executable ifort
#0 7.308       Could not locate executable ifc
#0 7.308       customize LaheyFCompiler
#0 7.308       Could not locate executable lf95
#0 7.308       customize PGroupFCompiler
#0 7.308       Could not locate executable pgfortran
#0 7.308       customize AbsoftFCompiler
#0 7.308       Could not locate executable f90
#0 7.308       Could not locate executable f77
#0 7.308       customize NAGFCompiler
#0 7.308       customize VastFCompiler
#0 7.308       customize CompaqFCompiler
#0 7.308       Could not locate executable fort
#0 7.308       customize IntelItaniumFCompiler
#0 7.308       Could not locate executable efort
#0 7.308       Could not locate executable efc
#0 7.308       customize IntelEM64TFCompiler
#0 7.308       customize GnuFCompiler
#0 7.308       Could not locate executable g77
#0 7.308       customize G95FCompiler
#0 7.308       Could not locate executable g95
#0 7.308       customize PathScaleFCompiler
#0 7.308       Could not locate executable pathf95
#0 7.308       customize NAGFORCompiler
#0 7.308       Could not locate executable nagfor
#0 7.308       don't know how to compile Fortran code on platform 'posix'
#0 7.308       C compiler: aarch64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC
#0 7.308
#0 7.308       compile options: '-Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/include/python3.8 -c'
#0 7.308       aarch64-linux-gnu-gcc: _configtest.c
#0 7.308       failure.
#0 7.308       removing: _configtest.c _configtest.o
#0 7.308       Traceback (most recent call last):
#0 7.308         File "<string>", line 1, in <module>
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/setup.py", line 443, in <module>
#0 7.308           setup_package()
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/setup.py", line 435, in setup_package
#0 7.308           setup(**metadata)
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/core.py", line 171, in setup
#0 7.308           return old_setup(**new_attr)
#0 7.308         File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 144, in setup
#0 7.308           return distutils.core.setup(**attrs)
#0 7.308         File "/usr/lib/python3.8/distutils/core.py", line 148, in setup
#0 7.308           dist.run_commands()
#0 7.308         File "/usr/lib/python3.8/distutils/dist.py", line 966, in run_commands
#0 7.308           self.run_command(cmd)
#0 7.308         File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
#0 7.308           cmd_obj.run()
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/install.py", line 62, in run
#0 7.308           r = self.setuptools_run()
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/install.py", line 36, in setuptools_run
#0 7.308           return distutils_install.run(self)
#0 7.308         File "/usr/lib/python3.8/distutils/command/install.py", line 589, in run
#0 7.308           self.run_command('build')
#0 7.308         File "/usr/lib/python3.8/distutils/cmd.py", line 313, in run_command
#0 7.308           self.distribution.run_command(command)
#0 7.308         File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
#0 7.308           cmd_obj.run()
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build.py", line 47, in run
#0 7.308           old_build.run(self)
#0 7.308         File "/usr/lib/python3.8/distutils/command/build.py", line 135, in run
#0 7.308           self.run_command(cmd_name)
#0 7.308         File "/usr/lib/python3.8/distutils/cmd.py", line 313, in run_command
#0 7.308           self.distribution.run_command(command)
#0 7.308         File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
#0 7.308           cmd_obj.run()
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 142, in run
#0 7.308           self.build_sources()
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 153, in build_sources
#0 7.308           self.build_library_sources(*libname_info)
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 286, in build_library_sources
#0 7.308           sources = self.generate_sources(sources, (lib_name, build_info))
#0 7.308         File "/tmp/pip-install-46pmyfff/numpy/numpy/distutils/command/build_src.py", line 369, in generate_sources
#0 7.308           source = func(extension, build_dir)
#0 7.308         File "numpy/core/setup.py", line 669, in get_mathlib_info
#0 7.308           raise RuntimeError("Broken toolchain: cannot link a simple C program")
#0 7.308       RuntimeError: Broken toolchain: cannot link a simple C program
#0 7.308       ----------------------------------------
#0 7.308   ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-46pmyfff/numpy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-he1dm7ma/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-9i_hfnvd/overlay --compile --install-headers /tmp/pip-build-env-9i_hfnvd/overlay/include/python3.8/numpy Check the logs for full command output.
#0 7.308   ----------------------------------------
#0 7.332 ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/lib/python3/dist-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-9i_hfnvd/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel 'Cython>=0.29.21,<3' 'numpy==1.16.5; python_version=='"'"'3.7'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.17.3; python_version=='"'"'3.8'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.16.5; python_version=='"'"'3.7'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy==1.17.3; python_version=='"'"'3.8'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy; python_version>='"'"'3.9'"'"'' Check the logs for full command output.
------
Dockerfile:16
--------------------
  14 |         rm -fr /var/lib/apt/lists/*
  15 |
  16 | >>> RUN python3 -m pip install pandas==1.2.3
  17 |
--------------------
error: failed to solve: process "/bin/sh -c python3 -m pip install pandas==1.2.3" did not complete successfully: exit code: 1

I can reproduce the error with a simpler Dockerfile and lima/nerdctl in the same setup:
FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get -y install --no-install-recommends \
    ca-certificates \
    curl \
    python3 \
    python3-pip \
    python3-setuptools \
    python3-venv \
    python3-wheel && \
    rm -fr /var/lib/apt/lists/*

RUN python3 -m pip install pandas==1.2.3

I tested various version of pandas on my setup (major=1, minor>=2, patch=latest, and then patch+1 compared to the currently pinned). It seems that the one closest to the current pinned version which installs without failure is pandas==1.2.5, so I'll play arround some more and do a PR if i get that to work.


Bug involving #include and #include_h assembler directives while using relative paths

I am working on a project with this file structure:

src/

setup/

init.asm

util/

regs.asm

main.asm

In init.asm, I have this code:
#include_h ../util/regs.asm

init:
    [routine body omitted for brevity]

In main.asm, I have this code:
#include_h setup/init.asm

main:
    CALL init

When I try to assemble main.asm, I get this error:
Traceback (most recent call last):
  File "[redacted]/Command-Block-Assembly/mcc.py", line 4, in <module>
    start()
  File "[redacted]/Command-Block-Assembly/mcc/cli.py", line 353, in start
    run_with_args(args)
  File "[redacted]/Command-Block-Assembly/mcc/cli.py", line 360, in run_with_args
    main(args)
  File "[redacted]/Command-Block-Assembly/mcc/cli.py", line 275, in main
    top = dispatcher.make_top(args)
  File "[redacted]/Command-Block-Assembly/mcc/cli.py", line 132, in make_top
    assembler.parse(self.text_file().read(), self.infile.name)
  File "[redacted]/Command-Block-Assembly/asm/assembler.py", line 47, in parse
    self.consume_reader(AsmReader(text, self.filename))
  File "[redacted]/Command-Block-Assembly/asm/assembler.py", line 54, in consume_reader
    self.handle_token(token, arg)
  File "[redacted]/Command-Block-Assembly/asm/assembler.py", line 69, in handle_token
    self.handle_directive(*arg)
  File "[redacted]/Command-Block-Assembly/asm/assembler.py", line 133, in handle_directive
    self.top.include_from(assembler.top)
  File "[redacted]/Command-Block-Assembly/cmd_ir/core.py", line 355, in include_from
    self.scope[name] = ExternFunction(var.global_name.name, self)
  File "[redacted]/Command-Block-Assembly/cmd_ir/core.py", line 641, in __init__
    super().__init__(NSName(name), params, returns)
  File "[redacted]/Command-Block-Assembly/cmd_ir/core.py", line 598, in __init__
    self.params = list(params or [])
TypeError: 'TopLevel' object is not iterable

It seems that relative paths don't work properly when used in #include_h or #include directives. Can this be fixed?
Thanks in advance!

Ah, another bug with #include_h, this is caused when trying to include subroutines from another file.
I should write tests for these features but haven't gotten around to doing so. All current progress is going into developing CBL so the assembler hasn't had much attention.

Is it fixable? I've found that assembly is the most stable and usable language that MCC supports.

Should be fixed now


Update command view to be able to extend it with new params

Hello,
I've been looking for a Crud generator the last days and found that yours was very easy to use. As I started to customize all the views in order to generate all the cruds without then needing to modify them I saw that your code could be improve. If you check this PR will see that appearantly nothing changes.
With this update you can generate a custom CrudViewCommand that extends this one. For example like this:
``
<?php

namespace App\Console\Commands;

use File;

class CrudViewCommandCustom extends \Appzcoder\CrudGenerator\Commands\CrudViewCommand
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'crud:custom-view
                            {name : The name of the Crud.}
                            {--fields= : The fields name for the form.}
                            {--view-path= : The name of the view path.}
                            {--route-group= : Prefix of the route group.}';

    public function templateIndexVars($newIndexFile)
    {
       // do some stuff
       d//save this stuff to the view
        File::put($newIndexFile, str_replace('%%dataColumns%%', implode(',', $dataColumns), File::get($newIndexFile)));
       //call parent method if needed
        parent::templateIndexVars($newIndexFile);
    }
}
``

@ebisbe Thanks for the PR :)

I missed update the readme.md file. I will doit this week. Thanks to you for the crud-generator!


Propose Workflow Services

Description
Sets up a mechanism to run containers in the background, there by providing a service the task actions will be able to use.
Why is this needed
Allows for ripping out code from Boots and enables self-contained workflows (0013).

Rendered: https://github.com/mmlb/proposals/blob/0014/0014/README.md

This is reasonable and for some reason, the syntax brings me to LinuxKit for some reason
https://github.com/linuxkit/linuxkit/blob/master/examples/influxdb-os.yml#L13
Anyway, I like this proposal but I think we should do a better exercise at naming things. We can call this feature: "Service" and describe it clearly as: "A service is part of a workflow, just like actions. It is a container that runs in the background for the all workflow lifecycle".
Something we should write down and define

how will it affect the workflow execution if it errors or times out? I think it should work the same as an action.
will it be killed when a workflow reaches its global timeout but obviously, it won't hold(1) a workflow.

(1): Only actions and tasks count in terms of execution time, services just runs all the time.

This is reasonable and for some reason, the syntax brings me to LinuxKit for some reason
https://github.com/linuxkit/linuxkit/blob/master/examples/influxdb-os.yml#L13

I'm more familiar with https://0-8-0.docs.drone.io/services/ which I think has a lot of similarities with our workflows, the need/existence there and the use we have points to a fundamental basic requirement for this.

Anyway, I like this proposal but I think we should do a better exercise at naming things. We can call this feature: "Service" and describe it clearly as: "A service is part of a workflow, just like actions. It is a container that runs in the background for the all workflow lifecycle".

Part of the reason I like proposals :D. I'm pretty bad at naming things (cough cacher cough) and opening that up before code exists makes it easier to ask/provide that kind of feedback.
This working sgtm.

Something we should write down and define
1. how will it affect the workflow execution if it errors or times out? I think it should work the same as an action.

I don't really have a strong opinion. But, consider what if the use of the service is done when it encounters an error? If its not ever going to be used again I don't think it matters. If it used again the task will most likely fail because of it anyway.

2. will it be killed when a workflow reaches its global timeout but obviously, it won't hold(1) a workflow.

Yes, services are tied to a workflow lifetime, so when the workflow is done (success/fail/timeout) the services are killed.

I think we should not hold this proposal too much, I would like to see it published even if the other 2 are not ready, it is self-contained and reasonable by its own.

Yep, part of the reason for not doing a jumbo-proposal.:+1:

(1): Only actions and tasks count in terms of execution time, services just runs all the time.

Yeah I think this makes sense, I expect all services to be up and healthy (I'll add this in) before starting the tasks. I suspect service startup time won't be too long.

I think you have to sign your commit @mmlb

hmm I thought I did

Doing it!

oh wait @gianarb I didn't update the bit about "exit gracefully" or "letting the task/action" discover a dead service and fail. Going to do that and let you do a final review on it.

@gianarb I've pushed new wording making services not be required to be up. I think we might just end up running with --restart=on-failure, but that should stay an implementation detail I think.


Update README.md

@0x53A,
Thanks for having already signed the Contribution License Agreement. Your agreement was validated by Microsoft. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

@0x53A Many folk will be using with projects created with older versions of VS or even the current vs2017.
I think it might help those folk if you described the project file surgery they will need in order for their projects to build ... I suppose that would include at the FSharp.Compiler.Tools as a nuget package to their project.
Certainly they will need to add a snippet that matches your PR.
Does that make sense?

Certainly they will need to add a snippet that matches your PR.

No, because the package does not (yet) attempt to override the targets file. The package contains the file, but does not set FSharpTargetsPath .
I have updated it to link to https://github.com/fsharp/fsharp/issues/676.
The package DOES set FscToolPath, which contains both fsc and the targets file


Update subnets data source

what

Update subnets data source

why

Planned migration according to https://github.com/hashicorp/terraform-provider-aws/pull/18803

/terratest


when i make the [ann] ：use_character_lstm = False，Some problems have arisen.

tensorboard_character_embeddings.tensor_name = model.character_embedding_weights.name
AttributeError: 'EntityLSTM' object has no attribute 'character_embedding_weights'

When I comment out this line, this error is gone.


Adding News Feature

We can Add feature of showing Fake Email Address with the name provided by the user @ageddesi

Hi @DevilzzNikhil adding a new endpoint for this would be a nice idea. :)

@ageddesi @DevilzzNikhil
Please do let me know more about this issue i want t work on this

@DevilzzNikhil
Are we saying a new endpoint, where the user can provide the first name or the first and second name and the end point adds a @domain.com etc to the name?

@ageddesi
Ok i can write a function that takes 2 argument and then returns a concatination string like a real mail ?
Am i right ?

@ageddesi  yes you got it right
like if user provide mohit and sharma then email will return fake email like
<EMAIL_ADDRESS>Should i work on these or think og something else

@DevilzzNikhil you can work on this as you were first on the ticket. :)

@ageddesi I am ready to work on this, as @DevilzzNikhil didn't open a PR yet and the hacktober fest end in a week

Go for it pal :)


repr override in JSONObject makes JSONObject non-dictlike

JSONObject is not handled correctly by things like the pretty printer because of the repr override. This override seems unnecessary to me.
My general preference would be not to use JSONObject at all, but just to keep things simple by having the response handler return plain dictionaries. Barring that, it would be nice if the JSONObject was pretty printable by not overriding the repr.

+1 Get rid of JSONObject
Easy stopgap workaround:
import birdy.twitter
birdy.twitter.JSONObject = dict

Removed repr override in ver 0.3


Error when installing fairseq

Hi everyone,
I am running into the following error when trying to install fairseq
pip install fairseq
This is the error in question :
FileNotFoundError: [Errno 2] No such file or directory: 'fairseq/version.txt'
Thanks for your help.

Same here, I was using python3.9 with pip 24.2 and tried to install fairseq, but getting the same error.

pull the repo and install from source. make sure your pip version is lower than 24.1
pip install --force pip==24.0 git clone https://github.com/pytorch/fairseq cd fairseq pip install --editable ./
Myenv:
python: 3.10.12
pip 24.0
ubuntu 22.04lts

I set pip version == 24.0 and pip install fairseq. It says fairseq/clib/libbleu/module.cpp:9:10: fatal error: Python.h: 没有那个文件或目录
`
running build_ext
building 'fairseq.libbleu' extension
creating build/temp.linux-x86_64-cpython-310/fairseq/clib/libbleu
x86_64-linux-gnu-g++ -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/usr/include/python3.10 -c fairseq/clib/libbleu/libbleu.cpp -o build/temp.linux-x86_64-cpython-310/fairseq/clib/libbleu/libbleu.o -std=c++11 -O3
x86_64-linux-gnu-g++ -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/usr/include/python3.10 -c fairseq/clib/libbleu/module.cpp -o build/temp.linux-x86_64-cpython-310/fairseq/clib/libbleu/module.o -std=c++11 -O3
fairseq/clib/libbleu/module.cpp:9:10: fatal error: Python.h: 没有那个文件或目录
9 | #include <Python.h>
|          ^~~~~~~~~~
compilation terminated.
error: command '/usr/bin/x86_64-linux-gnu-g++' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for fairseq
Failed to build fairseq
ERROR: Could not build wheels for fairseq, which is required to install pyproject.toml-based projects
[notice] A new release of pip is available: 24.0 -> 24.3.1
[notice] To update, run: python -m pip install --upgrade pip
`

If I install from the source like pip install ./, it shows like below:
`
Installing build dependencies ... done
Getting requirements to build wheel ... error
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [17 lines of output]
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in
main()
File "/usr/local/lib/python3.10/dist-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
File "/usr/local/lib/python3.10/dist-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
File "/tmp/pip-build-env-xh2t6bkj/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 334, in get_requires_for_build_wheel
return self._get_build_requires(config_settings, requirements=[])
File "/tmp/pip-build-env-xh2t6bkj/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 304, in _get_build_requires
self.run_setup()
File "/tmp/pip-build-env-xh2t6bkj/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 320, in run_setup
exec(code, locals())
File "", line 12, in
File "/tmp/pip-build-env-xh2t6bkj/overlay/local/lib/python3.10/dist-packages/torch/init.py", line 367, in
from torch._C import *  # noqa: F403
ImportError: /tmp/pip-build-env-xh2t6bkj/overlay/local/lib/python3.10/dist-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
[notice] A new release of pip is available: 24.0 -> 24.3.1
[notice] To update, run: python -m pip install --upgrade pip
`

same here. Working on macos